@lyku/lockstep-pg 0.1.2 → 0.2.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.
Files changed (49) hide show
  1. package/package.json +30 -30
  2. package/src/buildTableIndexCommand.d.ts.map +1 -1
  3. package/src/buildTableIndexCommand.js +21 -6
  4. package/src/buildTableIndexCommand.js.map +1 -1
  5. package/src/buildTableTriggerCommands.d.ts +13 -1
  6. package/src/buildTableTriggerCommands.d.ts.map +1 -1
  7. package/src/buildTableTriggerCommands.js +33 -14
  8. package/src/buildTableTriggerCommands.js.map +1 -1
  9. package/src/createTable.d.ts.map +1 -1
  10. package/src/createTable.js +16 -2
  11. package/src/createTable.js.map +1 -1
  12. package/src/dateToPostgresString.js +2 -2
  13. package/src/dateToPostgresString.js.map +1 -1
  14. package/src/diff.d.ts +12 -0
  15. package/src/diff.d.ts.map +1 -1
  16. package/src/diff.js +113 -6
  17. package/src/diff.js.map +1 -1
  18. package/src/drift.d.ts +8 -11
  19. package/src/drift.d.ts.map +1 -1
  20. package/src/drift.js +1 -298
  21. package/src/drift.js.map +1 -1
  22. package/src/form.d.ts.map +1 -1
  23. package/src/form.js +43 -2
  24. package/src/form.js.map +1 -1
  25. package/src/generateSql.d.ts.map +1 -1
  26. package/src/generateSql.js +54 -6
  27. package/src/generateSql.js.map +1 -1
  28. package/src/index.d.ts +3 -3
  29. package/src/index.d.ts.map +1 -1
  30. package/src/index.js +2 -4
  31. package/src/index.js.map +1 -1
  32. package/src/introspect.d.ts +12 -0
  33. package/src/introspect.d.ts.map +1 -1
  34. package/src/introspect.js +190 -35
  35. package/src/introspect.js.map +1 -1
  36. package/src/mapColumnType.d.ts.map +1 -1
  37. package/src/mapColumnType.js +6 -0
  38. package/src/mapColumnType.js.map +1 -1
  39. package/src/mapSnowflakeType.d.ts +9 -0
  40. package/src/mapSnowflakeType.d.ts.map +1 -0
  41. package/src/mapSnowflakeType.js +19 -0
  42. package/src/mapSnowflakeType.js.map +1 -0
  43. package/src/migrate.d.ts +11 -9
  44. package/src/migrate.d.ts.map +1 -1
  45. package/src/migrate.js +28 -345
  46. package/src/migrate.js.map +1 -1
  47. package/src/seed.d.ts.map +1 -1
  48. package/src/seed.js +6 -1
  49. package/src/seed.js.map +1 -1
