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.
Files changed (194) hide show
  1. package/README.md +24 -19
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
  3. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +0 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -2
  7. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -4
  8. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -18
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +0 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -2
  11. package/dist/cjs/driver/database-connection.d.ts +2 -1
  12. package/dist/cjs/driver/driver.d.ts +1 -1
  13. package/dist/cjs/driver/single-connection-provider.d.ts +0 -1
  14. package/dist/cjs/driver/single-connection-provider.js +2 -2
  15. package/dist/cjs/index.d.ts +2 -1
  16. package/dist/cjs/index.js +2 -1
  17. package/dist/cjs/kysely.d.ts +7 -6
  18. package/dist/cjs/kysely.js +8 -6
  19. package/dist/cjs/migration/migration.js +11 -10
  20. package/dist/cjs/operation-node/alter-column-node.d.ts +2 -2
  21. package/dist/cjs/operation-node/alter-column-node.js +2 -2
  22. package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
  23. package/dist/cjs/operation-node/alter-table-node.js +2 -2
  24. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
  25. package/dist/cjs/operation-node/column-definition-node.js +2 -2
  26. package/dist/cjs/operation-node/create-index-node.d.ts +2 -2
  27. package/dist/cjs/operation-node/create-index-node.js +2 -2
  28. package/dist/cjs/operation-node/create-table-node.d.ts +2 -1
  29. package/dist/cjs/operation-node/create-table-node.js +1 -5
  30. package/dist/cjs/operation-node/drop-index-node.d.ts +3 -3
  31. package/dist/cjs/operation-node/drop-index-node.js +2 -2
  32. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +12 -1
  33. package/dist/cjs/operation-node/foreign-key-constraint-node.js +6 -0
  34. package/dist/cjs/operation-node/insert-query-node.d.ts +5 -2
  35. package/dist/cjs/operation-node/insert-query-node.js +2 -9
  36. package/dist/cjs/operation-node/join-node.d.ts +1 -0
  37. package/dist/cjs/operation-node/join-node.js +8 -0
  38. package/dist/cjs/operation-node/on-conflict-node.d.ts +2 -2
  39. package/dist/cjs/operation-node/on-conflict-node.js +2 -2
  40. package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +14 -0
  41. package/dist/cjs/operation-node/on-duplicate-key-node.js +18 -0
  42. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  43. package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
  44. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  46. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  47. package/dist/cjs/operation-node/references-node.d.ts +5 -3
  48. package/dist/cjs/operation-node/references-node.js +6 -0
  49. package/dist/cjs/operation-node/table-node.js +2 -2
  50. package/dist/cjs/parser/data-type-parser.d.ts +5 -0
  51. package/dist/cjs/parser/data-type-parser.js +11 -0
  52. package/dist/cjs/parser/default-value-parser.d.ts +6 -0
  53. package/dist/cjs/parser/default-value-parser.js +11 -0
  54. package/dist/cjs/parser/filter-parser.d.ts +2 -2
  55. package/dist/cjs/parser/filter-parser.js +34 -36
  56. package/dist/cjs/parser/join-parser.d.ts +1 -1
  57. package/dist/cjs/parser/join-parser.js +9 -11
  58. package/dist/cjs/parser/parse-context.d.ts +34 -7
  59. package/dist/cjs/parser/parse-context.js +42 -34
  60. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  61. package/dist/cjs/parser/reference-parser.js +16 -12
  62. package/dist/cjs/parser/select-parser.d.ts +1 -2
  63. package/dist/cjs/parser/select-parser.js +4 -5
  64. package/dist/cjs/parser/table-parser.js +11 -6
  65. package/dist/cjs/parser/update-set-parser.js +1 -1
  66. package/dist/cjs/parser/value-parser.js +1 -1
  67. package/dist/cjs/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
  68. package/dist/cjs/query-builder/{sub-query-builder.js → expression-builder.js} +6 -10
  69. package/dist/cjs/query-builder/join-builder.d.ts +2 -2
  70. package/dist/cjs/query-builder/join-builder.js +8 -12
  71. package/dist/cjs/query-builder/query-builder.d.ts +47 -8
  72. package/dist/cjs/query-builder/query-builder.js +163 -91
  73. package/dist/cjs/query-builder/type-utils.d.ts +5 -5
  74. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -1
  75. package/dist/cjs/query-compiler/default-query-compiler.js +26 -6
  76. package/dist/cjs/query-creator.d.ts +2 -2
  77. package/dist/cjs/query-creator.js +8 -12
  78. package/dist/cjs/schema/alter-table-builder.d.ts +31 -8
  79. package/dist/cjs/schema/alter-table-builder.js +80 -7
  80. package/dist/cjs/schema/column-definition-builder.d.ts +10 -4
  81. package/dist/cjs/schema/column-definition-builder.js +11 -6
  82. package/dist/cjs/schema/create-index-builder.d.ts +5 -5
  83. package/dist/cjs/schema/create-index-builder.js +19 -28
  84. package/dist/cjs/schema/create-schema-builder.d.ts +5 -5
  85. package/dist/cjs/schema/create-schema-builder.js +9 -13
  86. package/dist/cjs/schema/create-table-builder.d.ts +22 -10
  87. package/dist/cjs/schema/create-table-builder.js +41 -34
  88. package/dist/cjs/schema/drop-index-builder.d.ts +5 -5
  89. package/dist/cjs/schema/drop-index-builder.js +11 -16
  90. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -5
  91. package/dist/cjs/schema/drop-schema-builder.js +9 -13
  92. package/dist/cjs/schema/drop-table-builder.d.ts +5 -5
  93. package/dist/cjs/schema/drop-table-builder.js +9 -13
  94. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +14 -0
  95. package/dist/cjs/schema/foreign-key-constraint-builder.js +26 -0
  96. package/dist/cjs/transformers/with-schema-transformer.d.ts +0 -5
  97. package/dist/cjs/transformers/with-schema-transformer.js +21 -21
  98. package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
  99. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
  100. package/dist/esm/dialect/mysql/mysql-driver.js +1 -0
  101. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +0 -1
  102. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -2
  103. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -4
  104. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -18
  105. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +0 -1
  106. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -2
  107. package/dist/esm/driver/database-connection.d.ts +2 -1
  108. package/dist/esm/driver/driver.d.ts +1 -1
  109. package/dist/esm/driver/single-connection-provider.d.ts +0 -1
  110. package/dist/esm/driver/single-connection-provider.js +2 -2
  111. package/dist/esm/index.d.ts +2 -1
  112. package/dist/esm/index.js +2 -1
  113. package/dist/esm/kysely.d.ts +7 -6
  114. package/dist/esm/kysely.js +8 -6
  115. package/dist/esm/migration/migration.js +12 -11
  116. package/dist/esm/operation-node/alter-column-node.d.ts +2 -2
  117. package/dist/esm/operation-node/alter-column-node.js +2 -2
  118. package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
  119. package/dist/esm/operation-node/alter-table-node.js +2 -2
  120. package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
  121. package/dist/esm/operation-node/column-definition-node.js +2 -2
  122. package/dist/esm/operation-node/create-index-node.d.ts +2 -2
  123. package/dist/esm/operation-node/create-index-node.js +2 -2
  124. package/dist/esm/operation-node/create-table-node.d.ts +2 -1
  125. package/dist/esm/operation-node/create-table-node.js +1 -5
  126. package/dist/esm/operation-node/drop-index-node.d.ts +3 -3
  127. package/dist/esm/operation-node/drop-index-node.js +2 -2
  128. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +12 -1
  129. package/dist/esm/operation-node/foreign-key-constraint-node.js +6 -0
  130. package/dist/esm/operation-node/insert-query-node.d.ts +5 -2
  131. package/dist/esm/operation-node/insert-query-node.js +2 -9
  132. package/dist/esm/operation-node/join-node.d.ts +1 -0
  133. package/dist/esm/operation-node/join-node.js +8 -0
  134. package/dist/esm/operation-node/on-conflict-node.d.ts +2 -2
  135. package/dist/esm/operation-node/on-conflict-node.js +2 -2
  136. package/dist/esm/operation-node/on-duplicate-key-node.d.ts +14 -0
  137. package/dist/esm/operation-node/on-duplicate-key-node.js +15 -0
  138. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  139. package/dist/esm/operation-node/operation-node-transformer.js +12 -0
  140. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  141. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  142. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  143. package/dist/esm/operation-node/references-node.d.ts +5 -3
  144. package/dist/esm/operation-node/references-node.js +6 -0
  145. package/dist/esm/operation-node/table-node.js +2 -2
  146. package/dist/esm/parser/data-type-parser.d.ts +5 -0
  147. package/dist/esm/parser/data-type-parser.js +7 -0
  148. package/dist/esm/parser/default-value-parser.d.ts +6 -0
  149. package/dist/esm/parser/default-value-parser.js +7 -0
  150. package/dist/esm/parser/filter-parser.d.ts +2 -2
  151. package/dist/esm/parser/filter-parser.js +31 -33
  152. package/dist/esm/parser/join-parser.d.ts +1 -1
  153. package/dist/esm/parser/join-parser.js +7 -9
  154. package/dist/esm/parser/parse-context.d.ts +34 -7
  155. package/dist/esm/parser/parse-context.js +40 -32
  156. package/dist/esm/parser/reference-parser.d.ts +2 -2
  157. package/dist/esm/parser/reference-parser.js +16 -12
  158. package/dist/esm/parser/select-parser.d.ts +1 -2
  159. package/dist/esm/parser/select-parser.js +3 -3
  160. package/dist/esm/parser/table-parser.js +11 -6
  161. package/dist/esm/parser/update-set-parser.js +1 -1
  162. package/dist/esm/parser/value-parser.js +1 -1
  163. package/dist/esm/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
  164. package/dist/esm/query-builder/{sub-query-builder.js → expression-builder.js} +4 -8
  165. package/dist/esm/query-builder/join-builder.d.ts +2 -2
  166. package/dist/esm/query-builder/join-builder.js +9 -13
  167. package/dist/esm/query-builder/query-builder.d.ts +47 -8
  168. package/dist/esm/query-builder/query-builder.js +165 -93
  169. package/dist/esm/query-builder/type-utils.d.ts +5 -5
  170. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -1
  171. package/dist/esm/query-compiler/default-query-compiler.js +27 -7
  172. package/dist/esm/query-creator.d.ts +2 -2
  173. package/dist/esm/query-creator.js +8 -12
  174. package/dist/esm/schema/alter-table-builder.d.ts +31 -8
  175. package/dist/esm/schema/alter-table-builder.js +78 -6
  176. package/dist/esm/schema/column-definition-builder.d.ts +10 -4
  177. package/dist/esm/schema/column-definition-builder.js +12 -7
  178. package/dist/esm/schema/create-index-builder.d.ts +5 -5
  179. package/dist/esm/schema/create-index-builder.js +19 -28
  180. package/dist/esm/schema/create-schema-builder.d.ts +5 -5
  181. package/dist/esm/schema/create-schema-builder.js +9 -13
  182. package/dist/esm/schema/create-table-builder.d.ts +22 -10
  183. package/dist/esm/schema/create-table-builder.js +41 -34
  184. package/dist/esm/schema/drop-index-builder.d.ts +5 -5
  185. package/dist/esm/schema/drop-index-builder.js +11 -16
  186. package/dist/esm/schema/drop-schema-builder.d.ts +5 -5
  187. package/dist/esm/schema/drop-schema-builder.js +9 -13
  188. package/dist/esm/schema/drop-table-builder.d.ts +5 -5
  189. package/dist/esm/schema/drop-table-builder.js +9 -13
  190. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +14 -0
  191. package/dist/esm/schema/foreign-key-constraint-builder.js +22 -0
  192. package/dist/esm/transformers/with-schema-transformer.d.ts +0 -5
  193. package/dist/esm/transformers/with-schema-transformer.js +21 -21
  194. package/package.json +1 -1
