@fragno-dev/db 0.1.1 → 0.1.2
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/.turbo/turbo-build.log +61 -53
- package/CHANGELOG.md +12 -0
- package/dist/adapters/adapters.d.ts +11 -1
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +9 -2
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +21 -39
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-query.js +3 -2
- package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +8 -6
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
- package/dist/adapters/drizzle/generate.js +107 -34
- package/dist/adapters/drizzle/generate.js.map +1 -1
- package/dist/adapters/drizzle/shared.js +14 -1
- package/dist/adapters/drizzle/shared.js.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +2 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +25 -30
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/kysely/kysely-query-builder.js +48 -44
- package/dist/adapters/kysely/kysely-query-builder.js.map +1 -1
- package/dist/adapters/kysely/kysely-query-compiler.js +2 -2
- package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -1
- package/dist/adapters/kysely/kysely-query.js +3 -2
- package/dist/adapters/kysely/kysely-query.js.map +1 -1
- package/dist/adapters/kysely/kysely-shared.js +18 -0
- package/dist/adapters/kysely/kysely-shared.js.map +1 -0
- package/dist/adapters/kysely/kysely-uow-compiler.js +4 -3
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -1
- package/dist/adapters/kysely/migration/execute.js +15 -12
- package/dist/adapters/kysely/migration/execute.js.map +1 -1
- package/dist/migration-engine/auto-from-schema.js +2 -8
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/create.d.ts +1 -5
- package/dist/migration-engine/create.js +1 -1
- package/dist/migration-engine/create.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts +51 -0
- package/dist/migration-engine/generation-engine.d.ts.map +1 -0
- package/dist/migration-engine/generation-engine.js +165 -0
- package/dist/migration-engine/generation-engine.js.map +1 -0
- package/dist/migration-engine/shared.d.ts +5 -2
- package/dist/migration-engine/shared.d.ts.map +1 -1
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +0 -8
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +0 -32
- package/dist/mod.js.map +1 -1
- package/dist/query/condition-builder.js.map +1 -1
- package/dist/query/result-transform.js +2 -1
- package/dist/query/result-transform.js.map +1 -1
- package/dist/schema/create.d.ts +74 -16
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +76 -11
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/serialize.js.map +1 -1
- package/dist/shared/settings-schema.js +36 -0
- package/dist/shared/settings-schema.js.map +1 -0
- package/dist/util/import-generator.js.map +1 -1
- package/dist/util/parse.js.map +1 -1
- package/package.json +8 -2
- package/src/adapters/adapters.ts +10 -3
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +11 -7
- package/src/adapters/drizzle/drizzle-adapter.test.ts +77 -29
- package/src/adapters/drizzle/drizzle-adapter.ts +31 -78
- package/src/adapters/drizzle/drizzle-query.ts +4 -7
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +9 -3
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +12 -6
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +1 -1
- package/src/adapters/drizzle/drizzle-uow-executor.ts +1 -1
- package/src/adapters/drizzle/generate.test.ts +573 -150
- package/src/adapters/drizzle/generate.ts +187 -36
- package/src/adapters/drizzle/migrate-drizzle.test.ts +30 -6
- package/src/adapters/drizzle/shared.ts +31 -1
- package/src/adapters/drizzle/test-utils.ts +3 -1
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +25 -27
- package/src/adapters/kysely/kysely-adapter.ts +35 -58
- package/src/adapters/kysely/kysely-query-builder.ts +75 -44
- package/src/adapters/kysely/kysely-query-compiler.ts +3 -1
- package/src/adapters/kysely/kysely-query.ts +8 -2
- package/src/adapters/kysely/kysely-shared.ts +23 -0
- package/src/adapters/kysely/kysely-uow-compiler.ts +5 -2
- package/src/adapters/kysely/migration/execute-mysql.test.ts +2 -2
- package/src/adapters/kysely/migration/execute-postgres.test.ts +19 -19
- package/src/adapters/kysely/migration/execute.ts +48 -17
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +19 -37
- package/src/fragment.test.ts +1 -0
- package/src/migration-engine/auto-from-schema.ts +14 -18
- package/src/migration-engine/create.ts +1 -6
- package/src/migration-engine/generation-engine.test.ts +597 -0
- package/src/migration-engine/generation-engine.ts +356 -0
- package/src/migration-engine/shared.ts +1 -4
- package/src/mod.ts +0 -66
- package/src/query/condition-builder.ts +24 -8
- package/src/query/result-transform.ts +7 -1
- package/src/schema/create.test.ts +4 -1
- package/src/schema/create.ts +132 -24
- package/src/schema/serialize.ts +21 -7
- package/src/shared/settings-schema.ts +61 -0
- package/src/util/deep-equal.ts +21 -7
- package/src/util/import-generator.ts +3 -1
- package/src/util/parse.ts +3 -1
- package/tsdown.config.ts +1 -0
- package/.turbo/turbo-test.log +0 -37
- package/.turbo/turbo-types$colon$check.log +0 -1
|
@@ -73,7 +73,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
73
73
|
type: "varchar(30)",
|
|
74
74
|
isNullable: false,
|
|
75
75
|
role: "external-id",
|
|
76
|
-
default: {
|
|
76
|
+
default: { runtime: "cuid" },
|
|
77
77
|
},
|
|
78
78
|
],
|
|
79
79
|
};
|
|
@@ -195,7 +195,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
195
195
|
type: "timestamp",
|
|
196
196
|
isNullable: false,
|
|
197
197
|
role: "regular",
|
|
198
|
-
default: {
|
|
198
|
+
default: { dbSpecial: "now" },
|
|
199
199
|
},
|
|
200
200
|
],
|
|
201
201
|
};
|
|
@@ -710,7 +710,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
710
710
|
type: "timestamp",
|
|
711
711
|
isNullable: false,
|
|
712
712
|
role: "regular",
|
|
713
|
-
default: {
|
|
713
|
+
default: { dbSpecial: "now" },
|
|
714
714
|
},
|
|
715
715
|
updateDataType: false,
|
|
716
716
|
updateNullable: false,
|
|
@@ -1215,7 +1215,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1215
1215
|
type: "integer",
|
|
1216
1216
|
isNullable: false,
|
|
1217
1217
|
role: "external-id",
|
|
1218
|
-
default: { runtime: "
|
|
1218
|
+
default: { runtime: "cuid" },
|
|
1219
1219
|
},
|
|
1220
1220
|
{
|
|
1221
1221
|
name: "name",
|
|
@@ -1247,7 +1247,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1247
1247
|
type: "integer",
|
|
1248
1248
|
isNullable: false,
|
|
1249
1249
|
role: "external-id",
|
|
1250
|
-
default: { runtime: "
|
|
1250
|
+
default: { runtime: "cuid" },
|
|
1251
1251
|
},
|
|
1252
1252
|
{
|
|
1253
1253
|
name: "title",
|
|
@@ -1368,7 +1368,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1368
1368
|
type: "integer",
|
|
1369
1369
|
isNullable: false,
|
|
1370
1370
|
role: "external-id",
|
|
1371
|
-
default: { runtime: "
|
|
1371
|
+
default: { runtime: "cuid" },
|
|
1372
1372
|
},
|
|
1373
1373
|
{
|
|
1374
1374
|
name: "email",
|
|
@@ -1399,7 +1399,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1399
1399
|
type: "timestamp",
|
|
1400
1400
|
isNullable: false,
|
|
1401
1401
|
role: "regular",
|
|
1402
|
-
default: {
|
|
1402
|
+
default: { dbSpecial: "now" },
|
|
1403
1403
|
},
|
|
1404
1404
|
],
|
|
1405
1405
|
},
|
|
@@ -1425,7 +1425,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1425
1425
|
type: "integer",
|
|
1426
1426
|
isNullable: false,
|
|
1427
1427
|
role: "external-id",
|
|
1428
|
-
default: { runtime: "
|
|
1428
|
+
default: { runtime: "cuid" },
|
|
1429
1429
|
},
|
|
1430
1430
|
{
|
|
1431
1431
|
name: "name",
|
|
@@ -1483,7 +1483,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1483
1483
|
type: "integer",
|
|
1484
1484
|
isNullable: false,
|
|
1485
1485
|
role: "external-id",
|
|
1486
|
-
default: { runtime: "
|
|
1486
|
+
default: { runtime: "cuid" },
|
|
1487
1487
|
},
|
|
1488
1488
|
{
|
|
1489
1489
|
name: "customerId",
|
|
@@ -1509,7 +1509,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1509
1509
|
type: "timestamp",
|
|
1510
1510
|
isNullable: false,
|
|
1511
1511
|
role: "regular",
|
|
1512
|
-
default: {
|
|
1512
|
+
default: { dbSpecial: "now" },
|
|
1513
1513
|
},
|
|
1514
1514
|
],
|
|
1515
1515
|
},
|
|
@@ -1535,7 +1535,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1535
1535
|
type: "integer",
|
|
1536
1536
|
isNullable: false,
|
|
1537
1537
|
role: "external-id",
|
|
1538
|
-
default: { runtime: "
|
|
1538
|
+
default: { runtime: "cuid" },
|
|
1539
1539
|
},
|
|
1540
1540
|
{
|
|
1541
1541
|
name: "orderId",
|
|
@@ -1693,7 +1693,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1693
1693
|
type: "integer",
|
|
1694
1694
|
isNullable: false,
|
|
1695
1695
|
role: "external-id",
|
|
1696
|
-
default: { runtime: "
|
|
1696
|
+
default: { runtime: "cuid" },
|
|
1697
1697
|
},
|
|
1698
1698
|
{
|
|
1699
1699
|
name: "username",
|
|
@@ -1878,7 +1878,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1878
1878
|
type: "integer",
|
|
1879
1879
|
isNullable: false,
|
|
1880
1880
|
role: "external-id",
|
|
1881
|
-
default: { runtime: "
|
|
1881
|
+
default: { runtime: "cuid" },
|
|
1882
1882
|
},
|
|
1883
1883
|
{
|
|
1884
1884
|
name: "name",
|
|
@@ -1916,14 +1916,14 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1916
1916
|
type: "timestamp",
|
|
1917
1917
|
isNullable: false,
|
|
1918
1918
|
role: "regular",
|
|
1919
|
-
default: {
|
|
1919
|
+
default: { dbSpecial: "now" },
|
|
1920
1920
|
},
|
|
1921
1921
|
{
|
|
1922
1922
|
name: "updatedAt",
|
|
1923
1923
|
type: "timestamp",
|
|
1924
1924
|
isNullable: false,
|
|
1925
1925
|
role: "regular",
|
|
1926
|
-
default: {
|
|
1926
|
+
default: { dbSpecial: "now" },
|
|
1927
1927
|
},
|
|
1928
1928
|
],
|
|
1929
1929
|
},
|
|
@@ -1949,7 +1949,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
1949
1949
|
type: "integer",
|
|
1950
1950
|
isNullable: false,
|
|
1951
1951
|
role: "external-id",
|
|
1952
|
-
default: { runtime: "
|
|
1952
|
+
default: { runtime: "cuid" },
|
|
1953
1953
|
},
|
|
1954
1954
|
{
|
|
1955
1955
|
name: "title",
|
|
@@ -2012,14 +2012,14 @@ describe("execute() - PostgreSQL", () => {
|
|
|
2012
2012
|
type: "timestamp",
|
|
2013
2013
|
isNullable: false,
|
|
2014
2014
|
role: "regular",
|
|
2015
|
-
default: {
|
|
2015
|
+
default: { dbSpecial: "now" },
|
|
2016
2016
|
},
|
|
2017
2017
|
{
|
|
2018
2018
|
name: "updatedAt",
|
|
2019
2019
|
type: "timestamp",
|
|
2020
2020
|
isNullable: false,
|
|
2021
2021
|
role: "regular",
|
|
2022
|
-
default: {
|
|
2022
|
+
default: { dbSpecial: "now" },
|
|
2023
2023
|
},
|
|
2024
2024
|
],
|
|
2025
2025
|
},
|
|
@@ -2045,7 +2045,7 @@ describe("execute() - PostgreSQL", () => {
|
|
|
2045
2045
|
type: "integer",
|
|
2046
2046
|
isNullable: false,
|
|
2047
2047
|
role: "external-id",
|
|
2048
|
-
default: { runtime: "
|
|
2048
|
+
default: { runtime: "cuid" },
|
|
2049
2049
|
},
|
|
2050
2050
|
{
|
|
2051
2051
|
name: "name",
|
|
@@ -16,14 +16,15 @@ import {
|
|
|
16
16
|
import type { SQLProvider } from "../../../shared/providers";
|
|
17
17
|
import { schemaToDBType } from "../../../schema/serialize";
|
|
18
18
|
import type { KyselyConfig } from "../kysely-adapter";
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
type KyselyAny = Kysely<any>;
|
|
19
|
+
import type { TableNameMapper } from "../kysely-shared";
|
|
20
|
+
import { SETTINGS_TABLE_NAME } from "../../../shared/settings-schema";
|
|
22
21
|
|
|
23
22
|
export type ExecuteNode = Compilable & {
|
|
24
23
|
execute(): Promise<unknown>;
|
|
25
24
|
};
|
|
26
25
|
|
|
26
|
+
type KyselyAny = Kysely<any>; // eslint-disable-line @typescript-eslint/no-explicit-any
|
|
27
|
+
|
|
27
28
|
const errors = {
|
|
28
29
|
IdColumnUpdate:
|
|
29
30
|
"ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.",
|
|
@@ -204,11 +205,23 @@ export function execute(
|
|
|
204
205
|
operation: MigrationOperation,
|
|
205
206
|
config: KyselyConfig,
|
|
206
207
|
onCustomNode: (op: CustomOperation) => ExecuteNode | ExecuteNode[],
|
|
208
|
+
mapper?: TableNameMapper,
|
|
207
209
|
): ExecuteNode | ExecuteNode[] {
|
|
208
210
|
const { db, provider } = config;
|
|
209
211
|
|
|
212
|
+
// Settings table is never namespaced
|
|
213
|
+
const getTableName = (tableName: string) =>
|
|
214
|
+
tableName === SETTINGS_TABLE_NAME
|
|
215
|
+
? tableName
|
|
216
|
+
: mapper
|
|
217
|
+
? mapper.toPhysical(tableName)
|
|
218
|
+
: tableName;
|
|
219
|
+
|
|
210
220
|
function createTable(tableName: string, columns: ColumnInfo[]) {
|
|
211
|
-
let builder = db.schema.createTable(tableName) as CreateTableBuilder<
|
|
221
|
+
let builder = db.schema.createTable(getTableName(tableName)) as CreateTableBuilder<
|
|
222
|
+
string,
|
|
223
|
+
string
|
|
224
|
+
>;
|
|
212
225
|
|
|
213
226
|
// Add columns from the column info array
|
|
214
227
|
for (const columnInfo of columns) {
|
|
@@ -229,22 +242,24 @@ export function execute(
|
|
|
229
242
|
if (provider === "mssql") {
|
|
230
243
|
return rawToNode(
|
|
231
244
|
db,
|
|
232
|
-
sql`EXEC sp_rename ${sql.lit(operation.from)}, ${sql.lit(operation.to)}`,
|
|
245
|
+
sql`EXEC sp_rename ${sql.lit(getTableName(operation.from))}, ${sql.lit(getTableName(operation.to))}`,
|
|
233
246
|
);
|
|
234
247
|
}
|
|
235
248
|
|
|
236
|
-
return db.schema
|
|
249
|
+
return db.schema
|
|
250
|
+
.alterTable(getTableName(operation.from))
|
|
251
|
+
.renameTo(getTableName(operation.to));
|
|
237
252
|
case "alter-table": {
|
|
238
253
|
const results: ExecuteNode[] = [];
|
|
239
254
|
|
|
240
255
|
for (const op of operation.value) {
|
|
241
|
-
results.push(...executeColumn(operation.name, op, config));
|
|
256
|
+
results.push(...executeColumn(getTableName(operation.name), op, config));
|
|
242
257
|
}
|
|
243
258
|
|
|
244
259
|
return results;
|
|
245
260
|
}
|
|
246
261
|
case "drop-table":
|
|
247
|
-
return db.schema.dropTable(operation.name);
|
|
262
|
+
return db.schema.dropTable(getTableName(operation.name));
|
|
248
263
|
case "custom":
|
|
249
264
|
return onCustomNode(operation);
|
|
250
265
|
case "add-foreign-key": {
|
|
@@ -256,11 +271,11 @@ export function execute(
|
|
|
256
271
|
const action = getForeignKeyAction(provider);
|
|
257
272
|
|
|
258
273
|
return db.schema
|
|
259
|
-
.alterTable(table)
|
|
274
|
+
.alterTable(getTableName(table))
|
|
260
275
|
.addForeignKeyConstraint(
|
|
261
276
|
value.name,
|
|
262
277
|
value.columns,
|
|
263
|
-
value.referencedTable,
|
|
278
|
+
getTableName(value.referencedTable),
|
|
264
279
|
value.referencedColumns,
|
|
265
280
|
(b) => b.onUpdate(action).onDelete(action),
|
|
266
281
|
);
|
|
@@ -271,7 +286,7 @@ export function execute(
|
|
|
271
286
|
}
|
|
272
287
|
|
|
273
288
|
const { table, name } = operation;
|
|
274
|
-
let query = db.schema.alterTable(table).dropConstraint(name);
|
|
289
|
+
let query = db.schema.alterTable(getTableName(table)).dropConstraint(name);
|
|
275
290
|
|
|
276
291
|
// MySQL doesn't support IF EXISTS for dropping constraints
|
|
277
292
|
if (provider !== "mysql") {
|
|
@@ -282,12 +297,21 @@ export function execute(
|
|
|
282
297
|
}
|
|
283
298
|
case "add-index": {
|
|
284
299
|
if (operation.unique) {
|
|
285
|
-
return createUniqueIndex(
|
|
300
|
+
return createUniqueIndex(
|
|
301
|
+
db,
|
|
302
|
+
operation.name,
|
|
303
|
+
getTableName(operation.table),
|
|
304
|
+
operation.columns,
|
|
305
|
+
provider,
|
|
306
|
+
);
|
|
286
307
|
}
|
|
287
|
-
return db.schema
|
|
308
|
+
return db.schema
|
|
309
|
+
.createIndex(operation.name)
|
|
310
|
+
.on(getTableName(operation.table))
|
|
311
|
+
.columns(operation.columns);
|
|
288
312
|
}
|
|
289
313
|
case "drop-index": {
|
|
290
|
-
return dropUniqueIndex(db, operation.name, operation.table, provider);
|
|
314
|
+
return dropUniqueIndex(db, operation.name, getTableName(operation.table), provider);
|
|
291
315
|
}
|
|
292
316
|
}
|
|
293
317
|
}
|
|
@@ -370,12 +394,19 @@ function defaultValueToDB(column: ColumnInfo, provider: SQLProvider) {
|
|
|
370
394
|
return undefined;
|
|
371
395
|
}
|
|
372
396
|
|
|
373
|
-
|
|
397
|
+
// Static default values: defaultTo(value)
|
|
398
|
+
if ("value" in value && value.value !== undefined) {
|
|
399
|
+
return sql.lit(value.value);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
// Database-level special functions: defaultTo(b => b.now())
|
|
403
|
+
if ("dbSpecial" in value && value.dbSpecial === "now") {
|
|
374
404
|
return sql`CURRENT_TIMESTAMP`;
|
|
375
405
|
}
|
|
376
406
|
|
|
377
|
-
|
|
378
|
-
|
|
407
|
+
// Runtime defaults (defaultTo$) are NOT generated in SQL - they're handled in application code
|
|
408
|
+
if ("runtime" in value) {
|
|
409
|
+
return undefined;
|
|
379
410
|
}
|
|
380
411
|
|
|
381
412
|
return undefined;
|
|
@@ -50,11 +50,9 @@ describe("KyselyMigrator", () => {
|
|
|
50
50
|
const sql = preparedMigration.getSQL?.();
|
|
51
51
|
expect(sql).toBeDefined();
|
|
52
52
|
expect(sql).toMatchInlineSnapshot(`
|
|
53
|
-
"create table "
|
|
53
|
+
"create table "users_test_namespace" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
54
54
|
|
|
55
|
-
insert into "fragno_db_settings" ("key", "value") values ('test_namespace.schema_version', '1');
|
|
56
|
-
|
|
57
|
-
create table "users" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);"
|
|
55
|
+
insert into "fragno_db_settings" ("id", "key", "value") values ('jprP_43K5uMwxAFiepbbrQ', 'test_namespace.schema_version', '1');"
|
|
58
56
|
`);
|
|
59
57
|
});
|
|
60
58
|
|
|
@@ -69,17 +67,15 @@ describe("KyselyMigrator", () => {
|
|
|
69
67
|
const sql = preparedMigration.getSQL?.();
|
|
70
68
|
expect(sql).toBeDefined();
|
|
71
69
|
expect(sql).toMatchInlineSnapshot(`
|
|
72
|
-
"create table "
|
|
73
|
-
|
|
74
|
-
insert into "fragno_db_settings" ("key", "value") values ('test_namespace.schema_version', '2');
|
|
70
|
+
"create table "users_test_namespace" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
75
71
|
|
|
76
|
-
|
|
72
|
+
alter table "users_test_namespace" add column "age" integer;
|
|
77
73
|
|
|
78
|
-
|
|
74
|
+
create index "name_idx" on "users_test_namespace" ("name");
|
|
79
75
|
|
|
80
|
-
create index "
|
|
76
|
+
create index "age_idx" on "users_test_namespace" ("age");
|
|
81
77
|
|
|
82
|
-
|
|
78
|
+
insert into "fragno_db_settings" ("id", "key", "value") values ('jprP_43K5uMwxAFiepbbrQ', 'test_namespace.schema_version', '2');"
|
|
83
79
|
`);
|
|
84
80
|
});
|
|
85
81
|
|
|
@@ -94,13 +90,13 @@ describe("KyselyMigrator", () => {
|
|
|
94
90
|
const sql = preparedMigration.getSQL?.();
|
|
95
91
|
expect(sql).toBeDefined();
|
|
96
92
|
expect(sql).toMatchInlineSnapshot(`
|
|
97
|
-
"
|
|
93
|
+
"alter table "users_test_namespace" add column "age" integer;
|
|
98
94
|
|
|
99
|
-
|
|
95
|
+
create index "name_idx" on "users_test_namespace" ("name");
|
|
100
96
|
|
|
101
|
-
create index "
|
|
97
|
+
create index "age_idx" on "users_test_namespace" ("age");
|
|
102
98
|
|
|
103
|
-
|
|
99
|
+
update "fragno_db_settings" set "value" = '2' where "key" = 'test_namespace.schema_version';"
|
|
104
100
|
`);
|
|
105
101
|
});
|
|
106
102
|
|
|
@@ -115,19 +111,17 @@ describe("KyselyMigrator", () => {
|
|
|
115
111
|
const sql = preparedMigration.getSQL?.();
|
|
116
112
|
expect(sql).toBeDefined();
|
|
117
113
|
expect(sql).toMatchInlineSnapshot(`
|
|
118
|
-
"create table "
|
|
114
|
+
"create table "users_test_namespace" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
119
115
|
|
|
120
|
-
|
|
116
|
+
alter table "users_test_namespace" add column "age" integer;
|
|
121
117
|
|
|
122
|
-
create
|
|
118
|
+
create index "name_idx" on "users_test_namespace" ("name");
|
|
123
119
|
|
|
124
|
-
|
|
120
|
+
create index "age_idx" on "users_test_namespace" ("age");
|
|
125
121
|
|
|
126
|
-
create
|
|
122
|
+
create table "posts_test_namespace" ("id" varchar(30) not null unique, "title" text not null, "user_id" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
127
123
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
create table "posts" ("id" varchar(30) not null unique, "title" text not null, "user_id" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);"
|
|
124
|
+
insert into "fragno_db_settings" ("id", "key", "value") values ('jprP_43K5uMwxAFiepbbrQ', 'test_namespace.schema_version', '3');"
|
|
131
125
|
`);
|
|
132
126
|
});
|
|
133
127
|
|
|
@@ -142,9 +136,9 @@ describe("KyselyMigrator", () => {
|
|
|
142
136
|
const sql = preparedMigration.getSQL?.();
|
|
143
137
|
expect(sql).toBeDefined();
|
|
144
138
|
expect(sql).toMatchInlineSnapshot(`
|
|
145
|
-
"
|
|
139
|
+
"create table "posts_test_namespace" ("id" varchar(30) not null unique, "title" text not null, "user_id" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
146
140
|
|
|
147
|
-
|
|
141
|
+
update "fragno_db_settings" set "value" = '3' where "key" = 'test_namespace.schema_version';"
|
|
148
142
|
`);
|
|
149
143
|
});
|
|
150
144
|
|
|
@@ -182,16 +176,4 @@ describe("KyselyMigrator", () => {
|
|
|
182
176
|
}),
|
|
183
177
|
).rejects.toThrow("schema only has version 4");
|
|
184
178
|
});
|
|
185
|
-
|
|
186
|
-
test("getDefaultFileName returns correct format", () => {
|
|
187
|
-
const migrator = adapter.createMigrationEngine(testSchema, "test_namespace");
|
|
188
|
-
|
|
189
|
-
expect(migrator.getDefaultFileName).toBeDefined();
|
|
190
|
-
|
|
191
|
-
if (migrator.getDefaultFileName) {
|
|
192
|
-
const filename = migrator.getDefaultFileName("my-fragment", 0, 1);
|
|
193
|
-
// Should match format: YYYYMMDD_namespace_migration_0_to_1.sql
|
|
194
|
-
expect(filename).toMatch(/^\d{8}_my-fragment_migration_0_to_1\.sql$/);
|
|
195
|
-
}
|
|
196
|
-
});
|
|
197
179
|
});
|
package/src/fragment.test.ts
CHANGED
|
@@ -71,15 +71,13 @@ export function generateMigrationFromSchema(
|
|
|
71
71
|
isNullable: col.isNullable,
|
|
72
72
|
role: col.role,
|
|
73
73
|
default: col.default
|
|
74
|
-
?
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
: undefined,
|
|
82
|
-
}
|
|
74
|
+
? "value" in col.default
|
|
75
|
+
? { value: col.default.value }
|
|
76
|
+
: "dbSpecial" in col.default
|
|
77
|
+
? { dbSpecial: col.default.dbSpecial }
|
|
78
|
+
: "runtime" in col.default && typeof col.default.runtime === "string"
|
|
79
|
+
? { runtime: col.default.runtime }
|
|
80
|
+
: undefined
|
|
83
81
|
: undefined,
|
|
84
82
|
});
|
|
85
83
|
}
|
|
@@ -131,15 +129,13 @@ export function generateMigrationFromSchema(
|
|
|
131
129
|
isNullable: col.isNullable,
|
|
132
130
|
role: col.role,
|
|
133
131
|
default: col.default
|
|
134
|
-
?
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
: undefined,
|
|
142
|
-
}
|
|
132
|
+
? "value" in col.default
|
|
133
|
+
? { value: col.default.value }
|
|
134
|
+
: "dbSpecial" in col.default
|
|
135
|
+
? { dbSpecial: col.default.dbSpecial }
|
|
136
|
+
: "runtime" in col.default && typeof col.default.runtime === "string"
|
|
137
|
+
? { runtime: col.default.runtime }
|
|
138
|
+
: undefined
|
|
143
139
|
: undefined,
|
|
144
140
|
},
|
|
145
141
|
};
|
|
@@ -44,11 +44,6 @@ export interface Migrator {
|
|
|
44
44
|
toVersion: number,
|
|
45
45
|
options?: MigrateOptions & { fromVersion?: number },
|
|
46
46
|
) => Promise<PreparedMigration>;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Get default file name for migration SQL
|
|
50
|
-
*/
|
|
51
|
-
getDefaultFileName?: (namespace: string, fromVersion: number, toVersion: number) => string;
|
|
52
47
|
}
|
|
53
48
|
|
|
54
49
|
export interface MigrationEngineOptions {
|
|
@@ -186,8 +181,8 @@ export function createMigrator({
|
|
|
186
181
|
|
|
187
182
|
let operations = updateVersion
|
|
188
183
|
? [
|
|
189
|
-
...(await settings.updateSettingsInMigration(fromVersion, toVersion)),
|
|
190
184
|
...(await context.auto()),
|
|
185
|
+
...(await settings.updateSettingsInMigration(fromVersion, toVersion)),
|
|
191
186
|
]
|
|
192
187
|
: await context.auto();
|
|
193
188
|
|