@zmdb/postgres 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +111 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -0
- package/dist/driver.d.ts +27 -0
- package/dist/driver.d.ts.map +1 -0
- package/dist/driver.js +266 -0
- package/dist/driver.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect.d.ts +8 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +489 -0
- package/dist/introspect.js.map +1 -0
- package/dist/migrations.d.ts +7 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +452 -0
- package/dist/migrations.js.map +1 -0
- package/dist/outbox.d.ts +6 -0
- package/dist/outbox.d.ts.map +1 -0
- package/dist/outbox.js +33 -0
- package/dist/outbox.js.map +1 -0
- package/package.json +59 -0
- package/src/constants.ts +14 -0
- package/src/driver.ts +331 -0
- package/src/index.ts +105 -0
- package/src/introspect.ts +645 -0
- package/src/migrations.ts +576 -0
- package/src/outbox.ts +42 -0
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
import {} from '@zmdb/sql';
|
|
2
|
+
class CatalogRowError extends TypeError {
|
|
3
|
+
constructor(catalog, row, field, expected, value) {
|
|
4
|
+
const received = value === null ? 'null' : Array.isArray(value) ? 'an array' : typeof value;
|
|
5
|
+
super(`${catalog} row ${String(row)} field "${field}" must be ${expected}; received ${received}`);
|
|
6
|
+
this.name = 'CatalogRowError';
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
function valueAt(row, field) {
|
|
10
|
+
return Reflect.get(row, field);
|
|
11
|
+
}
|
|
12
|
+
function textField(row, field, catalog, index) {
|
|
13
|
+
const value = valueAt(row, field);
|
|
14
|
+
if (typeof value !== 'string')
|
|
15
|
+
throw new CatalogRowError(catalog, index, field, 'a string', value);
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function nullableTextField(row, field, catalog, index) {
|
|
19
|
+
const value = valueAt(row, field);
|
|
20
|
+
if (value === null)
|
|
21
|
+
return null;
|
|
22
|
+
if (typeof value !== 'string')
|
|
23
|
+
throw new CatalogRowError(catalog, index, field, 'a string or null', value);
|
|
24
|
+
return value;
|
|
25
|
+
}
|
|
26
|
+
function integerField(row, field, catalog, index) {
|
|
27
|
+
const value = valueAt(row, field);
|
|
28
|
+
if (typeof value === 'number' && Number.isSafeInteger(value))
|
|
29
|
+
return value;
|
|
30
|
+
if (typeof value === 'string' && /^-?\d+$/.test(value)) {
|
|
31
|
+
const parsed = Number(value);
|
|
32
|
+
if (Number.isSafeInteger(parsed))
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
throw new CatalogRowError(catalog, index, field, 'a safe integer or decimal integer string', value);
|
|
36
|
+
}
|
|
37
|
+
function nullableIntegerField(row, field, catalog, index) {
|
|
38
|
+
return valueAt(row, field) === null ? null : integerField(row, field, catalog, index);
|
|
39
|
+
}
|
|
40
|
+
function booleanField(row, field, catalog, index) {
|
|
41
|
+
const value = valueAt(row, field);
|
|
42
|
+
if (typeof value !== 'boolean')
|
|
43
|
+
throw new CatalogRowError(catalog, index, field, 'a boolean', value);
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function query(text, parameters = []) {
|
|
47
|
+
return { text, parameters };
|
|
48
|
+
}
|
|
49
|
+
function postgresSchemas(options) {
|
|
50
|
+
const schemas = options.schemas ?? ['public'];
|
|
51
|
+
return schemas.length === 0 ? ['public'] : [...new Set(schemas)].toSorted();
|
|
52
|
+
}
|
|
53
|
+
function placeholders(count) {
|
|
54
|
+
return Array.from({ length: count }, (_, index) => `$${String(index + 1)}`).join(', ');
|
|
55
|
+
}
|
|
56
|
+
function globExpression(glob) {
|
|
57
|
+
let source = '^';
|
|
58
|
+
for (const character of glob) {
|
|
59
|
+
if (character === '*')
|
|
60
|
+
source += '.*';
|
|
61
|
+
else if (character === '?')
|
|
62
|
+
source += '.';
|
|
63
|
+
else
|
|
64
|
+
source += character.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&');
|
|
65
|
+
}
|
|
66
|
+
return new RegExp(`${source}$`);
|
|
67
|
+
}
|
|
68
|
+
function tableSelected(name, options) {
|
|
69
|
+
const include = options.include;
|
|
70
|
+
if (include !== undefined && include.length > 0 && !include.some(glob => globExpression(glob).test(name))) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const exclude = options.exclude ?? ['_zmdb_migrations'];
|
|
74
|
+
return !exclude.some(glob => globExpression(glob).test(name));
|
|
75
|
+
}
|
|
76
|
+
function action(value, catalog, row, field) {
|
|
77
|
+
const normalized = value.toLowerCase().replaceAll('_', ' ');
|
|
78
|
+
switch (normalized) {
|
|
79
|
+
case 'no action':
|
|
80
|
+
case 'restrict':
|
|
81
|
+
case 'cascade':
|
|
82
|
+
case 'set null':
|
|
83
|
+
case 'set default':
|
|
84
|
+
return normalized;
|
|
85
|
+
default:
|
|
86
|
+
throw new CatalogRowError(catalog, row, field, 'a referential action', value);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function sortByName(values) {
|
|
90
|
+
return values.toSorted((left, right) => left.name.localeCompare(right.name));
|
|
91
|
+
}
|
|
92
|
+
function parseColumn(row, index) {
|
|
93
|
+
const catalog = 'postgres information_schema.columns';
|
|
94
|
+
const nullable = textField(row, 'is_nullable', catalog, index);
|
|
95
|
+
if (nullable !== 'YES' && nullable !== 'NO') {
|
|
96
|
+
throw new CatalogRowError(catalog, index, 'is_nullable', '"YES" or "NO"', nullable);
|
|
97
|
+
}
|
|
98
|
+
const identity = textField(row, 'attidentity', catalog, index);
|
|
99
|
+
if (identity !== '' && identity !== 'a' && identity !== 'd') {
|
|
100
|
+
throw new CatalogRowError(catalog, index, 'attidentity', '"", "a" or "d"', identity);
|
|
101
|
+
}
|
|
102
|
+
const generated = textField(row, 'is_generated', catalog, index);
|
|
103
|
+
if (generated !== 'NEVER' && generated !== 'ALWAYS') {
|
|
104
|
+
throw new CatalogRowError(catalog, index, 'is_generated', '"NEVER" or "ALWAYS"', generated);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
table: textField(row, 'table_name', catalog, index),
|
|
108
|
+
ordinal: integerField(row, 'ordinal_position', catalog, index),
|
|
109
|
+
name: textField(row, 'column_name', catalog, index),
|
|
110
|
+
nullable: nullable === 'YES',
|
|
111
|
+
dataType: textField(row, 'data_type', catalog, index),
|
|
112
|
+
udtName: textField(row, 'udt_name', catalog, index),
|
|
113
|
+
length: nullableIntegerField(row, 'character_maximum_length', catalog, index),
|
|
114
|
+
default: nullableTextField(row, 'column_default', catalog, index),
|
|
115
|
+
identity,
|
|
116
|
+
generated,
|
|
117
|
+
generationExpression: nullableTextField(row, 'generation_expression', catalog, index),
|
|
118
|
+
typeModifier: integerField(row, 'atttypmod', catalog, index),
|
|
119
|
+
typeKind: textField(row, 'typtype', catalog, index),
|
|
120
|
+
domainName: nullableTextField(row, 'domain_name', catalog, index),
|
|
121
|
+
domainBaseType: nullableTextField(row, 'domain_base_type', catalog, index),
|
|
122
|
+
extension: nullableTextField(row, 'extension_name', catalog, index),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
function parsePrimaryKey(row, index) {
|
|
126
|
+
const catalog = 'postgres information_schema primary keys';
|
|
127
|
+
return {
|
|
128
|
+
table: textField(row, 'table_name', catalog, index),
|
|
129
|
+
ordinal: integerField(row, 'ordinal_position', catalog, index),
|
|
130
|
+
column: textField(row, 'column_name', catalog, index),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function parseForeignKey(row, index) {
|
|
134
|
+
const catalog = 'postgres information_schema foreign keys';
|
|
135
|
+
return {
|
|
136
|
+
table: textField(row, 'table_name', catalog, index),
|
|
137
|
+
constraint: textField(row, 'constraint_name', catalog, index),
|
|
138
|
+
ordinal: integerField(row, 'ordinal_position', catalog, index),
|
|
139
|
+
column: textField(row, 'column_name', catalog, index),
|
|
140
|
+
targetTable: textField(row, 'target_table', catalog, index),
|
|
141
|
+
targetColumn: textField(row, 'target_column', catalog, index),
|
|
142
|
+
onUpdate: textField(row, 'update_rule', catalog, index),
|
|
143
|
+
onDelete: textField(row, 'delete_rule', catalog, index),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function parseIndex(row, index) {
|
|
147
|
+
const catalog = 'postgres pg_catalog indexes';
|
|
148
|
+
return {
|
|
149
|
+
table: textField(row, 'table_name', catalog, index),
|
|
150
|
+
name: textField(row, 'index_name', catalog, index),
|
|
151
|
+
unique: booleanField(row, 'is_unique', catalog, index),
|
|
152
|
+
primary: booleanField(row, 'is_primary', catalog, index),
|
|
153
|
+
method: textField(row, 'method', catalog, index),
|
|
154
|
+
where: nullableTextField(row, 'predicate', catalog, index),
|
|
155
|
+
position: integerField(row, 'position', catalog, index),
|
|
156
|
+
definition: textField(row, 'definition', catalog, index),
|
|
157
|
+
opclass: nullableTextField(row, 'operator_class', catalog, index),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
function catalogType(column) {
|
|
161
|
+
if (column.typeKind === 'd')
|
|
162
|
+
return column.domainName ?? column.udtName;
|
|
163
|
+
if (column.dataType === 'USER-DEFINED')
|
|
164
|
+
return column.udtName;
|
|
165
|
+
if (column.dataType === 'ARRAY')
|
|
166
|
+
return column.udtName.startsWith('_') ? `${column.udtName.slice(1)}[]` : column.dataType;
|
|
167
|
+
return column.dataType;
|
|
168
|
+
}
|
|
169
|
+
function postgresType(column) {
|
|
170
|
+
const source = (column.typeKind === 'd' ? column.domainBaseType : null) ?? column.dataType;
|
|
171
|
+
const normalized = source.toLowerCase();
|
|
172
|
+
if (column.identity === 'a' ||
|
|
173
|
+
column.identity === 'd' ||
|
|
174
|
+
(column.default?.toLowerCase().startsWith('nextval(') ?? false)) {
|
|
175
|
+
return column.identity === ''
|
|
176
|
+
? { type: 'serial' }
|
|
177
|
+
: {
|
|
178
|
+
type: 'serial',
|
|
179
|
+
warning: 'Postgres identity was normalized to serial; forward DDL uses a sequence default rather than an identity attribute',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
if (column.typeKind === 'e')
|
|
183
|
+
return { type: 'jsonEnum' };
|
|
184
|
+
if (column.extension === 'citext' || column.udtName === 'citext') {
|
|
185
|
+
return { type: { extension: 'citext', name: 'citext' } };
|
|
186
|
+
}
|
|
187
|
+
if (column.extension === 'vector' || column.udtName === 'vector') {
|
|
188
|
+
return {
|
|
189
|
+
type: {
|
|
190
|
+
extension: 'vector',
|
|
191
|
+
name: 'vector',
|
|
192
|
+
...(column.typeModifier > 0 ? { args: [column.typeModifier] } : {}),
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (normalized === 'integer' || normalized === 'int4')
|
|
197
|
+
return { type: 'integer' };
|
|
198
|
+
if (normalized === 'bigint' || normalized === 'int8')
|
|
199
|
+
return { type: 'bigint' };
|
|
200
|
+
if (normalized === 'smallint' || normalized === 'int2') {
|
|
201
|
+
return { type: 'integer', warning: `Postgres type ${catalogType(column)} was widened to integer` };
|
|
202
|
+
}
|
|
203
|
+
if (normalized === 'numeric' || normalized === 'decimal')
|
|
204
|
+
return { type: 'numeric' };
|
|
205
|
+
if (normalized === 'character varying' || normalized === 'varchar') {
|
|
206
|
+
return column.length === null ? { type: 'text' } : { type: 'varchar', length: column.length };
|
|
207
|
+
}
|
|
208
|
+
if (normalized === 'text')
|
|
209
|
+
return { type: 'text' };
|
|
210
|
+
if (normalized === 'character' || normalized === 'bpchar') {
|
|
211
|
+
return {
|
|
212
|
+
type: 'varchar',
|
|
213
|
+
...(column.length === null ? {} : { length: column.length }),
|
|
214
|
+
warning: `Postgres blank-padding semantics of ${catalogType(column)} are not represented`,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
if (normalized === 'boolean' || normalized === 'bool')
|
|
218
|
+
return { type: 'boolean' };
|
|
219
|
+
if (normalized === 'timestamp with time zone')
|
|
220
|
+
return { type: 'timestamp' };
|
|
221
|
+
if (normalized === 'timestamp without time zone') {
|
|
222
|
+
return {
|
|
223
|
+
type: 'timestamp',
|
|
224
|
+
warning: 'Postgres timestamp without time zone was normalized to timestamp; forward DDL emits TIMESTAMPTZ',
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
if (normalized === 'json' || normalized === 'jsonb')
|
|
228
|
+
return { type: 'json' };
|
|
229
|
+
return {
|
|
230
|
+
type: catalogType(column),
|
|
231
|
+
warning: `Postgres type ${catalogType(column)} cannot be represented by the declared SQL type vocabulary`,
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
function primaryKeys(rows) {
|
|
235
|
+
const grouped = new Map();
|
|
236
|
+
for (const row of rows) {
|
|
237
|
+
const values = grouped.get(row.table);
|
|
238
|
+
if (values === undefined)
|
|
239
|
+
grouped.set(row.table, [row]);
|
|
240
|
+
else
|
|
241
|
+
values.push(row);
|
|
242
|
+
}
|
|
243
|
+
return new Map([...grouped].map(([table, values]) => [
|
|
244
|
+
table,
|
|
245
|
+
values.toSorted((left, right) => left.ordinal - right.ordinal).map(value => value.column),
|
|
246
|
+
]));
|
|
247
|
+
}
|
|
248
|
+
function foreignKeys(rows) {
|
|
249
|
+
const grouped = new Map();
|
|
250
|
+
for (const row of rows) {
|
|
251
|
+
const id = `${row.table}\0${row.constraint}`;
|
|
252
|
+
const values = grouped.get(id);
|
|
253
|
+
if (values === undefined)
|
|
254
|
+
grouped.set(id, [row]);
|
|
255
|
+
else
|
|
256
|
+
values.push(row);
|
|
257
|
+
}
|
|
258
|
+
const byTable = new Map();
|
|
259
|
+
for (const values of grouped.values()) {
|
|
260
|
+
values.sort((left, right) => left.ordinal - right.ordinal);
|
|
261
|
+
const first = values[0];
|
|
262
|
+
if (first === undefined)
|
|
263
|
+
continue;
|
|
264
|
+
const snapshot = {
|
|
265
|
+
name: first.constraint,
|
|
266
|
+
columns: values.map(value => value.column),
|
|
267
|
+
targetTable: first.targetTable,
|
|
268
|
+
targetColumns: values.map(value => value.targetColumn),
|
|
269
|
+
onDelete: action(first.onDelete, 'postgres information_schema foreign keys', 0, 'delete_rule'),
|
|
270
|
+
onUpdate: action(first.onUpdate, 'postgres information_schema foreign keys', 0, 'update_rule'),
|
|
271
|
+
};
|
|
272
|
+
const tableValues = byTable.get(first.table);
|
|
273
|
+
if (tableValues === undefined)
|
|
274
|
+
byTable.set(first.table, [snapshot]);
|
|
275
|
+
else
|
|
276
|
+
tableValues.push(snapshot);
|
|
277
|
+
}
|
|
278
|
+
return new Map([...byTable].map(([table, values]) => [table, sortByName(values)]));
|
|
279
|
+
}
|
|
280
|
+
function unquoteIdentifier(value) {
|
|
281
|
+
return value.startsWith('"') && value.endsWith('"') ? value.slice(1, -1).replaceAll('""', '"') : value;
|
|
282
|
+
}
|
|
283
|
+
function indexColumn(definition, tableColumns, opclass) {
|
|
284
|
+
const named = /^("(?:[^"]|"")*"|[A-Za-z_][A-Za-z0-9_$]*)$/.exec(definition.trim())?.[1];
|
|
285
|
+
if (named !== undefined) {
|
|
286
|
+
const column = unquoteIdentifier(named);
|
|
287
|
+
if (tableColumns.has(column))
|
|
288
|
+
return opclass === null ? column : { column, opclass };
|
|
289
|
+
}
|
|
290
|
+
return { expr: definition.trim(), ...(opclass === null ? {} : { opclass }) };
|
|
291
|
+
}
|
|
292
|
+
function indexes(rows, columns) {
|
|
293
|
+
const grouped = new Map();
|
|
294
|
+
for (const row of rows) {
|
|
295
|
+
if (row.primary)
|
|
296
|
+
continue;
|
|
297
|
+
const id = `${row.table}\0${row.name}`;
|
|
298
|
+
const values = grouped.get(id);
|
|
299
|
+
if (values === undefined)
|
|
300
|
+
grouped.set(id, [row]);
|
|
301
|
+
else
|
|
302
|
+
values.push(row);
|
|
303
|
+
}
|
|
304
|
+
const byTable = new Map();
|
|
305
|
+
for (const values of grouped.values()) {
|
|
306
|
+
values.sort((left, right) => left.position - right.position);
|
|
307
|
+
const first = values[0];
|
|
308
|
+
if (first === undefined)
|
|
309
|
+
continue;
|
|
310
|
+
const method = first.method.toLowerCase();
|
|
311
|
+
const snapshot = {
|
|
312
|
+
name: first.name,
|
|
313
|
+
columns: values.map(value => indexColumn(value.definition, columns.get(first.table) ?? new Set(), value.opclass)),
|
|
314
|
+
unique: first.unique,
|
|
315
|
+
...(method === 'btree' ? {} : { method }),
|
|
316
|
+
...(first.where === null ? {} : { where: first.where }),
|
|
317
|
+
};
|
|
318
|
+
const tableValues = byTable.get(first.table);
|
|
319
|
+
if (tableValues === undefined)
|
|
320
|
+
byTable.set(first.table, [snapshot]);
|
|
321
|
+
else
|
|
322
|
+
tableValues.push(snapshot);
|
|
323
|
+
}
|
|
324
|
+
return new Map([...byTable].map(([table, values]) => [table, sortByName(values)]));
|
|
325
|
+
}
|
|
326
|
+
async function postgresSnapshot(driver, options = {}) {
|
|
327
|
+
const schemas = postgresSchemas(options);
|
|
328
|
+
const slots = placeholders(schemas.length);
|
|
329
|
+
const [tableRows, columnRows, primaryKeyRows, foreignKeyRows, indexRows, extensionRows] = await Promise.all([
|
|
330
|
+
driver.execute(query(`SELECT table_schema, table_name FROM information_schema.tables ` +
|
|
331
|
+
`WHERE table_type = 'BASE TABLE' AND table_schema IN (${slots}) ORDER BY table_schema, table_name`, schemas)),
|
|
332
|
+
driver.execute(query(`SELECT c.table_schema, c.table_name, c.ordinal_position, c.column_name, c.is_nullable, ` +
|
|
333
|
+
`c.data_type, c.udt_name, c.domain_name, c.character_maximum_length, c.column_default, ` +
|
|
334
|
+
`c.is_generated, c.generation_expression, a.attidentity, a.atttypmod, t.typtype, ` +
|
|
335
|
+
`bt.typname AS domain_base_type, ext.extname AS extension_name ` +
|
|
336
|
+
`FROM information_schema.columns c ` +
|
|
337
|
+
`JOIN pg_catalog.pg_namespace ns ON ns.nspname = c.table_schema ` +
|
|
338
|
+
`JOIN pg_catalog.pg_class cls ON cls.relnamespace = ns.oid AND cls.relname = c.table_name ` +
|
|
339
|
+
`JOIN pg_catalog.pg_attribute a ON a.attrelid = cls.oid AND a.attname = c.column_name ` +
|
|
340
|
+
`JOIN pg_catalog.pg_type t ON t.oid = a.atttypid ` +
|
|
341
|
+
`LEFT JOIN pg_catalog.pg_type bt ON bt.oid = t.typbasetype ` +
|
|
342
|
+
`LEFT JOIN pg_catalog.pg_depend dep ON dep.classid = 'pg_type'::regclass AND dep.objid = t.oid ` +
|
|
343
|
+
`AND dep.deptype = 'e' ` +
|
|
344
|
+
`LEFT JOIN pg_catalog.pg_extension ext ON ext.oid = dep.refobjid ` +
|
|
345
|
+
`WHERE c.table_schema IN (${slots}) ORDER BY c.table_schema, c.table_name, c.ordinal_position`, schemas)),
|
|
346
|
+
driver.execute(query(`SELECT tc.table_name, kcu.column_name, kcu.ordinal_position ` +
|
|
347
|
+
`FROM information_schema.table_constraints tc ` +
|
|
348
|
+
`JOIN information_schema.key_column_usage kcu ON kcu.constraint_catalog = tc.constraint_catalog ` +
|
|
349
|
+
`AND kcu.constraint_schema = tc.constraint_schema AND kcu.constraint_name = tc.constraint_name ` +
|
|
350
|
+
`AND kcu.table_schema = tc.table_schema AND kcu.table_name = tc.table_name ` +
|
|
351
|
+
`WHERE tc.constraint_type = 'PRIMARY KEY' AND tc.table_schema IN (${slots}) ` +
|
|
352
|
+
`ORDER BY tc.table_name, kcu.ordinal_position`, schemas)),
|
|
353
|
+
driver.execute(query(`SELECT tc.table_name, tc.constraint_name, kcu.column_name, kcu.ordinal_position, ` +
|
|
354
|
+
`ukcu.table_name AS target_table, ukcu.column_name AS target_column, rc.update_rule, rc.delete_rule ` +
|
|
355
|
+
`FROM information_schema.table_constraints tc ` +
|
|
356
|
+
`JOIN information_schema.key_column_usage kcu ON kcu.constraint_catalog = tc.constraint_catalog ` +
|
|
357
|
+
`AND kcu.constraint_schema = tc.constraint_schema AND kcu.constraint_name = tc.constraint_name ` +
|
|
358
|
+
`AND kcu.table_schema = tc.table_schema AND kcu.table_name = tc.table_name ` +
|
|
359
|
+
`JOIN information_schema.referential_constraints rc ON rc.constraint_catalog = tc.constraint_catalog ` +
|
|
360
|
+
`AND rc.constraint_schema = tc.constraint_schema AND rc.constraint_name = tc.constraint_name ` +
|
|
361
|
+
`JOIN information_schema.key_column_usage ukcu ON ukcu.constraint_catalog = rc.unique_constraint_catalog ` +
|
|
362
|
+
`AND ukcu.constraint_schema = rc.unique_constraint_schema ` +
|
|
363
|
+
`AND ukcu.constraint_name = rc.unique_constraint_name ` +
|
|
364
|
+
`AND ukcu.ordinal_position = kcu.position_in_unique_constraint ` +
|
|
365
|
+
`WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_schema IN (${slots}) ` +
|
|
366
|
+
`ORDER BY tc.table_name, tc.constraint_name, kcu.ordinal_position`, schemas)),
|
|
367
|
+
driver.execute(query(`SELECT ns.nspname AS table_schema, tbl.relname AS table_name, idx.relname AS index_name, ` +
|
|
368
|
+
`i.indisunique AS is_unique, i.indisprimary AS is_primary, am.amname AS method, ` +
|
|
369
|
+
`pg_catalog.pg_get_expr(i.indpred, i.indrelid) AS predicate, positions.position, ` +
|
|
370
|
+
`pg_catalog.pg_get_indexdef(i.indexrelid, positions.position, true) AS definition, ` +
|
|
371
|
+
`CASE WHEN opc.opcdefault THEN NULL ELSE opc.opcname END AS operator_class ` +
|
|
372
|
+
`FROM pg_catalog.pg_index i JOIN pg_catalog.pg_class tbl ON tbl.oid = i.indrelid ` +
|
|
373
|
+
`JOIN pg_catalog.pg_namespace ns ON ns.oid = tbl.relnamespace ` +
|
|
374
|
+
`JOIN pg_catalog.pg_class idx ON idx.oid = i.indexrelid ` +
|
|
375
|
+
`JOIN pg_catalog.pg_am am ON am.oid = idx.relam ` +
|
|
376
|
+
`CROSS JOIN LATERAL generate_series(1, i.indnkeyatts) AS positions(position) ` +
|
|
377
|
+
`JOIN pg_catalog.pg_opclass opc ON opc.oid = i.indclass[positions.position - 1] ` +
|
|
378
|
+
`WHERE ns.nspname IN (${slots}) ORDER BY tbl.relname, idx.relname, positions.position`, schemas)),
|
|
379
|
+
driver.execute(query(`SELECT ext.extname AS name, ns.nspname AS schema FROM pg_catalog.pg_extension ext ` +
|
|
380
|
+
`JOIN pg_catalog.pg_namespace ns ON ns.oid = ext.extnamespace ` +
|
|
381
|
+
`WHERE ext.extname <> 'plpgsql' ORDER BY ext.extname`)),
|
|
382
|
+
]);
|
|
383
|
+
const tableNames = tableRows.map((row, index) => textField(row, 'table_name', 'postgres information_schema.tables', index));
|
|
384
|
+
const duplicate = tableNames.find((name, index) => tableNames.indexOf(name) !== index);
|
|
385
|
+
if (duplicate !== undefined) {
|
|
386
|
+
throw new TypeError(`postgres introspection cannot represent table "${duplicate}" from more than one schema in a schema-neutral snapshot`);
|
|
387
|
+
}
|
|
388
|
+
const parsedColumns = columnRows.map(parseColumn);
|
|
389
|
+
const primaryKeyByTable = primaryKeys(primaryKeyRows.map(parsePrimaryKey));
|
|
390
|
+
const foreignKeyByTable = foreignKeys(foreignKeyRows.map(parseForeignKey));
|
|
391
|
+
const columnNames = new Map(tableNames.map(name => [
|
|
392
|
+
name,
|
|
393
|
+
new Set(parsedColumns.filter(column => column.table === name).map(column => column.name)),
|
|
394
|
+
]));
|
|
395
|
+
const indexByTable = indexes(indexRows.map(parseIndex), columnNames);
|
|
396
|
+
const warnings = [];
|
|
397
|
+
const tables = tableNames
|
|
398
|
+
.filter(name => tableSelected(name, options))
|
|
399
|
+
.map(name => {
|
|
400
|
+
const primaryKey = primaryKeyByTable.get(name) ?? [];
|
|
401
|
+
const columns = parsedColumns
|
|
402
|
+
.filter(column => column.table === name)
|
|
403
|
+
.map(column => {
|
|
404
|
+
const mapped = postgresType(column);
|
|
405
|
+
if (mapped.warning !== undefined)
|
|
406
|
+
warnings.push({ table: name, column: column.name, reason: mapped.warning });
|
|
407
|
+
if (column.typeKind === 'd') {
|
|
408
|
+
warnings.push({
|
|
409
|
+
table: name,
|
|
410
|
+
column: column.name,
|
|
411
|
+
reason: `Postgres domain ${catalogType(column)} was normalized to its base type and its constraints are not represented`,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
const generatedBySequence = column.identity !== '' || (column.default?.toLowerCase().startsWith('nextval(') ?? false);
|
|
415
|
+
return {
|
|
416
|
+
name: column.name,
|
|
417
|
+
type: mapped.type,
|
|
418
|
+
catalogType: catalogType(column),
|
|
419
|
+
nullable: column.nullable,
|
|
420
|
+
primaryKey: primaryKey.includes(column.name),
|
|
421
|
+
...(mapped.length === undefined ? {} : { length: mapped.length }),
|
|
422
|
+
...(column.default === null || generatedBySequence ? {} : { default: column.default }),
|
|
423
|
+
...(column.generated === 'ALWAYS' && column.generationExpression !== null
|
|
424
|
+
? { generated: { expression: column.generationExpression, stored: true } }
|
|
425
|
+
: {}),
|
|
426
|
+
};
|
|
427
|
+
})
|
|
428
|
+
.toSorted((left, right) => left.name.localeCompare(right.name));
|
|
429
|
+
return {
|
|
430
|
+
name,
|
|
431
|
+
columns,
|
|
432
|
+
primaryKey,
|
|
433
|
+
foreignKeys: foreignKeyByTable.get(name) ?? [],
|
|
434
|
+
indexes: indexByTable.get(name) ?? [],
|
|
435
|
+
};
|
|
436
|
+
});
|
|
437
|
+
const extensions = extensionRows.map((row, index) => {
|
|
438
|
+
const name = textField(row, 'name', 'postgres pg_catalog.pg_extension', index);
|
|
439
|
+
const schema = textField(row, 'schema', 'postgres pg_catalog.pg_extension', index);
|
|
440
|
+
return schema === 'public' ? { name } : { name, schema };
|
|
441
|
+
});
|
|
442
|
+
return {
|
|
443
|
+
version: 1,
|
|
444
|
+
tables: sortByName(tables),
|
|
445
|
+
extensions: sortByName(extensions),
|
|
446
|
+
warnings: warnings.toSorted((left, right) => left.table.localeCompare(right.table) ||
|
|
447
|
+
(left.column ?? '').localeCompare(right.column ?? '') ||
|
|
448
|
+
left.reason.localeCompare(right.reason)),
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
function normalizeForDrift(snapshot) {
|
|
452
|
+
return {
|
|
453
|
+
version: 1,
|
|
454
|
+
tables: snapshot.tables
|
|
455
|
+
.filter(table => table.name !== '_zmdb_migrations')
|
|
456
|
+
.map(table => ({
|
|
457
|
+
name: table.name,
|
|
458
|
+
columns: table.columns.map(column => ({
|
|
459
|
+
name: column.name,
|
|
460
|
+
type: column.type,
|
|
461
|
+
nullable: column.nullable,
|
|
462
|
+
primaryKey: column.primaryKey,
|
|
463
|
+
...(column.length === undefined ? {} : { length: column.length }),
|
|
464
|
+
...(column.unique === undefined ? {} : { unique: column.unique }),
|
|
465
|
+
})),
|
|
466
|
+
primaryKey: table.primaryKey,
|
|
467
|
+
foreignKeys: table.foreignKeys,
|
|
468
|
+
indexes: table.indexes,
|
|
469
|
+
...(table.tableOptions === undefined ? {} : { tableOptions: table.tableOptions }),
|
|
470
|
+
}))
|
|
471
|
+
.toSorted((left, right) => left.name.localeCompare(right.name)),
|
|
472
|
+
extensions: snapshot.extensions.toSorted((left, right) => left.name.localeCompare(right.name)),
|
|
473
|
+
};
|
|
474
|
+
}
|
|
475
|
+
export function postgresFamilyIntrospector(name, overrides = {}) {
|
|
476
|
+
const parentSnapshot = (driver, options) => postgresSnapshot(driver, options);
|
|
477
|
+
const parentNormalize = (snapshot, _role) => normalizeForDrift(snapshot);
|
|
478
|
+
return Object.freeze({
|
|
479
|
+
name,
|
|
480
|
+
dialect: name,
|
|
481
|
+
snapshot: (driver, options) => overrides.snapshot === undefined
|
|
482
|
+
? parentSnapshot(driver, options)
|
|
483
|
+
: overrides.snapshot(parentSnapshot, driver, options),
|
|
484
|
+
normalizeForDrift: (snapshot, role) => overrides.normalizeForDrift === undefined
|
|
485
|
+
? parentNormalize(snapshot, role)
|
|
486
|
+
: overrides.normalizeForDrift(parentNormalize, snapshot, role),
|
|
487
|
+
});
|
|
488
|
+
}
|
|
489
|
+
//# sourceMappingURL=introspect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"introspect.js","sourceRoot":"","sources":["../src/introspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type DialectTypeMap, type MigrationDialect } from '@zmdb/sql';
|
|
2
|
+
export interface PostgresMigrationOptions {
|
|
3
|
+
/** Type overrides inherited by a PostgreSQL-family child. */
|
|
4
|
+
readonly types?: Readonly<Partial<DialectTypeMap>>;
|
|
5
|
+
}
|
|
6
|
+
export declare function postgresFamilyMigrations<Name extends string>(name: Name, options?: PostgresMigrationOptions): MigrationDialect<Name>;
|
|
7
|
+
//# sourceMappingURL=migrations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EAKtB,MAAM,WAAW,CAAC;AAgBnB,MAAM,WAAW,wBAAwB;IACvC,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;CACpD;AA4fD,wBAAgB,wBAAwB,CAAC,IAAI,SAAS,MAAM,EAC1D,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,wBAA6B,GACrC,gBAAgB,CAAC,IAAI,CAAC,CA2BxB"}
|