@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.
Files changed (108) hide show
  1. package/.turbo/turbo-build.log +61 -53
  2. package/CHANGELOG.md +12 -0
  3. package/dist/adapters/adapters.d.ts +11 -1
  4. package/dist/adapters/adapters.d.ts.map +1 -1
  5. package/dist/adapters/drizzle/drizzle-adapter.d.ts +9 -2
  6. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  7. package/dist/adapters/drizzle/drizzle-adapter.js +21 -39
  8. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  9. package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -1
  10. package/dist/adapters/drizzle/drizzle-query.js +3 -2
  11. package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
  12. package/dist/adapters/drizzle/drizzle-uow-compiler.js +8 -6
  13. package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -1
  14. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
  15. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
  16. package/dist/adapters/drizzle/generate.js +107 -34
  17. package/dist/adapters/drizzle/generate.js.map +1 -1
  18. package/dist/adapters/drizzle/shared.js +14 -1
  19. package/dist/adapters/drizzle/shared.js.map +1 -1
  20. package/dist/adapters/kysely/kysely-adapter.d.ts +2 -1
  21. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
  22. package/dist/adapters/kysely/kysely-adapter.js +25 -30
  23. package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
  24. package/dist/adapters/kysely/kysely-query-builder.js +48 -44
  25. package/dist/adapters/kysely/kysely-query-builder.js.map +1 -1
  26. package/dist/adapters/kysely/kysely-query-compiler.js +2 -2
  27. package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -1
  28. package/dist/adapters/kysely/kysely-query.js +3 -2
  29. package/dist/adapters/kysely/kysely-query.js.map +1 -1
  30. package/dist/adapters/kysely/kysely-shared.js +18 -0
  31. package/dist/adapters/kysely/kysely-shared.js.map +1 -0
  32. package/dist/adapters/kysely/kysely-uow-compiler.js +4 -3
  33. package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -1
  34. package/dist/adapters/kysely/migration/execute.js +15 -12
  35. package/dist/adapters/kysely/migration/execute.js.map +1 -1
  36. package/dist/migration-engine/auto-from-schema.js +2 -8
  37. package/dist/migration-engine/auto-from-schema.js.map +1 -1
  38. package/dist/migration-engine/create.d.ts +1 -5
  39. package/dist/migration-engine/create.js +1 -1
  40. package/dist/migration-engine/create.js.map +1 -1
  41. package/dist/migration-engine/generation-engine.d.ts +51 -0
  42. package/dist/migration-engine/generation-engine.d.ts.map +1 -0
  43. package/dist/migration-engine/generation-engine.js +165 -0
  44. package/dist/migration-engine/generation-engine.js.map +1 -0
  45. package/dist/migration-engine/shared.d.ts +5 -2
  46. package/dist/migration-engine/shared.d.ts.map +1 -1
  47. package/dist/migration-engine/shared.js.map +1 -1
  48. package/dist/mod.d.ts +0 -8
  49. package/dist/mod.d.ts.map +1 -1
  50. package/dist/mod.js +0 -32
  51. package/dist/mod.js.map +1 -1
  52. package/dist/query/condition-builder.js.map +1 -1
  53. package/dist/query/result-transform.js +2 -1
  54. package/dist/query/result-transform.js.map +1 -1
  55. package/dist/schema/create.d.ts +74 -16
  56. package/dist/schema/create.d.ts.map +1 -1
  57. package/dist/schema/create.js +76 -11
  58. package/dist/schema/create.js.map +1 -1
  59. package/dist/schema/serialize.js.map +1 -1
  60. package/dist/shared/settings-schema.js +36 -0
  61. package/dist/shared/settings-schema.js.map +1 -0
  62. package/dist/util/import-generator.js.map +1 -1
  63. package/dist/util/parse.js.map +1 -1
  64. package/package.json +8 -2
  65. package/src/adapters/adapters.ts +10 -3
  66. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +11 -7
  67. package/src/adapters/drizzle/drizzle-adapter.test.ts +77 -29
  68. package/src/adapters/drizzle/drizzle-adapter.ts +31 -78
  69. package/src/adapters/drizzle/drizzle-query.ts +4 -7
  70. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +9 -3
  71. package/src/adapters/drizzle/drizzle-uow-compiler.ts +12 -6
  72. package/src/adapters/drizzle/drizzle-uow-decoder.ts +1 -1
  73. package/src/adapters/drizzle/drizzle-uow-executor.ts +1 -1
  74. package/src/adapters/drizzle/generate.test.ts +573 -150
  75. package/src/adapters/drizzle/generate.ts +187 -36
  76. package/src/adapters/drizzle/migrate-drizzle.test.ts +30 -6
  77. package/src/adapters/drizzle/shared.ts +31 -1
  78. package/src/adapters/drizzle/test-utils.ts +3 -1
  79. package/src/adapters/kysely/kysely-adapter-pglite.test.ts +25 -27
  80. package/src/adapters/kysely/kysely-adapter.ts +35 -58
  81. package/src/adapters/kysely/kysely-query-builder.ts +75 -44
  82. package/src/adapters/kysely/kysely-query-compiler.ts +3 -1
  83. package/src/adapters/kysely/kysely-query.ts +8 -2
  84. package/src/adapters/kysely/kysely-shared.ts +23 -0
  85. package/src/adapters/kysely/kysely-uow-compiler.ts +5 -2
  86. package/src/adapters/kysely/migration/execute-mysql.test.ts +2 -2
  87. package/src/adapters/kysely/migration/execute-postgres.test.ts +19 -19
  88. package/src/adapters/kysely/migration/execute.ts +48 -17
  89. package/src/adapters/kysely/migration/kysely-migrator.test.ts +19 -37
  90. package/src/fragment.test.ts +1 -0
  91. package/src/migration-engine/auto-from-schema.ts +14 -18
  92. package/src/migration-engine/create.ts +1 -6
  93. package/src/migration-engine/generation-engine.test.ts +597 -0
  94. package/src/migration-engine/generation-engine.ts +356 -0
  95. package/src/migration-engine/shared.ts +1 -4
  96. package/src/mod.ts +0 -66
  97. package/src/query/condition-builder.ts +24 -8
  98. package/src/query/result-transform.ts +7 -1
  99. package/src/schema/create.test.ts +4 -1
  100. package/src/schema/create.ts +132 -24
  101. package/src/schema/serialize.ts +21 -7
  102. package/src/shared/settings-schema.ts +61 -0
  103. package/src/util/deep-equal.ts +21 -7
  104. package/src/util/import-generator.ts +3 -1
  105. package/src/util/parse.ts +3 -1
  106. package/tsdown.config.ts +1 -0
  107. package/.turbo/turbo-test.log +0 -37
  108. 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: { value: undefined, runtime: "auto" },
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: { runtime: "now" },
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: { runtime: "now" },
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: "auto" },
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: "auto" },
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: "auto" },
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: { runtime: "now" },
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: "auto" },
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: "auto" },
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: { runtime: "now" },
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: "auto" },
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: "auto" },
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: "auto" },
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: { runtime: "now" },
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: { runtime: "now" },
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: "auto" },
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: { runtime: "now" },
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: { runtime: "now" },
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: "auto" },
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
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
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<string, string>;
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.alterTable(operation.from).renameTo(operation.to);
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(db, operation.name, operation.table, operation.columns, provider);
300
+ return createUniqueIndex(
301
+ db,
302
+ operation.name,
303
+ getTableName(operation.table),
304
+ operation.columns,
305
+ provider,
306
+ );
286
307
  }
