kysely 0.7.1 → 0.7.5
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 +24 -19
- package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
- package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-driver.js +1 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +0 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -4
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -18
- package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +0 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -2
- package/dist/cjs/driver/database-connection.d.ts +2 -1
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/single-connection-provider.d.ts +0 -1
- package/dist/cjs/driver/single-connection-provider.js +2 -2
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/kysely.d.ts +7 -6
- package/dist/cjs/kysely.js +8 -6
- package/dist/cjs/migration/migration.js +11 -10
- package/dist/cjs/operation-node/alter-column-node.d.ts +2 -2
- package/dist/cjs/operation-node/alter-column-node.js +2 -2
- package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
- package/dist/cjs/operation-node/alter-table-node.js +2 -2
- package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
- package/dist/cjs/operation-node/column-definition-node.js +2 -2
- package/dist/cjs/operation-node/create-index-node.d.ts +2 -2
- package/dist/cjs/operation-node/create-index-node.js +2 -2
- 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/drop-index-node.d.ts +3 -3
- package/dist/cjs/operation-node/drop-index-node.js +2 -2
- 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/insert-query-node.d.ts +5 -2
- package/dist/cjs/operation-node/insert-query-node.js +2 -9
- 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/on-conflict-node.d.ts +2 -2
- package/dist/cjs/operation-node/on-conflict-node.js +2 -2
- package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +14 -0
- package/dist/cjs/operation-node/on-duplicate-key-node.js +18 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- 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 +34 -7
- package/dist/cjs/parser/parse-context.js +42 -34
- 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} +7 -7
- 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 +47 -8
- package/dist/cjs/query-builder/query-builder.js +163 -91
- package/dist/cjs/query-builder/type-utils.d.ts +5 -5
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +26 -6
- 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 +31 -8
- package/dist/cjs/schema/alter-table-builder.js +80 -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/cjs/transformers/with-schema-transformer.d.ts +0 -5
- package/dist/cjs/transformers/with-schema-transformer.js +21 -21
- package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-driver.js +1 -0
- package/dist/esm/dialect/mysql/mysql-introspector.d.ts +0 -1
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -4
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -18
- package/dist/esm/dialect/postgres/postgres-introspector.d.ts +0 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +2 -2
- package/dist/esm/driver/database-connection.d.ts +2 -1
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/single-connection-provider.d.ts +0 -1
- package/dist/esm/driver/single-connection-provider.js +2 -2
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/kysely.d.ts +7 -6
- package/dist/esm/kysely.js +8 -6
- package/dist/esm/migration/migration.js +12 -11
- package/dist/esm/operation-node/alter-column-node.d.ts +2 -2
- package/dist/esm/operation-node/alter-column-node.js +2 -2
- package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
- package/dist/esm/operation-node/alter-table-node.js +2 -2
- package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
- package/dist/esm/operation-node/column-definition-node.js +2 -2
- package/dist/esm/operation-node/create-index-node.d.ts +2 -2
- package/dist/esm/operation-node/create-index-node.js +2 -2
- 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/drop-index-node.d.ts +3 -3
- package/dist/esm/operation-node/drop-index-node.js +2 -2
- 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/insert-query-node.d.ts +5 -2
- package/dist/esm/operation-node/insert-query-node.js +2 -9
- 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/on-conflict-node.d.ts +2 -2
- package/dist/esm/operation-node/on-conflict-node.js +2 -2
- package/dist/esm/operation-node/on-duplicate-key-node.d.ts +14 -0
- package/dist/esm/operation-node/on-duplicate-key-node.js +15 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +12 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +4 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- 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 +34 -7
- package/dist/esm/parser/parse-context.js +40 -32
- 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} +7 -7
- 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 +47 -8
- package/dist/esm/query-builder/query-builder.js +165 -93
- package/dist/esm/query-builder/type-utils.d.ts +5 -5
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -1
- package/dist/esm/query-compiler/default-query-compiler.js +27 -7
- 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 +31 -8
- package/dist/esm/schema/alter-table-builder.js +78 -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/dist/esm/transformers/with-schema-transformer.d.ts +0 -5
- package/dist/esm/transformers/with-schema-transformer.js +21 -21
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@ import { DataTypeNode } from '../operation-node/data-type-node.js';
|
|
|
2
2
|
import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
|
|
3
3
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
4
4
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getLast, freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
|
|
6
6
|
export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
7
7
|
#sqlFragments = [];
|
|
8
8
|
#bindings = [];
|
|
@@ -32,7 +32,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
32
32
|
this.append(' ');
|
|
33
33
|
}
|
|
34
34
|
this.append('select ');
|
|
35
|
-
if (node.distinctOnSelections
|
|
35
|
+
if (node.distinctOnSelections) {
|
|
36
36
|
this.compileDistinctOn(node.distinctOnSelections);
|
|
37
37
|
this.append(' ');
|
|
38
38
|
}
|
|
@@ -118,8 +118,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
118
118
|
this.visitNode(node.with);
|
|
119
119
|
this.append(' ');
|
|
120
120
|
}
|
|
121
|
-
this.append(
|
|
122
|
-
|
|
121
|
+
this.append('insert');
|
|
122
|
+
if (node.ignore) {
|
|
123
|
+
this.append(' ignore');
|
|
124
|
+
}
|
|
125
|
+
this.append(' into ');
|
|
123
126
|
this.visitNode(node.into);
|
|
124
127
|
if (node.columns) {
|
|
125
128
|
this.append(' (');
|
|
@@ -134,6 +137,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
134
137
|
this.append(' ');
|
|
135
138
|
this.visitNode(node.onConflict);
|
|
136
139
|
}
|
|
140
|
+
if (node.onDuplicateKey) {
|
|
141
|
+
this.append(' ');
|
|
142
|
+
this.visitNode(node.onDuplicateKey);
|
|
143
|
+
}
|
|
137
144
|
if (node.returning) {
|
|
138
145
|
this.append(' ');
|
|
139
146
|
this.visitNode(node.returning);
|
|
@@ -142,9 +149,6 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
142
149
|
this.append(')');
|
|
143
150
|
}
|
|
144
151
|
}
|
|
145
|
-
getInsertInto(node) {
|
|
146
|
-
return 'insert into';
|
|
147
|
-
}
|
|
148
152
|
visitDeleteQuery(node) {
|
|
149
153
|
const isSubQuery = this.nodeStack.find(QueryNode.is) !== node;
|
|
150
154
|
if (isSubQuery) {
|
|
@@ -330,6 +334,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
330
334
|
this.append(' on delete ');
|
|
331
335
|
this.append(node.onDelete);
|
|
332
336
|
}
|
|
337
|
+
if (node.onUpdate) {
|
|
338
|
+
this.append(' on update ');
|
|
339
|
+
this.append(node.onUpdate);
|
|
340
|
+
}
|
|
333
341
|
}
|
|
334
342
|
visitDropTable(node) {
|
|
335
343
|
this.append('drop table ');
|
|
@@ -420,6 +428,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
420
428
|
this.compileList(node.updates);
|
|
421
429
|
}
|
|
422
430
|
}
|
|
431
|
+
visitOnDuplicateKey(node) {
|
|
432
|
+
this.append('on duplicate key update ');
|
|
433
|
+
this.compileList(node.updates);
|
|
434
|
+
}
|
|
423
435
|
visitCreateIndex(node) {
|
|
424
436
|
this.append('create ');
|
|
425
437
|
if (node.unique) {
|
|
@@ -512,6 +524,14 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
|
|
|
512
524
|
this.compileList(node.columns);
|
|
513
525
|
this.append(') ');
|
|
514
526
|
this.visitNode(node.references);
|
|
527
|
+
if (node.onDelete) {
|
|
528
|
+
this.append(' on delete ');
|
|
529
|
+
this.append(node.onDelete);
|
|
530
|
+
}
|
|
531
|
+
if (node.onUpdate) {
|
|
532
|
+
this.append(' on update ');
|
|
533
|
+
this.append(node.onUpdate);
|
|
534
|
+
}
|
|
515
535
|
}
|
|
516
536
|
visitList(node) {
|
|
517
537
|
this.compileList(node.items);
|
|
@@ -5,7 +5,7 @@ import { QueryExecutor } from './query-executor/query-executor.js';
|
|
|
5
5
|
import { RawBuilder } from './raw-builder/raw-builder.js';
|
|
6
6
|
import { CommonTableExpression, QueryCreatorWithCommonTableExpression } from './parser/with-parser.js';
|
|
7
7
|
import { WithNode } from './operation-node/with-node.js';
|
|
8
|
-
import {
|
|
8
|
+
import { ParseContext } from './parser/parse-context.js';
|
|
9
9
|
export declare class QueryCreator<DB> {
|
|
10
10
|
#private;
|
|
11
11
|
constructor(props: QueryCreatorProps);
|
|
@@ -378,7 +378,7 @@ export declare class QueryCreator<DB> {
|
|
|
378
378
|
raw<T = unknown>(sql: string, params?: any[]): RawBuilder<T>;
|
|
379
379
|
}
|
|
380
380
|
export interface QueryCreatorProps {
|
|
381
|
-
readonly adapter: DialectAdapter;
|
|
382
381
|
readonly executor: QueryExecutor;
|
|
382
|
+
readonly parseContext: ParseContext;
|
|
383
383
|
readonly withNode?: WithNode;
|
|
384
384
|
}
|
|
@@ -10,7 +10,6 @@ import { WithNode } from './operation-node/with-node.js';
|
|
|
10
10
|
import { createQueryId } from './util/query-id.js';
|
|
11
11
|
import { WithSchemaPlugin } from './plugin/with-schema/with-schema-plugin.js';
|
|
12
12
|
import { freeze } from './util/object-utils.js';
|
|
13
|
-
import { createParseContext } from './parser/parse-context.js';
|
|
14
13
|
export class QueryCreator {
|
|
15
14
|
#props;
|
|
16
15
|
constructor(props) {
|
|
@@ -20,8 +19,8 @@ export class QueryCreator {
|
|
|
20
19
|
return new QueryBuilder({
|
|
21
20
|
queryId: createQueryId(),
|
|
22
21
|
executor: this.#props.executor,
|
|
23
|
-
|
|
24
|
-
queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#parseContext, from), this.#props.withNode),
|
|
22
|
+
parseContext: this.#props.parseContext,
|
|
23
|
+
queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#props.parseContext, from), this.#props.withNode),
|
|
25
24
|
});
|
|
26
25
|
}
|
|
27
26
|
/**
|
|
@@ -69,7 +68,7 @@ export class QueryCreator {
|
|
|
69
68
|
return new QueryBuilder({
|
|
70
69
|
queryId: createQueryId(),
|
|
71
70
|
executor: this.#props.executor,
|
|
72
|
-
|
|
71
|
+
parseContext: this.#props.parseContext,
|
|
73
72
|
queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode),
|
|
74
73
|
});
|
|
75
74
|
}
|
|
@@ -91,8 +90,8 @@ export class QueryCreator {
|
|
|
91
90
|
return new QueryBuilder({
|
|
92
91
|
queryId: createQueryId(),
|
|
93
92
|
executor: this.#props.executor,
|
|
94
|
-
|
|
95
|
-
queryNode: DeleteQueryNode.create(parseTableExpression(this.#parseContext, table), this.#props.withNode),
|
|
93
|
+
parseContext: this.#props.parseContext,
|
|
94
|
+
queryNode: DeleteQueryNode.create(parseTableExpression(this.#props.parseContext, table), this.#props.withNode),
|
|
96
95
|
});
|
|
97
96
|
}
|
|
98
97
|
/**
|
|
@@ -117,8 +116,8 @@ export class QueryCreator {
|
|
|
117
116
|
return new QueryBuilder({
|
|
118
117
|
queryId: createQueryId(),
|
|
119
118
|
executor: this.#props.executor,
|
|
120
|
-
|
|
121
|
-
queryNode: UpdateQueryNode.create(parseTableExpression(this.#parseContext, table), this.#props.withNode),
|
|
119
|
+
parseContext: this.#props.parseContext,
|
|
120
|
+
queryNode: UpdateQueryNode.create(parseTableExpression(this.#props.parseContext, table), this.#props.withNode),
|
|
122
121
|
});
|
|
123
122
|
}
|
|
124
123
|
/**
|
|
@@ -144,7 +143,7 @@ export class QueryCreator {
|
|
|
144
143
|
* ```
|
|
145
144
|
*/
|
|
146
145
|
with(name, expression) {
|
|
147
|
-
const cte = parseCommonTableExpression(this.#parseContext, name, expression);
|
|
146
|
+
const cte = parseCommonTableExpression(this.#props.parseContext, name, expression);
|
|
148
147
|
return new QueryCreator({
|
|
149
148
|
...this.#props,
|
|
150
149
|
withNode: this.#props.withNode
|
|
@@ -322,7 +321,4 @@ export class QueryCreator {
|
|
|
322
321
|
executor: this.#props.executor,
|
|
323
322
|
});
|
|
324
323
|
}
|
|
325
|
-
get #parseContext() {
|
|
326
|
-
return createParseContext(this.#props.adapter);
|
|
327
|
-
}
|
|
328
324
|
}
|
|
@@ -2,15 +2,16 @@ import { AlterColumnNode } from '../operation-node/alter-column-node.js';
|
|
|
2
2
|
import { AlterTableNode } from '../operation-node/alter-table-node.js';
|
|
3
3
|
import { ColumnDataType } from '../operation-node/data-type-node.js';
|
|
4
4
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
5
|
-
import {
|
|
5
|
+
import { OnModifyForeignAction } from '../operation-node/references-node.js';
|
|
6
6
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
7
|
-
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
8
7
|
import { Compilable } from '../util/compilable.js';
|
|
9
8
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
10
9
|
import { ColumnDefinitionBuilder, ColumnDefinitionBuilderInterface } from './column-definition-builder.js';
|
|
11
10
|
import { AnyRawBuilder } from '../query-builder/type-utils.js';
|
|
12
11
|
import { QueryId } from '../util/query-id.js';
|
|
13
12
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
13
|
+
import { DataTypeExpression } from '../parser/data-type-parser.js';
|
|
14
|
+
import { ForeignKeyConstraintBuilder, ForeignKeyConstraintBuilderInterface } from './foreign-key-constraint-builder.js';
|
|
14
15
|
export declare class AlterTableBuilder {
|
|
15
16
|
#private;
|
|
16
17
|
constructor(props: AlterTableBuilderProps);
|
|
@@ -19,8 +20,16 @@ export declare class AlterTableBuilder {
|
|
|
19
20
|
alterColumn(column: string): AlterColumnBuilder;
|
|
20
21
|
dropColumn(column: string): AlterTableExecutor;
|
|
21
22
|
renameColumn(column: string, newColumn: string): AlterTableExecutor;
|
|
22
|
-
addColumn(columnName: string, dataType:
|
|
23
|
-
|
|
23
|
+
addColumn(columnName: string, dataType: DataTypeExpression): AlterTableAddColumnBuilder;
|
|
24
|
+
/**
|
|
25
|
+
* Creates an `alter table modify column` query. The `modify column` statement
|
|
26
|
+
* is only implemeted by MySQL and oracle AFAIK. On other databases you
|
|
27
|
+
* should use the `alterColumn` method.
|
|
28
|
+
*/
|
|
29
|
+
modifyColumn(columnName: string, dataType: DataTypeExpression): AlterTableModifyColumnBuilder;
|
|
30
|
+
addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor;
|
|
31
|
+
addCheckConstraint(constraintName: string, checkExpression: string): AlterTableExecutor;
|
|
32
|
+
addForeignKeyConstraint(constraintName: string, columns: string[], targetTable: string, targetColumns: string[]): AlterTableAddForeignKeyConstraintBuilder;
|
|
24
33
|
}
|
|
25
34
|
export interface AlterTableBuilderProps {
|
|
26
35
|
readonly queryId: QueryId;
|
|
@@ -48,13 +57,14 @@ export declare class AlterTableExecutor implements OperationNodeSource, Compilab
|
|
|
48
57
|
}
|
|
49
58
|
export interface AlterTableExecutorProps extends AlterTableBuilderProps {
|
|
50
59
|
}
|
|
51
|
-
export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableAddColumnBuilder
|
|
60
|
+
export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableAddColumnBuilder>, OperationNodeSource, Compilable {
|
|
52
61
|
#private;
|
|
53
62
|
constructor(props: AlterTableAddColumnBuilderProps);
|
|
54
63
|
increments(): AlterTableAddColumnBuilder;
|
|
55
64
|
primaryKey(): AlterTableAddColumnBuilder;
|
|
56
65
|
references(ref: string): AlterTableAddColumnBuilder;
|
|
57
|
-
onDelete(onDelete:
|
|
66
|
+
onDelete(onDelete: OnModifyForeignAction): AlterTableAddColumnBuilder;
|
|
67
|
+
onUpdate(onDelete: OnModifyForeignAction): AlterTableAddColumnBuilder;
|
|
58
68
|
unique(): AlterTableAddColumnBuilder;
|
|
59
69
|
notNull(): AlterTableAddColumnBuilder;
|
|
60
70
|
defaultTo(value: PrimitiveValue | AnyRawBuilder): AlterTableAddColumnBuilder;
|
|
@@ -66,13 +76,14 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
|
|
|
66
76
|
export interface AlterTableAddColumnBuilderProps extends AlterTableBuilderProps {
|
|
67
77
|
readonly columnBuilder: ColumnDefinitionBuilder;
|
|
68
78
|
}
|
|
69
|
-
export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableModifyColumnBuilder
|
|
79
|
+
export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableModifyColumnBuilder>, OperationNodeSource, Compilable {
|
|
70
80
|
#private;
|
|
71
81
|
constructor(props: AlterTableModifyColumnBuilderProps);
|
|
72
82
|
increments(): AlterTableModifyColumnBuilder;
|
|
73
83
|
primaryKey(): AlterTableModifyColumnBuilder;
|
|
74
84
|
references(ref: string): AlterTableModifyColumnBuilder;
|
|
75
|
-
onDelete(onDelete:
|
|
85
|
+
onDelete(onDelete: OnModifyForeignAction): AlterTableModifyColumnBuilder;
|
|
86
|
+
onUpdate(onUpdate: OnModifyForeignAction): AlterTableModifyColumnBuilder;
|
|
76
87
|
unique(): AlterTableModifyColumnBuilder;
|
|
77
88
|
notNull(): AlterTableModifyColumnBuilder;
|
|
78
89
|
defaultTo(value: PrimitiveValue | AnyRawBuilder): AlterTableModifyColumnBuilder;
|
|
@@ -84,3 +95,15 @@ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBu
|
|
|
84
95
|
export interface AlterTableModifyColumnBuilderProps extends AlterTableBuilderProps {
|
|
85
96
|
readonly columnBuilder: ColumnDefinitionBuilder;
|
|
86
97
|
}
|
|
98
|
+
export declare class AlterTableAddForeignKeyConstraintBuilder implements ForeignKeyConstraintBuilderInterface<AlterTableAddForeignKeyConstraintBuilder>, OperationNodeSource, Compilable {
|
|
99
|
+
#private;
|
|
100
|
+
constructor(props: AlterTableAddForeignKeyConstraintBuilderProps);
|
|
101
|
+
onDelete(onDelete: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
|
|
102
|
+
onUpdate(onUpdate: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
|
|
103
|
+
toOperationNode(): AlterTableNode;
|
|
104
|
+
compile(): CompiledQuery;
|
|
105
|
+
execute(): Promise<void>;
|
|
106
|
+
}
|
|
107
|
+
export interface AlterTableAddForeignKeyConstraintBuilderProps extends AlterTableBuilderProps {
|
|
108
|
+
readonly constraintBuilder: ForeignKeyConstraintBuilder;
|
|
109
|
+
}
|
|
@@ -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,17 +66,40 @@ 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
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Creates an `alter table modify column` query. The `modify column` statement
|
|
74
|
+
* is only implemeted by MySQL and oracle AFAIK. On other databases you
|
|
75
|
+
* should use the `alterColumn` method.
|
|
76
|
+
*/
|
|
67
77
|
modifyColumn(columnName, dataType) {
|
|
68
78
|
return new AlterTableModifyColumnBuilder({
|
|
69
79
|
...this.#props,
|
|
70
|
-
columnBuilder: new ColumnDefinitionBuilder(ColumnDefinitionNode.create(columnName,
|
|
71
|
-
|
|
72
|
-
|
|
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)),
|
|
73
103
|
});
|
|
74
104
|
}
|
|
75
105
|
}
|
|
@@ -175,6 +205,12 @@ export class AlterTableAddColumnBuilder {
|
|
|
175
205
|
columnBuilder: this.#props.columnBuilder.onDelete(onDelete),
|
|
176
206
|
});
|
|
177
207
|
}
|
|
208
|
+
onUpdate(onDelete) {
|
|
209
|
+
return new AlterTableAddColumnBuilder({
|
|
210
|
+
...this.#props,
|
|
211
|
+
columnBuilder: this.#props.columnBuilder.onUpdate(onDelete),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
178
214
|
unique() {
|
|
179
215
|
return new AlterTableAddColumnBuilder({
|
|
180
216
|
...this.#props,
|
|
@@ -240,6 +276,12 @@ export class AlterTableModifyColumnBuilder {
|
|
|
240
276
|
columnBuilder: this.#props.columnBuilder.onDelete(onDelete),
|
|
241
277
|
});
|
|
242
278
|
}
|
|
279
|
+
onUpdate(onUpdate) {
|
|
280
|
+
return new AlterTableModifyColumnBuilder({
|
|
281
|
+
...this.#props,
|
|
282
|
+
columnBuilder: this.#props.columnBuilder.onUpdate(onUpdate),
|
|
283
|
+
});
|
|
284
|
+
}
|
|
243
285
|
unique() {
|
|
244
286
|
return new AlterTableModifyColumnBuilder({
|
|
245
287
|
...this.#props,
|
|
@@ -276,8 +318,38 @@ export class AlterTableModifyColumnBuilder {
|
|
|
276
318
|
await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
|
|
277
319
|
}
|
|
278
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
|
+
}
|
|
279
350
|
preventAwait(AlterTableBuilder, "don't await AlterTableBuilder instances");
|
|
280
351
|
preventAwait(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
|
|
281
352
|
preventAwait(AlterTableExecutor, "don't await AlterTableExecutor instances directly. To execute the query you need to call `execute`");
|
|
282
353
|
preventAwait(AlterTableAddColumnBuilder, "don't await AlterTableAddColumnBuilder instances directly. To execute the query you need to call `execute`");
|
|
283
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`");
|