@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/src/drift.js
CHANGED
|
@@ -1,299 +1,2 @@
|
|
|
1
|
-
|
|
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":"
|
|
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;
|
|
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
|
|
5
|
-
|
|
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,
|
|
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"}
|
package/src/generateSql.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/src/generateSql.js
CHANGED
|
@@ -47,9 +47,22 @@ function columnTypeToSql(col) {
|
|
|
47
47
|
case 'jsonb':
|
|
48
48
|
sql = 'JSONB';
|
|
49
49
|
break;
|
|
50
|
-
case 'array':
|
|
51
|
-
|
|
50
|
+
case 'array': {
|
|
51
|
+
const itemTypeMap = {
|
|
52
|
+
text: 'TEXT',
|
|
53
|
+
bigint: 'BIGINT',
|
|
54
|
+
integer: 'INTEGER',
|
|
55
|
+
smallint: 'SMALLINT',
|
|
56
|
+
boolean: 'BOOLEAN',
|
|
57
|
+
'double precision': 'DOUBLE PRECISION',
|
|
58
|
+
real: 'REAL',
|
|
59
|
+
};
|
|
60
|
+
const pgItemType = col.arrayItemType
|
|
61
|
+
? (itemTypeMap[col.arrayItemType] ?? col.arrayItemType.toUpperCase())
|
|
62
|
+
: null;
|
|
63
|
+
sql = pgItemType ? `${pgItemType}[]` : 'JSONB';
|
|
52
64
|
break;
|
|
65
|
+
}
|
|
53
66
|
case 'json':
|
|
54
67
|
sql = 'JSON';
|
|
55
68
|
break;
|
|
@@ -184,6 +197,13 @@ export function operationToSql(op) {
|
|
|
184
197
|
else {
|
|
185
198
|
toType = op.toType.toUpperCase();
|
|
186
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
|
+
}
|
|
187
207
|
}
|
|
188
208
|
return [
|
|
189
209
|
`-- WARNING: Type change from ${op.fromType} to ${op.toType} - verify data compatibility`,
|
|
@@ -215,6 +235,15 @@ export function operationToSql(op) {
|
|
|
215
235
|
}
|
|
216
236
|
case 'update_check_constraint': {
|
|
217
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
|
+
}
|
|
218
247
|
const newValues = op.newValues.map((v) => `'${v}'`).join(', ');
|
|
219
248
|
return [
|
|
220
249
|
`-- Update CHECK constraint for "${op.columnName}": [${op.oldValues.join(', ')}] -> [${op.newValues.join(', ')}]`,
|
|
@@ -223,11 +252,21 @@ export function operationToSql(op) {
|
|
|
223
252
|
];
|
|
224
253
|
}
|
|
225
254
|
case 'add_index': {
|
|
226
|
-
const
|
|
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(', ');
|
|
227
264
|
const unique = op.index.unique ? 'UNIQUE ' : '';
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
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};`];
|
|
231
270
|
}
|
|
232
271
|
case 'drop_index':
|
|
233
272
|
return [`DROP INDEX IF EXISTS "${op.indexName}";`];
|
|
@@ -239,7 +278,9 @@ export function operationToSql(op) {
|
|
|
239
278
|
];
|
|
240
279
|
}
|
|
241
280
|
case 'drop_unique_constraint': {
|
|
242
|
-
|
|
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`;
|
|
243
284
|
return [
|
|
244
285
|
`ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${constraintName}";`,
|
|
245
286
|
];
|
|
@@ -254,6 +295,20 @@ export function operationToSql(op) {
|
|
|
254
295
|
return [
|
|
255
296
|
`ALTER TABLE "${op.tableName}" DROP CONSTRAINT IF EXISTS "${op.constraintName}";`,
|
|
256
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
|
+
];
|
|
257
312
|
}
|
|
258
313
|
}
|
|
259
314
|
/**
|
|
@@ -269,7 +324,8 @@ export function generateMigrationSql(ops, _includeDestructive = false) {
|
|
|
269
324
|
op.type === 'drop_column' ||
|
|
270
325
|
op.type === 'drop_index' ||
|
|
271
326
|
op.type === 'drop_unique_constraint' ||
|
|
272
|
-
op.type === 'drop_foreign_key'
|
|
327
|
+
op.type === 'drop_foreign_key' ||
|
|
328
|
+
op.type === 'drop_sequence';
|
|
273
329
|
if (isDestructive) {
|
|
274
330
|
destructiveLines.push(...sql, '');
|
|
275
331
|
}
|
|
@@ -284,6 +340,10 @@ export function generateMigrationSql(ops, _includeDestructive = false) {
|
|
|
284
340
|
`-- Generated: ${timestamp}`,
|
|
285
341
|
'',
|
|
286
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;',
|
|
287
347
|
'',
|
|
288
348
|
...safeLines,
|
|
289
349
|
'COMMIT;',
|
|
@@ -296,6 +356,7 @@ export function generateMigrationSql(ops, _includeDestructive = false) {
|
|
|
296
356
|
'-- WARNING: These operations will DELETE data!',
|
|
297
357
|
'',
|
|
298
358
|
'BEGIN;',
|
|
359
|
+
'SET LOCAL search_path TO public;',
|
|
299
360
|
'',
|
|
300
361
|
...destructiveLines,
|
|
301
362
|
'COMMIT;',
|
package/src/generateSql.js.map
CHANGED
|
@@ -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":"AAAA;;GAEG;AAKH;;GAEG;AACH,SAAS,eAAe,CAAC,GAAuB;IAC/C,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ;YACZ,GAAG,GAAG,QAAQ,CAAC;YACf,MAAM;QACP,KAAK,SAAS;YACb,GAAG,GAAG,SAAS,CAAC;YAChB,MAAM;QACP,KAAK,UAAU;YACd,GAAG,GAAG,UAAU,CAAC;YACjB,MAAM;QACP,KAAK,kBAAkB;YACtB,GAAG,GAAG,kBAAkB,CAAC;YACzB,MAAM;QACP,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACZ,GAAG,GAAG,MAAM,CAAC;YACb,MAAM;QACP,KAAK,SAAS;YACb,GAAG,GAAG,SAAS,CAAC;YAChB,MAAM;QACP,KAAK,MAAM;YACV,GAAG,GAAG,MAAM,CAAC;YACb,MAAM;QACP,KAAK,SAAS;YACb,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3D,MAAM;QACP,KAAK,MAAM;YACV,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3D,MAAM;QACP,KAAK,aAAa;YACjB,GAAG,GAAG,aAAa,CAAC;YACpB,MAAM;QACP,KAAK,WAAW;YACf,GAAG,GAAG,WAAW,CAAC;YAClB,MAAM;QACP,KAAK,MAAM;YACV,GAAG,GAAG,MAAM,CAAC;YACb,MAAM;QACP,KAAK,OAAO;YACX,GAAG,GAAG,OAAO,CAAC;YACd,MAAM;QACP,KAAK,OAAO,CAAC,CAAC,CAAC;YACd,MAAM,WAAW,GAA2B;gBAC3C,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,UAAU;gBACpB,OAAO,EAAE,SAAS;gBAClB,kBAAkB,EAAE,kBAAkB;gBACtC,IAAI,EAAE,MAAM;aACZ,CAAC;YACF,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa;gBACnC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;gBACrE,CAAC,CAAC,IAAI,CAAC;YACR,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/C,MAAM;QACP,CAAC;QACD,KAAK,MAAM;YACV,GAAG,GAAG,MAAM,CAAC;YACb,MAAM;QACP;YACC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAuB;IACnD,MAAM,KAAK,GAAa,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAE1C,OAAO;IACP,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAEjC,6BAA6B;IAC7B,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,IAAI,SAAS,MAAM,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,UAAU;IACV,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,WAAW;IACX,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAwB;IAC/C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,qBAAqB;IACrB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC9D,mBAAmB,CAAC,GAAG,CAAC,CACxB,CAAC;IAEF,cAAc;IACd,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,gBAAgB,MAAM,GAAG,CAAC,CAAC;IACzC,CAAC;IAED,qBAAqB;IACrB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,WAAW,UAAU,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,gCAAgC;IAChC,MAAM,eAAe,GAAG,+BAA+B,KAAK,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC9F,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEjC,kCAAkC;IAClC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACzC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,UAAU,CAAC,IAAI,CACd,UAAU,MAAM,wBAAwB,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC,IAAI,MAAM,OAAO,IAAI,CACpF,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,SAAiB,EAAE,GAAuB;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,0CAA0C;IAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CACT,gBAAgB,SAAS,+BAA+B,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAC3J,CAAC;QACF,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAExC,4DAA4D;IAC5D,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC3C,wBAAwB;QACxB,MAAM,WAAW,GAAG,EAAE,GAAG,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC/C,KAAK,CAAC,IAAI,CACT,gBAAgB,SAAS,8BAA8B,mBAAmB,CAAC,WAAW,CAAC,GAAG,CAC1F,CAAC;QACF,KAAK,CAAC,IAAI,CACT,sBAAsB,GAAG,CAAC,IAAI,mDAAmD,CACjF,CAAC;QACF,KAAK,CAAC,IAAI,CACT,cAAc,SAAS,UAAU,GAAG,CAAC,IAAI,8BAA8B,GAAG,CAAC,IAAI,YAAY,CAC3F,CAAC;QACF,KAAK,CAAC,IAAI,CACT,gBAAgB,SAAS,mBAAmB,GAAG,CAAC,IAAI,iBAAiB,CACrE,CAAC;IACH,CAAC;SAAM,CAAC;QACP,KAAK,CAAC,IAAI,CACT,gBAAgB,SAAS,8BAA8B,MAAM,GAAG,CAChE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,EAAiB;IAC/C,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,cAAc;YAClB,OAAO,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAEjC,KAAK,YAAY;YAChB,OAAO,CAAC,yBAAyB,EAAE,CAAC,SAAS,YAAY,CAAC,CAAC;QAE5D,KAAK,YAAY;YAChB,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAE9C,KAAK,aAAa;YACjB,OAAO;gBACN,gBAAgB,EAAE,CAAC,SAAS,4BAA4B,EAAE,CAAC,UAAU,IAAI;aACzE,CAAC;QAEH,KAAK,mBAAmB,CAAC,CAAC,CAAC;YAC1B,IAAI,MAAc,CAAC;YACnB,IAAI,QAAgB,CAAC;YAErB,IAAI,EAAE,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAC3B,6EAA6E;gBAC7E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;oBAChC,QAAQ;oBACR,SAAS;oBACT,UAAU;oBACV,kBAAkB;oBAClB,MAAM;oBACN,MAAM;oBACN,SAAS;oBACT,MAAM;oBACN,SAAS;oBACT,aAAa;oBACb,WAAW;oBACX,MAAM;iBACN,CAAC,CAAC;gBAEH,IAAI,EAAE,CAAC,eAAe,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;oBACpE,mCAAmC;oBACnC,MAAM,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;oBAChD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;oBACvB,QAAQ,GAAG,GAAG,EAAE,CAAC,eAAe,IAAI,CAAC;gBACtC,CAAC;qBAAM,CAAC;oBACP,2DAA2D;oBAC3D,MAAM,GAAG,OAAO,CAAC;oBACjB,QAAQ,GAAG,OAAO,CAAC;gBACpB,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBACjC,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC;gBACrB,2EAA2E;gBAC3E,gFAAgF;gBAChF,IACC,EAAE,CAAC,QAAQ,IAAI,IAAI;oBACnB,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,EAChD,CAAC;oBACF,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC;oBACrC,QAAQ,GAAG,GAAG,QAAQ,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC;gBAC1C,CAAC;YACF,CAAC;YAED,OAAO;gBACN,gCAAgC,EAAE,CAAC,QAAQ,OAAO,EAAE,CAAC,MAAM,8BAA8B;gBACzF,gBAAgB,EAAE,CAAC,SAAS,mBAAmB,EAAE,CAAC,UAAU,UAAU,MAAM,WAAW,EAAE,CAAC,UAAU,MAAM,QAAQ,GAAG;aACrH,CAAC;QACH,CAAC;QAED,KAAK,uBAAuB;YAC3B,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;gBACjB,OAAO;oBACN,gBAAgB,EAAE,CAAC,SAAS,mBAAmB,EAAE,CAAC,UAAU,kBAAkB;iBAC9E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,OAAO;oBACN,wDAAwD;oBACxD,gBAAgB,EAAE,CAAC,SAAS,mBAAmB,EAAE,CAAC,UAAU,iBAAiB;iBAC7E,CAAC;YACH,CAAC;QAEF,KAAK,sBAAsB;YAC1B,IAAI,EAAE,CAAC,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC9B,OAAO;oBACN,gBAAgB,EAAE,CAAC,SAAS,mBAAmB,EAAE,CAAC,UAAU,iBAAiB;iBAC7E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,OAAO;oBACN,gBAAgB,EAAE,CAAC,SAAS,mBAAmB,EAAE,CAAC,UAAU,iBAAiB,EAAE,CAAC,YAAY,GAAG;iBAC/F,CAAC;YACH,CAAC;QAEF,KAAK,yBAAyB,CAAC,CAAC,CAAC;YAChC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,UAAU,QAAQ,CAAC;YAChE,+EAA+E;YAC/E,gFAAgF;YAChF,yDAAyD;YACzD,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO;oBACN,iCAAiC,EAAE,CAAC,UAAU,wCAAwC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS;oBACtH,gBAAgB,EAAE,CAAC,SAAS,gCAAgC,cAAc,IAAI;iBAC9E,CAAC;YACH,CAAC;YACD,MAAM,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,OAAO;gBACN,mCAAmC,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;gBACjH,gBAAgB,EAAE,CAAC,SAAS,gCAAgC,cAAc,IAAI;gBAC9E,gBAAgB,EAAE,CAAC,SAAS,qBAAqB,cAAc,aAAa,EAAE,CAAC,UAAU,SAAS,SAAS,KAAK;aAChH,CAAC;QACH,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YAClB,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;YAC1D,MAAM,OAAO,GAAG,QAAQ;iBACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACV,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3C,OAAO,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,GAAG,CAAC;YACjE,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,GAAG,GAAG,UAAU,MAAM,wBAAwB,EAAE,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC,SAAS,MAAM,OAAO,GAAG,CAAC;YACrG,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACpB,GAAG,IAAI,UAAU,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACnC,CAAC;YACD,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,KAAK,YAAY;YAChB,OAAO,CAAC,yBAAyB,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC;QAEpD,KAAK,uBAAuB,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YACxE,OAAO;gBACN,gBAAgB,EAAE,CAAC,SAAS,qBAAqB,cAAc,aAAa,IAAI,IAAI;aACpF,CAAC;QACH,CAAC;QAED,KAAK,wBAAwB,CAAC,CAAC,CAAC;YAC/B,gFAAgF;YAChF,iFAAiF;YACjF,MAAM,cAAc,GACnB,EAAE,CAAC,cAAc,IAAI,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;YACvE,OAAO;gBACN,gBAAgB,EAAE,CAAC,SAAS,gCAAgC,cAAc,IAAI;aAC9E,CAAC;QACH,CAAC;QAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACxB,MAAM,MAAM,GACX,EAAE,CAAC,EAAE,CAAC,cAAc,IAAI,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC;YAChE,OAAO;gBACN,gBAAgB,EAAE,CAAC,SAAS,qBAAqB,MAAM,mBAAmB,EAAE,CAAC,EAAE,CAAC,MAAM,kBAAkB,EAAE,CAAC,EAAE,CAAC,eAAe,OAAO,EAAE,CAAC,EAAE,CAAC,gBAAgB,KAAK;aAC/J,CAAC;QACH,CAAC;QAED,KAAK,kBAAkB;YACtB,OAAO;gBACN,gBAAgB,EAAE,CAAC,SAAS,gCAAgC,EAAE,CAAC,cAAc,IAAI;aACjF,CAAC;QAEH,KAAK,eAAe;YACnB,OAAO;gBACN,iEAAiE,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,UAAU,GAAG;gBACnG,4BAA4B,EAAE,CAAC,YAAY,IAAI;aAC/C,CAAC;QAEH,KAAK,iBAAiB;YACrB,uEAAuE;YACvE,mEAAmE;YACnE,uEAAuE;YACvE,iEAAiE;YACjE,OAAO;gBACN,kCAAkC,EAAE,CAAC,YAAY,IAAI;gBACrD,mBAAmB,EAAE,CAAC,YAAY,eAAe,EAAE,CAAC,SAAS,MAAM,EAAE,CAAC,UAAU,IAAI;aACpF,CAAC;IACJ,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CACnC,GAAoB,EACpB,mBAAmB,GAAG,KAAK;IAE3B,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,gBAAgB,GAAa,EAAE,CAAC;IAEtC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAE/B,aAAa;QACb,MAAM,aAAa,GAClB,EAAE,CAAC,IAAI,KAAK,YAAY;YACxB,EAAE,CAAC,IAAI,KAAK,aAAa;YACzB,EAAE,CAAC,IAAI,KAAK,YAAY;YACxB,EAAE,CAAC,IAAI,KAAK,wBAAwB;YACpC,EAAE,CAAC,IAAI,KAAK,kBAAkB;YAC9B,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC;QAE7B,IAAI,aAAa,EAAE,CAAC;YACnB,gBAAgB,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QACnC,CAAC;aAAM,CAAC;YACP,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,MAAM,IAAI,GACT,SAAS,CAAC,MAAM,GAAG,CAAC;QACnB,CAAC,CAAC;YACA,uCAAuC;YACvC,iBAAiB,SAAS,EAAE;YAC5B,EAAE;YACF,QAAQ;YACR,gEAAgE;YAChE,yEAAyE;YACzE,gDAAgD;YAChD,kCAAkC;YAClC,EAAE;YACF,GAAG,SAAS;YACZ,SAAS;SACT,CAAC,IAAI,CAAC,IAAI,CAAC;QACb,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,WAAW,GAChB,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAC1B,CAAC,CAAC;YACA,8CAA8C;YAC9C,iBAAiB,SAAS,EAAE;YAC5B,gDAAgD;YAChD,EAAE;YACF,QAAQ;YACR,kCAAkC;YAClC,EAAE;YACF,GAAG,gBAAgB;YACnB,SAAS;SACT,CAAC,IAAI,CAAC,IAAI,CAAC;QACb,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AAC9B,CAAC"}
|
package/src/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export
|
|
3
|
-
export {
|
|
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';
|
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/lockstep-pg/src/index.ts"],"names":[],"mappings":"AACA,
|
|
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
|
-
//
|
|
2
|
-
export {
|
|
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":"
|
|
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"}
|
package/src/introspect.d.ts
CHANGED
|
@@ -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
|
/**
|