@atscript/db-sqlite 0.1.32 → 0.1.34

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/dist/index.cjs CHANGED
@@ -223,7 +223,7 @@ function buildDelete(table, where) {
223
223
  params: [...where.params]
224
224
  };
225
225
  }
226
- function buildCreateTable(table, fields) {
226
+ function buildCreateTable(table, fields, foreignKeys) {
227
227
  const colDefs = [];
228
228
  const primaryKeys = fields.filter((f) => f.isPrimaryKey);
229
229
  for (const field of fields) {
@@ -238,8 +238,25 @@ function buildCreateTable(table, fields) {
238
238
  const pkCols = primaryKeys.map((pk) => `"${esc$1(pk.physicalName)}"`).join(", ");
239
239
  colDefs.push(`PRIMARY KEY (${pkCols})`);
240
240
  }
241
+ if (foreignKeys) for (const fk of foreignKeys.values()) {
242
+ const localCols = fk.fields.map((f) => `"${esc$1(f)}"`).join(", ");
243
+ const targetCols = fk.targetFields.map((f) => `"${esc$1(f)}"`).join(", ");
244
+ let constraint = `FOREIGN KEY (${localCols}) REFERENCES "${esc$1(fk.targetTable)}" (${targetCols})`;
245
+ if (fk.onDelete) constraint += ` ON DELETE ${refActionToSql(fk.onDelete)}`;
246
+ if (fk.onUpdate) constraint += ` ON UPDATE ${refActionToSql(fk.onUpdate)}`;
247
+ colDefs.push(constraint);
248
+ }
241
249
  return `CREATE TABLE IF NOT EXISTS "${esc$1(table)}" (${colDefs.join(", ")})`;
242
250
  }
251
+ function refActionToSql(action) {
252
+ switch (action) {
253
+ case "cascade": return "CASCADE";
254
+ case "restrict": return "RESTRICT";
255
+ case "setNull": return "SET NULL";
256
+ case "setDefault": return "SET DEFAULT";
257
+ default: return "NO ACTION";
258
+ }
259
+ }
243
260
  function sqliteTypeFromDesignType(designType) {
244
261
  switch (designType) {
245
262
  case "number":
@@ -406,7 +423,7 @@ var SqliteAdapter = class extends __atscript_utils_db.BaseDbAdapter {
406
423
  return { deletedCount: result.changes };
407
424
  }
408
425
  async ensureTable() {
409
- const sql = buildCreateTable(this.resolveTableName(), this._table.fieldDescriptors);
426
+ const sql = buildCreateTable(this.resolveTableName(), this._table.fieldDescriptors, this._table.foreignKeys);
410
427
  this.driver.exec(sql);
411
428
  }
412
429
  async syncIndexes() {
@@ -426,6 +443,7 @@ var SqliteAdapter = class extends __atscript_utils_db.BaseDbAdapter {
426
443
  }
427
444
  constructor(driver) {
428
445
  super(), _define_property$1(this, "driver", void 0), this.driver = driver;
446
+ driver.exec("PRAGMA foreign_keys = ON");
429
447
  }
430
448
  };
431
449
  function esc(name) {
package/dist/index.mjs CHANGED
@@ -206,7 +206,7 @@ function buildDelete(table, where) {
206
206
  params: [...where.params]
207
207
  };
208
208
  }
209
- function buildCreateTable(table, fields) {
209
+ function buildCreateTable(table, fields, foreignKeys) {
210
210
  const colDefs = [];
211
211
  const primaryKeys = fields.filter((f) => f.isPrimaryKey);
212
212
  for (const field of fields) {
@@ -221,8 +221,25 @@ function buildCreateTable(table, fields) {
221
221
  const pkCols = primaryKeys.map((pk) => `"${esc$1(pk.physicalName)}"`).join(", ");
222
222
  colDefs.push(`PRIMARY KEY (${pkCols})`);
223
223
  }
224
+ if (foreignKeys) for (const fk of foreignKeys.values()) {
225
+ const localCols = fk.fields.map((f) => `"${esc$1(f)}"`).join(", ");
226
+ const targetCols = fk.targetFields.map((f) => `"${esc$1(f)}"`).join(", ");
227
+ let constraint = `FOREIGN KEY (${localCols}) REFERENCES "${esc$1(fk.targetTable)}" (${targetCols})`;
228
+ if (fk.onDelete) constraint += ` ON DELETE ${refActionToSql(fk.onDelete)}`;
229
+ if (fk.onUpdate) constraint += ` ON UPDATE ${refActionToSql(fk.onUpdate)}`;
230
+ colDefs.push(constraint);
231
+ }
224
232
  return `CREATE TABLE IF NOT EXISTS "${esc$1(table)}" (${colDefs.join(", ")})`;
225
233
  }
234
+ function refActionToSql(action) {
235
+ switch (action) {
236
+ case "cascade": return "CASCADE";
237
+ case "restrict": return "RESTRICT";
238
+ case "setNull": return "SET NULL";
239
+ case "setDefault": return "SET DEFAULT";
240
+ default: return "NO ACTION";
241
+ }
242
+ }
226
243
  function sqliteTypeFromDesignType(designType) {
227
244
  switch (designType) {
228
245
  case "number":
@@ -389,7 +406,7 @@ var SqliteAdapter = class extends BaseDbAdapter {
389
406
  return { deletedCount: result.changes };
390
407
  }
391
408
  async ensureTable() {
392
- const sql = buildCreateTable(this.resolveTableName(), this._table.fieldDescriptors);
409
+ const sql = buildCreateTable(this.resolveTableName(), this._table.fieldDescriptors, this._table.foreignKeys);
393
410
  this.driver.exec(sql);
394
411
  }
395
412
  async syncIndexes() {
@@ -409,6 +426,7 @@ var SqliteAdapter = class extends BaseDbAdapter {
409
426
  }
410
427
  constructor(driver) {
411
428
  super(), _define_property$1(this, "driver", void 0), this.driver = driver;
429
+ driver.exec("PRAGMA foreign_keys = ON");
412
430
  }
413
431
  };
414
432
  function esc(name) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atscript/db-sqlite",
3
- "version": "0.1.32",
3
+ "version": "0.1.34",
4
4
  "description": "SQLite adapter for @atscript/utils-db with swappable driver support.",
5
5
  "keywords": [
6
6
  "atscript",
@@ -38,11 +38,11 @@
38
38
  "vitest": "3.2.4"
39
39
  },
40
40
  "peerDependencies": {
41
- "@uniqu/core": "^0.0.2",
41
+ "@uniqu/core": "^0.0.4",
42
42
  "better-sqlite3": ">=11.0.0",
43
- "@atscript/core": "^0.1.32",
44
- "@atscript/typescript": "^0.1.32",
45
- "@atscript/utils-db": "^0.1.32"
43
+ "@atscript/core": "^0.1.34",
44
+ "@atscript/typescript": "^0.1.34",
45
+ "@atscript/utils-db": "^0.1.34"
46
46
  },
47
47
  "peerDependenciesMeta": {
48
48
  "better-sqlite3": {