@lyku/lockstep-pg 1.4.0 → 1.5.0
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/package.json +31 -31
- package/src/buildTableIndexCommand.d.ts.map +1 -1
- package/src/buildTableIndexCommand.js +21 -6
- package/src/buildTableIndexCommand.js.map +1 -1
- package/src/buildTableTriggerCommands.d.ts +13 -1
- package/src/buildTableTriggerCommands.d.ts.map +1 -1
- package/src/buildTableTriggerCommands.js +33 -14
- package/src/buildTableTriggerCommands.js.map +1 -1
- package/src/createTable.d.ts.map +1 -1
- package/src/createTable.js +16 -2
- package/src/createTable.js.map +1 -1
- package/src/dateToPostgresString.js +2 -2
- package/src/dateToPostgresString.js.map +1 -1
- package/src/diff.d.ts +12 -0
- package/src/diff.d.ts.map +1 -1
- package/src/diff.js +113 -6
- package/src/diff.js.map +1 -1
- package/src/drift.d.ts +8 -11
- package/src/drift.d.ts.map +1 -1
- package/src/drift.js +1 -298
- package/src/drift.js.map +1 -1
- package/src/form.d.ts.map +1 -1
- package/src/form.js +43 -2
- package/src/form.js.map +1 -1
- package/src/generateSql.d.ts.map +1 -1
- package/src/generateSql.js +69 -8
- package/src/generateSql.js.map +1 -1
- package/src/index.d.ts +3 -3
- package/src/index.d.ts.map +1 -1
- package/src/index.js +2 -4
- package/src/index.js.map +1 -1
- package/src/introspect.d.ts +12 -0
- package/src/introspect.d.ts.map +1 -1
- package/src/introspect.js +195 -34
- package/src/introspect.js.map +1 -1
- package/src/mapColumnType.d.ts.map +1 -1
- package/src/mapColumnType.js +6 -0
- package/src/mapColumnType.js.map +1 -1
- package/src/mapSnowflakeType.d.ts +9 -0
- package/src/mapSnowflakeType.d.ts.map +1 -0
- package/src/mapSnowflakeType.js +19 -0
- package/src/mapSnowflakeType.js.map +1 -0
- package/src/migrate.d.ts +11 -9
- package/src/migrate.d.ts.map +1 -1
- package/src/migrate.js +28 -345
- package/src/migrate.js.map +1 -1
- package/src/seed.d.ts.map +1 -1
- package/src/seed.js +6 -1
- package/src/seed.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
2
|
+
"name": "@lyku/lockstep-pg",
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"description": "Schema-driven PostgreSQL migration toolkit: drift detection, introspection, and SQL generation for @lyku/lockstep-core models",
|
|
5
|
+
"main": "./src/index.js",
|
|
6
|
+
"types": "./src/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"license": "GPL-3.0",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./src/index.d.ts",
|
|
12
|
+
"import": "./src/index.js",
|
|
13
|
+
"default": "./src/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@lyku/lockstep-core": ">=0.2.0"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"pg": "^8.0.0"
|
|
21
|
+
},
|
|
22
|
+
"keywords": [
|
|
23
|
+
"postgresql",
|
|
24
|
+
"migration",
|
|
25
|
+
"schema",
|
|
26
|
+
"drift",
|
|
27
|
+
"introspection",
|
|
28
|
+
"lockstep",
|
|
29
|
+
"lockstep-core"
|
|
30
|
+
],
|
|
31
|
+
"module": "./src/index.js"
|
|
32
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableIndexCommand.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,wBAAgB,uBAAuB,CACtC,CAAC,SAAS,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"buildTableIndexCommand.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,wBAAgB,uBAAuB,CACtC,CAAC,SAAS,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,YAkE5B"}
|
|
@@ -21,13 +21,28 @@ export function buildTableIndexCommands(tableName, model) {
|
|
|
21
21
|
indexName = `idx_${tableName}_${index.map((c) => c.split(' ')[0]).join('_')}`;
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
-
// Object format with optional custom name
|
|
24
|
+
// Object format with optional custom name, where clause, or raw expression list
|
|
25
25
|
const objIndex = index;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
if (objIndex.raw !== undefined) {
|
|
27
|
+
// Expression / functional index: literal column-list SQL, emitted verbatim
|
|
28
|
+
// (no identifier quoting) so casts/expressions like ((columns[1])::numeric) work.
|
|
29
|
+
indexColumns = [objIndex.raw];
|
|
30
|
+
indexName = objIndex.name ?? `idx_${tableName}_expr`;
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const cols = Array.isArray(objIndex.columns)
|
|
34
|
+
? objIndex.columns
|
|
35
|
+
: [objIndex.columns];
|
|
36
|
+
indexColumns = cols.map((col) => {
|
|
37
|
+
const parts = col.split(' ');
|
|
38
|
+
const colName = parts[0];
|
|
39
|
+
const modifiers = parts.slice(1).join(' ');
|
|
40
|
+
return modifiers ? `"${colName}" ${modifiers}` : `"${colName}"`;
|
|
41
|
+
});
|
|
42
|
+
indexName =
|
|
43
|
+
objIndex.name ??
|
|
44
|
+
`idx_${tableName}_${cols.map((c) => c.split(' ')[0]).join('_')}`;
|
|
45
|
+
}
|
|
31
46
|
// Support partial indexes with WHERE clause
|
|
32
47
|
if (objIndex.where) {
|
|
33
48
|
whereClause = objIndex.where;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableIndexCommand.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CAErC,SAAiB,EAAE,KAAQ;IAC5B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/B,IAAI,YAAsB,CAAC;YAC3B,IAAI,SAAiB,CAAC;YACtB,IAAI,WAA+B,CAAC;YAEpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,sBAAsB;gBACtB,YAAY,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;gBAC9B,SAAS,GAAG,OAAO,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,qBAAqB;gBACrB,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;oBAChC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B;oBACtE,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC;gBACjE,CAAC,CAAC,CAAC;gBACH,SAAS,GAAG,OAAO,SAAS,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/E,CAAC;iBAAM,CAAC;gBACP,
|
|
1
|
+
{"version":3,"file":"buildTableIndexCommand.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableIndexCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,15 @@
|
|
|
1
|
-
import { PostgresRecordModel, PostgresTableModel } from '@lyku/lockstep-core';
|
|
1
|
+
import { PostgresRecordModel, PostgresTableModel, PostgresTriggerModel } from '@lyku/lockstep-core';
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic trigger name: the explicit `name`, else the positional
|
|
4
|
+
* `{table}_trigger_{i+1}`. Drift detection and DDL generation MUST agree on
|
|
5
|
+
* this, so both go through here.
|
|
6
|
+
*/
|
|
7
|
+
export declare function triggerName(tableName: string, trigger: PostgresTriggerModel, index: number): string;
|
|
8
|
+
/**
|
|
9
|
+
* The CREATE-FUNCTION + CREATE-TRIGGER pair for a single trigger. Idempotent
|
|
10
|
+
* (CREATE OR REPLACE FUNCTION + DROP/CREATE TRIGGER), so it's safe to re-run and
|
|
11
|
+
* safe to emit from a drift migration onto an existing table.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildTriggerCommands(tableName: string, trigger: PostgresTriggerModel, index: number): string[];
|
|
2
14
|
export declare function buildTableTriggerCommands<T extends PostgresTableModel<PostgresRecordModel>>(tableName: string, model: T): string[];
|
|
3
15
|
//# sourceMappingURL=buildTableTriggerCommands.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableTriggerCommands.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"buildTableTriggerCommands.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,MAAM,qBAAqB,CAAC;AAE7B;;;;GAIG;AACH,wBAAgB,WAAW,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,MAAM,GACX,MAAM,CAER;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,MAAM,GACX,MAAM,EAAE,CAoBV;AAED,wBAAgB,yBAAyB,CACxC,CAAC,SAAS,kBAAkB,CAAC,mBAAmB,CAAC,EAChD,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,YAS5B"}
|
|
@@ -1,21 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic trigger name: the explicit `name`, else the positional
|
|
3
|
+
* `{table}_trigger_{i+1}`. Drift detection and DDL generation MUST agree on
|
|
4
|
+
* this, so both go through here.
|
|
5
|
+
*/
|
|
6
|
+
export function triggerName(tableName, trigger, index) {
|
|
7
|
+
return trigger.name ?? `${tableName}_trigger_${index + 1}`;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* The CREATE-FUNCTION + CREATE-TRIGGER pair for a single trigger. Idempotent
|
|
11
|
+
* (CREATE OR REPLACE FUNCTION + DROP/CREATE TRIGGER), so it's safe to re-run and
|
|
12
|
+
* safe to emit from a drift migration onto an existing table.
|
|
13
|
+
*/
|
|
14
|
+
export function buildTriggerCommands(tableName, trigger, index) {
|
|
15
|
+
const name = triggerName(tableName, trigger, index);
|
|
16
|
+
const timing = 'before' in trigger ? 'BEFORE' : 'AFTER';
|
|
17
|
+
const event = 'before' in trigger ? trigger.before : trigger.after;
|
|
18
|
+
return [
|
|
19
|
+
`CREATE OR REPLACE FUNCTION ${name}_fn()\n` +
|
|
20
|
+
`RETURNS TRIGGER AS $$\n` +
|
|
21
|
+
`BEGIN\n` +
|
|
22
|
+
`${trigger.sql}\n` +
|
|
23
|
+
`END;\n` +
|
|
24
|
+
`$$ LANGUAGE plpgsql;\n`,
|
|
25
|
+
`DROP TRIGGER IF EXISTS ${name} ON "${tableName}";\n` +
|
|
26
|
+
`CREATE TRIGGER ${name}\n` +
|
|
27
|
+
`${timing} ${event.toUpperCase()}\n` +
|
|
28
|
+
`ON "${tableName}"\n` +
|
|
29
|
+
`FOR EACH ROW\n` +
|
|
30
|
+
`EXECUTE FUNCTION ${name}_fn();`,
|
|
31
|
+
];
|
|
32
|
+
}
|
|
1
33
|
export function buildTableTriggerCommands(tableName, model) {
|
|
2
34
|
const triggerQueries = [];
|
|
3
35
|
if (model.triggers) {
|
|
4
36
|
model.triggers.forEach((trigger, i) => {
|
|
5
|
-
|
|
6
|
-
const timing = 'before' in trigger ? 'BEFORE' : 'AFTER';
|
|
7
|
-
const event = 'before' in trigger ? trigger.before : trigger.after;
|
|
8
|
-
triggerQueries.push(`CREATE OR REPLACE FUNCTION ${triggerName}_fn()\n` +
|
|
9
|
-
`RETURNS TRIGGER AS $$\n` +
|
|
10
|
-
`BEGIN\n` +
|
|
11
|
-
`${trigger.sql}\n` +
|
|
12
|
-
`END;\n` +
|
|
13
|
-
`$$ LANGUAGE plpgsql;\n`, `DROP TRIGGER IF EXISTS ${triggerName} ON "${tableName}";\n` +
|
|
14
|
-
`CREATE TRIGGER ${triggerName}\n` +
|
|
15
|
-
`${timing} ${event.toUpperCase()}\n` +
|
|
16
|
-
`ON "${tableName}"\n` +
|
|
17
|
-
`FOR EACH ROW\n` +
|
|
18
|
-
`EXECUTE FUNCTION ${triggerName}_fn();`);
|
|
37
|
+
triggerQueries.push(...buildTriggerCommands(tableName, trigger, i));
|
|
19
38
|
});
|
|
20
39
|
}
|
|
21
40
|
return triggerQueries;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildTableTriggerCommands.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"buildTableTriggerCommands.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/buildTableTriggerCommands.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAC1B,SAAiB,EACjB,OAA6B,EAC7B,KAAa;IAEb,OAAO,OAAO,CAAC,IAAI,IAAI,GAAG,SAAS,YAAY,KAAK,GAAG,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CACnC,SAAiB,EACjB,OAA6B,EAC7B,KAAa;IAEb,MAAM,IAAI,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACxD,MAAM,KAAK,GAAG,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAEnE,OAAO;QACN,8BAA8B,IAAI,SAAS;YAC1C,yBAAyB;YACzB,SAAS;YACT,GAAG,OAAO,CAAC,GAAG,IAAI;YAClB,QAAQ;YACR,wBAAwB;QAEzB,0BAA0B,IAAI,QAAQ,SAAS,MAAM;YACpD,kBAAkB,IAAI,IAAI;YAC1B,GAAG,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI;YACpC,OAAO,SAAS,KAAK;YACrB,gBAAgB;YAChB,oBAAoB,IAAI,QAAQ;KACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAEvC,SAAiB,EAAE,KAAQ;IAC5B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACpB,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YACrC,cAAc,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAC;AACvB,CAAC"}
|
package/src/createTable.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTable.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAa9E,eAAO,MAAM,yBAAyB,GACrC,WAAW,MAAM,EACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"createTable.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAa9E,eAAO,MAAM,yBAAyB,GACrC,WAAW,MAAM,EACjB,OAAO,kBAAkB,CAAC,mBAAmB,CAAC,WAqD9C,CAAC"}
|
package/src/createTable.js
CHANGED
|
@@ -14,8 +14,12 @@ function formatDefault(def) {
|
|
|
14
14
|
export const buildTableCreationCommand = (tableName, model) => {
|
|
15
15
|
const { schema } = model;
|
|
16
16
|
const required = 'required' in schema ? schema.required : [];
|
|
17
|
+
// Managed (infra) columns are emitted alongside the record-schema columns but
|
|
18
|
+
// are not part of `schema.properties` (so they stay out of the domain type).
|
|
19
|
+
// They are nullable-with-default; NOT NULL still derives only from `required`.
|
|
20
|
+
const managed = Object.entries(model.managedColumns ?? {});
|
|
17
21
|
const columns = 'properties' in schema
|
|
18
|
-
? Object.entries(schema.properties)
|
|
22
|
+
? [...Object.entries(schema.properties), ...managed]
|
|
19
23
|
.map(([columnName, columnSchema]) => {
|
|
20
24
|
const columnType = mapColumnType(columnName, columnSchema);
|
|
21
25
|
const notNull = required.includes(columnName) ? ' NOT NULL' : '';
|
|
@@ -40,7 +44,17 @@ export const buildTableCreationCommand = (tableName, model) => {
|
|
|
40
44
|
.map((k) => `"${k}"`)
|
|
41
45
|
.join(', ')})`
|
|
42
46
|
: '';
|
|
43
|
-
|
|
47
|
+
// Foreign keys — model shape: { column: { referencedTable: referencedColumn } }.
|
|
48
|
+
// Emitted inline so a table created from a model round-trips with its FKs (the referenced
|
|
49
|
+
// table must already exist; generateCreateTablesSql topologically orders tables for that).
|
|
50
|
+
const fks = model.foreignKeys
|
|
51
|
+
? Object.entries(model.foreignKeys)
|
|
52
|
+
.flatMap(([column, ref]) => ref
|
|
53
|
+
? Object.entries(ref).map(([refTable, refColumn]) => `, FOREIGN KEY ("${column}") REFERENCES "${refTable}" ("${refColumn}")`)
|
|
54
|
+
: [])
|
|
55
|
+
.join('')
|
|
56
|
+
: '';
|
|
57
|
+
const createTableQuery = `CREATE TABLE IF NOT EXISTS "${tableName}" (${columns} ${primary} ${uni}${fks});`;
|
|
44
58
|
return createTableQuery;
|
|
45
59
|
};
|
|
46
60
|
//# sourceMappingURL=createTable.js.map
|
package/src/createTable.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTable.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,SAAS,aAAa,CAAC,GAAY;IAClC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;QAC7D,OAAQ,GAAuB,CAAC,GAAG,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,GAAG,GAAG,CAAC;IAC/C,IAAI,OAAO,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACxC,SAAiB,EACjB,KAA8C,EAC7C,EAAE;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,MAAM,OAAO,GACZ,YAAY,IAAI,MAAM;QACrB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"createTable.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/createTable.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export const dateToPostgresString = (date) => {
|
|
2
2
|
// Ensure we're working with a Date object
|
|
3
3
|
const dateObj = date instanceof Date ? date : new Date(date);
|
|
4
|
-
// Format: YYYY-MM-DD HH:MM:SS.sss
|
|
5
|
-
return dateObj.toISOString().slice(0,
|
|
4
|
+
// Format: YYYY-MM-DD HH:MM:SS.sss (slice(0,23) keeps milliseconds, drops the trailing 'Z')
|
|
5
|
+
return dateObj.toISOString().slice(0, 23).replace('T', ' ');
|
|
6
6
|
};
|
|
7
7
|
//# sourceMappingURL=dateToPostgresString.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateToPostgresString.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/dateToPostgresString.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAmB,EAAE,EAAE;IAC3D,0CAA0C;IAC1C,MAAM,OAAO,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,
|
|
1
|
+
{"version":3,"file":"dateToPostgresString.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/dateToPostgresString.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,IAAmB,EAAE,EAAE;IAC3D,0CAA0C;IAC1C,MAAM,OAAO,GAAG,IAAI,YAAY,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,4FAA4F;IAC5F,OAAO,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC,CAAC"}
|
package/src/diff.d.ts
CHANGED
|
@@ -23,6 +23,7 @@ export type DiffOperation = {
|
|
|
23
23
|
fromType: string;
|
|
24
24
|
toType: string;
|
|
25
25
|
toArrayItemType: string | null;
|
|
26
|
+
toLength: number | null;
|
|
26
27
|
} | {
|
|
27
28
|
type: 'alter_column_nullable';
|
|
28
29
|
tableName: string;
|
|
@@ -39,6 +40,16 @@ export type DiffOperation = {
|
|
|
39
40
|
columnName: string;
|
|
40
41
|
oldValues: string[];
|
|
41
42
|
newValues: string[];
|
|
43
|
+
} | {
|
|
44
|
+
type: 'drop_sequence';
|
|
45
|
+
tableName: string;
|
|
46
|
+
columnName: string;
|
|
47
|
+
sequenceName: string;
|
|
48
|
+
} | {
|
|
49
|
+
type: 'create_sequence';
|
|
50
|
+
tableName: string;
|
|
51
|
+
columnName: string;
|
|
52
|
+
sequenceName: string;
|
|
42
53
|
} | {
|
|
43
54
|
type: 'add_index';
|
|
44
55
|
tableName: string;
|
|
@@ -55,6 +66,7 @@ export type DiffOperation = {
|
|
|
55
66
|
type: 'drop_unique_constraint';
|
|
56
67
|
tableName: string;
|
|
57
68
|
columns: string[];
|
|
69
|
+
constraintName?: string;
|
|
58
70
|
} | {
|
|
59
71
|
type: 'add_foreign_key';
|
|
60
72
|
tableName: string;
|
package/src/diff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,aAAa,GACtB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,iBAAiB,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9D;IACA,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"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"}
|
package/src/diff.js
CHANGED
|
@@ -1,6 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Diff two table models and generate migration operations
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* Normalize a default value for comparison.
|
|
6
|
+
* PostgreSQL reports defaults with type casts (e.g., 'CURRENT_TIMESTAMP'::timestamptz),
|
|
7
|
+
* so we strip those for comparison.
|
|
8
|
+
*/
|
|
9
|
+
function normalizeDefault(value) {
|
|
10
|
+
if (value === null || value === undefined)
|
|
11
|
+
return null;
|
|
12
|
+
// Strip type casts including multi-word types, e.g. ::regclass, ::text,
|
|
13
|
+
// ::character varying, ::timestamp with time zone, ::double precision.
|
|
14
|
+
return value
|
|
15
|
+
.replace(/::"?[\w ]+"?(\[\])?/g, '')
|
|
16
|
+
.trim()
|
|
17
|
+
.toLowerCase();
|
|
18
|
+
}
|
|
4
19
|
/**
|
|
5
20
|
* Check if two sets of columns match (order-independent)
|
|
6
21
|
*/
|
|
@@ -53,6 +68,23 @@ function diffColumn(tableName, dbCol, codeCol) {
|
|
|
53
68
|
fromType: dbCol.type,
|
|
54
69
|
toType: codeCol.type,
|
|
55
70
|
toArrayItemType: codeCol.arrayItemType,
|
|
71
|
+
toLength: codeCol.maxLength ?? null,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if ((codeCol.type === 'char' || codeCol.type === 'varchar') &&
|
|
75
|
+
codeCol.maxLength != null &&
|
|
76
|
+
dbCol.maxLength != null &&
|
|
77
|
+
codeCol.maxLength !== dbCol.maxLength) {
|
|
78
|
+
// Same base type, different length (char(4) -> char(6), varchar(50) -> varchar(255)).
|
|
79
|
+
// Without this the engine is blind to length drift.
|
|
80
|
+
ops.push({
|
|
81
|
+
type: 'alter_column_type',
|
|
82
|
+
tableName,
|
|
83
|
+
columnName: dbCol.name,
|
|
84
|
+
fromType: `${dbCol.type}(${dbCol.maxLength ?? ''})`,
|
|
85
|
+
toType: codeCol.type,
|
|
86
|
+
toArrayItemType: codeCol.arrayItemType,
|
|
87
|
+
toLength: codeCol.maxLength ?? null,
|
|
56
88
|
});
|
|
57
89
|
}
|
|
58
90
|
// Nullable mismatch
|
|
@@ -64,6 +96,47 @@ function diffColumn(tableName, dbCol, codeCol) {
|
|
|
64
96
|
nullable: codeCol.nullable,
|
|
65
97
|
});
|
|
66
98
|
}
|
|
99
|
+
// Default mismatch
|
|
100
|
+
if (normalizeDefault(dbCol.default) !== normalizeDefault(codeCol.default)) {
|
|
101
|
+
// If the NEW default is a nextval() sequence, create the sequence
|
|
102
|
+
// before SET DEFAULT references it (LYK-1214). Otherwise the
|
|
103
|
+
// generator emits `SET DEFAULT nextval('x_id_seq')` for a sequence
|
|
104
|
+
// that doesn't exist (e.g. a serial model whose backing sequence was
|
|
105
|
+
// dropped), which fails with "relation does not exist". IF NOT
|
|
106
|
+
// EXISTS keeps it a no-op when the sequence is already present.
|
|
107
|
+
if (codeCol.default?.includes('nextval(')) {
|
|
108
|
+
const seqMatch = codeCol.default.match(/nextval\('([^']+)'/);
|
|
109
|
+
if (seqMatch) {
|
|
110
|
+
ops.push({
|
|
111
|
+
type: 'create_sequence',
|
|
112
|
+
tableName,
|
|
113
|
+
columnName: dbCol.name,
|
|
114
|
+
sequenceName: seqMatch[1],
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
ops.push({
|
|
119
|
+
type: 'alter_column_default',
|
|
120
|
+
tableName,
|
|
121
|
+
columnName: dbCol.name,
|
|
122
|
+
defaultValue: codeCol.default,
|
|
123
|
+
});
|
|
124
|
+
// If the old default was a nextval() sequence and the new default is null,
|
|
125
|
+
// the sequence is now orphaned and should be dropped
|
|
126
|
+
if (dbCol.default &&
|
|
127
|
+
dbCol.default.includes('nextval(') &&
|
|
128
|
+
codeCol.default === null) {
|
|
129
|
+
const seqMatch = dbCol.default.match(/nextval\('([^']+)'/);
|
|
130
|
+
if (seqMatch) {
|
|
131
|
+
ops.push({
|
|
132
|
+
type: 'drop_sequence',
|
|
133
|
+
tableName,
|
|
134
|
+
columnName: dbCol.name,
|
|
135
|
+
sequenceName: seqMatch[1],
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
67
140
|
// Enum values mismatch (CHECK constraint)
|
|
68
141
|
if (!enumValuesMatch(dbCol.enumValues, codeCol.enumValues)) {
|
|
69
142
|
ops.push({
|
|
@@ -86,27 +159,57 @@ function diffIndexes(tableName, dbIndexes, codeIndexes) {
|
|
|
86
159
|
const dbNonPk = dbIndexes.filter((i) => !i.name.endsWith('_pkey') && !i.name.includes('_pkey'));
|
|
87
160
|
// Find indexes in code that don't exist in DB
|
|
88
161
|
for (const codeIdx of codeIndexes) {
|
|
89
|
-
const found = dbNonPk.some((dbIdx) =>
|
|
162
|
+
const found = dbNonPk.some((dbIdx) => dbIdx.name === codeIdx.name ||
|
|
163
|
+
columnsMatch(dbIdx.columns, codeIdx.columns));
|
|
90
164
|
if (!found) {
|
|
91
165
|
ops.push({ type: 'add_index', tableName, index: codeIdx });
|
|
92
166
|
}
|
|
93
167
|
}
|
|
94
|
-
//
|
|
95
|
-
//
|
|
168
|
+
// Drop indexes present in the DB but absent from the model. Categorized destructive
|
|
169
|
+
// (reported, never auto-applied) so legitimate hand-added perf indexes aren't silently
|
|
170
|
+
// nuked — but they ARE surfaced as drift. Exclude PK and constraint-backed indexes
|
|
171
|
+
// (*_pkey / *_unique / *_key), which are handled as constraints, not standalone indexes.
|
|
172
|
+
for (const dbIdx of dbNonPk) {
|
|
173
|
+
if (dbIdx.name.endsWith('_unique') || dbIdx.name.endsWith('_key'))
|
|
174
|
+
continue;
|
|
175
|
+
const found = codeIndexes.some((codeIdx) => codeIdx.name === dbIdx.name ||
|
|
176
|
+
columnsMatch(codeIdx.columns, dbIdx.columns));
|
|
177
|
+
if (!found) {
|
|
178
|
+
ops.push({ type: 'drop_index', tableName, indexName: dbIdx.name });
|
|
179
|
+
}
|
|
180
|
+
}
|
|
96
181
|
return ops;
|
|
97
182
|
}
|
|
98
183
|
/**
|
|
99
184
|
* Diff unique constraints
|
|
100
185
|
*/
|
|
101
|
-
function diffUniqueConstraints(tableName, dbUnique, codeUnique) {
|
|
186
|
+
function diffUniqueConstraints(tableName, dbUnique, codeUnique, dbNames) {
|
|
102
187
|
const ops = [];
|
|
103
|
-
// Find constraints in code that don't exist in DB
|
|
188
|
+
// Find constraints in code that don't exist in DB -> add
|
|
104
189
|
for (const codeCols of codeUnique) {
|
|
105
190
|
const found = dbUnique.some((dbCols) => columnsMatch(dbCols, codeCols));
|
|
106
191
|
if (!found) {
|
|
107
192
|
ops.push({ type: 'add_unique_constraint', tableName, columns: codeCols });
|
|
108
193
|
}
|
|
109
194
|
}
|
|
195
|
+
// Find unique constraints in the DB that aren't in the model -> drop. Categorized
|
|
196
|
+
// destructive (surfaced, never auto-applied), but DETECTED — otherwise the engine is
|
|
197
|
+
// blind to extra/wrong constraints (e.g. the phantom single-column uniques) and can't
|
|
198
|
+
// surface them for remediation. A diff that only adds isn't a diff.
|
|
199
|
+
for (const dbCols of dbUnique) {
|
|
200
|
+
const found = codeUnique.some((codeCols) => columnsMatch(dbCols, codeCols));
|
|
201
|
+
if (!found) {
|
|
202
|
+
// Use the real DB constraint name so the DROP actually matches (Postgres names
|
|
203
|
+
// inline/column-level uniques "<table>_<col>_key", not "<table>_<col>_unique").
|
|
204
|
+
const constraintName = dbNames?.find((n) => columnsMatch(n.columns, dbCols))?.name;
|
|
205
|
+
ops.push({
|
|
206
|
+
type: 'drop_unique_constraint',
|
|
207
|
+
tableName,
|
|
208
|
+
columns: dbCols,
|
|
209
|
+
...(constraintName ? { constraintName } : {}),
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
110
213
|
return ops;
|
|
111
214
|
}
|
|
112
215
|
/**
|
|
@@ -140,7 +243,7 @@ export function diffTable(dbTable, codeTable) {
|
|
|
140
243
|
// Diff indexes
|
|
141
244
|
ops.push(...diffIndexes(tableName, dbTable.indexes, codeTable.indexes));
|
|
142
245
|
// Diff unique constraints
|
|
143
|
-
ops.push(...diffUniqueConstraints(tableName, dbTable.uniqueConstraints, codeTable.uniqueConstraints));
|
|
246
|
+
ops.push(...diffUniqueConstraints(tableName, dbTable.uniqueConstraints, codeTable.uniqueConstraints, dbTable.uniqueConstraintNames));
|
|
144
247
|
// Diff foreign keys
|
|
145
248
|
const dbFks = dbTable.foreignKeys ?? [];
|
|
146
249
|
const codeFks = codeTable.foreignKeys ?? [];
|
|
@@ -196,12 +299,16 @@ export function categorizeOperations(ops) {
|
|
|
196
299
|
case 'add_index':
|
|
197
300
|
case 'add_unique_constraint':
|
|
198
301
|
case 'update_check_constraint':
|
|
302
|
+
case 'add_foreign_key':
|
|
303
|
+
case 'create_sequence':
|
|
199
304
|
safe.push(op);
|
|
200
305
|
break;
|
|
201
306
|
case 'drop_table':
|
|
202
307
|
case 'drop_column':
|
|
203
308
|
case 'drop_index':
|
|
204
309
|
case 'drop_unique_constraint':
|
|
310
|
+
case 'drop_sequence':
|
|
311
|
+
case 'drop_foreign_key':
|
|
205
312
|
destructive.push(op);
|
|
206
313
|
break;
|
|
207
314
|
case 'alter_column_type':
|
package/src/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/diff.ts"],"names":[],"mappings":"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"}
|
package/src/drift.d.ts
CHANGED
|
@@ -1,16 +1,13 @@
|
|
|
1
1
|
import type { PostgresRecordModel, PostgresTableModel } from '@lyku/lockstep-core';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
docId?: string | number;
|
|
11
|
-
}
|
|
2
|
+
/**
|
|
3
|
+
* The aggregated schema config (all table models) the migration engine diffs the live DB against.
|
|
4
|
+
*
|
|
5
|
+
* NOTE: the legacy narrow drift detector (`detectDrift`) and its SQL generator (`driftToSql`) were
|
|
6
|
+
* removed. There is now a single migration/drift engine — introspect → `diffDatabase` →
|
|
7
|
+
* `generateMigrationSql` (see `migrate.ts` and `apps/dataform/src/schemaDiff.ts`). This file keeps
|
|
8
|
+
* only the shared config type so existing `import { DataformConfig } from './drift'` sites are stable.
|
|
9
|
+
*/
|
|
12
10
|
export interface DataformConfig {
|
|
13
11
|
tables: Record<string, PostgresTableModel<PostgresRecordModel>>;
|
|
14
12
|
}
|
|
15
|
-
export declare function detectDrift(connectionString: string, config: DataformConfig): Promise<Drift[]>;
|
|
16
13
|
//# sourceMappingURL=drift.d.ts.map
|
package/src/drift.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/drift.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"drift.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/drift.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,CAAC,CAAC;CAChE"}
|