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.
Files changed (116) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  3. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +5 -0
  4. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +16 -0
  5. package/dist/cjs/dialect/postgres/postgres-introspector.js +17 -9
  6. package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +1 -3
  7. package/dist/cjs/dialect/postgres/postgres-query-compiler.js +3 -8
  8. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
  10. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +10 -0
  11. package/dist/cjs/index.d.ts +3 -0
  12. package/dist/cjs/index.js +3 -0
  13. package/dist/cjs/operation-node/create-table-node.d.ts +9 -2
  14. package/dist/cjs/operation-node/create-table-node.js +18 -1
  15. package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
  16. package/dist/cjs/operation-node/delete-query-node.js +6 -0
  17. package/dist/cjs/operation-node/explain-node.d.ts +16 -0
  18. package/dist/cjs/operation-node/explain-node.js +19 -0
  19. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +2 -2
  20. package/dist/cjs/operation-node/insert-query-node.d.ts +2 -0
  21. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  22. package/dist/cjs/operation-node/operation-node-transformer.js +14 -0
  23. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  24. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  25. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  26. package/dist/cjs/operation-node/reference-node.d.ts +1 -1
  27. package/dist/cjs/operation-node/reference-node.js +1 -2
  28. package/dist/cjs/operation-node/references-node.d.ts +3 -1
  29. package/dist/cjs/operation-node/references-node.js +8 -1
  30. package/dist/cjs/operation-node/select-query-node.d.ts +3 -0
  31. package/dist/cjs/operation-node/select-query-node.js +6 -0
  32. package/dist/cjs/operation-node/selection-node.d.ts +2 -1
  33. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  34. package/dist/cjs/operation-node/update-query-node.js +6 -0
  35. package/dist/cjs/parser/on-commit-action-parse.d.ts +2 -0
  36. package/dist/cjs/parser/on-commit-action-parse.js +11 -0
  37. package/dist/cjs/parser/on-modify-action-parser.d.ts +2 -0
  38. package/dist/cjs/parser/on-modify-action-parser.js +11 -0
  39. package/dist/cjs/parser/select-parser.js +2 -1
  40. package/dist/cjs/query-builder/delete-query-builder.d.ts +19 -1
  41. package/dist/cjs/query-builder/delete-query-builder.js +24 -0
  42. package/dist/cjs/query-builder/function-builder.d.ts +3 -3
  43. package/dist/cjs/query-builder/insert-query-builder.d.ts +20 -2
  44. package/dist/cjs/query-builder/insert-query-builder.js +26 -0
  45. package/dist/cjs/query-builder/select-query-builder.d.ts +38 -1
  46. package/dist/cjs/query-builder/select-query-builder.js +45 -2
  47. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -1
  48. package/dist/cjs/query-builder/update-query-builder.js +25 -0
  49. package/dist/cjs/query-compiler/default-query-compiler.d.ts +7 -0
  50. package/dist/cjs/query-compiler/default-query-compiler.js +74 -1
  51. package/dist/cjs/raw-builder/sql.d.ts +96 -96
  52. package/dist/cjs/raw-builder/sql.js +0 -96
  53. package/dist/cjs/schema/column-definition-builder.js +3 -2
  54. package/dist/cjs/schema/create-table-builder.d.ts +54 -0
  55. package/dist/cjs/schema/create-table-builder.js +66 -1
  56. package/dist/cjs/schema/foreign-key-constraint-builder.js +3 -2
  57. package/dist/cjs/util/explainable.d.ts +5 -0
  58. package/dist/cjs/util/explainable.js +2 -0
  59. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  60. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +5 -0
  61. package/dist/esm/dialect/mysql/mysql-query-compiler.js +16 -0
  62. package/dist/esm/dialect/postgres/postgres-introspector.js +17 -9
  63. package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +1 -3
  64. package/dist/esm/dialect/postgres/postgres-query-compiler.js +3 -8
  65. package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -0
  66. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +3 -0
  67. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +10 -0
  68. package/dist/esm/index.d.ts +3 -0
  69. package/dist/esm/index.js +3 -0
  70. package/dist/esm/operation-node/create-table-node.d.ts +9 -2
  71. package/dist/esm/operation-node/create-table-node.js +17 -0
  72. package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
  73. package/dist/esm/operation-node/delete-query-node.js +6 -0
  74. package/dist/esm/operation-node/explain-node.d.ts +16 -0
  75. package/dist/esm/operation-node/explain-node.js +17 -0
  76. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +2 -2
  77. package/dist/esm/operation-node/insert-query-node.d.ts +2 -0
  78. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  79. package/dist/esm/operation-node/operation-node-transformer.js +14 -0
  80. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  81. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  82. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  83. package/dist/esm/operation-node/reference-node.d.ts +1 -1
  84. package/dist/esm/operation-node/reference-node.js +1 -2
  85. package/dist/esm/operation-node/references-node.d.ts +3 -1
  86. package/dist/esm/operation-node/references-node.js +7 -0
  87. package/dist/esm/operation-node/select-query-node.d.ts +3 -0
  88. package/dist/esm/operation-node/select-query-node.js +6 -0
  89. package/dist/esm/operation-node/selection-node.d.ts +2 -1
  90. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  91. package/dist/esm/operation-node/update-query-node.js +6 -0
  92. package/dist/esm/parser/on-commit-action-parse.d.ts +2 -0
  93. package/dist/esm/parser/on-commit-action-parse.js +8 -0
  94. package/dist/esm/parser/on-modify-action-parser.d.ts +2 -0
  95. package/dist/esm/parser/on-modify-action-parser.js +8 -0
  96. package/dist/esm/parser/select-parser.js +2 -1
  97. package/dist/esm/query-builder/delete-query-builder.d.ts +19 -1
  98. package/dist/esm/query-builder/delete-query-builder.js +24 -0
  99. package/dist/esm/query-builder/function-builder.d.ts +3 -3
  100. package/dist/esm/query-builder/insert-query-builder.d.ts +20 -2
  101. package/dist/esm/query-builder/insert-query-builder.js +26 -0
  102. package/dist/esm/query-builder/select-query-builder.d.ts +38 -1
  103. package/dist/esm/query-builder/select-query-builder.js +45 -2
  104. package/dist/esm/query-builder/update-query-builder.d.ts +20 -1
  105. package/dist/esm/query-builder/update-query-builder.js +25 -0
  106. package/dist/esm/query-compiler/default-query-compiler.d.ts +7 -0
  107. package/dist/esm/query-compiler/default-query-compiler.js +74 -1
  108. package/dist/esm/raw-builder/sql.d.ts +96 -96
  109. package/dist/esm/raw-builder/sql.js +0 -96
  110. package/dist/esm/schema/column-definition-builder.js +3 -2
  111. package/dist/esm/schema/create-table-builder.d.ts +54 -0
  112. package/dist/esm/schema/create-table-builder.js +66 -1
  113. package/dist/esm/schema/foreign-key-constraint-builder.js +3 -2
  114. package/dist/esm/util/explainable.d.ts +5 -0
  115. package/dist/esm/util/explainable.js +2 -0
  116. 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
  }
