zenstack-kit 0.1.20 → 0.1.21
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/migrations/prisma/diff.d.ts +3 -13
- package/dist/migrations/prisma/diff.d.ts.map +1 -1
- package/dist/migrations/prisma/diff.js +10 -4
- package/dist/schema/snapshot.d.ts +3 -0
- package/dist/schema/snapshot.d.ts.map +1 -1
- package/dist/schema/snapshot.js +22 -3
- package/dist/sql/compiler.d.ts +3 -1
- package/dist/sql/compiler.d.ts.map +1 -1
- package/dist/sql/compiler.js +26 -5
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { KyselyDialect } from "../../sql/kysely-adapter.js";
|
|
2
|
-
import type { SchemaSnapshot, SchemaTable, SchemaColumn, SchemaEnum } from "../../schema/snapshot.js";
|
|
2
|
+
import type { SchemaSnapshot, SchemaTable, SchemaColumn, SchemaEnum, SchemaForeignKey } from "../../schema/snapshot.js";
|
|
3
3
|
export declare function diffSchemas(previous: SchemaSnapshot | null, current: SchemaSnapshot): {
|
|
4
4
|
addedModels: SchemaTable[];
|
|
5
5
|
removedModels: SchemaTable[];
|
|
@@ -47,21 +47,11 @@ export declare function diffSchemas(previous: SchemaSnapshot | null, current: Sc
|
|
|
47
47
|
}[];
|
|
48
48
|
addedForeignKeys: {
|
|
49
49
|
tableName: string;
|
|
50
|
-
foreignKey:
|
|
51
|
-
name: string;
|
|
52
|
-
columns: string[];
|
|
53
|
-
referencedTable: string;
|
|
54
|
-
referencedColumns: string[];
|
|
55
|
-
};
|
|
50
|
+
foreignKey: SchemaForeignKey;
|
|
56
51
|
}[];
|
|
57
52
|
removedForeignKeys: {
|
|
58
53
|
tableName: string;
|
|
59
|
-
foreignKey:
|
|
60
|
-
name: string;
|
|
61
|
-
columns: string[];
|
|
62
|
-
referencedTable: string;
|
|
63
|
-
referencedColumns: string[];
|
|
64
|
-
};
|
|
54
|
+
foreignKey: SchemaForeignKey;
|
|
65
55
|
}[];
|
|
66
56
|
primaryKeyChanges: {
|
|
67
57
|
tableName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/migrations/prisma/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/migrations/prisma/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAkKxH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc;;;;mBAsB5C,MAAM;gBAAU,YAAY;;;mBAC1B,MAAM;gBAAU,YAAY;;;mBAEvD,MAAM;oBACL,MAAM;kBACR,YAAY;iBACb,YAAY;;;mBAGV,MAAM;oBACL;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE;;;mBAGpC,MAAM;oBACL;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE;;;mBAGpC,MAAM;eACV;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE;;;mBAG/B,MAAM;eACV;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE;;;mBAED,MAAM;oBAAc,gBAAgB;;;mBAClC,MAAM;oBAAc,gBAAgB;;;mBAEpE,MAAM;mBACN;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE;kBACpC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,EAAE,CAAA;SAAE;;mBA4ExB,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;oBAClC,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;;;;kBA/ClE,MAAM;qBACH,MAAM,EAAE;uBACN,MAAM,EAAE;;EAkD1B;AAED,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAkGjD,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,UAAU,EAChB,YAAY,GAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAM,EACtD,aAAa,GAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAM,GACrE,UAAU,CA8FZ;AA2CD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,UAAU,CAAC,OAAO,WAAW,CAAC,EACpC,OAAO,EAAE,aAAa,GACrB;IAAE,EAAE,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAyQlC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { compileCreateTable, compileDropTable, compileAddColumn, compileDropColumn, compileRenameTable, compileRenameColumn, compileCreateIndex, compileDropIndex, compileAddUniqueConstraint, compileDropConstraint, compileAddForeignKeyConstraint, compileAddPrimaryKeyConstraint, compileAlterColumn, compileCreateEnum, compileDropEnum, compileAddEnumValue, } from "../../sql/compiler.js";
|
|
1
|
+
import { compileCreateTable, compileDropTable, compileAddColumn, compileDropColumn, compileRenameTable, compileRenameColumn, compileCreateIndex, compileDropIndex, compileAddUniqueConstraint, compileDropConstraint, compileAddForeignKeyConstraint, compileAddPrimaryKeyConstraint, compileAlterColumn, compileCreateEnum, compileDropEnum, compileAddEnumValue, toKyselyReferentialAction, } from "../../sql/compiler.js";
|
|
2
2
|
function diffTableChanges(previousModel, currentModel, tableName) {
|
|
3
3
|
const addedFields = [];
|
|
4
4
|
const removedFields = [];
|
|
@@ -64,7 +64,13 @@ function diffTableChanges(previousModel, currentModel, tableName) {
|
|
|
64
64
|
const prevFks = new Map(previousModel.foreignKeys.map((f) => [f.name, f]));
|
|
65
65
|
const currFks = new Map(currentModel.foreignKeys.map((f) => [f.name, f]));
|
|
66
66
|
for (const [name, fk] of currFks.entries()) {
|
|
67
|
-
|
|
67
|
+
const prev = prevFks.get(name);
|
|
68
|
+
if (!prev) {
|
|
69
|
+
addedForeignKeys.push({ tableName, foreignKey: fk });
|
|
70
|
+
}
|
|
71
|
+
else if (prev.onDelete !== fk.onDelete || prev.onUpdate !== fk.onUpdate) {
|
|
72
|
+
// Cascade rule changed: drop old FK and recreate with new rules
|
|
73
|
+
removedForeignKeys.push({ tableName, foreignKey: prev });
|
|
68
74
|
addedForeignKeys.push({ tableName, foreignKey: fk });
|
|
69
75
|
}
|
|
70
76
|
}
|
|
@@ -420,7 +426,7 @@ export function buildSqlStatements(diff, dialect) {
|
|
|
420
426
|
// Drop foreign keys first (before dropping columns)
|
|
421
427
|
for (const { tableName, foreignKey } of diff.removedForeignKeys) {
|
|
422
428
|
up.push(compileDropConstraint(tableName, foreignKey.name, compileOpts));
|
|
423
|
-
down.unshift(compileAddForeignKeyConstraint(tableName, foreignKey.name, foreignKey.columns, foreignKey.referencedTable, foreignKey.referencedColumns, compileOpts));
|
|
429
|
+
down.unshift(compileAddForeignKeyConstraint(tableName, foreignKey.name, foreignKey.columns, foreignKey.referencedTable, foreignKey.referencedColumns, compileOpts, foreignKey.onDelete ? toKyselyReferentialAction(foreignKey.onDelete) : undefined, foreignKey.onUpdate ? toKyselyReferentialAction(foreignKey.onUpdate) : undefined));
|
|
424
430
|
}
|
|
425
431
|
// Drop unique constraints
|
|
426
432
|
for (const { tableName, constraint } of diff.removedUniqueConstraints) {
|
|
@@ -505,7 +511,7 @@ export function buildSqlStatements(diff, dialect) {
|
|
|
505
511
|
}
|
|
506
512
|
// Add foreign keys
|
|
507
513
|
for (const { tableName, foreignKey } of diff.addedForeignKeys) {
|
|
508
|
-
up.push(compileAddForeignKeyConstraint(tableName, foreignKey.name, foreignKey.columns, foreignKey.referencedTable, foreignKey.referencedColumns, compileOpts));
|
|
514
|
+
up.push(compileAddForeignKeyConstraint(tableName, foreignKey.name, foreignKey.columns, foreignKey.referencedTable, foreignKey.referencedColumns, compileOpts, foreignKey.onDelete ? toKyselyReferentialAction(foreignKey.onDelete) : undefined, foreignKey.onUpdate ? toKyselyReferentialAction(foreignKey.onUpdate) : undefined));
|
|
509
515
|
down.unshift(compileDropConstraint(tableName, foreignKey.name, compileOpts));
|
|
510
516
|
}
|
|
511
517
|
// Drop enums LAST (after tables that use them are dropped)
|
|
@@ -21,11 +21,14 @@ export interface SchemaIndex {
|
|
|
21
21
|
name: string;
|
|
22
22
|
columns: string[];
|
|
23
23
|
}
|
|
24
|
+
export type ReferentialAction = "Cascade" | "Restrict" | "SetNull" | "SetDefault" | "NoAction";
|
|
24
25
|
export interface SchemaForeignKey {
|
|
25
26
|
name: string;
|
|
26
27
|
columns: string[];
|
|
27
28
|
referencedTable: string;
|
|
28
29
|
referencedColumns: string[];
|
|
30
|
+
onDelete?: ReferentialAction;
|
|
31
|
+
onUpdate?: ReferentialAction;
|
|
29
32
|
}
|
|
30
33
|
export interface SchemaTable {
|
|
31
34
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/schema/snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../../src/schema/snapshot.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;AAE/F,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,iBAAiB,EAAE,gBAAgB,EAAE,CAAC;IACtC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;CACxB;AAiXD,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAkBxF;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,kBAAkB,CAMzE"}
|
package/dist/schema/snapshot.js
CHANGED
|
@@ -142,6 +142,18 @@ function getFieldType(field) {
|
|
|
142
142
|
}
|
|
143
143
|
return { type: field.type.type ?? "String", isRelation: false, isEnum: false };
|
|
144
144
|
}
|
|
145
|
+
function getAttributeRefArg(attr, name) {
|
|
146
|
+
if (!attr)
|
|
147
|
+
return undefined;
|
|
148
|
+
const arg = attr.args.find((item) => item.$resolvedParam?.name === name);
|
|
149
|
+
if (!arg?.value)
|
|
150
|
+
return undefined;
|
|
151
|
+
// Enum reference: e.g. Cascade, SetNull
|
|
152
|
+
if (arg.value.$type === "ReferenceExpr") {
|
|
153
|
+
return arg.value.target.$refText;
|
|
154
|
+
}
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
145
157
|
function getRelationFieldNames(field) {
|
|
146
158
|
const relationAttr = getAttribute(field, "@relation");
|
|
147
159
|
if (!relationAttr)
|
|
@@ -151,7 +163,9 @@ function getRelationFieldNames(field) {
|
|
|
151
163
|
if (!fields || !references)
|
|
152
164
|
return null;
|
|
153
165
|
const mapName = getAttributeStringArg(relationAttr, ["map", "name"]);
|
|
154
|
-
|
|
166
|
+
const onDelete = getAttributeRefArg(relationAttr, "onDelete");
|
|
167
|
+
const onUpdate = getAttributeRefArg(relationAttr, "onUpdate");
|
|
168
|
+
return { fields, references, mapName, onDelete, onUpdate };
|
|
155
169
|
}
|
|
156
170
|
function buildFieldNameMap(model) {
|
|
157
171
|
const map = new Map();
|
|
@@ -263,12 +277,17 @@ function parseModel(model) {
|
|
|
263
277
|
const referencedFieldMap = buildFieldNameMap(refModel);
|
|
264
278
|
const referencedColumnNames = relation.references.map((name) => referencedFieldMap.get(name) ?? name);
|
|
265
279
|
const columnNames = relation.fields.map((name) => fieldNameMap.get(name) ?? name);
|
|
266
|
-
|
|
280
|
+
const fk = {
|
|
267
281
|
name: buildForeignKeyName(tableName, columnNames, referencedTable, referencedColumnNames, relation.mapName),
|
|
268
282
|
columns: columnNames,
|
|
269
283
|
referencedTable,
|
|
270
284
|
referencedColumns: referencedColumnNames,
|
|
271
|
-
}
|
|
285
|
+
};
|
|
286
|
+
if (relation.onDelete)
|
|
287
|
+
fk.onDelete = relation.onDelete;
|
|
288
|
+
if (relation.onUpdate)
|
|
289
|
+
fk.onUpdate = relation.onUpdate;
|
|
290
|
+
foreignKeys.push(fk);
|
|
272
291
|
}
|
|
273
292
|
const sortedColumns = columns.sort((a, b) => a.name.localeCompare(b.name));
|
|
274
293
|
return {
|
package/dist/sql/compiler.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export interface SqlMigration {
|
|
|
13
13
|
export interface CompileSqlOptions {
|
|
14
14
|
dialect: KyselyDialect;
|
|
15
15
|
}
|
|
16
|
+
/** Map ZenStack PascalCase referential action to Kysely's lowercase format */
|
|
17
|
+
export declare function toKyselyReferentialAction(action: string): string;
|
|
16
18
|
/**
|
|
17
19
|
* Compile a CREATE TABLE statement to SQL
|
|
18
20
|
*/
|
|
@@ -56,7 +58,7 @@ export declare function compileDropConstraint(tableName: string, constraintName:
|
|
|
56
58
|
/**
|
|
57
59
|
* Compile an ADD FOREIGN KEY CONSTRAINT statement to SQL
|
|
58
60
|
*/
|
|
59
|
-
export declare function compileAddForeignKeyConstraint(tableName: string, constraintName: string, columns: string[], referencedTable: string, referencedColumns: string[], options: CompileSqlOptions): string;
|
|
61
|
+
export declare function compileAddForeignKeyConstraint(tableName: string, constraintName: string, columns: string[], referencedTable: string, referencedColumns: string[], options: CompileSqlOptions, onDelete?: string, onUpdate?: string): string;
|
|
60
62
|
/**
|
|
61
63
|
* Compile an ADD PRIMARY KEY CONSTRAINT statement to SQL
|
|
62
64
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/sql/compiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAoCnF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,EAAE,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,iBAAiB,GACzB,MAAM,
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../../src/sql/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/sql/compiler.js
CHANGED
|
@@ -40,6 +40,17 @@ function createCompilerDb(dialect) {
|
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
/** Map ZenStack PascalCase referential action to Kysely's lowercase format */
|
|
44
|
+
export function toKyselyReferentialAction(action) {
|
|
45
|
+
const map = {
|
|
46
|
+
Cascade: "cascade",
|
|
47
|
+
Restrict: "restrict",
|
|
48
|
+
SetNull: "set null",
|
|
49
|
+
SetDefault: "set default",
|
|
50
|
+
NoAction: "no action",
|
|
51
|
+
};
|
|
52
|
+
return map[action] ?? action.toLowerCase();
|
|
53
|
+
}
|
|
43
54
|
/**
|
|
44
55
|
* Compile a CREATE TABLE statement to SQL
|
|
45
56
|
*/
|
|
@@ -75,7 +86,13 @@ export function compileCreateTable(model, options) {
|
|
|
75
86
|
}
|
|
76
87
|
// Add foreign key constraints
|
|
77
88
|
for (const fk of model.foreignKeys) {
|
|
78
|
-
builder = builder.addForeignKeyConstraint(fk.name, fk.columns, fk.referencedTable, fk.referencedColumns)
|
|
89
|
+
builder = builder.addForeignKeyConstraint(fk.name, fk.columns, fk.referencedTable, fk.referencedColumns, (cb) => {
|
|
90
|
+
if (fk.onDelete)
|
|
91
|
+
cb = cb.onDelete(toKyselyReferentialAction(fk.onDelete));
|
|
92
|
+
if (fk.onUpdate)
|
|
93
|
+
cb = cb.onUpdate(toKyselyReferentialAction(fk.onUpdate));
|
|
94
|
+
return cb;
|
|
95
|
+
});
|
|
79
96
|
}
|
|
80
97
|
return builder.compile().sql + ";";
|
|
81
98
|
}
|
|
@@ -170,12 +187,16 @@ export function compileDropConstraint(tableName, constraintName, options) {
|
|
|
170
187
|
/**
|
|
171
188
|
* Compile an ADD FOREIGN KEY CONSTRAINT statement to SQL
|
|
172
189
|
*/
|
|
173
|
-
export function compileAddForeignKeyConstraint(tableName, constraintName, columns, referencedTable, referencedColumns, options) {
|
|
190
|
+
export function compileAddForeignKeyConstraint(tableName, constraintName, columns, referencedTable, referencedColumns, options, onDelete, onUpdate) {
|
|
174
191
|
const db = createCompilerDb(options.dialect);
|
|
175
|
-
|
|
192
|
+
let builder = db.schema
|
|
176
193
|
.alterTable(tableName)
|
|
177
|
-
.addForeignKeyConstraint(constraintName, columns, referencedTable, referencedColumns)
|
|
178
|
-
|
|
194
|
+
.addForeignKeyConstraint(constraintName, columns, referencedTable, referencedColumns);
|
|
195
|
+
if (onDelete)
|
|
196
|
+
builder = builder.onDelete(onDelete);
|
|
197
|
+
if (onUpdate)
|
|
198
|
+
builder = builder.onUpdate(onUpdate);
|
|
199
|
+
return builder.compile().sql + ";";
|
|
179
200
|
}
|
|
180
201
|
/**
|
|
181
202
|
* Compile an ADD PRIMARY KEY CONSTRAINT statement to SQL
|