287
- return db.schema.createIndex(operation.name).on(operation.table).columns(operation.columns);
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
- if ("runtime" in value && value.runtime === "now") {
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
- if ("value" in value && value.value !== undefined) {
378
- return sql.lit(value.value);
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 "fragno_db_settings" ("key" varchar(255) primary key, "value" text not null);
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 "fragno_db_settings" ("key" varchar(255) primary key, "value" text not null);
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
- 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);
72
+ alter table "users_test_namespace" add column "age" integer;
77
73
 
78
- alter table "users" add column "age" integer;
74
+ create index "name_idx" on "users_test_namespace" ("name");
79
75
 
80
- create index "name_idx" on "users" ("name");
76
+ create index "age_idx" on "users_test_namespace" ("age");
81
77
 
82
- create index "age_idx" on "users" ("age");"
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
- "update "fragno_db_settings" set "value" = '2' where "key" = 'test_namespace.schema_version';
93
+ "alter table "users_test_namespace" add column "age" integer;
98
94
 
99
- alter table "users" add column "age" integer;
95
+ create index "name_idx" on "users_test_namespace" ("name");
100
96
 
101
- create index "name_idx" on "users" ("name");
97
+ create index "age_idx" on "users_test_namespace" ("age");
102
98
 
103
- create index "age_idx" on "users" ("age");"
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 "fragno_db_settings" ("key" varchar(255) primary key, "value" text not null);
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
- insert into "fragno_db_settings" ("key", "value") values ('test_namespace.schema_version', '3');
116
+ alter table "users_test_namespace" add column "age" integer;
121
117
 
122
- 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);
118
+ create index "name_idx" on "users_test_namespace" ("name");
123
119
 
124
- alter table "users" add column "age" integer;
120
+ create index "age_idx" on "users_test_namespace" ("age");
125
121
 
126
- create index "name_idx" on "users" ("name");
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
- create index "age_idx" on "users" ("age");
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
- "update "fragno_db_settings" set "value" = '3' where "key" = 'test_namespace.schema_version';
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
- 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);"
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
  });
@@ -21,6 +21,7 @@ const mockDatabaseAdapter: DatabaseAdapter = {
21
21
  createSchemaGenerator: () => {
22
22
  throw new Error("Not implemented");
23
23
  },
24
+ isConnectionHealthy: () => Promise.resolve(true),
24
25
  };
25
26
 
26
27
  describe("DatabaseFragmentBuilder", () => {
@@ -71,15 +71,13 @@ export function generateMigrationFromSchema(
71
71
  isNullable: col.isNullable,
72
72
  role: col.role,
73
73
  default: col.default
74
- ? {
75
- value: "value" in col.default ? col.default.value : undefined,
76
- runtime:
77
- "runtime" in col.default
78
- ? typeof col.default.runtime === "string"
79
- ? col.default.runtime
80
- : undefined
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
- value: "value" in col.default ? col.default.value : undefined,
136
- runtime:
137
- "runtime" in col.default
138
- ? typeof col.default.runtime === "string"
139
- ? col.default.runtime
140
- : undefined
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