package/src/drift.js CHANGED
@@ -1,299 +1,2 @@
1
- import { Client } from 'pg';
2
- // Normalize postgres type names for comparison
3
- function normalizeType(pgType) {
4
- const lower = pgType.toLowerCase();
5
- if (lower === 'bigint' || lower === 'int8')
6
- return 'bigint';
7
- if (lower === 'integer' || lower === 'int' || lower === 'int4')
8
- return 'integer';
9
- if (lower === 'smallint' || lower === 'int2')
10
- return 'smallint';
11
- if (lower === 'boolean' || lower === 'bool')
12
- return 'boolean';
13
- if (lower.startsWith('character varying') || lower === 'varchar')
14
- return 'text';
15
- if (lower.startsWith('character(') ||
16
- lower.startsWith('character') ||
17
- lower === 'bpchar' ||
18
- lower === 'char')
19
- return 'text';
20
- if (lower === 'text')
21
- return 'text';
22
- if (lower === 'double precision' || lower === 'float8')
23
- return 'double precision';
24
- if (lower === 'timestamp with time zone' || lower === 'timestamptz')
25
- return 'timestamptz';
26
- if (lower === 'timestamp without time zone' || lower === 'timestamp')
27
- return 'timestamp';
28
- if (lower === 'jsonb')
29
- return 'jsonb';
30
- if (lower === 'numeric' || lower === 'decimal')
31
- return 'numeric';
32
- if (lower === 'array' || lower.endsWith('[]'))
33
- return 'array';
34
- // user-defined types in Postgres (custom enums) are stored as text with CHECK
35
- if (lower === 'user-defined')
36
- return 'text';
37
- return lower;
38
- }
39
- // Get expected type from schema
40
- function getExpectedType(columnSchema) {
41
- const t = columnSchema.type;
42
- if (t === 'bigserial')
43
- return 'bigint'; // bigserial is stored as bigint
44
- if (t === 'serial')
45
- return 'integer'; // serial is stored as integer
46
- if (t === 'enum')
47
- return 'text'; // enums are stored as TEXT with CHECK constraint
48
- if (t === 'char' || t === 'varchar')
49
- return 'text'; // char/varchar normalize to text
50
- return normalizeType(t);
51
- }
52
- export async function detectDrift(connectionString, config) {
53
- const client = new Client({
54
- connectionString,
55
- ssl: true,
56
- connectionTimeoutMillis: 30000,
57
- });
58
- const drifts = [];
59
- try {
60
- await client.connect();
61
- // Get all tables from database
62
- const tablesResult = await client.query(`
63
- SELECT table_name
64
- FROM information_schema.tables
65
- WHERE table_schema = 'public'
66
- AND table_type = 'BASE TABLE'
67
- `);
68
- const actualTables = new Set(tablesResult.rows.map((r) => r.table_name));
69
- const expectedTables = Object.keys(config.tables);
70
- // Check for missing tables
71
- for (const tableName of expectedTables) {
72
- if (!actualTables.has(tableName)) {
73
- drifts.push({
74
- type: 'missing_table',
75
- table: tableName,
76
- details: `Table "${tableName}" exists in schema but not in database`,
77
- });
78
- }
79
- }
80
- // Check for extra tables (not in schema)
81
- for (const tableName of actualTables) {
82
- if (!expectedTables.includes(tableName)) {
83
- drifts.push({
84
- type: 'extra_table',
85
- table: tableName,
86
- details: `Table "${tableName}" exists in database but not in schema`,
87
- });
88
- }
89
- }
90
- // For each expected table that exists, check columns
91
- for (const [tableName, tableModel] of Object.entries(config.tables)) {
92
- if (!actualTables.has(tableName))
93
- continue;
94
- const schema = tableModel.schema;
95
- if (!('properties' in schema))
96
- continue;
97
- // Get actual columns
98
- const columnsResult = await client.query(`
99
- SELECT column_name, data_type, is_nullable, column_default, character_maximum_length
100
- FROM information_schema.columns
101
- WHERE table_schema = 'public' AND table_name = $1
102
- `, [tableName]);
103
- const actualColumns = new Map(columnsResult.rows.map((r) => [r.column_name, r]));
104
- const expectedColumns = Object.entries(schema.properties);
105
- const required = 'required' in schema ? schema.required : [];
106
- // Check for missing columns
107
- for (const [columnName, columnSchema] of expectedColumns) {
108
- const actualCol = actualColumns.get(columnName);
109
- if (!actualCol) {
110
- drifts.push({
111
- type: 'missing_column',
112
- table: tableName,
113
- column: columnName,
114
- details: `Column "${columnName}" missing from table`,
115
- });
116
- continue;
117
- }
118
- // Check type
119
- const expectedType = getExpectedType(columnSchema);
120
- const actualType = normalizeType(actualCol.data_type);
121
- if (expectedType !== actualType) {
122
- drifts.push({
123
- type: 'column_type_mismatch',
124
- table: tableName,
125
- column: columnName,
126
- details: `Column "${columnName}" type mismatch`,
127
- expected: expectedType,
128
- actual: actualType,
129
- });
130
- }
131
- // Check nullable
132
- const expectedNullable = !required.includes(columnName);
133
- const actualNullable = actualCol.is_nullable === 'YES';
134
- if (expectedNullable !== actualNullable) {
135
- drifts.push({
136
- type: 'nullable_mismatch',
137
- table: tableName,
138
- column: columnName,
139
- details: `Column "${columnName}" nullable mismatch`,
140
- expected: expectedNullable ? 'nullable' : 'not null',
141
- actual: actualNullable ? 'nullable' : 'not null',
142
- });
143
- }
144
- actualColumns.delete(columnName);
145
- }
146
- // Extra columns (in DB but not schema)
147
- for (const [columnName] of actualColumns) {
148
- drifts.push({
149
- type: 'extra_column',
150
- table: tableName,
151
- column: columnName,
152
- details: `Column "${columnName}" exists in database but not in schema`,
153
- });
154
- }
155
- // Check CHECK constraints for enum columns
156
- const checkConstraintsResult = await client.query(`
157
- SELECT
158
- con.conname AS constraint_name,
159
- att.attname AS column_name,
160
- pg_get_constraintdef(con.oid) AS check_clause
161
- FROM pg_constraint con
162
- JOIN pg_attribute att ON att.attnum = ANY(con.conkey) AND att.attrelid = con.conrelid
163
- WHERE con.conrelid = $1::regclass
164
- AND con.contype = 'c'
165
- `, [`"${tableName}"`]);
166
- const actualCheckConstraints = new Map();
167
- for (const row of checkConstraintsResult.rows) {
168
- if (row.check_clause.includes(' IN (') ||
169
- row.check_clause.includes('ANY (ARRAY[') ||
170
- row.check_clause.includes('ANY(ARRAY[')) {
171
- actualCheckConstraints.set(row.column_name, row);
172
- }
173
- }
174
- // Compare enum columns with their CHECK constraints
175
- for (const [columnName, columnSchema] of expectedColumns) {
176
- const colSchema = columnSchema;
177
- if (colSchema.type !== 'enum' || !colSchema.enum)
178
- continue;
179
- const actualConstraint = actualCheckConstraints.get(columnName);
180
- if (!actualConstraint) {
181
- drifts.push({
182
- type: 'missing_constraint',
183
- table: tableName,
184
- column: columnName,
185
- details: `Missing CHECK constraint for enum column "${columnName}"`,
186
- expected: colSchema.enum.join(', '),
187
- });
188
- continue;
189
- }
190
- const checkClause = actualConstraint.check_clause;
191
- const actualValues = [];
192
- const valueMatches = checkClause.matchAll(/'([^']+)'/g);
193
- for (const match of valueMatches) {
194
- if (!match[1].includes('::')) {
195
- actualValues.push(match[1]);
196
- }
197
- }
198
- const expectedSet = new Set(colSchema.enum);
199
- const actualSet = new Set(actualValues);
200
- const missing = colSchema.enum.filter((v) => !actualSet.has(v));
201
- const extra = actualValues.filter((v) => !expectedSet.has(v));
202
- if (missing.length > 0 || extra.length > 0) {
203
- drifts.push({
204
- type: 'check_constraint_mismatch',
205
- table: tableName,
206
- column: columnName,
207
- constraintName: actualConstraint.constraint_name,
208
- details: `CHECK constraint values mismatch for "${columnName}"`,
209
- expected: colSchema.enum.join(', '),
210
- actual: actualValues.join(', '),
211
- });
212
- }
213
- }
214
- // Check for missing stock documents
215
- const docs = tableModel.docs;
216
- if (docs && Array.isArray(docs) && docs.length > 0) {
217
- const primaryKey = tableModel.primaryKey || 'id';
218
- for (const doc of docs) {
219
- if (doc &&
220
- typeof doc === 'object' &&
221
- !Array.isArray(doc) &&
222
- 'id' in doc) {
223
- const docRecord = doc;
224
- const docId = docRecord['id'];
225
- const checkResult = await client.query(`SELECT 1 FROM "${tableName}" WHERE "${String(primaryKey)}" = $1 LIMIT 1`, [docId]);
226
- if (checkResult.rows.length === 0) {
227
- const docTitle = 'title' in doc
228
- ? docRecord['title']
229
- : 'name' in doc
230
- ? docRecord['name']
231
- : 'slug' in doc
232
- ? docRecord['slug']
233
- : undefined;
234
- drifts.push({
235
- type: 'missing_stock_doc',
236
- table: tableName,
237
- docId: typeof docId === 'bigint'
238
- ? docId.toString()
239
- : docId,
240
- details: `Stock document ${String(primaryKey)}=${docId}${docTitle ? ` (${docTitle})` : ''} missing from table`,
241
- });
242
- }
243
- }
244
- }
245
- }
246
- // Check indexes
247
- const indexesResult = await client.query(`
248
- SELECT indexname, indexdef
249
- FROM pg_indexes
250
- WHERE schemaname = 'public' AND tablename = $1
251
- `, [tableName]);
252
- const actualIndexes = new Map(indexesResult.rows.map((r) => [r.indexname, r.indexdef]));
253
- // Expected indexes from model
254
- const expectedIndexColumns = tableModel.indexes || [];
255
- for (const indexCol of expectedIndexColumns) {
256
- let cols;
257
- if (typeof indexCol === 'string') {
258
- cols = [indexCol];
259
- }
260
- else if (Array.isArray(indexCol)) {
261
- cols = indexCol;
262
- }
263
- else if (typeof indexCol === 'object' && indexCol !== null) {
264
- const objIndex = indexCol;
265
- cols = Array.isArray(objIndex.columns)
266
- ? objIndex.columns
267
- : [objIndex.columns];
268
- }
269
- else {
270
- continue;
271
- }
272
- let found = false;
273
- for (const [, indexDef] of actualIndexes) {
274
- const defLower = indexDef.toLowerCase();
275
- if (cols.every((c) => {
276
- const colLower = c.toLowerCase().split(' ')[0];
277
- return (defLower.includes(`"${colLower}"`) ||
278
- defLower.includes(colLower));
279
- })) {
280
- found = true;
281
- break;
282
- }
283
- }
284
- if (!found) {
285
- drifts.push({
286
- type: 'missing_index',
287
- table: tableName,
288
- details: `Missing index on column(s): ${cols.join(', ')}`,
289
- });
290
- }
291
- }
292
- }
293
- return drifts;
294
- }
295
- finally {
296
- await client.end();
297
- }
298
- }
1
+ export {};
299
2
  //# sourceMappingURL=drift.js.map