@@ -17,10 +17,10 @@ exports.DropIndexNode = (0, object_utils_js_1.freeze)({
17
17
  ...params,
18
18
  });
19
19
  },
20
- cloneWith(dropIndex, params) {
20
+ cloneWith(dropIndex, props) {
21
21
  return (0, object_utils_js_1.freeze)({
22
22
  ...dropIndex,
23
- ...params,
23
+ ...props,
24
24
  });
25
25
  },
26
26
  });
@@ -1,12 +1,15 @@
1
1
  import { ColumnNode } from './column-node.js';
2
2
  import { IdentifierNode } from './identifier-node.js';
3
3
  import { OperationNode } from './operation-node.js';
4
- import { ReferencesNode } from './references-node.js';
4
+ import { OnModifyForeignAction, ReferencesNode } from './references-node.js';
5
5
  import { TableNode } from './table-node.js';
6
+ export declare type ForeignKeyConstraintNodeProps = Omit<ForeignKeyConstraintNode, 'kind' | 'columns' | 'references'>;
6
7
  export interface ForeignKeyConstraintNode extends OperationNode {
7
8
  readonly kind: 'ForeignKeyConstraintNode';
8
9
  readonly columns: ReadonlyArray<ColumnNode>;
9
10
  readonly references: ReferencesNode;
11
+ readonly onDelete?: OnModifyForeignAction;
12
+ readonly onUpdate?: OnModifyForeignAction;
10
13
  readonly name?: IdentifierNode;
11
14
  }
