Normalize excludeTables config entries into { schema, table } pairs.
The historical shape is an object. Operators on large brownfield databases also
want a one-line string — 'Aptify.EntityRecordVersions', '%.%History',
'%Audit%' — so a 49-million-row audit table can be skipped without hunting
through a JSON object. Both forms compile to the same LIKE/equals predicate
that createExcludeTablesAndSchemasFilter already emits.
String grammar:
'schema.table' → exact (or wildcard) schema + table. The last . splits.
'%.%History' → any schema, table LIKE %History
'%Audit%' → any schema (%), table LIKE %Audit%
'EntityRecordVersions' → any schema, that exact table name
Normalize
excludeTablesconfig entries into{ schema, table }pairs.The historical shape is an object. Operators on large brownfield databases also want a one-line string —
'Aptify.EntityRecordVersions','%.%History','%Audit%'— so a 49-million-row audit table can be skipped without hunting through a JSON object. Both forms compile to the same LIKE/equals predicate thatcreateExcludeTablesAndSchemasFilteralready emits.String grammar:
'schema.table'→ exact (or wildcard) schema + table. The last.splits.'%.%History'→ any schema, table LIKE%History'%Audit%'→ any schema (%), table LIKE%Audit%'EntityRecordVersions'→ any schema, that exact table name