package/src/drift.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/drift.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"drift.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/drift.ts"],"names":[],"mappings":""}
package/src/form.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/form.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAQtE"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/form.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA0C9C,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAStE"}
package/src/form.js CHANGED
@@ -1,8 +1,49 @@
1
1
  import { setupTable } from './setupTable';
2
+ /**
3
+ * Order tables so a table's foreign-key targets are created before it (FKs are emitted inline
4
+ * by buildTableCreationCommand). DFS topological sort; cycles are broken gracefully by emitting
5
+ * the remaining tables in their original order (true FK cycles would need deferred ALTERs).
6
+ */
7
+ function orderTablesByDependencies(config) {
8
+ const names = Object.keys(config.tables);
9
+ const deps = new Map();
10
+ for (const name of names) {
11
+ // eslint-disable-next-line security/detect-object-injection -- name is from Object.keys
12
+ const model = config.tables[name];
13
+ const refs = new Set();
14
+ for (const ref of Object.values(model?.foreignKeys ?? {})) {
15
+ if (ref && typeof ref === 'object') {
16
+ for (const refTable of Object.keys(ref)) {
17
+ // eslint-disable-next-line security/detect-object-injection -- key from FK refs
18
+ if (refTable !== name && config.tables[refTable])
19
+ refs.add(refTable);
20
+ }
21
+ }
22
+ }
23
+ deps.set(name, refs);
24
+ }
25
+ const ordered = [];
26
+ const visited = new Set();
27
+ const inProgress = new Set();
28
+ const visit = (name) => {
29
+ if (visited.has(name) || inProgress.has(name))
30
+ return;
31
+ inProgress.add(name);
32
+ for (const dep of deps.get(name) ?? [])
33
+ visit(dep);
34
+ inProgress.delete(name);
35
+ visited.add(name);
36
+ ordered.push(name);
37
+ };
38
+ for (const name of names)
39
+ visit(name);
40
+ return ordered;
41
+ }
2
42
  export function generateCreateTablesSql(config) {
3
43
  const outputs = [];
4
- for (const [tableName, table] of Object.entries(config.tables)) {
5
- outputs.push(setupTable(tableName, table));
44
+ for (const tableName of orderTablesByDependencies(config)) {
45
+ // eslint-disable-next-line security/detect-object-injection -- tableName from config keys
46
+ outputs.push(setupTable(tableName, config.tables[tableName]));
6
47
  }
7
48
  return outputs.join('\n\n');
8
49
  }
package/src/form.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,MAAM,UAAU,uBAAuB,CAAC,MAAsB;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C;;;;GAIG;AACH,SAAS,yBAAyB,CAAC,MAAsB;IACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,wFAAwF;QACxF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAE/B,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3D,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACpC,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzC,gFAAgF;oBAChF,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;wBAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACtE,CAAC;YACF,CAAC;QACF,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAQ,EAAE;QACpC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO;QACtD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QACnD,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAAsB;IAC7D,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,SAAS,IAAI,yBAAyB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,0FAA0F;QAC1F,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generateSql.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/generateSql.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAyL5C;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,EAAE,CAkI1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,aAAa,EAAE,EACpB,mBAAmB,UAAQ,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAoDvC"}
1
+ {"version":3,"file":"generateSql.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/generateSql.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAyL5C;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,aAAa,GAAG,MAAM,EAAE,CAiL1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,aAAa,EAAE,EACpB,mBAAmB,UAAQ,GACzB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CA0DvC"}
@@ -197,6 +197,13 @@ export function operationToSql(op) {
197
197
  else {
198
198
  toType = op.toType.toUpperCase();
199
199
  castType = op.toType;
200
+ // Preserve length for fixed/variable char types — `CHAR` alone is char(1),
201
+ // which silently truncates (e.g. a char(6) hex color). Emit CHAR(6)/VARCHAR(n).
202
+ if (op.toLength != null &&
203
+ (op.toType === 'char' || op.toType === 'varchar')) {
204
+ toType = `${toType}(${op.toLength})`;
205
+ castType = `${castType}(${op.toLength})`;
206
+ }
200
207
  }
201
208
  return [
202
209
  `-- WARNING: Type change from ${op.fromType} to ${op.toType} - verify data compatibility`,
@@ -228,6 +235,15 @@ export function operationToSql(op) {
228
235
  }
229
236
  case 'update_check_constraint': {
230
237
  const constraintName = `${op.tableName}_${op.columnName}_check`;
238
+ // Never emit `CHECK (... IN ())` — an empty value set is invalid SQL and would
239
+ // reject every row. If the model has no enumerated values, drop the stale CHECK
240
+ // rather than generate a constraint nothing can satisfy.
241
+ if (op.newValues.length === 0) {
242
+ return [
243
+ `-- Drop CHECK constraint for "${op.columnName}" (model has no enumerated values): [${op.oldValues.join(', ')}] -> []`,
244
+ `ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${constraintName}";`,
245
+ ];
246
+ }
231
247
  const newValues = op.newValues.map((v) => `'${v}'`).join(', ');
232
248
  return [
233
249
  `-- Update CHECK constraint for "${op.columnName}": [${op.oldValues.join(', ')}] -> [${op.newValues.join(', ')}]`,
@@ -236,11 +252,21 @@ export function operationToSql(op) {
236
252
  ];
237
253
  }
238
254
  case 'add_index': {
239
- const idxCols = op.index.columns.map((c) => `"${c}"`).join(', ');
255
+ const colSpecs = op.index.fullColumns ?? op.index.columns;
256
+ const idxCols = colSpecs
257
+ .map((c) => {
258
+ const parts = c.split(' ');
259
+ const colName = parts[0];
260
+ const modifiers = parts.slice(1).join(' ');
261
+ return modifiers ? `"${colName}" ${modifiers}` : `"${colName}"`;
262
+ })
263
+ .join(', ');
240
264
  const unique = op.index.unique ? 'UNIQUE ' : '';
241
- return [
242
- `CREATE ${unique}INDEX IF NOT EXISTS "${op.index.name}" ON "${op.tableName}" (${idxCols});`,
243
- ];
265
+ let sql = `CREATE ${unique}INDEX IF NOT EXISTS "${op.index.name}" ON "${op.tableName}" (${idxCols})`;
266
+ if (op.index.where) {
267
+ sql += ` WHERE ${op.index.where}`;
268
+ }
269
+ return [`${sql};`];
244
270
  }
245
271
  case 'drop_index':
246
272
  return [`DROP INDEX IF EXISTS "${op.indexName}";`];
@@ -252,7 +278,9 @@ export function operationToSql(op) {
252
278
  ];
253
279
  }
254
280
  case 'drop_unique_constraint': {
255
- const constraintName = `${op.tableName}_${op.columns.join('_')}_unique`;
281
+ // Prefer the real DB constraint name (e.g. "<table>_<col>_key"); the convention
282
+ // "<table>_<col>_unique" is only a fallback and often won't match the real name.
283
+ const constraintName = op.constraintName ?? `${op.tableName}_${op.columns.join('_')}_unique`;
256
284
  return [
257
285
  `ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${constraintName}";`,
258
286
  ];
@@ -267,6 +295,20 @@ export function operationToSql(op) {
267
295
  return [
268
296
  `ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${op.constraintName}";`,
269
297
  ];
298
+ case 'drop_sequence':
299
+ return [
300
+ `-- Orphaned sequence from bigserial → snowflake migration on "${op.tableName}"."${op.columnName}"`,
301
+ `DROP SEQUENCE IF EXISTS "${op.sequenceName}";`,
302
+ ];
303
+ case 'create_sequence':
304
+ // The SET DEFAULT itself is emitted by the paired alter_column_default
305
+ // op that follows. Here we only ensure the sequence exists (and is
306
+ // owned by the column so it drops with it). IF NOT EXISTS makes this a
307
+ // no-op for normal serial columns whose sequence already exists.
308
+ return [
309
+ `CREATE SEQUENCE IF NOT EXISTS "${op.sequenceName}";`,
310
+ `ALTER SEQUENCE "${op.sequenceName}" OWNED BY "${op.tableName}"."${op.columnName}";`,
311
+ ];
270
312
  }
271
313
  }
272
314
  /**
@@ -282,7 +324,8 @@ export function generateMigrationSql(ops, _includeDestructive = false) {
282
324
  op.type === 'drop_column' ||
283
325
  op.type === 'drop_index' ||
284
326
  op.type === 'drop_unique_constraint' ||
285
- op.type === 'drop_foreign_key';
327
+ op.type === 'drop_foreign_key' ||
328
+ op.type === 'drop_sequence';
286
329
  if (isDestructive) {
287
330
  destructiveLines.push(...sql, '');
288
331
  }
@@ -297,6 +340,10 @@ export function generateMigrationSql(ops, _includeDestructive = false) {
297
340
  `-- Generated: ${timestamp}`,
298
341
  '',
299
342
  'BEGIN;',
343
+ // Make the migration self-sufficient regardless of the applying
344
+ // connection's search_path (e.g. an empty one — LYK-1213). The engine is
345
+ // public-scoped, so pin it for the transaction.
346
+ 'SET LOCAL search_path TO public;',
300
347
  '',
301
348
  ...safeLines,
302
349
  'COMMIT;',
@@ -309,6 +356,7 @@ export function generateMigrationSql(ops, _includeDestructive = false) {
309
356
  '-- WARNING: These operations will DELETE data!',
310
357
  '',
311
358
  'BEGIN;',
359
+ 'SET LOCAL search_path TO public;',
312
360
  '',
313
361
  ...destructiveLines,
314
362
  'COMMIT;',
@@ -1 +1 @@
1
- {"version":3,"file":"generateSql.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/generateSql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateSql.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/generateSql.ts"],"names":[],"mappings":"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"}
package/src/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- export { detectDrift } from './drift';
2
- export type { Drift, DataformConfig } from './drift';
3
- export { driftToSql, generateMigration } from './migrate';
1
+ export type { DataformConfig } from './drift';
2
+ export { generateMigration } from './migrate';
3
+ export type { MigrationResult } from './migrate';
4
4
  export { generateCreateTablesSql } from './form';
5
5
  export { generateSeedSql } from './seed';
6
6
  export { introspectTable, introspectDatabase, modelToIntrospected, normalizeDbType, } from './introspect';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAGrD,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EACX,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAGjD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,YAAY,EACX,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,GACjB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
package/src/index.js CHANGED
@@ -1,7 +1,5 @@
1
- // Core drift detection
2
- export { detectDrift } from './drift';
3
- // Migration generation (drift-based)
4
- export { driftToSql, generateMigration } from './migrate';
1
+ // Migration generation — single engine: introspect → diffDatabase → generateMigrationSql
2
+ export { generateMigration } from './migrate';
5
3
  // Table creation SQL
6
4
  export { generateCreateTablesSql } from './form';
7
5
  // Seed data generation
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAGtC,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE1D,qBAAqB;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAEjD,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,gBAAgB;AAChB,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GACf,MAAM,cAAc,CAAC;AAQtB,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAGvE,sCAAsC;AACtC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErE,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/index.ts"],"names":[],"mappings":"AAGA,yFAAyF;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAG9C,qBAAqB;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAEjD,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzC,gBAAgB;AAChB,OAAO,EACN,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GACf,MAAM,cAAc,CAAC;AAQtB,cAAc;AACd,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAGvE,sCAAsC;AACtC,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErE,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -18,6 +18,9 @@ export interface IntrospectedIndex {
18
18
  columns: string[];
19
19
  unique: boolean;
20
20
  definition: string;
21
+ where?: string;
22
+ /** Column specs with modifiers (e.g. "id DESC"), for SQL generation */
23
+ fullColumns?: string[];
21
24
  }
22
25
  export interface IntrospectedForeignKey {
23
26
  column: string;
@@ -31,6 +34,15 @@ export interface IntrospectedTable {
31
34
  indexes: IntrospectedIndex[];
32
35
  primaryKey: string[];
33
36
  uniqueConstraints: string[][];
37
+ /**
38
+ * DB-side unique constraints with their real Postgres names (undefined for the code/model
39
+ * side, which has no real names). Used so drop_unique_constraint can target the actual
40
+ * constraint (e.g. "<table>_<col>_key") instead of a reconstructed "<table>_<col>_unique".
41
+ */
42
+ uniqueConstraintNames?: Array<{
43
+ name: string;
44
+ columns: string[];
45
+ }>;
34
46
  foreignKeys: IntrospectedForeignKey[];
35
47
  }
36
48
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/introspect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,KAAK,EACX,kBAAkB,EAClB,mBAAmB,EAEnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACzC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,EAAE,CAAC;IAC9B,WAAW,EAAE,sBAAsB,EAAE,CAAC;CACtC;AA4DD;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAyDhD;AA6CD;;GAEG;AACH,wBAAsB,eAAe,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC,CA0K5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAgBzC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GAC5C,iBAAiB,CAiJnB"}
1
+ {"version":3,"file":"introspect.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/introspect.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,KAAK,EACX,kBAAkB,EAClB,mBAAmB,EAEnB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACzC,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,EAAE,CAAC;IAC9B;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACnE,WAAW,EAAE,sBAAsB,EAAE,CAAC;CACtC;AA4DD;;GAEG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACb;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAyDhD;AAuFD;;GAEG;AACH,wBAAsB,eAAe,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,iBAAiB,CAAC,CAsM5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAgBzC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,kBAAkB,CAAC,mBAAmB,CAAC,GAC5C,iBAAiB,CAwPnB"}