12
15
  /**
@@ -15,4 +18,12 @@ export interface ForeignKeyConstraintNode extends OperationNode {
15
18
  export declare const ForeignKeyConstraintNode: Readonly<{
16
19
  is(node: OperationNode): node is ForeignKeyConstraintNode;
17
20
  create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string | undefined): ForeignKeyConstraintNode;
21
+ cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
22
+ name?: IdentifierNode | undefined;
23
+ onDelete?: OnModifyForeignAction | undefined;
24
+ onUpdate?: OnModifyForeignAction | undefined;
25
+ kind: 'ForeignKeyConstraintNode';
26
+ columns: ReadonlyArray<ColumnNode>;
27
+ references: ReferencesNode;
28
+ }>;
18
29
  }>;
@@ -19,4 +19,10 @@ exports.ForeignKeyConstraintNode = (0, object_utils_js_1.freeze)({
19
19
  name: constraintName ? identifier_node_js_1.IdentifierNode.create(constraintName) : undefined,
20
20
  });
21
21
  },
22
+ cloneWith(node, props) {
23
+ return (0, object_utils_js_1.freeze)({
24
+ ...node,
25
+ ...props,
26
+ });
27
+ },
22
28
  });
@@ -1,5 +1,6 @@
1
1
  import { ColumnNode } from './column-node.js';
2
2
  import { OnConflictNode } from './on-conflict-node.js';
3
+ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
3
4
  import { OperationNode } from './operation-node.js';
4
5
  import { PrimitiveValueListNode } from './primitive-value-list-node.js';
5
6
  import { ReturningNode } from './returning-node.js';
@@ -7,6 +8,7 @@ import { TableNode } from './table-node.js';
7
8
  import { ValueListNode } from './value-list-node.js';
8
9
  import { WithNode } from './with-node.js';
9
10
  export declare type InsertValuesNode = ValueListNode | PrimitiveValueListNode;
11
+ export declare type InsertQueryNodeProps = Omit<InsertQueryNode, 'kind' | 'into'>;
10
12
  export interface InsertQueryNode extends OperationNode {
11
13
  readonly kind: 'InsertQueryNode';
12
14
  readonly into: TableNode;
@@ -14,7 +16,9 @@ export interface InsertQueryNode extends OperationNode {
14
16
  readonly values?: ReadonlyArray<InsertValuesNode>;
15
17
  readonly returning?: ReturningNode;
16
18
  readonly onConflict?: OnConflictNode;
19
+ readonly onDuplicateKey?: OnDuplicateKeyNode;
17
20
  readonly with?: WithNode;
21
+ readonly ignore?: boolean;
18
22
  }
19
23
  /**
20
24
  * @internal
@@ -22,6 +26,5 @@ export interface InsertQueryNode extends OperationNode {
22
26
  export declare const InsertQueryNode: Readonly<{
23
27
  is(node: OperationNode): node is InsertQueryNode;
24
28
  create(into: TableNode, withNode?: WithNode | undefined): InsertQueryNode;
25
- cloneWithColumnsAndValues(insertQuery: InsertQueryNode, columns: ReadonlyArray<ColumnNode>, values: ReadonlyArray<InsertValuesNode>): InsertQueryNode;
26
- cloneWithOnConflict(insertQuery: InsertQueryNode, onConflict: OnConflictNode): InsertQueryNode;
29
+ cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
27
30
  }>;
@@ -16,17 +16,10 @@ exports.InsertQueryNode = (0, object_utils_js_1.freeze)({
16
16
  ...(withNode && { with: withNode }),
17
17
  });
18
18
  },
19
- cloneWithColumnsAndValues(insertQuery, columns, values) {
19
+ cloneWith(insertQuery, props) {
20
20
  return (0, object_utils_js_1.freeze)({
21
21
  ...insertQuery,
22
- columns,
23
- values,
24
- });
25
- },
26
- cloneWithOnConflict(insertQuery, onConflict) {
27
- return (0, object_utils_js_1.freeze)({
28
- ...insertQuery,
29
- onConflict,
22
+ ...props,
30
23
  });
31
24
  },
32
25
  });
@@ -20,5 +20,6 @@ export interface JoinNode extends OperationNode {
20
20
  export declare const JoinNode: Readonly<{
21
21
  is(node: OperationNode): node is JoinNode;
22
22
  create(joinType: JoinType, table: JoinTableNode): JoinNode;
23
+ createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
23
24
  cloneWithOn(joinNode: JoinNode, op: 'And' | 'Or', on: JoinNodeOnNode): JoinNode;
24
25
  }>;
@@ -19,6 +19,14 @@ exports.JoinNode = (0, object_utils_js_1.freeze)({
19
19
  on: undefined,
20
20
  });
21
21
  },
22
+ createWithOn(joinType, table, on) {
23
+ return (0, object_utils_js_1.freeze)({
24
+ kind: 'JoinNode',
25
+ joinType,
26
+ table,
27
+ on,
28
+ });
29
+ },
22
30
  cloneWithOn(joinNode, op, on) {
23
31
  return (0, object_utils_js_1.freeze)({
24
32
  ...joinNode,
@@ -2,7 +2,7 @@ import { ColumnNode } from './column-node.js';
2
2
  import { ColumnUpdateNode } from './column-update-node.js';
3
3
  import { IdentifierNode } from './identifier-node.js';
4
4
  import { OperationNode } from './operation-node.js';
5
- export declare type OnConflictNodeParams = Omit<OnConflictNode, 'kind'>;
5
+ export declare type OnConflictNodeProps = Omit<OnConflictNode, 'kind'>;
6
6
  export interface OnConflictNode extends OperationNode {
7
7
  readonly kind: 'OnConflictNode';
8
8
  readonly columns?: ReadonlyArray<ColumnNode>;
@@ -15,5 +15,5 @@ export interface OnConflictNode extends OperationNode {
15
15
  */