@@ -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
- export declare type OnCommitAction = 'preserve rows' | 'delete rows' | 'drop';
6
- export declare type CreateTableNodeParams = Omit<CreateTableNode, 'kind' | 'table' | 'columns' | 'constraints'>;
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
  }>;
@@ -30,4 +30,10 @@ export const DeleteQueryNode = freeze({
30
30
  limit,
31
31
  });
32
32
  },
33
+ cloneWithExplain(deleteNode, explain) {
34
+ return freeze({
35
+ ...deleteNode,
36
+ explain,
37
+ });
38
+ },
33
39
  });
@@ -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?: OnModifyForeignAction | undefined;
24
- onUpdate?: OnModifyForeignAction | undefined;
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: string): ReferenceNode;
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: TableNode.create(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
- export declare type OnModifyForeignAction = 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
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;
@@ -1,5 +1,12 @@
1
1
  /// <reference types="./references-node.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
+ export const ON_MODIFY_FOREIGN_ACTIONS = [
4
+ 'no action',
5
+ 'restrict',
6
+ 'cascade',
7
+ 'set null',
8
+ 'set default',
9
+ ];
3
10
  /**
4
11
  * @internal
5
12
  */
@@ -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
  }>;
@@ -102,4 +102,10 @@ export const SelectQueryNode = freeze({
102
102
  : freeze([union]),
103
103
  });
104
104
  },
105
+ cloneWithExplain(selectNode, explain) {
106
+ return freeze({
107
+ ...selectNode,
108
+ explain,
109
+ });
110
+ },
105
111
  });
@@ -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: string): SelectionNode;
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
  }>;
@@ -31,4 +31,10 @@ export const UpdateQueryNode = freeze({
31
31
  : updates,
32
32
  });
33
33
  },
34
+ cloneWithExplain(updateQuery, explain) {
35
+ return freeze({
36
+ ...updateQuery,
37
+ explain,
38
+ });
39
+ },
34
40
  });
@@ -0,0 +1,2 @@
1
+ import { OnCommitAction } from '../operation-node/create-table-node.js';
2
+ export declare function parseOnCommitAction(action: OnCommitAction): OnCommitAction;
@@ -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,2 @@
1
+ import { OnModifyForeignAction } from '../operation-node/references-node.js';
2
+ export declare function parseOnModifyForeignAction(action: OnModifyForeignAction): OnModifyForeignAction;
@@ -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
- export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
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> = any>(column: C): RawBuilder<O>;
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> = any>(column: C): RawBuilder<O>;
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> = any>(column: C): RawBuilder<O>;
132
+ count<O extends number | string | bigint, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: C): RawBuilder<O>;
133
133
  }