kysely 0.7.2 → 0.7.6
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/README.md +9 -5
- package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/kysely.d.ts +2 -2
- package/dist/cjs/kysely.js +9 -7
- package/dist/cjs/operation-node/create-table-node.d.ts +2 -1
- package/dist/cjs/operation-node/create-table-node.js +1 -5
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +12 -1
- package/dist/cjs/operation-node/foreign-key-constraint-node.js +6 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -0
- package/dist/cjs/operation-node/join-node.js +8 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +3 -0
- package/dist/cjs/operation-node/references-node.d.ts +5 -3
- package/dist/cjs/operation-node/references-node.js +6 -0
- package/dist/cjs/operation-node/table-node.js +2 -2
- package/dist/cjs/parser/data-type-parser.d.ts +5 -0
- package/dist/cjs/parser/data-type-parser.js +11 -0
- package/dist/cjs/parser/default-value-parser.d.ts +6 -0
- package/dist/cjs/parser/default-value-parser.js +11 -0
- package/dist/cjs/parser/filter-parser.d.ts +2 -2
- package/dist/cjs/parser/filter-parser.js +34 -36
- package/dist/cjs/parser/join-parser.d.ts +1 -1
- package/dist/cjs/parser/join-parser.js +9 -11
- package/dist/cjs/parser/parse-context.d.ts +33 -6
- package/dist/cjs/parser/parse-context.js +40 -33
- package/dist/cjs/parser/reference-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.js +16 -12
- package/dist/cjs/parser/select-parser.d.ts +1 -2
- package/dist/cjs/parser/select-parser.js +4 -5
- package/dist/cjs/parser/table-parser.js +11 -6
- package/dist/cjs/parser/update-set-parser.js +1 -1
- package/dist/cjs/parser/value-parser.js +1 -1
- package/dist/cjs/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +6 -6
- package/dist/cjs/query-builder/{sub-query-builder.js → expression-builder.js} +6 -10
- package/dist/cjs/query-builder/join-builder.d.ts +2 -2
- package/dist/cjs/query-builder/join-builder.js +8 -12
- package/dist/cjs/query-builder/query-builder.d.ts +2 -2
- package/dist/cjs/query-builder/query-builder.js +34 -36
- package/dist/cjs/query-builder/type-utils.d.ts +5 -5
- package/dist/cjs/query-compiler/default-query-compiler.js +13 -1
- package/dist/cjs/query-creator.d.ts +2 -2
- package/dist/cjs/query-creator.js +8 -12
- package/dist/cjs/schema/alter-table-builder.d.ts +26 -8
- package/dist/cjs/schema/alter-table-builder.js +75 -7
- package/dist/cjs/schema/column-definition-builder.d.ts +10 -4
- package/dist/cjs/schema/column-definition-builder.js +11 -6
- package/dist/cjs/schema/create-index-builder.d.ts +5 -5
- package/dist/cjs/schema/create-index-builder.js +19 -28
- package/dist/cjs/schema/create-schema-builder.d.ts +5 -5
- package/dist/cjs/schema/create-schema-builder.js +9 -13
- package/dist/cjs/schema/create-table-builder.d.ts +22 -10
- package/dist/cjs/schema/create-table-builder.js +41 -34
- package/dist/cjs/schema/drop-index-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-index-builder.js +11 -16
- package/dist/cjs/schema/drop-schema-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-schema-builder.js +9 -13
- package/dist/cjs/schema/drop-table-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-table-builder.js +9 -13
- package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +26 -0
- package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/kysely.d.ts +2 -2
- package/dist/esm/kysely.js +9 -7
- package/dist/esm/operation-node/create-table-node.d.ts +2 -1
- package/dist/esm/operation-node/create-table-node.js +1 -5
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +12 -1
- package/dist/esm/operation-node/foreign-key-constraint-node.js +6 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -0
- package/dist/esm/operation-node/join-node.js +8 -0
- package/dist/esm/operation-node/operation-node-transformer.js +3 -0
- package/dist/esm/operation-node/references-node.d.ts +5 -3
- package/dist/esm/operation-node/references-node.js +6 -0
- package/dist/esm/operation-node/table-node.js +2 -2
- package/dist/esm/parser/data-type-parser.d.ts +5 -0
- package/dist/esm/parser/data-type-parser.js +7 -0
- package/dist/esm/parser/default-value-parser.d.ts +6 -0
- package/dist/esm/parser/default-value-parser.js +7 -0
- package/dist/esm/parser/filter-parser.d.ts +2 -2
- package/dist/esm/parser/filter-parser.js +31 -33
- package/dist/esm/parser/join-parser.d.ts +1 -1
- package/dist/esm/parser/join-parser.js +7 -9
- package/dist/esm/parser/parse-context.d.ts +33 -6
- package/dist/esm/parser/parse-context.js +38 -31
- package/dist/esm/parser/reference-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.js +16 -12
- package/dist/esm/parser/select-parser.d.ts +1 -2
- package/dist/esm/parser/select-parser.js +3 -3
- package/dist/esm/parser/table-parser.js +11 -6
- package/dist/esm/parser/update-set-parser.js +1 -1
- package/dist/esm/parser/value-parser.js +1 -1
- package/dist/esm/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +6 -6
- package/dist/esm/query-builder/{sub-query-builder.js → expression-builder.js} +4 -8
- package/dist/esm/query-builder/join-builder.d.ts +2 -2
- package/dist/esm/query-builder/join-builder.js +9 -13
- package/dist/esm/query-builder/query-builder.d.ts +2 -2
- package/dist/esm/query-builder/query-builder.js +37 -39
- package/dist/esm/query-builder/type-utils.d.ts +5 -5
- package/dist/esm/query-compiler/default-query-compiler.js +14 -2
- package/dist/esm/query-creator.d.ts +2 -2
- package/dist/esm/query-creator.js +8 -12
- package/dist/esm/schema/alter-table-builder.d.ts +26 -8
- package/dist/esm/schema/alter-table-builder.js +73 -6
- package/dist/esm/schema/column-definition-builder.d.ts +10 -4
- package/dist/esm/schema/column-definition-builder.js +12 -7
- package/dist/esm/schema/create-index-builder.d.ts +5 -5
- package/dist/esm/schema/create-index-builder.js +19 -28
- package/dist/esm/schema/create-schema-builder.d.ts +5 -5
- package/dist/esm/schema/create-schema-builder.js +9 -13
- package/dist/esm/schema/create-table-builder.d.ts +22 -10
- package/dist/esm/schema/create-table-builder.js +41 -34
- package/dist/esm/schema/drop-index-builder.d.ts +5 -5
- package/dist/esm/schema/drop-index-builder.js +11 -16
- package/dist/esm/schema/drop-schema-builder.d.ts +5 -5
- package/dist/esm/schema/drop-schema-builder.js +9 -13
- package/dist/esm/schema/drop-table-builder.d.ts +5 -5
- package/dist/esm/schema/drop-table-builder.js +9 -13
- package/dist/esm/schema/foreign-key-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +22 -0
- package/package.json +1 -1
|
@@ -13,6 +13,13 @@ import { freeze } from '../util/object-utils.js';
|
|
|
13
13
|
import { preventAwait } from '../util/prevent-await.js';
|
|
14
14
|
import { ColumnDefinitionBuilder, } from './column-definition-builder.js';
|
|
15
15
|
import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
|
|
16
|
+
import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
|
|
17
|
+
import { ForeignKeyConstraintBuilder, } from './foreign-key-constraint-builder.js';
|
|
18
|
+
import { AddConstraintNode } from '../operation-node/add-constraint-node.js';
|
|
19
|
+
import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.js';
|
|
20
|
+
import { CheckConstraintNode } from '../operation-node/check-constraint-node.js';
|
|
21
|
+
import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constraint-node.js';
|
|
22
|
+
import { ColumnNode } from '../operation-node/column-node.js';
|
|
16
23
|
export class AlterTableBuilder {
|
|
17
24
|
#props;
|
|
18
25
|
constructor(props) {
|
|
@@ -59,9 +66,7 @@ export class AlterTableBuilder {
|
|
|
59
66
|
addColumn(columnName, dataType) {
|
|
60
67
|
return new AlterTableAddColumnBuilder({
|
|
61
68
|
...this.#props,
|
|
62
|
-
columnBuilder: new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName,
|
|
63
|
-
? dataType.toOperationNode()
|
|
64
|
-
: DataTypeNode.create(dataType))),
|
|
69
|
+
columnBuilder: new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName, parseDataTypeExpression(dataType))),
|
|
65
70
|
});
|
|
66
71
|
}
|
|
67
72
|
/**
|
|
@@ -72,9 +77,29 @@ export class AlterTableBuilder {
|
|
|
72
77
|
modifyColumn(columnName, dataType) {
|
|
73
78
|
return new AlterTableModifyColumnBuilder({
|
|
74
79
|
...this.#props,
|
|
75
|
-
columnBuilder: new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName,
|
|
76
|
-
|
|
77
|
-
|
|
80
|
+
columnBuilder: new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName, parseDataTypeExpression(dataType))),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
addUniqueConstraint(constraintName, columns) {
|
|
84
|
+
return new AlterTableExecutor({
|
|
85
|
+
...this.#props,
|
|
86
|
+
alterTableNode: AlterTableNode.cloneWith(this.#props.alterTableNode, {
|
|
87
|
+
addConstraint: AddConstraintNode.create(UniqueConstraintNode.create(columns, constraintName)),
|
|
88
|
+
}),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
addCheckConstraint(constraintName, checkExpression) {
|
|
92
|
+
return new AlterTableExecutor({
|
|
93
|
+
...this.#props,
|
|
94
|
+
alterTableNode: AlterTableNode.cloneWith(this.#props.alterTableNode, {
|
|
95
|
+
addConstraint: AddConstraintNode.create(CheckConstraintNode.create(checkExpression, constraintName)),
|
|
96
|
+
}),
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns) {
|
|
100
|
+
return new AlterTableAddForeignKeyConstraintBuilder({
|
|
101
|
+
...this.#props,
|
|
102
|
+
constraintBuilder: new ForeignKeyConstraintBuilder(ForeignKeyConstraintNode.create(columns.map(ColumnNode.create), TableNode.create(targetTable), targetColumns.map(ColumnNode.create), constraintName)),
|
|
78
103
|
});
|
|
79
104
|
}
|
|
80
105
|
}
|
|
@@ -180,6 +205,12 @@ export class AlterTableAddColumnBuilder {
|
|
|
180
205
|
columnBuilder: this.#props.columnBuilder.onDelete(onDelete),
|
|
181
206
|
});
|
|
182
207
|
}
|
|
208
|
+
onUpdate(onDelete) {
|
|
209
|
+
return new AlterTableAddColumnBuilder({
|
|
210
|
+
...this.#props,
|
|
211
|
+
columnBuilder: this.#props.columnBuilder.onUpdate(onDelete),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
183
214
|
unique() {
|
|
184
215
|
return new AlterTableAddColumnBuilder({
|
|
185
216
|
...this.#props,
|
|
@@ -245,6 +276,12 @@ export class AlterTableModifyColumnBuilder {
|
|
|
245
276
|
columnBuilder: this.#props.columnBuilder.onDelete(onDelete),
|
|
246
277
|
});
|
|
247
278
|
}
|
|
279
|
+
onUpdate(onUpdate) {
|
|
280
|
+
return new AlterTableModifyColumnBuilder({
|
|
281
|
+
...this.#props,
|
|
282
|
+
columnBuilder: this.#props.columnBuilder.onUpdate(onUpdate),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
248
285
|
unique() {
|
|
249
286
|
return new AlterTableModifyColumnBuilder({
|
|
250
287
|
...this.#props,
|
|
@@ -281,8 +318,38 @@ export class AlterTableModifyColumnBuilder {
|
|
|
281
318
|
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
282
319
|
}
|
|
283
320
|
}
|
|
321
|
+
export class AlterTableAddForeignKeyConstraintBuilder {
|
|
322
|
+
#props;
|
|
323
|
+
constructor(props) {
|
|
324
|
+
this.#props = freeze(props);
|
|
325
|
+
}
|
|
326
|
+
onDelete(onDelete) {
|
|
327
|
+
return new AlterTableAddForeignKeyConstraintBuilder({
|
|
328
|
+
...this.#props,
|
|
329
|
+
constraintBuilder: this.#props.constraintBuilder.onDelete(onDelete),
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
onUpdate(onUpdate) {
|
|
333
|
+
return new AlterTableAddForeignKeyConstraintBuilder({
|
|
334
|
+
...this.#props,
|
|
335
|
+
constraintBuilder: this.#props.constraintBuilder.onUpdate(onUpdate),
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
toOperationNode() {
|
|
339
|
+
return this.#props.executor.transformQuery(AlterTableNode.cloneWith(this.#props.alterTableNode, {
|
|
340
|
+
addConstraint: AddConstraintNode.create(this.#props.constraintBuilder.toOperationNode()),
|
|
341
|
+
}), this.#props.queryId);
|
|
342
|
+
}
|
|
343
|
+
compile() {
|
|
344
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
345
|
+
}
|
|
346
|
+
async execute() {
|
|
347
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
284
350
|
preventAwait(AlterTableBuilder, "don't await AlterTableBuilder instances");
|
|
285
351
|
preventAwait(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
|
|
286
352
|
preventAwait(AlterTableExecutor, "don't await AlterTableExecutor instances directly. To execute the query you need to call `execute`");
|
|
287
353
|
preventAwait(AlterTableAddColumnBuilder, "don't await AlterTableAddColumnBuilder instances directly. To execute the query you need to call `execute`");
|
|
288
354
|
preventAwait(AlterTableModifyColumnBuilder, "don't await AlterTableModifyColumnBuilder instances directly. To execute the query you need to call `execute`");
|
|
355
|
+
preventAwait(AlterTableAddForeignKeyConstraintBuilder, "don't await AlterTableAddForeignKeyConstraintBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
|
-
import {
|
|
2
|
+
import { OnModifyForeignAction } from '../operation-node/references-node.js';
|
|
3
3
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
4
4
|
import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
|
|
5
5
|
import { AnyRawBuilder } from '../query-builder/type-utils.js';
|
|
6
|
+
import { DefaultValueExpression } from '../parser/default-value-parser.js';
|
|
6
7
|
export interface ColumnDefinitionBuilderInterface<R> {
|
|
7
8
|
/**
|
|
8
9
|
* Makes the column automatically incrementing.
|
|
@@ -31,7 +32,11 @@ export interface ColumnDefinitionBuilderInterface<R> {
|
|
|
31
32
|
/**
|
|
32
33
|
* Adds an `on delete` constraint for the foreign key column.
|
|
33
34
|
*/
|
|
34
|
-
onDelete(onDelete:
|
|
35
|
+
onDelete(onDelete: OnModifyForeignAction): R;
|
|
36
|
+
/**
|
|
37
|
+
* Adds an `on update` constraint for the foreign key column.
|
|
38
|
+
*/
|
|
39
|
+
onUpdate(onUpdate: OnModifyForeignAction): R;
|
|
35
40
|
/**
|
|
36
41
|
* Adds a unique constraint for the column.
|
|
37
42
|
*/
|
|
@@ -71,10 +76,11 @@ export declare class ColumnDefinitionBuilder implements ColumnDefinitionBuilderI
|
|
|
71
76
|
increments(): ColumnDefinitionBuilder;
|
|
72
77
|
primaryKey(): ColumnDefinitionBuilder;
|
|
73
78
|
references(ref: string): ColumnDefinitionBuilder;
|
|
74
|
-
onDelete(onDelete:
|
|
79
|
+
onDelete(onDelete: OnModifyForeignAction): ColumnDefinitionBuilder;
|
|
80
|
+
onUpdate(onUpdate: OnModifyForeignAction): ColumnDefinitionBuilder;
|
|
75
81
|
unique(): ColumnDefinitionBuilder;
|
|
76
82
|
notNull(): ColumnDefinitionBuilder;
|
|
77
|
-
defaultTo(value:
|
|
83
|
+
defaultTo(value: DefaultValueExpression): ColumnDefinitionBuilder;
|
|
78
84
|
check(sql: string): ColumnDefinitionBuilder;
|
|
79
85
|
toOperationNode(): ColumnDefinitionNode;
|
|
80
86
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { CheckConstraintNode } from '../operation-node/check-constraint-node.js';
|
|
2
|
-
import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
|
|
3
2
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
4
|
-
import { ReferencesNode } from '../operation-node/references-node.js';
|
|
3
|
+
import { ReferencesNode, } from '../operation-node/references-node.js';
|
|
5
4
|
import { SelectAllNode } from '../operation-node/select-all-node.js';
|
|
6
|
-
import { ValueNode } from '../operation-node/value-node.js';
|
|
7
5
|
import { parseStringReference } from '../parser/reference-parser.js';
|
|
8
6
|
import { preventAwait } from '../util/prevent-await.js';
|
|
9
7
|
import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
|
|
8
|
+
import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
|
|
10
9
|
export class ColumnDefinitionBuilder {
|
|
11
10
|
#node;
|
|
12
11
|
constructor(node) {
|
|
@@ -37,6 +36,14 @@ export class ColumnDefinitionBuilder {
|
|
|
37
36
|
references: ReferencesNode.cloneWithOnDelete(this.#node.references, onDelete),
|
|
38
37
|
}));
|
|
39
38
|
}
|
|
39
|
+
onUpdate(onUpdate) {
|
|
40
|
+
if (!this.#node.references) {
|
|
41
|
+
throw new Error('on update constraint can only be added for foreign keys');
|
|
42
|
+
}
|
|
43
|
+
return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, {
|
|
44
|
+
references: ReferencesNode.cloneWithOnUpdate(this.#node.references, onUpdate),
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
40
47
|
unique() {
|
|
41
48
|
return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, { isUnique: true }));
|
|
42
49
|
}
|
|
@@ -45,9 +52,7 @@ export class ColumnDefinitionBuilder {
|
|
|
45
52
|
}
|
|
46
53
|
defaultTo(value) {
|
|
47
54
|
return new ColumnDefinitionBuilder(ColumnDefinitionNode.cloneWith(this.#node, {
|
|
48
|
-
defaultTo:
|
|
49
|
-
? value.toOperationNode()
|
|
50
|
-
: ValueNode.createImmediate(value),
|
|
55
|
+
defaultTo: parseDefaultValueExpression(value),
|
|
51
56
|
}));
|
|
52
57
|
}
|
|
53
58
|
check(sql) {
|
|
@@ -59,4 +64,4 @@ export class ColumnDefinitionBuilder {
|
|
|
59
64
|
return this.#node;
|
|
60
65
|
}
|
|
61
66
|
}
|
|
62
|
-
preventAwait(ColumnDefinitionBuilder, "don't await
|
|
67
|
+
preventAwait(ColumnDefinitionBuilder, "don't await ColumnDefinitionBuilder instances directly.");
|
|
@@ -6,7 +6,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
|
6
6
|
import { QueryId } from '../util/query-id.js';
|
|
7
7
|
export declare class CreateIndexBuilder implements OperationNodeSource, Compilable {
|
|
8
8
|
#private;
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(props: CreateIndexBuilderProps);
|
|
10
10
|
/**
|
|
11
11
|
* Makes the index unique.
|
|
12
12
|
*/
|
|
@@ -49,8 +49,8 @@ export declare class CreateIndexBuilder implements OperationNodeSource, Compilab
|
|
|
49
49
|
compile(): CompiledQuery;
|
|
50
50
|
execute(): Promise<void>;
|
|
51
51
|
}
|
|
52
|
-
export interface
|
|
53
|
-
queryId: QueryId;
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
export interface CreateIndexBuilderProps {
|
|
53
|
+
readonly queryId: QueryId;
|
|
54
|
+
readonly executor: QueryExecutor;
|
|
55
|
+
readonly createIndexNode: CreateIndexNode;
|
|
56
56
|
}
|
|
@@ -4,23 +4,19 @@ import { RawNode } from '../operation-node/raw-node.js';
|
|
|
4
4
|
import { parseColumnName } from '../parser/reference-parser.js';
|
|
5
5
|
import { parseTable } from '../parser/table-parser.js';
|
|
6
6
|
import { preventAwait } from '../util/prevent-await.js';
|
|
7
|
+
import { freeze } from '../util/object-utils.js';
|
|
7
8
|
export class CreateIndexBuilder {
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
constructor(args) {
|
|
12
|
-
this.#queryId = args.queryId;
|
|
13
|
-
this.#createIndexNode = args.createIndexNode;
|
|
14
|
-
this.#executor = args.executor;
|
|
9
|
+
#props;
|
|
10
|
+
constructor(props) {
|
|
11
|
+
this.#props = freeze(props);
|
|
15
12
|
}
|
|
16
13
|
/**
|
|
17
14
|
* Makes the index unique.
|
|
18
15
|
*/
|
|
19
16
|
unique() {
|
|
20
17
|
return new CreateIndexBuilder({
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
createIndexNode: CreateIndexNode.cloneWith(this.#createIndexNode, {
|
|
18
|
+
...this.#props,
|
|
19
|
+
createIndexNode: CreateIndexNode.cloneWith(this.#props.createIndexNode, {
|
|
24
20
|
unique: true,
|
|
25
21
|
}),
|
|
26
22
|
});
|
|
@@ -30,9 +26,8 @@ export class CreateIndexBuilder {
|
|
|
30
26
|
*/
|
|
31
27
|
on(table) {
|
|
32
28
|
return new CreateIndexBuilder({
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
createIndexNode: CreateIndexNode.cloneWith(this.#createIndexNode, {
|
|
29
|
+
...this.#props,
|
|
30
|
+
createIndexNode: CreateIndexNode.cloneWith(this.#props.createIndexNode, {
|
|
36
31
|
table: parseTable(table),
|
|
37
32
|
}),
|
|
38
33
|
});
|
|
@@ -44,9 +39,8 @@ export class CreateIndexBuilder {
|
|
|
44
39
|
*/
|
|
45
40
|
column(column) {
|
|
46
41
|
return new CreateIndexBuilder({
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
createIndexNode: CreateIndexNode.cloneWith(this.#createIndexNode, {
|
|
42
|
+
...this.#props,
|
|
43
|
+
createIndexNode: CreateIndexNode.cloneWith(this.#props.createIndexNode, {
|
|
50
44
|
expression: parseColumnName(column),
|
|
51
45
|
}),
|
|
52
46
|
});
|
|
@@ -58,9 +52,8 @@ export class CreateIndexBuilder {
|
|
|
58
52
|
*/
|
|
59
53
|
columns(columns) {
|
|
60
54
|
return new CreateIndexBuilder({
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
createIndexNode: CreateIndexNode.cloneWith(this.#createIndexNode, {
|
|
55
|
+
...this.#props,
|
|
56
|
+
createIndexNode: CreateIndexNode.cloneWith(this.#props.createIndexNode, {
|
|
64
57
|
expression: ListNode.create(columns.map(parseColumnName)),
|
|
65
58
|
}),
|
|
66
59
|
});
|
|
@@ -79,30 +72,28 @@ export class CreateIndexBuilder {
|
|
|
79
72
|
*/
|
|
80
73
|
expression(expression) {
|
|
81
74
|
return new CreateIndexBuilder({
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
createIndexNode: CreateIndexNode.cloneWith(this.#createIndexNode, {
|
|
75
|
+
...this.#props,
|
|
76
|
+
createIndexNode: CreateIndexNode.cloneWith(this.#props.createIndexNode, {
|
|
85
77
|
expression: RawNode.createWithSql(expression),
|
|
86
78
|
}),
|
|
87
79
|
});
|
|
88
80
|
}
|
|
89
81
|
using(indexType) {
|
|
90
82
|
return new CreateIndexBuilder({
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
createIndexNode: CreateIndexNode.cloneWith(this.#createIndexNode, {
|
|
83
|
+
...this.#props,
|
|
84
|
+
createIndexNode: CreateIndexNode.cloneWith(this.#props.createIndexNode, {
|
|
94
85
|
using: RawNode.createWithSql(indexType),
|
|
95
86
|
}),
|
|
96
87
|
});
|
|
97
88
|
}
|
|
98
89
|
toOperationNode() {
|
|
99
|
-
return this.#executor.transformQuery(this.#createIndexNode, this.#queryId);
|
|
90
|
+
return this.#props.executor.transformQuery(this.#props.createIndexNode, this.#props.queryId);
|
|
100
91
|
}
|
|
101
92
|
compile() {
|
|
102
|
-
return this.#executor.compileQuery(this.toOperationNode(), this.#queryId);
|
|
93
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
103
94
|
}
|
|
104
95
|
async execute() {
|
|
105
|
-
await this.#executor.executeQuery(this.compile(), this.#queryId);
|
|
96
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
106
97
|
}
|
|
107
98
|
}
|
|
108
99
|
preventAwait(CreateIndexBuilder, "don't await CreateIndexBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -6,14 +6,14 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
|
6
6
|
import { QueryId } from '../util/query-id.js';
|
|
7
7
|
export declare class CreateSchemaBuilder implements OperationNodeSource, Compilable {
|
|
8
8
|
#private;
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(props: CreateSchemaBuilderProps);
|
|
10
10
|
ifNotExists(): CreateSchemaBuilder;
|
|
11
11
|
toOperationNode(): CreateSchemaNode;
|
|
12
12
|
compile(): CompiledQuery;
|
|
13
13
|
execute(): Promise<void>;
|
|
14
14
|
}
|
|
15
|
-
export interface
|
|
16
|
-
queryId: QueryId;
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
export interface CreateSchemaBuilderProps {
|
|
16
|
+
readonly queryId: QueryId;
|
|
17
|
+
readonly executor: QueryExecutor;
|
|
18
|
+
readonly createSchemaNode: CreateSchemaNode;
|
|
19
19
|
}
|
|
@@ -1,29 +1,25 @@
|
|
|
1
1
|
import { CreateSchemaNode } from '../operation-node/create-schema-node.js';
|
|
2
2
|
import { preventAwait } from '../util/prevent-await.js';
|
|
3
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
4
|
export class CreateSchemaBuilder {
|
|
4
|
-
#
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
constructor(args) {
|
|
8
|
-
this.#queryId = args.queryId;
|
|
9
|
-
this.#createSchemaNode = args.createSchemaNode;
|
|
10
|
-
this.#executor = args.executor;
|
|
5
|
+
#props;
|
|
6
|
+
constructor(props) {
|
|
7
|
+
this.#props = freeze(props);
|
|
11
8
|
}
|
|
12
9
|
ifNotExists() {
|
|
13
10
|
return new CreateSchemaBuilder({
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
createSchemaNode: CreateSchemaNode.cloneWithModifier(this.#createSchemaNode, 'IfNotExists'),
|
|
11
|
+
...this.#props,
|
|
12
|
+
createSchemaNode: CreateSchemaNode.cloneWithModifier(this.#props.createSchemaNode, 'IfNotExists'),
|
|
17
13
|
});
|
|
18
14
|
}
|
|
19
15
|
toOperationNode() {
|
|
20
|
-
return this.#executor.transformQuery(this.#createSchemaNode, this.#queryId);
|
|
16
|
+
return this.#props.executor.transformQuery(this.#props.createSchemaNode, this.#props.queryId);
|
|
21
17
|
}
|
|
22
18
|
compile() {
|
|
23
|
-
return this.#executor.compileQuery(this.toOperationNode(), this.#queryId);
|
|
19
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
24
20
|
}
|
|
25
21
|
async execute() {
|
|
26
|
-
await this.#executor.executeQuery(this.compile(), this.#queryId);
|
|
22
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
27
23
|
}
|
|
28
24
|
}
|
|
29
25
|
preventAwait(CreateSchemaBuilder, "don't await CreateSchemaBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { CreateTableNode } from '../operation-node/create-table-node.js';
|
|
2
|
-
import { ColumnDataType } from '../operation-node/data-type-node.js';
|
|
3
2
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
3
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
5
4
|
import { Compilable } from '../util/compilable.js';
|
|
6
5
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
7
6
|
import { ColumnDefinitionBuilder } from './column-definition-builder.js';
|
|
8
|
-
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
9
7
|
import { QueryId } from '../util/query-id.js';
|
|
8
|
+
import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js';
|
|
9
|
+
import { DataTypeExpression } from '../parser/data-type-parser.js';
|
|
10
10
|
export declare class CreateTableBuilder implements OperationNodeSource, Compilable {
|
|
11
11
|
#private;
|
|
12
|
-
constructor(
|
|
12
|
+
constructor(props: CreateTableBuilderProps);
|
|
13
13
|
/**
|
|
14
14
|
* Adds the "if not exists" modifier.
|
|
15
15
|
*
|
|
@@ -30,7 +30,7 @@ export declare class CreateTableBuilder implements OperationNodeSource, Compilab
|
|
|
30
30
|
* .addColumn('data', db.raw('customtype'))
|
|
31
31
|
* ```
|
|
32
32
|
*/
|
|
33
|
-
addColumn(columnName: string, dataType:
|
|
33
|
+
addColumn(columnName: string, dataType: DataTypeExpression, build?: ColumnBuilderCallback): CreateTableBuilder;
|
|
34
34
|
/**
|
|
35
35
|
* Adds a primary key constraint for one or more columns.
|
|
36
36
|
*
|
|
@@ -70,15 +70,27 @@ export declare class CreateTableBuilder implements OperationNodeSource, Compilab
|
|
|
70
70
|
* ['id'],
|
|
71
71
|
* )
|
|
72
72
|
* ```
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```ts
|
|
76
|
+
* addForeignKeyConstraint(
|
|
77
|
+
* 'owner_id_foreign',
|
|
78
|
+
* ['owner_id1', 'owner_id2'],
|
|
79
|
+
* 'person',
|
|
80
|
+
* ['id1', 'id2'],
|
|
81
|
+
* (cb) => cb.onDelete('cascade')
|
|
82
|
+
* )
|
|
83
|
+
* ```
|
|
73
84
|
*/
|
|
74
|
-
addForeignKeyConstraint(constraintName: string, columns: string[], targetTable: string, targetColumns: string[]): CreateTableBuilder;
|
|
85
|
+
addForeignKeyConstraint(constraintName: string, columns: string[], targetTable: string, targetColumns: string[], build?: ForeignKeyConstraintBuilderCallback): CreateTableBuilder;
|
|
75
86
|
toOperationNode(): CreateTableNode;
|
|
76
87
|
compile(): CompiledQuery;
|
|
77
88
|
execute(): Promise<void>;
|
|
78
89
|
}
|
|
79
|
-
export interface
|
|
80
|
-
queryId: QueryId;
|
|
81
|
-
|
|
82
|
-
|
|
90
|
+
export interface CreateTableBuilderProps {
|
|
91
|
+
readonly queryId: QueryId;
|
|
92
|
+
readonly executor: QueryExecutor;
|
|
93
|
+
readonly createTableNode: CreateTableNode;
|
|
83
94
|
}
|
|
84
|
-
export declare type ColumnBuilderCallback = (
|
|
95
|
+
export declare type ColumnBuilderCallback = (builder: ColumnDefinitionBuilder) => ColumnDefinitionBuilder;
|
|
96
|
+
export declare type ForeignKeyConstraintBuilderCallback = (builder: ForeignKeyConstraintBuilder) => ForeignKeyConstraintBuilder;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
|
|
2
2
|
import { CreateTableNode } from '../operation-node/create-table-node.js';
|
|
3
|
-
import { DataTypeNode, } from '../operation-node/data-type-node.js';
|
|
4
|
-
import { isOperationNodeSource, } from '../operation-node/operation-node-source.js';
|
|
5
3
|
import { preventAwait } from '../util/prevent-await.js';
|
|
6
4
|
import { ColumnDefinitionBuilder } from './column-definition-builder.js';
|
|
5
|
+
import { freeze } from '../util/object-utils.js';
|
|
6
|
+
import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constraint-node.js';
|
|
7
|
+
import { ColumnNode } from '../operation-node/column-node.js';
|
|
8
|
+
import { TableNode } from '../operation-node/table-node.js';
|
|
9
|
+
import { ForeignKeyConstraintBuilder } from './foreign-key-constraint-builder.js';
|
|
10
|
+
import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
|
|
7
11
|
export class CreateTableBuilder {
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
constructor(args) {
|
|
12
|
-
this.#queryId = args.queryId;
|
|
13
|
-
this.#createTableNode = args.createTableNode;
|
|
14
|
-
this.#executor = args.executor;
|
|
12
|
+
#props;
|
|
13
|
+
constructor(props) {
|
|
14
|
+
this.#props = freeze(props);
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Adds the "if not exists" modifier.
|
|
@@ -20,9 +20,8 @@ export class CreateTableBuilder {
|
|
|
20
20
|
*/
|
|
21
21
|
ifNotExists() {
|
|
22
22
|
return new CreateTableBuilder({
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
createTableNode: CreateTableNode.cloneWithModifier(this.#createTableNode, 'IfNotExists'),
|
|
23
|
+
...this.#props,
|
|
24
|
+
createTableNode: CreateTableNode.cloneWithModifier(this.#props.createTableNode, 'IfNotExists'),
|
|
26
25
|
});
|
|
27
26
|
}
|
|
28
27
|
/**
|
|
@@ -40,16 +39,13 @@ export class CreateTableBuilder {
|
|
|
40
39
|
* ```
|
|
41
40
|
*/
|
|
42
41
|
addColumn(columnName, dataType, build) {
|
|
43
|
-
let columnBuilder = new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName,
|
|
44
|
-
? dataType.toOperationNode()
|
|
45
|
-
: DataTypeNode.create(dataType)));
|
|
42
|
+
let columnBuilder = new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName, parseDataTypeExpression(dataType)));
|
|
46
43
|
if (build) {
|
|
47
44
|
columnBuilder = build(columnBuilder);
|
|
48
45
|
}
|
|
49
46
|
return new CreateTableBuilder({
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
createTableNode: CreateTableNode.cloneWithColumn(this.#createTableNode, columnBuilder.toOperationNode()),
|
|
47
|
+
...this.#props,
|
|
48
|
+
createTableNode: CreateTableNode.cloneWithColumn(this.#props.createTableNode, columnBuilder.toOperationNode()),
|
|
53
49
|
});
|
|
54
50
|
}
|
|
55
51
|
/**
|
|
@@ -62,9 +58,8 @@ export class CreateTableBuilder {
|
|
|
62
58
|
*/
|
|
63
59
|
addPrimaryKeyConstraint(constraintName, columns) {
|
|
64
60
|
return new CreateTableBuilder({
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
createTableNode: CreateTableNode.cloneWithPrimaryKeyConstraint(this.#createTableNode, constraintName, columns),
|
|
61
|
+
...this.#props,
|
|
62
|
+
createTableNode: CreateTableNode.cloneWithPrimaryKeyConstraint(this.#props.createTableNode, constraintName, columns),
|
|
68
63
|
});
|
|
69
64
|
}
|
|
70
65
|
/**
|
|
@@ -77,9 +72,8 @@ export class CreateTableBuilder {
|
|
|
77
72
|
*/
|
|
78
73
|
addUniqueConstraint(constraintName, columns) {
|
|
79
74
|
return new CreateTableBuilder({
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
createTableNode: CreateTableNode.cloneWithUniqueConstraint(this.#createTableNode, constraintName, columns),
|
|
75
|
+
...this.#props,
|
|
76
|
+
createTableNode: CreateTableNode.cloneWithUniqueConstraint(this.#props.createTableNode, constraintName, columns),
|
|
83
77
|
});
|
|
84
78
|
}
|
|
85
79
|
/**
|
|
@@ -92,9 +86,8 @@ export class CreateTableBuilder {
|
|
|
92
86
|
*/
|
|
93
87
|
addCheckConstraint(constraintName, checkExpression) {
|
|
94
88
|
return new CreateTableBuilder({
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
createTableNode: CreateTableNode.cloneWithCheckConstraint(this.#createTableNode, constraintName, checkExpression),
|
|
89
|
+
...this.#props,
|
|
90
|
+
createTableNode: CreateTableNode.cloneWithCheckConstraint(this.#props.createTableNode, constraintName, checkExpression),
|
|
98
91
|
});
|
|
99
92
|
}
|
|
100
93
|
/**
|
|
@@ -109,22 +102,36 @@ export class CreateTableBuilder {
|
|
|
109
102
|
* ['id'],
|
|
110
103
|
* )
|
|
111
104
|
* ```
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* addForeignKeyConstraint(
|
|
109
|
+
* 'owner_id_foreign',
|
|
110
|
+
* ['owner_id1', 'owner_id2'],
|
|
111
|
+
* 'person',
|
|
112
|
+
* ['id1', 'id2'],
|
|
113
|
+
* (cb) => cb.onDelete('cascade')
|
|
114
|
+
* )
|
|
115
|
+
* ```
|
|
112
116
|
*/
|
|
113
|
-
addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns) {
|
|
117
|
+
addForeignKeyConstraint(constraintName, columns, targetTable, targetColumns, build) {
|
|
118
|
+
let builder = new ForeignKeyConstraintBuilder(ForeignKeyConstraintNode.create(columns.map(ColumnNode.create), TableNode.create(targetTable), targetColumns.map(ColumnNode.create), constraintName));
|
|
119
|
+
if (build) {
|
|
120
|
+
builder = build(builder);
|
|
121
|
+
}
|
|
114
122
|
return new CreateTableBuilder({
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
createTableNode: CreateTableNode.cloneWithForeignKeyConstraint(this.#createTableNode, constraintName, columns, targetTable, targetColumns),
|
|
123
|
+
...this.#props,
|
|
124
|
+
createTableNode: CreateTableNode.cloneWithForeignKeyConstraint(this.#props.createTableNode, builder.toOperationNode()),
|
|
118
125
|
});
|
|
119
126
|
}
|
|
120
127
|
toOperationNode() {
|
|
121
|
-
return this.#executor.transformQuery(this.#createTableNode, this.#queryId);
|
|
128
|
+
return this.#props.executor.transformQuery(this.#props.createTableNode, this.#props.queryId);
|
|
122
129
|
}
|
|
123
130
|
compile() {
|
|
124
|
-
return this.#executor.compileQuery(this.toOperationNode(), this.#queryId);
|
|
131
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
125
132
|
}
|
|
126
133
|
async execute() {
|
|
127
|
-
await this.#executor.executeQuery(this.compile(), this.#queryId);
|
|
134
|
+
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
128
135
|
}
|
|
129
136
|
}
|
|
130
137
|
preventAwait(CreateTableBuilder, "don't await CreateTableBuilder instances directly. To execute the query you need to call `execute`");
|
|
@@ -6,7 +6,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
|
6
6
|
import { QueryId } from '../util/query-id.js';
|
|
7
7
|
export declare class DropIndexBuilder implements OperationNodeSource, Compilable {
|
|
8
8
|
#private;
|
|
9
|
-
constructor(
|
|
9
|
+
constructor(props: DropIndexBuilderProps);
|
|
10
10
|
/**
|
|
11
11
|
* Specifies the table the index was created for. This is not needed
|
|
12
12
|
* in all dialects.
|
|
@@ -17,8 +17,8 @@ export declare class DropIndexBuilder implements OperationNodeSource, Compilable
|
|
|
17
17
|
compile(): CompiledQuery;
|
|
18
18
|
execute(): Promise<void>;
|
|
19
19
|
}
|
|
20
|
-
export interface
|
|
21
|
-
queryId: QueryId;
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
export interface DropIndexBuilderProps {
|
|
21
|
+
readonly queryId: QueryId;
|
|
22
|
+
readonly executor: QueryExecutor;
|
|
23
|
+
readonly dropIndexNode: DropIndexNode;
|
|
24
24
|
}
|