16
16
  export declare const OnConflictNode: Readonly<{
17
17
  is(node: OperationNode): node is OnConflictNode;
18
- create(params: OnConflictNodeParams): OnConflictNode;
18
+ create(props: OnConflictNodeProps): OnConflictNode;
19
19
  }>;
@@ -9,10 +9,10 @@ exports.OnConflictNode = (0, object_utils_js_1.freeze)({
9
9
  is(node) {
10
10
  return node.kind === 'OnConflictNode';
11
11
  },
12
- create(params) {
12
+ create(props) {
13
13
  return (0, object_utils_js_1.freeze)({
14
14
  kind: 'OnConflictNode',
15
- ...params,
15
+ ...props,
16
16
  });
17
17
  },
18
18
  });
@@ -0,0 +1,14 @@
1
+ import { ColumnUpdateNode } from './column-update-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ export declare type OnDuplicateKeyNodeProps = Omit<OnDuplicateKeyNode, 'kind'>;
4
+ export interface OnDuplicateKeyNode extends OperationNode {
5
+ readonly kind: 'OnDuplicateKeyNode';
6
+ readonly updates: ReadonlyArray<ColumnUpdateNode>;
7
+ }
8
+ /**
9
+ * @internal
10
+ */
11
+ export declare const OnDuplicateKeyNode: Readonly<{
12
+ is(node: OperationNode): node is OnDuplicateKeyNode;
13
+ create(updates: ReadonlyArray<ColumnUpdateNode>): OnDuplicateKeyNode;
14
+ }>;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnDuplicateKeyNode = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.OnDuplicateKeyNode = (0, object_utils_js_1.freeze)({
9
+ is(node) {
10
+ return node.kind === 'OnDuplicateKeyNode';
11
+ },
12
+ create(updates) {
13
+ return (0, object_utils_js_1.freeze)({
14
+ kind: 'OnDuplicateKeyNode',
15
+ updates,
16
+ });
17
+ },
18
+ });
@@ -56,6 +56,7 @@ import { DropConstraintNode } from './drop-constraint-node.js';
56
56
  import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
57
57
  import { ColumnDefinitionNode } from './column-definition-node.js';
58
58
  import { ModifyColumnNode } from './modify-column-node.js';
59
+ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
59
60
  /**
60
61
  * Transforms an operation node tree into another one.
61
62
  *
@@ -121,6 +122,7 @@ export declare class OperationNodeTransformer {
121
122
  protected transformLimit(node: LimitNode): LimitNode;
122
123
  protected transformOffset(node: OffsetNode): OffsetNode;
123
124
  protected transformOnConflict(node: OnConflictNode): OnConflictNode;
125
+ protected transformOnDuplicateKey(node: OnDuplicateKeyNode): OnDuplicateKeyNode;
124
126
  protected transformCreateIndex(node: CreateIndexNode): CreateIndexNode;
125
127
  protected transformList(node: ListNode): ListNode;
126
128
  protected transformDropIndex(node: DropIndexNode): DropIndexNode;
@@ -71,6 +71,7 @@ class OperationNodeTransformer {
71
71
  LimitNode: this.transformLimit.bind(this),
72
72
  OffsetNode: this.transformOffset.bind(this),
73
73
  OnConflictNode: this.transformOnConflict.bind(this),
74
+ OnDuplicateKeyNode: this.transformOnDuplicateKey.bind(this),
74
75
  CreateIndexNode: this.transformCreateIndex.bind(this),
75
76
  DropIndexNode: this.transformDropIndex.bind(this),
76
77
  ListNode: this.transformList.bind(this),
@@ -227,7 +228,9 @@ class OperationNodeTransformer {
227
228
  values: this.transformNodeList(node.values),
228
229
  returning: this.transformNode(node.returning),
229
230
  onConflict: this.transformNode(node.onConflict),
231
+ onDuplicateKey: this.transformNode(node.onDuplicateKey),
230
232
  with: this.transformNode(node.with),
233
+ ignore: node.ignore,
231
234
  };
232
235
  }
233
236
  transformDeleteQuery(node) {
@@ -346,6 +349,12 @@ class OperationNodeTransformer {
346
349
  doNothing: node.doNothing,
347
350
  };
348
351
  }
352
+ transformOnDuplicateKey(node) {
353
+ return {
354
+ kind: 'OnDuplicateKeyNode',
355
+ updates: this.transformNodeList(node.updates),
356
+ };
357
+ }
349
358
  transformCreateIndex(node) {
350
359
  return {
351
360
  kind: 'CreateIndexNode',
@@ -390,6 +399,8 @@ class OperationNodeTransformer {
390
399
  columns: this.transformNodeList(node.columns),
391
400
  references: this.transformNode(node.references),
392
401
  name: this.transformNode(node.name),
402
+ onDelete: node.onDelete,
403
+ onUpdate: node.onUpdate,
393
404
  };
394
405
  }
395
406
  transformReferences(node) {
@@ -398,6 +409,7 @@ class OperationNodeTransformer {
398
409
  table: this.transformNode(node.table),
399
410
  columns: this.transformNodeList(node.columns),
400
411
  onDelete: node.onDelete,
412
+ onUpdate: node.onUpdate,
401
413
  };
402
414
  }
403
415
  transformCheckConstraint(node) {
@@ -56,6 +56,7 @@ import { DropConstraintNode } from './drop-constraint-node.js';
56
56
  import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
57
57
  import { ColumnDefinitionNode } from './column-definition-node.js';
58
58
  import { ModifyColumnNode } from './modify-column-node.js';
59
+ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
59
60
  export declare class OperationNodeVisitor {
60
61
  #private;
61
62
  protected readonly nodeStack: OperationNode[];
@@ -91,6 +92,7 @@ export declare class OperationNodeVisitor {
91
92
  protected visitLimit(node: LimitNode): void;
92
93
  protected visitOffset(node: OffsetNode): void;
93
94
  protected visitOnConflict(node: OnConflictNode): void;
95
+ protected visitOnDuplicateKey(node: OnDuplicateKeyNode): void;
94
96
  protected visitCreateIndex(node: CreateIndexNode): void;
95
97
  protected visitList(node: ListNode): void;
96
98
  protected visitDropIndex(node: DropIndexNode): void;
@@ -41,6 +41,7 @@ class OperationNodeVisitor {
41
41
  LimitNode: this.visitLimit.bind(this),
42
42
  OffsetNode: this.visitOffset.bind(this),
43
43
  OnConflictNode: this.visitOnConflict.bind(this),
44
+ OnDuplicateKeyNode: this.visitOnDuplicateKey.bind(this),
44
45
  CreateIndexNode: this.visitCreateIndex.bind(this),
45
46
  DropIndexNode: this.visitDropIndex.bind(this),
46
47
  ListNode: this.visitList.bind(this),
@@ -265,6 +266,9 @@ class OperationNodeVisitor {
265
266
  node.updates.forEach(this.visitNode);
266
267
  }
267
268
  }
269
+ visitOnDuplicateKey(node) {
270
+ node.updates.forEach(this.visitNode);
271
+ }
268
272
  visitCreateIndex(node) {
269
273
  this.visitNode(node.name);
270
274
  if (node.table) {
@@ -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' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode';
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';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }
@@ -1,12 +1,13 @@
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 OnDelete = 'cascade' | 'set null';
4
+ export declare type OnModifyForeignAction = 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
5
5
  export interface ReferencesNode extends OperationNode {
6
6
  readonly kind: 'ReferencesNode';
7
7
  readonly table: TableNode;
8
8
  readonly columns: ReadonlyArray<ColumnNode>;
9
- readonly onDelete?: OnDelete;
9
+ readonly onDelete?: OnModifyForeignAction;
10
+ readonly onUpdate?: OnModifyForeignAction;
10
11
  }
11
12
  /**
12
13
  * @internal
@@ -14,5 +15,6 @@ export interface ReferencesNode extends OperationNode {
14
15
  export declare const ReferencesNode: Readonly<{
15
16
  is(node: OperationNode): node is ReferencesNode;
16
17
  create(table: TableNode, columns: ReadonlyArray<ColumnNode>): ReferencesNode;
17
- cloneWithOnDelete(references: ReferencesNode, onDelete: OnDelete): ReferencesNode;
18
+ cloneWithOnDelete(references: ReferencesNode, onDelete: OnModifyForeignAction): ReferencesNode;
19
+ cloneWithOnUpdate(references: ReferencesNode, onUpdate: OnModifyForeignAction): ReferencesNode;
18
20
  }>;
@@ -22,4 +22,10 @@ exports.ReferencesNode = (0, object_utils_js_1.freeze)({
22
22
  onDelete,
23
23
  });
24
24
  },
25
+ cloneWithOnUpdate(references, onUpdate) {
26
+ return (0, object_utils_js_1.freeze)({
27
+ ...references,
28
+ onUpdate,
29
+ });
30
+ },
25
31
  });
@@ -11,10 +11,10 @@ exports.TableNode = (0, object_utils_js_1.freeze)({
11
11
  return node.kind === 'TableNode';
12
12
  },
13
13
  create(table) {
14
- return {
14
+ return (0, object_utils_js_1.freeze)({
15
15
  kind: 'TableNode',
16
16
  table: identifier_node_js_1.IdentifierNode.create(table),
17
- };
17
+ });
18
18
  },
19
19
  createWithSchema(schema, table) {
20
20
  return (0, object_utils_js_1.freeze)({
@@ -0,0 +1,5 @@
1
+ import { ColumnDataType, DataTypeNode } from '../operation-node/data-type-node.js';
2
+ import { RawNode } from '../operation-node/raw-node.js';
3
+ import { AnyRawBuilder } from '../query-builder/type-utils.js';
4
+ export declare type DataTypeExpression = ColumnDataType | AnyRawBuilder;
5
+ export declare function parseDataTypeExpression(dataType: DataTypeExpression): DataTypeNode | RawNode;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDataTypeExpression = void 0;
4
+ const data_type_node_js_1 = require("../operation-node/data-type-node.js");
5
+ const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
6
+ function parseDataTypeExpression(dataType) {
7
+ return (0, operation_node_source_js_1.isOperationNodeSource)(dataType)
8
+ ? dataType.toOperationNode()
9
+ : data_type_node_js_1.DataTypeNode.create(dataType);
10
+ }
11
+ exports.parseDataTypeExpression = parseDataTypeExpression;
@@ -0,0 +1,6 @@
1
+ import { RawNode } from '../operation-node/raw-node.js';
2
+ import { ValueNode } from '../operation-node/value-node.js';
3
+ import { AnyRawBuilder } from '../query-builder/type-utils.js';
4
+ import { PrimitiveValue } from '../util/object-utils.js';
5
+ export declare type DefaultValueExpression = PrimitiveValue | AnyRawBuilder;
6
+ export declare function parseDefaultValueExpression(value: DefaultValueExpression): ValueNode | RawNode;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDefaultValueExpression = void 0;
4
+ const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
5
+ const value_node_js_1 = require("../operation-node/value-node.js");
6
+ function parseDefaultValueExpression(value) {
7
+ return (0, operation_node_source_js_1.isOperationNodeSource)(value)
8
+ ? value.toOperationNode()
9
+ : value_node_js_1.ValueNode.createImmediate(value);
10
+ }
11
+ exports.parseDefaultValueExpression = parseDefaultValueExpression;
@@ -10,5 +10,5 @@ export declare function parseWhereFilter(ctx: ParseContext, args: any[]): Filter
10
10
  export declare function parseHavingFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
11
11
  export declare function parseOnFilter(ctx: ParseContext, args: any[]): FilterExpressionNode;
12
12
  export declare function parseReferenceFilter(ctx: ParseContext, lhs: ReferenceExpression<any, any>, op: FilterOperator, rhs: ReferenceExpression<any, any>): FilterNode;
13
- export declare function parseExistExpression(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
14
- export declare function parseNotExistExpression(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
13
+ export declare function parseExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
14
+ export declare function parseNotExistFilter(ctx: ParseContext, arg: ExistsExpression<any, any>): FilterNode;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseNotExistExpression = exports.parseExistExpression = exports.parseReferenceFilter = exports.parseOnFilter = exports.parseHavingFilter = exports.parseWhereFilter = void 0;
3
+ exports.parseNotExistFilter = exports.parseExistFilter = exports.parseReferenceFilter = exports.parseOnFilter = exports.parseHavingFilter = exports.parseWhereFilter = void 0;
4
4
  const filter_node_js_1 = require("../operation-node/filter-node.js");
5
5
  const object_utils_js_1 = require("../util/object-utils.js");
6
6
  const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
@@ -11,13 +11,12 @@ const reference_parser_js_1 = require("./reference-parser.js");
11
11
  const value_parser_js_1 = require("./value-parser.js");
12
12
  const select_query_node_js_1 = require("../operation-node/select-query-node.js");
13
13
  const value_node_js_1 = require("../operation-node/value-node.js");
14
- const table_parser_js_1 = require("./table-parser.js");
15
14
  function parseWhereFilter(ctx, args) {
16
15
  if (args.length === 3) {
17
16
  return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
18
17
  }
19
18
  else if (args.length === 1 && (0, object_utils_js_1.isFunction)(args[0])) {
20
- return parseWhereGrouper(ctx, args[0]);
19
+ return parseWhereGroup(ctx, args[0]);
21
20
  }
22
21
  else {
23
22
  throw new Error(`invalid arguments passed to a where method ${JSON.stringify(args)}`);
@@ -29,7 +28,7 @@ function parseHavingFilter(ctx, args) {
29
28
  return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
30
29
  }
31
30
  else if (args.length === 1 && (0, object_utils_js_1.isFunction)(args[0])) {
32
- return parseHavingGrouper(ctx, args[0]);
31
+ return parseHavingGroup(ctx, args[0]);
33
32
  }
34
33
  else {
35
34
  throw new Error(`invalid arguments passed to a having method ${JSON.stringify(args)}`);
@@ -41,7 +40,7 @@ function parseOnFilter(ctx, args) {
41
40
  return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
42
41
  }
43
42
  else if (args.length === 1 && (0, object_utils_js_1.isFunction)(args[0])) {
44
- return parseOnGrouper(ctx, args[0]);
43
+ return parseOnGroup(ctx, args[0]);
45
44
  }
46
45
  else {
47
46
  throw new Error(`invalid arguments passed to an on method ${JSON.stringify(args)}`);
@@ -52,23 +51,14 @@ function parseReferenceFilter(ctx, lhs, op, rhs) {
52
51
  return filter_node_js_1.FilterNode.create((0, reference_parser_js_1.parseReferenceExpression)(ctx, lhs), parseFilterOperator(op), (0, reference_parser_js_1.parseReferenceExpression)(ctx, rhs));
53
52
  }
54
53
  exports.parseReferenceFilter = parseReferenceFilter;
55
- function parseExistExpression(ctx, arg) {
56
- return doParseExistExpression(ctx, 'exists', arg);
54
+ function parseExistFilter(ctx, arg) {
55
+ return parseExistExpression(ctx, 'exists', arg);
57
56
  }
58
- exports.parseExistExpression = parseExistExpression;
59
- function parseNotExistExpression(ctx, arg) {
60
- return doParseExistExpression(ctx, 'not exists', arg);
61
- }
62
- exports.parseNotExistExpression = parseNotExistExpression;
63
- function doParseExistExpression(ctx, type, arg) {
64
- const node = (0, object_utils_js_1.isFunction)(arg)
65
- ? arg(ctx.createSubQueryBuilder()).toOperationNode()
66
- : arg.toOperationNode();
67
- if (!select_query_node_js_1.SelectQueryNode.is(node) && !raw_node_js_1.RawNode.is(node)) {
68
- throw new Error('invalid where exists arg');
69
- }
70
- return filter_node_js_1.FilterNode.create(undefined, operator_node_js_1.OperatorNode.create(type), node);
57
+ exports.parseExistFilter = parseExistFilter;
58
+ function parseNotExistFilter(ctx, arg) {
59
+ return parseExistExpression(ctx, 'not exists', arg);
71
60
  }
61
+ exports.parseNotExistFilter = parseNotExistFilter;
72
62
  function parseThreeArgFilter(ctx, left, op, right) {
73
63
  if ((op === 'is' || op === 'is not') && ((0, object_utils_js_1.isNull)(right) || (0, object_utils_js_1.isBoolean)(right))) {
74
64
  return parseIsFilter(ctx, left, op, right);
@@ -79,38 +69,46 @@ function parseIsFilter(ctx, left, op, right) {
79
69
  return filter_node_js_1.FilterNode.create((0, reference_parser_js_1.parseReferenceExpression)(ctx, left), parseFilterOperator(op), value_node_js_1.ValueNode.createImmediate(right));
80
70
  }
81
71
  function parseFilterOperator(op) {
82
- if ((0, operation_node_source_js_1.isOperationNodeSource)(op)) {
83
- return op.toOperationNode();
84
- }
85
- else if ((0, object_utils_js_1.isString)(op)) {
86
- const opString = op.trim().toLowerCase();
87
- if (operator_node_js_1.OPERATORS.some((it) => it === opString)) {
88
- return operator_node_js_1.OperatorNode.create(opString);
72
+ if ((0, object_utils_js_1.isString)(op)) {
73
+ if (operator_node_js_1.OPERATORS.includes(op)) {
74
+ return operator_node_js_1.OperatorNode.create(op);
89
75
  }
90
76
  }
77
+ else if ((0, operation_node_source_js_1.isOperationNodeSource)(op)) {
78
+ return op.toOperationNode();
79
+ }
91
80
  throw new Error(`invalid comparison operator ${JSON.stringify(op)} passed to a filter method`);
92
81
  }
93
- function parseWhereGrouper(ctx, grouper) {
94
- const query = grouper(ctx.createEmptySelectQuery());
82
+ function parseWhereGroup(ctx, callback) {
83
+ const query = callback(ctx.createSelectQueryBuilder([]));
95
84
  const queryNode = query.toOperationNode();
96
85
  if (!queryNode.where) {
97
- throw new Error('no where methods called insided a grouper');
86
+ throw new Error('no `where*` methods called insided a group callback');
98
87
  }
99
88
  return parens_node_js_1.ParensNode.create(queryNode.where.where);
100
89
  }
101
- function parseHavingGrouper(ctx, grouper) {
102
- const query = grouper(ctx.createEmptySelectQuery());
90
+ function parseHavingGroup(ctx, callback) {
91
+ const query = callback(ctx.createSelectQueryBuilder([]));
103
92
  const queryNode = query.toOperationNode();
104
93
  if (!queryNode.having) {
105
- throw new Error('no having methods called insided a grouper');
94
+ throw new Error('no `having*` methods called insided a group callback');
106
95
  }
107
96
  return parens_node_js_1.ParensNode.create(queryNode.having.having);
108
97
  }
109
- function parseOnGrouper(ctx, grouper) {
110
- const joinBuilder = grouper(ctx.createJoinBuilder('InnerJoin', (0, table_parser_js_1.parseTableExpression)(ctx, 'table')));
98
+ function parseOnGroup(ctx, callback) {
99
+ const joinBuilder = callback(ctx.createJoinBuilder('InnerJoin', 'table'));
111
100
  const joinNode = joinBuilder.toOperationNode();
112
101
  if (!joinNode.on) {
113
- throw new Error('no `on` methods called insided a grouper where');
102
+ throw new Error('no `on*` methods called insided a group callback');
114
103
  }
115
104
  return parens_node_js_1.ParensNode.create(joinNode.on);
116
105
  }
106
+ function parseExistExpression(ctx, type, arg) {
107
+ const node = (0, object_utils_js_1.isFunction)(arg)
108
+ ? arg(ctx.createExpressionBuilder()).toOperationNode()
109
+ : arg.toOperationNode();
110
+ if (!select_query_node_js_1.SelectQueryNode.is(node) && !raw_node_js_1.RawNode.is(node)) {
111
+ throw new Error('invalid where exists arg');
112
+ }
113
+ return filter_node_js_1.FilterNode.create(undefined, operator_node_js_1.OperatorNode.create(type), node);
114
+ }
@@ -5,4 +5,4 @@ import { JoinBuilder } from '../query-builder/join-builder.js';
5
5
  import { ParseContext } from './parse-context.js';
6
6
  export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>> | AnyColumnWithTable<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
7
7
  export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabaseType<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
8
- export declare function parseJoinArgs(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
8
+ export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
@@ -1,27 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseJoinArgs = void 0;
3
+ exports.parseJoin = void 0;
4
4
  const join_node_js_1 = require("../operation-node/join-node.js");
5
5
  const table_parser_js_1 = require("./table-parser.js");
6
6
  const filter_parser_js_1 = require("./filter-parser.js");
7
- function parseJoinArgs(ctx, joinType, args) {
8
- if (args.length === 2) {
9
- return parseCallbackJoin(ctx, joinType, args[0], args[1]);
10
- }
11
- else if (args.length === 3) {
7
+ function parseJoin(ctx, joinType, args) {
8
+ if (args.length === 3) {
12
9
  return parseSingleOnJoin(ctx, joinType, args[0], args[1], args[2]);
13
10
  }
11
+ else if (args.length === 2) {
12
+ return parseCallbackJoin(ctx, joinType, args[0], args[1]);
13
+ }
14
14
  else {
15
15
  throw new Error('not implemented');
16
16
  }
17
17
  }
18
- exports.parseJoinArgs = parseJoinArgs;
18
+ exports.parseJoin = parseJoin;
19
19
  function parseCallbackJoin(ctx, joinType, from, callback) {
20
- const tableNode = (0, table_parser_js_1.parseTableExpression)(ctx, from);
21
- const joinBuilder = callback(ctx.createJoinBuilder(joinType, tableNode));
20
+ const joinBuilder = callback(ctx.createJoinBuilder(joinType, from));
22
21
  return joinBuilder.toOperationNode();
23
22
  }
24
23
  function parseSingleOnJoin(ctx, joinType, from, lhsColumn, rhsColumn) {
25
- const tableNode = (0, table_parser_js_1.parseTableExpression)(ctx, from);
26
- return join_node_js_1.JoinNode.cloneWithOn(join_node_js_1.JoinNode.create(joinType, tableNode), 'And', (0, filter_parser_js_1.parseReferenceFilter)(ctx, lhsColumn, '=', rhsColumn));
24
+ return join_node_js_1.JoinNode.createWithOn(joinType, (0, table_parser_js_1.parseTableExpression)(ctx, from), (0, filter_parser_js_1.parseReferenceFilter)(ctx, lhsColumn, '=', rhsColumn));
27
25
  }
@@ -1,14 +1,41 @@
1
- import { DialectAdapter } from '../index.js';
1
+ import { DialectAdapter } from '../dialect/dialect-adapter.js';
2
2
  import { JoinType } from '../operation-node/join-node.js';
3
- import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
4
3
  import { JoinBuilder } from '../query-builder/join-builder.js';
5
4
  import { QueryBuilder } from '../query-builder/query-builder.js';
6
- import { SubQueryBuilder } from '../query-builder/sub-query-builder.js';
5
+ import { ExpressionBuilder } from '../query-builder/expression-builder.js';
7
6
  import { QueryCreator } from '../query-creator.js';
7
+ import { TableExpression } from './table-parser.js';
8
+ /**
9
+ * This interface exposes everything the parsers need to be able to parse
10
+ * method calls into {@link OperationNode} trees.
11
+ */
8
12
  export interface ParseContext {
9
- createEmptySelectQuery(): QueryBuilder<any, any>;
10
- createSubQueryBuilder(): SubQueryBuilder<any, any>;
13
+ readonly adapter: DialectAdapter;
14
+ /**
15
+ * Creates a select query builder with a {@link NoopQueryExecutor}.
16
+ */
17
+ createSelectQueryBuilder(tables: ReadonlyArray<TableExpression<any, any>>): QueryBuilder<any, any>;
18
+ /**
19
+ * Creates an instance of a join builder.
20
+ */
21
+ createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
22
+ /**
23
+ * Creates an expression builder for building stuff like subqueries.
24
+ * {@link NoopQueryExecutor} is used as the executor and the queries
25
+ * built using the returned builder can never be executed.
26
+ */
27
+ createExpressionBuilder(): ExpressionBuilder<any, any>;
28
+ /**
29
+ * Creates a query creator with a {@link NoopQueryExecutor}.
30
+ */
31
+ createQueryCreator(): QueryCreator<any>;
32
+ }
33
+ export declare class DefaultParseContext implements ParseContext {
34
+ #private;
35
+ constructor(adapter: DialectAdapter);
36
+ get adapter(): DialectAdapter;
37
+ createSelectQueryBuilder(tables: ReadonlyArray<TableExpression<any, any>>): QueryBuilder<any, any>;
38
+ createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
39
+ createExpressionBuilder(): ExpressionBuilder<any, any>;
11
40
  createQueryCreator(): QueryCreator<any>;
12
- createJoinBuilder(joinType: JoinType, tableNode: TableExpressionNode): JoinBuilder<any, any>;
13
41
  }
14
- export declare function createParseContext(adapter: DialectAdapter): ParseContext;