kysely 0.19.11 → 0.20.1
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 +1 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/cjs/dialect/postgres/postgres-introspector.js +17 -9
- package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +9 -2
- package/dist/cjs/operation-node/create-table-node.js +18 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/delete-query-node.js +6 -0
- package/dist/cjs/operation-node/explain-node.d.ts +16 -0
- package/dist/cjs/operation-node/explain-node.js +19 -0
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/cjs/operation-node/insert-query-node.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +14 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/reference-node.d.ts +1 -1
- package/dist/cjs/operation-node/reference-node.js +1 -2
- package/dist/cjs/operation-node/references-node.d.ts +3 -1
- package/dist/cjs/operation-node/references-node.js +8 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/selection-node.d.ts +2 -1
- package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
- package/dist/cjs/operation-node/update-query-node.js +6 -0
- package/dist/cjs/parser/on-commit-action-parse.d.ts +2 -0
- package/dist/cjs/parser/on-commit-action-parse.js +11 -0
- package/dist/cjs/parser/on-modify-action-parser.d.ts +2 -0
- package/dist/cjs/parser/on-modify-action-parser.js +11 -0
- package/dist/cjs/parser/select-parser.js +2 -1
- package/dist/cjs/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/cjs/query-builder/delete-query-builder.js +24 -0
- package/dist/cjs/query-builder/function-builder.d.ts +3 -3
- package/dist/cjs/query-builder/insert-query-builder.d.ts +20 -2
- package/dist/cjs/query-builder/insert-query-builder.js +26 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +38 -1
- package/dist/cjs/query-builder/select-query-builder.js +45 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +20 -1
- package/dist/cjs/query-builder/update-query-builder.js +25 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +7 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +74 -1
- package/dist/cjs/raw-builder/sql.d.ts +96 -96
- package/dist/cjs/raw-builder/sql.js +0 -96
- package/dist/cjs/schema/column-definition-builder.js +3 -2
- package/dist/cjs/schema/create-table-builder.d.ts +54 -0
- package/dist/cjs/schema/create-table-builder.js +66 -1
- package/dist/cjs/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/cjs/util/explainable.d.ts +5 -0
- package/dist/cjs/util/explainable.js +2 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +5 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +16 -0
- package/dist/esm/dialect/postgres/postgres-introspector.js +17 -9
- package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +1 -3
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +3 -8
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +10 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/operation-node/create-table-node.d.ts +9 -2
- package/dist/esm/operation-node/create-table-node.js +17 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
- package/dist/esm/operation-node/delete-query-node.js +6 -0
- package/dist/esm/operation-node/explain-node.d.ts +16 -0
- package/dist/esm/operation-node/explain-node.js +17 -0
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +2 -2
- package/dist/esm/operation-node/insert-query-node.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +14 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/reference-node.d.ts +1 -1
- package/dist/esm/operation-node/reference-node.js +1 -2
- package/dist/esm/operation-node/references-node.d.ts +3 -1
- package/dist/esm/operation-node/references-node.js +7 -0
- package/dist/esm/operation-node/select-query-node.d.ts +3 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/selection-node.d.ts +2 -1
- package/dist/esm/operation-node/update-query-node.d.ts +3 -0
- package/dist/esm/operation-node/update-query-node.js +6 -0
- package/dist/esm/parser/on-commit-action-parse.d.ts +2 -0
- package/dist/esm/parser/on-commit-action-parse.js +8 -0
- package/dist/esm/parser/on-modify-action-parser.d.ts +2 -0
- package/dist/esm/parser/on-modify-action-parser.js +8 -0
- package/dist/esm/parser/select-parser.js +2 -1
- package/dist/esm/query-builder/delete-query-builder.d.ts +19 -1
- package/dist/esm/query-builder/delete-query-builder.js +24 -0
- package/dist/esm/query-builder/function-builder.d.ts +3 -3
- package/dist/esm/query-builder/insert-query-builder.d.ts +20 -2
- package/dist/esm/query-builder/insert-query-builder.js +26 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +38 -1
- package/dist/esm/query-builder/select-query-builder.js +45 -2
- package/dist/esm/query-builder/update-query-builder.d.ts +20 -1
- package/dist/esm/query-builder/update-query-builder.js +25 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +7 -0
- package/dist/esm/query-compiler/default-query-compiler.js +74 -1
- package/dist/esm/raw-builder/sql.d.ts +96 -96
- package/dist/esm/raw-builder/sql.js +0 -96
- package/dist/esm/schema/column-definition-builder.js +3 -2
- package/dist/esm/schema/create-table-builder.d.ts +54 -0
- package/dist/esm/schema/create-table-builder.js +66 -1
- package/dist/esm/schema/foreign-key-constraint-builder.js +3 -2
- package/dist/esm/util/explainable.d.ts +5 -0
- package/dist/esm/util/explainable.js +2 -0
- package/package.json +3 -1
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
/// <reference types="./sqlite-query-compiler.d.ts" />
|
|
2
2
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
3
|
+
const ID_WRAP_REGEX = /"/g;
|
|
3
4
|
export class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
4
5
|
getCurrentParameterPlaceholder() {
|
|
5
6
|
return '?';
|
|
6
7
|
}
|
|
8
|
+
getLeftExplainOptionsWrapper() {
|
|
9
|
+
return '';
|
|
10
|
+
}
|
|
11
|
+
getRightExplainOptionsWrapper() {
|
|
12
|
+
return '';
|
|
13
|
+
}
|
|
7
14
|
getLeftIdentifierWrapper() {
|
|
8
15
|
return '"';
|
|
9
16
|
}
|
|
@@ -13,4 +20,7 @@ export class SqliteQueryCompiler extends DefaultQueryCompiler {
|
|
|
13
20
|
getAutoIncrement() {
|
|
14
21
|
return 'autoincrement';
|
|
15
22
|
}
|
|
23
|
+
sanitizeIdentifier(identifier) {
|
|
24
|
+
return identifier.replace(ID_WRAP_REGEX, '""');
|
|
25
|
+
}
|
|
16
26
|
}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -73,6 +73,7 @@ export * from './migration/file-migration-provider.js';
|
|
|
73
73
|
export * from './plugin/kysely-plugin.js';
|
|
74
74
|
export * from './plugin/camel-case/camel-case-plugin.js';
|
|
75
75
|
export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
|
|
76
|
+
export * from './plugin/with-schema/with-schema-plugin.js';
|
|
76
77
|
export * from './operation-node/add-column-node.js';
|
|
77
78
|
export * from './operation-node/add-constraint-node.js';
|
|
78
79
|
export * from './operation-node/alias-node.js';
|
|
@@ -149,8 +150,10 @@ export * from './operation-node/value-node.js';
|
|
|
149
150
|
export * from './operation-node/values-node.js';
|
|
150
151
|
export * from './operation-node/where-node.js';
|
|
151
152
|
export * from './operation-node/with-node.js';
|
|
153
|
+
export * from './operation-node/explain-node.js';
|
|
152
154
|
export * from './util/column-type.js';
|
|
153
155
|
export * from './util/compilable.js';
|
|
156
|
+
export * from './util/explainable.js';
|
|
154
157
|
export * from './util/log.js';
|
|
155
158
|
export { AnyColumn, UnknownRow, AnySelectQueryBuilder, } from './util/type-utils.js';
|
|
156
159
|
export { SelectExpression, SelectExpressionOrList, Selection, } from './parser/select-parser.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -74,6 +74,7 @@ export * from './migration/file-migration-provider.js';
|
|
|
74
74
|
export * from './plugin/kysely-plugin.js';
|
|
75
75
|
export * from './plugin/camel-case/camel-case-plugin.js';
|
|
76
76
|
export * from './plugin/deduplicate-joins/deduplicate-joins-plugin.js';
|
|
77
|
+
export * from './plugin/with-schema/with-schema-plugin.js';
|
|
77
78
|
export * from './operation-node/add-column-node.js';
|
|
78
79
|
export * from './operation-node/add-constraint-node.js';
|
|
79
80
|
export * from './operation-node/alias-node.js';
|
|
@@ -150,6 +151,8 @@ export * from './operation-node/value-node.js';
|
|
|
150
151
|
export * from './operation-node/values-node.js';
|
|
151
152
|
export * from './operation-node/where-node.js';
|
|
152
153
|
export * from './operation-node/with-node.js';
|
|
154
|
+
export * from './operation-node/explain-node.js';
|
|
153
155
|
export * from './util/column-type.js';
|
|
154
156
|
export * from './util/compilable.js';
|
|
157
|
+
export * from './util/explainable.js';
|
|
155
158
|
export * from './util/log.js';
|
|
@@ -2,8 +2,11 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
import { TableNode } from './table-node.js';
|
|
3
3
|
import { ConstraintNode } from './constraint-node.js';
|
|
4
4
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { ArrayItemType } from '../util/type-utils.js';
|
|
6
|
+
import { RawNode } from './raw-node.js';
|
|
7
|
+
export declare const ON_COMMIT_ACTIONS: string[];
|
|
8
|
+
export declare type OnCommitAction = ArrayItemType<typeof ON_COMMIT_ACTIONS>;
|
|
9
|
+
export declare type CreateTableNodeParams = Omit<CreateTableNode, 'kind' | 'table' | 'columns' | 'constraints' | 'frontModifiers' | 'endModifiers'>;
|
|
7
10
|
export interface CreateTableNode extends OperationNode {
|
|
8
11
|
readonly kind: 'CreateTableNode';
|
|
9
12
|
readonly table: TableNode;
|
|
@@ -12,6 +15,8 @@ export interface CreateTableNode extends OperationNode {
|
|
|
12
15
|
readonly temporary?: boolean;
|
|
13
16
|
readonly ifNotExists?: boolean;
|
|
14
17
|
readonly onCommit?: OnCommitAction;
|
|
18
|
+
readonly frontModifiers?: ReadonlyArray<RawNode>;
|
|
19
|
+
readonly endModifiers?: ReadonlyArray<RawNode>;
|
|
15
20
|
}
|
|
16
21
|
/**
|
|
17
22
|
* @internal
|
|
@@ -21,5 +26,7 @@ export declare const CreateTableNode: Readonly<{
|
|
|
21
26
|
create(table: TableNode): CreateTableNode;
|
|
22
27
|
cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
|
|
23
28
|
cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
|
|
29
|
+
cloneWithFrontModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
|
|
30
|
+
cloneWithEndModifier(createTable: CreateTableNode, modifier: RawNode): CreateTableNode;
|
|
24
31
|
cloneWith(createTable: CreateTableNode, params: CreateTableNodeParams): CreateTableNode;
|
|
25
32
|
}>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="./create-table-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
export const ON_COMMIT_ACTIONS = ['preserve rows', 'delete rows', 'drop'];
|
|
3
4
|
/**
|
|
4
5
|
* @internal
|
|
5
6
|
*/
|
|
@@ -28,6 +29,22 @@ export const CreateTableNode = freeze({
|
|
|
28
29
|
: freeze([constraint]),
|
|
29
30
|
});
|
|
30
31
|
},
|
|
32
|
+
cloneWithFrontModifier(createTable, modifier) {
|
|
33
|
+
return freeze({
|
|
34
|
+
...createTable,
|
|
35
|
+
frontModifiers: createTable.frontModifiers
|
|
36
|
+
? freeze([...createTable.frontModifiers, modifier])
|
|
37
|
+
: freeze([modifier]),
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
cloneWithEndModifier(createTable, modifier) {
|
|
41
|
+
return freeze({
|
|
42
|
+
...createTable,
|
|
43
|
+
endModifiers: createTable.endModifiers
|
|
44
|
+
? freeze([...createTable.endModifiers, modifier])
|
|
45
|
+
: freeze([modifier]),
|
|
46
|
+
});
|
|
47
|
+
},
|
|
31
48
|
cloneWith(createTable, params) {
|
|
32
49
|
return freeze({
|
|
33
50
|
...createTable,
|
|
@@ -8,6 +8,7 @@ import { WithNode } from './with-node.js';
|
|
|
8
8
|
import { LimitNode } from './limit-node.js';
|
|
9
9
|
import { OrderByNode } from './order-by-node.js';
|
|
10
10
|
import { OrderByItemNode } from './order-by-item-node.js';
|
|
11
|
+
import { ExplainNode } from './explain-node.js';
|
|
11
12
|
export interface DeleteQueryNode extends OperationNode {
|
|
12
13
|
readonly kind: 'DeleteQueryNode';
|
|
13
14
|
readonly from: FromNode;
|
|
@@ -17,6 +18,7 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
17
18
|
readonly with?: WithNode;
|
|
18
19
|
readonly orderBy?: OrderByNode;
|
|
19
20
|
readonly limit?: LimitNode;
|
|
21
|
+
readonly explain?: ExplainNode;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
22
24
|
* @internal
|
|
@@ -26,4 +28,5 @@ export declare const DeleteQueryNode: Readonly<{
|
|
|
26
28
|
create(fromItem: TableExpressionNode, withNode?: WithNode): DeleteQueryNode;
|
|
27
29
|
cloneWithOrderByItem(deleteNode: DeleteQueryNode, item: OrderByItemNode): DeleteQueryNode;
|
|
28
30
|
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
31
|
+
cloneWithExplain(deleteNode: DeleteQueryNode, explain: ExplainNode): DeleteQueryNode;
|
|
29
32
|
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ExplainFormat } from '../util/explainable.js';
|
|
2
|
+
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
3
|
+
import { OperationNode } from './operation-node.js';
|
|
4
|
+
import { RawNode } from './raw-node.js';
|
|
5
|
+
export interface ExplainNode extends OperationNode {
|
|
6
|
+
readonly kind: 'ExplainNode';
|
|
7
|
+
readonly format?: ExplainFormat;
|
|
8
|
+
readonly options?: RawNode;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const ExplainNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is ExplainNode;
|
|
15
|
+
create(format?: ExplainFormat, options?: AnyRawBuilder): ExplainNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="./explain-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const ExplainNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'ExplainNode';
|
|
9
|
+
},
|
|
10
|
+
create(format, options) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'ExplainNode',
|
|
13
|
+
format,
|
|
14
|
+
options: options?.toOperationNode(),
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -20,8 +20,8 @@ export declare const ForeignKeyConstraintNode: Readonly<{
|
|
|
20
20
|
create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string): ForeignKeyConstraintNode;
|
|
21
21
|
cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
|
|
22
22
|
name?: IdentifierNode | undefined;
|
|
23
|
-
onDelete?:
|
|
24
|
-
onUpdate?:
|
|
23
|
+
onDelete?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
|
|
24
|
+
onUpdate?: "no action" | "restrict" | "cascade" | "set null" | "set default" | undefined;
|
|
25
25
|
kind: 'ForeignKeyConstraintNode';
|
|
26
26
|
columns: ReadonlyArray<ColumnNode>;
|
|
27
27
|
references: ReferencesNode;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ColumnNode } from './column-node.js';
|
|
2
|
+
import { ExplainNode } from './explain-node.js';
|
|
2
3
|
import { OnConflictNode } from './on-conflict-node.js';
|
|
3
4
|
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
4
5
|
import { OperationNode } from './operation-node.js';
|
|
@@ -20,6 +21,7 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
20
21
|
readonly with?: WithNode;
|
|
21
22
|
readonly ignore?: boolean;
|
|
22
23
|
readonly replace?: boolean;
|
|
24
|
+
readonly explain?: ExplainNode;
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* @internal
|
|
@@ -68,6 +68,7 @@ import { ValuesNode } from './values-node.js';
|
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
69
|
import { CreateTypeNode } from './create-type-node.js';
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
|
+
import { ExplainNode } from './explain-node.js';
|
|
71
72
|
/**
|
|
72
73
|
* Transforms an operation node tree into another one.
|
|
73
74
|
*
|
|
@@ -172,4 +173,5 @@ export declare class OperationNodeTransformer {
|
|
|
172
173
|
protected transformValue(node: ValueNode): ValueNode;
|
|
173
174
|
protected transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
|
|
174
175
|
protected transformOperator(node: OperatorNode): OperatorNode;
|
|
176
|
+
protected transformExplain(node: ExplainNode): ExplainNode;
|
|
175
177
|
}
|
|
@@ -102,6 +102,7 @@ export class OperationNodeTransformer {
|
|
|
102
102
|
SelectModifierNode: this.transformSelectModifier.bind(this),
|
|
103
103
|
CreateTypeNode: this.transformCreateType.bind(this),
|
|
104
104
|
DropTypeNode: this.transformDropType.bind(this),
|
|
105
|
+
ExplainNode: this.transformExplain.bind(this),
|
|
105
106
|
});
|
|
106
107
|
transformNode = (node) => {
|
|
107
108
|
if (!node) {
|
|
@@ -135,6 +136,7 @@ export class OperationNodeTransformer {
|
|
|
135
136
|
with: this.transformNode(node.with),
|
|
136
137
|
having: this.transformNode(node.having),
|
|
137
138
|
union: this.transformNodeList(node.union),
|
|
139
|
+
explain: this.transformNode(node.explain),
|
|
138
140
|
});
|
|
139
141
|
}
|
|
140
142
|
transformSelection(node) {
|
|
@@ -243,6 +245,7 @@ export class OperationNodeTransformer {
|
|
|
243
245
|
with: this.transformNode(node.with),
|
|
244
246
|
ignore: node.ignore,
|
|
245
247
|
replace: node.replace,
|
|
248
|
+
explain: this.transformNode(node.explain),
|
|
246
249
|
});
|
|
247
250
|
}
|
|
248
251
|
transformValues(node) {
|
|
@@ -261,6 +264,7 @@ export class OperationNodeTransformer {
|
|
|
261
264
|
with: this.transformNode(node.with),
|
|
262
265
|
orderBy: this.transformNode(node.orderBy),
|
|
263
266
|
limit: this.transformNode(node.limit),
|
|
267
|
+
explain: this.transformNode(node.explain),
|
|
264
268
|
});
|
|
265
269
|
}
|
|
266
270
|
transformReturning(node) {
|
|
@@ -278,6 +282,8 @@ export class OperationNodeTransformer {
|
|
|
278
282
|
temporary: node.temporary,
|
|
279
283
|
ifNotExists: node.ifNotExists,
|
|
280
284
|
onCommit: node.onCommit,
|
|
285
|
+
frontModifiers: this.transformNodeList(node.frontModifiers),
|
|
286
|
+
endModifiers: this.transformNodeList(node.endModifiers),
|
|
281
287
|
});
|
|
282
288
|
}
|
|
283
289
|
transformColumnDefinition(node) {
|
|
@@ -344,6 +350,7 @@ export class OperationNodeTransformer {
|
|
|
344
350
|
updates: this.transformNodeList(node.updates),
|
|
345
351
|
returning: this.transformNode(node.returning),
|
|
346
352
|
with: this.transformNode(node.with),
|
|
353
|
+
explain: this.transformNode(node.explain),
|
|
347
354
|
});
|
|
348
355
|
}
|
|
349
356
|
transformColumnUpdate(node) {
|
|
@@ -642,4 +649,11 @@ export class OperationNodeTransformer {
|
|
|
642
649
|
// An Object.freezed leaf node. No need to clone.
|
|
643
650
|
return node;
|
|
644
651
|
}
|
|
652
|
+
transformExplain(node) {
|
|
653
|
+
return requireAllProps({
|
|
654
|
+
kind: 'ExplainNode',
|
|
655
|
+
format: node.format,
|
|
656
|
+
options: this.transformNode(node.options),
|
|
657
|
+
});
|
|
658
|
+
}
|
|
645
659
|
}
|
|
@@ -68,6 +68,7 @@ import { ValuesNode } from './values-node.js';
|
|
|
68
68
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
69
69
|
import { CreateTypeNode } from './create-type-node.js';
|
|
70
70
|
import { DropTypeNode } from './drop-type-node.js';
|
|
71
|
+
import { ExplainNode } from './explain-node.js';
|
|
71
72
|
export declare abstract class OperationNodeVisitor {
|
|
72
73
|
#private;
|
|
73
74
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -142,4 +143,5 @@ export declare abstract class OperationNodeVisitor {
|
|
|
142
143
|
protected abstract visitSelectModifier(node: SelectModifierNode): void;
|
|
143
144
|
protected abstract visitCreateType(node: CreateTypeNode): void;
|
|
144
145
|
protected abstract visitDropType(node: DropTypeNode): void;
|
|
146
|
+
protected abstract visitExplain(node: ExplainNode): void;
|
|
145
147
|
}
|
|
@@ -75,6 +75,7 @@ export class OperationNodeVisitor {
|
|
|
75
75
|
SelectModifierNode: this.visitSelectModifier.bind(this),
|
|
76
76
|
CreateTypeNode: this.visitCreateType.bind(this),
|
|
77
77
|
DropTypeNode: this.visitDropType.bind(this),
|
|
78
|
+
ExplainNode: this.visitExplain.bind(this),
|
|
78
79
|
});
|
|
79
80
|
visitNode = (node) => {
|
|
80
81
|
this.nodeStack.push(node);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type OperationNodeKind = 'IdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode';
|
|
1
|
+
export declare type OperationNodeKind = 'IdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'UnionNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -13,5 +13,5 @@ export interface ReferenceNode extends OperationNode {
|
|
|
13
13
|
export declare const ReferenceNode: Readonly<{
|
|
14
14
|
is(node: OperationNode): node is ReferenceNode;
|
|
15
15
|
create(table: TableNode, column: ColumnNode): ReferenceNode;
|
|
16
|
-
createSelectAll(table:
|
|
16
|
+
createSelectAll(table: TableNode): ReferenceNode;
|
|
17
17
|
}>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
/// <reference types="./reference-node.d.ts" />
|
|
2
|
-
import { TableNode } from './table-node.js';
|
|
3
2
|
import { SelectAllNode } from './select-all-node.js';
|
|
4
3
|
import { freeze } from '../util/object-utils.js';
|
|
5
4
|
/**
|
|
@@ -19,7 +18,7 @@ export const ReferenceNode = freeze({
|
|
|
19
18
|
createSelectAll(table) {
|
|
20
19
|
return freeze({
|
|
21
20
|
kind: 'ReferenceNode',
|
|
22
|
-
table
|
|
21
|
+
table,
|
|
23
22
|
column: SelectAllNode.create(),
|
|
24
23
|
});
|
|
25
24
|
},
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
2
|
import { ColumnNode } from './column-node.js';
|
|
3
3
|
import { TableNode } from './table-node.js';
|
|
4
|
-
|
|
4
|
+
import { ArrayItemType } from '../util/type-utils.js';
|
|
5
|
+
export declare const ON_MODIFY_FOREIGN_ACTIONS: readonly ["no action", "restrict", "cascade", "set null", "set default"];
|
|
6
|
+
export declare type OnModifyForeignAction = ArrayItemType<typeof ON_MODIFY_FOREIGN_ACTIONS>;
|
|
5
7
|
export interface ReferencesNode extends OperationNode {
|
|
6
8
|
readonly kind: 'ReferencesNode';
|
|
7
9
|
readonly table: TableNode;
|
|
@@ -14,6 +14,7 @@ import { WhereNode } from './where-node.js';
|
|
|
14
14
|
import { WithNode } from './with-node.js';
|
|
15
15
|
import { UnionNode } from './union-node.js';
|
|
16
16
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
17
|
+
import { ExplainNode } from './explain-node.js';
|
|
17
18
|
export interface SelectQueryNode extends OperationNode {
|
|
18
19
|
readonly kind: 'SelectQueryNode';
|
|
19
20
|
readonly from: FromNode;
|
|
@@ -30,6 +31,7 @@ export interface SelectQueryNode extends OperationNode {
|
|
|
30
31
|
readonly with?: WithNode;
|
|
31
32
|
readonly having?: HavingNode;
|
|
32
33
|
readonly union?: ReadonlyArray<UnionNode>;
|
|
34
|
+
readonly explain?: ExplainNode;
|
|
33
35
|
}
|
|
34
36
|
/**
|
|
35
37
|
* @internal
|
|
@@ -48,4 +50,5 @@ export declare const SelectQueryNode: Readonly<{
|
|
|
48
50
|
cloneWithHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
|
|
49
51
|
cloneWithOrHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
|
|
50
52
|
cloneWithUnion(selectNode: SelectQueryNode, union: UnionNode): SelectQueryNode;
|
|
53
|
+
cloneWithExplain(selectNode: SelectQueryNode, explain: ExplainNode): SelectQueryNode;
|
|
51
54
|
}>;
|
|
@@ -3,6 +3,7 @@ import { ColumnNode } from './column-node.js';
|
|
|
3
3
|
import { OperationNode } from './operation-node.js';
|
|
4
4
|
import { ReferenceNode } from './reference-node.js';
|
|
5
5
|
import { SelectAllNode } from './select-all-node.js';
|
|
6
|
+
import { TableNode } from './table-node.js';
|
|
6
7
|
declare type SelectionNodeChild = ColumnNode | ReferenceNode | AliasNode | SelectAllNode;
|
|
7
8
|
export interface SelectionNode extends OperationNode {
|
|
8
9
|
readonly kind: 'SelectionNode';
|
|
@@ -15,6 +16,6 @@ export declare const SelectionNode: Readonly<{
|
|
|
15
16
|
is(node: OperationNode): node is SelectionNode;
|
|
16
17
|
create(selection: SelectionNodeChild): SelectionNode;
|
|
17
18
|
createSelectAll(): SelectionNode;
|
|
18
|
-
createSelectAllFromTable(table:
|
|
19
|
+
createSelectAllFromTable(table: TableNode): SelectionNode;
|
|
19
20
|
}>;
|
|
20
21
|
export {};
|
|
@@ -8,6 +8,7 @@ import { ValueListNode } from './value-list-node.js';
|
|
|
8
8
|
import { WhereNode } from './where-node.js';
|
|
9
9
|
import { WithNode } from './with-node.js';
|
|
10
10
|
import { FromNode } from './from-node.js';
|
|
11
|
+
import { ExplainNode } from './explain-node.js';
|
|
11
12
|
export declare type UpdateValuesNode = ValueListNode | PrimitiveValueListNode;
|
|
12
13
|
export interface UpdateQueryNode extends OperationNode {
|
|
13
14
|
readonly kind: 'UpdateQueryNode';
|
|
@@ -18,6 +19,7 @@ export interface UpdateQueryNode extends OperationNode {
|
|
|
18
19
|
readonly updates?: ReadonlyArray<ColumnUpdateNode>;
|
|
19
20
|
readonly returning?: ReturningNode;
|
|
20
21
|
readonly with?: WithNode;
|
|
22
|
+
readonly explain?: ExplainNode;
|
|
21
23
|
}
|
|
22
24
|
/**
|
|
23
25
|
* @internal
|
|
@@ -27,4 +29,5 @@ export declare const UpdateQueryNode: Readonly<{
|
|
|
27
29
|
create(table: TableExpressionNode, withNode?: WithNode): UpdateQueryNode;
|
|
28
30
|
cloneWithFromItems(updateQuery: UpdateQueryNode, fromItems: ReadonlyArray<TableExpressionNode>): UpdateQueryNode;
|
|
29
31
|
cloneWithUpdates(updateQuery: UpdateQueryNode, updates: ReadonlyArray<ColumnUpdateNode>): UpdateQueryNode;
|
|
32
|
+
cloneWithExplain(updateQuery: UpdateQueryNode, explain: ExplainNode): UpdateQueryNode;
|
|
30
33
|
}>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="./on-commit-action-parse.d.ts" />
|
|
2
|
+
import { ON_COMMIT_ACTIONS, } from '../operation-node/create-table-node.js';
|
|
3
|
+
export function parseOnCommitAction(action) {
|
|
4
|
+
if (ON_COMMIT_ACTIONS.includes(action)) {
|
|
5
|
+
return action;
|
|
6
|
+
}
|
|
7
|
+
throw new Error(`invalid OnCommitAction ${action}`);
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/// <reference types="./on-modify-action-parser.d.ts" />
|
|
2
|
+
import { ON_MODIFY_FOREIGN_ACTIONS, } from '../operation-node/references-node.js';
|
|
3
|
+
export function parseOnModifyForeignAction(action) {
|
|
4
|
+
if (ON_MODIFY_FOREIGN_ACTIONS.includes(action)) {
|
|
5
|
+
return action;
|
|
6
|
+
}
|
|
7
|
+
throw new Error(`invalid OnModifyForeignAction ${action}`);
|
|
8
|
+
}
|
|
@@ -4,6 +4,7 @@ import { SelectionNode } from '../operation-node/selection-node.js';
|
|
|
4
4
|
import { parseAliasedStringReference } from './reference-parser.js';
|
|
5
5
|
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
|
|
7
|
+
import { parseTable } from './table-parser.js';
|
|
7
8
|
export function parseSelectExpressionOrList(selection) {
|
|
8
9
|
if (isReadonlyArray(selection)) {
|
|
9
10
|
return selection.map((it) => parseSelectExpression(it));
|
|
@@ -36,7 +37,7 @@ export function parseSelectAll(table) {
|
|
|
36
37
|
}
|
|
37
38
|
function parseSelectAllArg(table) {
|
|
38
39
|
if (isString(table)) {
|
|
39
|
-
return SelectionNode.createSelectAllFromTable(table);
|
|
40
|
+
return SelectionNode.createSelectAllFromTable(parseTable(table));
|
|
40
41
|
}
|
|
41
42
|
throw new Error(`invalid value selectAll expression: ${JSON.stringify(table)}`);
|
|
42
43
|
}
|
|
@@ -20,7 +20,8 @@ import { Selectable } from '../util/column-type.js';
|
|
|
20
20
|
import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
|
|
21
21
|
import { AliasedQueryBuilder } from './select-query-builder.js';
|
|
22
22
|
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
23
|
-
|
|
23
|
+
import { Explainable, ExplainFormat } from '../util/explainable.js';
|
|
24
|
+
export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable, Explainable {
|
|
24
25
|
#private;
|
|
25
26
|
constructor(props: DeleteQueryBuilderProps);
|
|
26
27
|
/**
|
|
@@ -744,6 +745,23 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
744
745
|
* error.
|
|
745
746
|
*/
|
|
746
747
|
executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
|
|
748
|
+
/**
|
|
749
|
+
* Executes query with `explain` statement before `delete` keyword.
|
|
750
|
+
*
|
|
751
|
+
* ```ts
|
|
752
|
+
* const explained = await db
|
|
753
|
+
* .deleteFrom('person')
|
|
754
|
+
* .where('id', '=', 123)
|
|
755
|
+
* .explain('json')
|
|
756
|
+
* ```
|
|
757
|
+
*
|
|
758
|
+
* The generated SQL (MySQL):
|
|
759
|
+
*
|
|
760
|
+
* ```sql
|
|
761
|
+
* explain format=json delete from `person` where `id` = ?
|
|
762
|
+
* ```
|
|
763
|
+
*/
|
|
764
|
+
explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: AnyRawBuilder): Promise<ER[]>;
|
|
747
765
|
}
|
|
748
766
|
export interface DeleteQueryBuilderProps {
|
|
749
767
|
readonly queryId: QueryId;
|
|
@@ -10,6 +10,7 @@ import { DeleteResult } from './delete-result.js';
|
|
|
10
10
|
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
11
11
|
import { LimitNode } from '../operation-node/limit-node.js';
|
|
12
12
|
import { parseOrderBy, } from '../parser/order-by-parser.js';
|
|
13
|
+
import { ExplainNode } from '../operation-node/explain-node.js';
|
|
13
14
|
export class DeleteQueryBuilder {
|
|
14
15
|
#props;
|
|
15
16
|
constructor(props) {
|
|
@@ -293,5 +294,28 @@ export class DeleteQueryBuilder {
|
|
|
293
294
|
}
|
|
294
295
|
return result;
|
|
295
296
|
}
|
|
297
|
+
/**
|
|
298
|
+
* Executes query with `explain` statement before `delete` keyword.
|
|
299
|
+
*
|
|
300
|
+
* ```ts
|
|
301
|
+
* const explained = await db
|
|
302
|
+
* .deleteFrom('person')
|
|
303
|
+
* .where('id', '=', 123)
|
|
304
|
+
* .explain('json')
|
|
305
|
+
* ```
|
|
306
|
+
*
|
|
307
|
+
* The generated SQL (MySQL):
|
|
308
|
+
*
|
|
309
|
+
* ```sql
|
|
310
|
+
* explain format=json delete from `person` where `id` = ?
|
|
311
|
+
* ```
|
|
312
|
+
*/
|
|
313
|
+
async explain(format, options) {
|
|
314
|
+
const builder = new DeleteQueryBuilder({
|
|
315
|
+
...this.#props,
|
|
316
|
+
queryNode: DeleteQueryNode.cloneWithExplain(this.#props.queryNode, ExplainNode.create(format, options)),
|
|
317
|
+
});
|
|
318
|
+
return await builder.execute();
|
|
319
|
+
}
|
|
296
320
|
}
|
|
297
321
|
preventAwait(DeleteQueryBuilder, "don't await DeleteQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
|
|
@@ -85,7 +85,7 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
85
85
|
* .execute()
|
|
86
86
|
* ```
|
|
87
87
|
*/
|
|
88
|
-
avg<O extends number | string, C extends StringReference<DB, TB> =
|
|
88
|
+
avg<O extends number | string, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: C): RawBuilder<O>;
|
|
89
89
|
/**
|
|
90
90
|
* Calls the `sum` function for the column given as the argument.
|
|
91
91
|
*
|
|
@@ -107,7 +107,7 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
107
107
|
* .execute()
|
|
108
108
|
* ```
|
|
109
109
|
*/
|
|
110
|
-
sum<O extends number | string | bigint, C extends StringReference<DB, TB> =
|
|
110
|
+
sum<O extends number | string | bigint, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: C): RawBuilder<O>;
|
|
111
111
|
/**
|
|
112
112
|
* Calls the `count` function for the column given as the argument.
|
|
113
113
|
*
|
|
@@ -129,5 +129,5 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
129
129
|
* .execute()
|
|
130
130
|
* ```
|
|
131
131
|
*/
|
|
132
|
-
count<O extends number | string | bigint, C extends StringReference<DB, TB> =
|
|
132
|
+
count<O extends number | string | bigint, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: C): RawBuilder<O>;
|
|
133
133
|
}
|