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
@@ -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
  }>;
@@ -6,10 +6,10 @@ export const OnConflictNode = freeze({
6
6
  is(node) {
7
7
  return node.kind === 'OnConflictNode';
8
8
  },
9
- create(params) {
9
+ create(props) {
10
10
  return freeze({
11
11
  kind: 'OnConflictNode',
12
- ...params,
12
+ ...props,
13
13
  });
14
14
  },
15
15
  });
@@ -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,15 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ /**
3
+ * @internal
4
+ */
5
+ export const OnDuplicateKeyNode = freeze({
6
+ is(node) {
7
+ return node.kind === 'OnDuplicateKeyNode';
8
+ },
9
+ create(updates) {
10
+ return freeze({
11
+ kind: 'OnDuplicateKeyNode',
12
+ updates,
13
+ });
14
+ },
15
+ });
@@ -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;
@@ -68,6 +68,7 @@ export class OperationNodeTransformer {
68
68
  LimitNode: this.transformLimit.bind(this),
69
69
  OffsetNode: this.transformOffset.bind(this),
70
70
  OnConflictNode: this.transformOnConflict.bind(this),
71
+ OnDuplicateKeyNode: this.transformOnDuplicateKey.bind(this),
71
72
  CreateIndexNode: this.transformCreateIndex.bind(this),
72
73
  DropIndexNode: this.transformDropIndex.bind(this),
73
74
  ListNode: this.transformList.bind(this),
@@ -224,7 +225,9 @@ export class OperationNodeTransformer {
224
225
  values: this.transformNodeList(node.values),
225
226
  returning: this.transformNode(node.returning),
226
227
  onConflict: this.transformNode(node.onConflict),
228
+ onDuplicateKey: this.transformNode(node.onDuplicateKey),
227
229
  with: this.transformNode(node.with),
230
+ ignore: node.ignore,
228
231
  };
229
232
  }
230
233
  transformDeleteQuery(node) {
@@ -343,6 +346,12 @@ export class OperationNodeTransformer {
343
346
  doNothing: node.doNothing,
344
347
  };
345
348
  }
349
+ transformOnDuplicateKey(node) {
350
+ return {
351
+ kind: 'OnDuplicateKeyNode',
352
+ updates: this.transformNodeList(node.updates),
353
+ };
354
+ }
346
355
  transformCreateIndex(node) {
347
356
  return {
348
357
  kind: 'CreateIndexNode',
@@ -387,6 +396,8 @@ export class OperationNodeTransformer {
387
396
  columns: this.transformNodeList(node.columns),
388
397
  references: this.transformNode(node.references),
389
398
  name: this.transformNode(node.name),
399
+ onDelete: node.onDelete,
400
+ onUpdate: node.onUpdate,
390
401
  };
391
402
  }
392
403
  transformReferences(node) {
@@ -395,6 +406,7 @@ export class OperationNodeTransformer {
395
406
  table: this.transformNode(node.table),
396
407
  columns: this.transformNodeList(node.columns),
397
408
  onDelete: node.onDelete,
409
+ onUpdate: node.onUpdate,
398
410
  };
399
411
  }
400
412
  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;
@@ -38,6 +38,7 @@ export class OperationNodeVisitor {
38
38
  LimitNode: this.visitLimit.bind(this),
39
39
  OffsetNode: this.visitOffset.bind(this),
40
40
  OnConflictNode: this.visitOnConflict.bind(this),
41
+ OnDuplicateKeyNode: this.visitOnDuplicateKey.bind(this),
41
42
  CreateIndexNode: this.visitCreateIndex.bind(this),
42
43
  DropIndexNode: this.visitDropIndex.bind(this),
43
44
  ListNode: this.visitList.bind(this),
@@ -262,6 +263,9 @@ export class OperationNodeVisitor {
262
263
  node.updates.forEach(this.visitNode);
263
264
  }
264
265
  }
266
+ visitOnDuplicateKey(node) {
267
+ node.updates.forEach(this.visitNode);
268
+ }
265
269
  visitCreateIndex(node) {
266
270
  this.visitNode(node.name);
267
271
  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
  }>;
@@ -19,4 +19,10 @@ export const ReferencesNode = freeze({
19
19
  onDelete,
20
20
  });
21
21
  },
22
+ cloneWithOnUpdate(references, onUpdate) {
23
+ return freeze({
24
+ ...references,
25
+ onUpdate,
26
+ });
27
+ },
22
28
  });
@@ -8,10 +8,10 @@ export const TableNode = freeze({
8
8
  return node.kind === 'TableNode';
9
9
  },
10
10
  create(table) {
11
- return {
11
+ return freeze({
12
12
  kind: 'TableNode',
13
13
  table: IdentifierNode.create(table),
14
- };
14
+ });
15
15
  },
16
16
  createWithSchema(schema, table) {
17
17
  return 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,7 @@
1
+ import { DataTypeNode, } from '../operation-node/data-type-node.js';
2
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
3
+ export function parseDataTypeExpression(dataType) {
4
+ return isOperationNodeSource(dataType)
5
+ ? dataType.toOperationNode()
6
+ : DataTypeNode.create(dataType);
7
+ }
@@ -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,7 @@
1
+ import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { ValueNode } from '../operation-node/value-node.js';
3
+ export function parseDefaultValueExpression(value) {
4
+ return isOperationNodeSource(value)
5
+ ? value.toOperationNode()
6
+ : ValueNode.createImmediate(value);
7
+ }
@@ -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;
@@ -8,13 +8,12 @@ import { parseReferenceExpression, } from './reference-parser.js';
8
8
  import { parseValueExpressionOrList, } from './value-parser.js';
9
9
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
10
10
  import { ValueNode } from '../operation-node/value-node.js';
11
- import { parseTableExpression } from './table-parser.js';
12
11
  export function parseWhereFilter(ctx, args) {
13
12
  if (args.length === 3) {
14
13
  return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
15
14
  }
16
15
  else if (args.length === 1 && isFunction(args[0])) {
17
- return parseWhereGrouper(ctx, args[0]);
16
+ return parseWhereGroup(ctx, args[0]);
18
17
  }
19
18
  else {
20
19
  throw new Error(`invalid arguments passed to a where method ${JSON.stringify(args)}`);
@@ -25,7 +24,7 @@ export function parseHavingFilter(ctx, args) {
25
24
  return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
26
25
  }
27
26
  else if (args.length === 1 && isFunction(args[0])) {
28
- return parseHavingGrouper(ctx, args[0]);
27
+ return parseHavingGroup(ctx, args[0]);
29
28
  }
30
29
  else {
31
30
  throw new Error(`invalid arguments passed to a having method ${JSON.stringify(args)}`);
@@ -36,7 +35,7 @@ export function parseOnFilter(ctx, args) {
36
35
  return parseThreeArgFilter(ctx, args[0], args[1], args[2]);
37
36
  }
38
37
  else if (args.length === 1 && isFunction(args[0])) {
39
- return parseOnGrouper(ctx, args[0]);
38
+ return parseOnGroup(ctx, args[0]);
40
39
  }
41
40
  else {
42
41
  throw new Error(`invalid arguments passed to an on method ${JSON.stringify(args)}`);
@@ -45,20 +44,11 @@ export function parseOnFilter(ctx, args) {
45
44
  export function parseReferenceFilter(ctx, lhs, op, rhs) {
46
45
  return FilterNode.create(parseReferenceExpression(ctx, lhs), parseFilterOperator(op), parseReferenceExpression(ctx, rhs));
47
46
  }
48
- export function parseExistExpression(ctx, arg) {
49
- return doParseExistExpression(ctx, 'exists', arg);
47
+ export function parseExistFilter(ctx, arg) {
48
+ return parseExistExpression(ctx, 'exists', arg);
50
49
  }
51
- export function parseNotExistExpression(ctx, arg) {
52
- return doParseExistExpression(ctx, 'not exists', arg);
53
- }
54
- function doParseExistExpression(ctx, type, arg) {
55
- const node = isFunction(arg)
56
- ? arg(ctx.createSubQueryBuilder()).toOperationNode()
57
- : arg.toOperationNode();
58
- if (!SelectQueryNode.is(node) && !RawNode.is(node)) {
59
- throw new Error('invalid where exists arg');
60
- }
61
- return FilterNode.create(undefined, OperatorNode.create(type), node);
50
+ export function parseNotExistFilter(ctx, arg) {
51
+ return parseExistExpression(ctx, 'not exists', arg);
62
52
  }
63
53
  function parseThreeArgFilter(ctx, left, op, right) {
64
54
  if ((op === 'is' || op === 'is not') && (isNull(right) || isBoolean(right))) {
@@ -70,38 +60,46 @@ function parseIsFilter(ctx, left, op, right) {
70
60
  return FilterNode.create(parseReferenceExpression(ctx, left), parseFilterOperator(op), ValueNode.createImmediate(right));
71
61
  }
72
62
  function parseFilterOperator(op) {
73
- if (isOperationNodeSource(op)) {
74
- return op.toOperationNode();
75
- }
76
- else if (isString(op)) {
77
- const opString = op.trim().toLowerCase();
78
- if (OPERATORS.some((it) => it === opString)) {
79
- return OperatorNode.create(opString);
63
+ if (isString(op)) {
64
+ if (OPERATORS.includes(op)) {
65
+ return OperatorNode.create(op);
80
66
  }
81
67
  }
68
+ else if (isOperationNodeSource(op)) {
69
+ return op.toOperationNode();
70
+ }
82
71
  throw new Error(`invalid comparison operator ${JSON.stringify(op)} passed to a filter method`);
83
72
  }
84
- function parseWhereGrouper(ctx, grouper) {
85
- const query = grouper(ctx.createEmptySelectQuery());
73
+ function parseWhereGroup(ctx, callback) {
74
+ const query = callback(ctx.createSelectQueryBuilder([]));
86
75
  const queryNode = query.toOperationNode();
87
76
  if (!queryNode.where) {
88
- throw new Error('no where methods called insided a grouper');
77
+ throw new Error('no `where*` methods called insided a group callback');
89
78
  }
90
79
  return ParensNode.create(queryNode.where.where);
91
80
  }
92
- function parseHavingGrouper(ctx, grouper) {
93
- const query = grouper(ctx.createEmptySelectQuery());
81
+ function parseHavingGroup(ctx, callback) {
82
+ const query = callback(ctx.createSelectQueryBuilder([]));
94
83
  const queryNode = query.toOperationNode();
95
84
  if (!queryNode.having) {
96
- throw new Error('no having methods called insided a grouper');
85
+ throw new Error('no `having*` methods called insided a group callback');
97
86
  }
98
87
  return ParensNode.create(queryNode.having.having);
99
88
  }
100
- function parseOnGrouper(ctx, grouper) {
101
- const joinBuilder = grouper(ctx.createJoinBuilder('InnerJoin', parseTableExpression(ctx, 'table')));
89
+ function parseOnGroup(ctx, callback) {
90
+ const joinBuilder = callback(ctx.createJoinBuilder('InnerJoin', 'table'));
102
91
  const joinNode = joinBuilder.toOperationNode();
103
92
  if (!joinNode.on) {
104
- throw new Error('no `on` methods called insided a grouper where');
93
+ throw new Error('no `on*` methods called insided a group callback');
105
94
  }
106
95
  return ParensNode.create(joinNode.on);
107
96
  }
97
+ function parseExistExpression(ctx, type, arg) {
98
+ const node = isFunction(arg)
99
+ ? arg(ctx.createExpressionBuilder()).toOperationNode()
100
+ : arg.toOperationNode();
101
+ if (!SelectQueryNode.is(node) && !RawNode.is(node)) {
102
+ throw new Error('invalid where exists arg');
103
+ }
104
+ return FilterNode.create(undefined, OperatorNode.create(type), node);
105
+ }
@@ -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,23 +1,21 @@
1
1
  import { JoinNode } from '../operation-node/join-node.js';
2
2
  import { parseTableExpression, } from './table-parser.js';
3
3
  import { parseReferenceFilter } from './filter-parser.js';
4
- export function parseJoinArgs(ctx, joinType, args) {
5
- if (args.length === 2) {
6
- return parseCallbackJoin(ctx, joinType, args[0], args[1]);
7
- }
8
- else if (args.length === 3) {
4
+ export function parseJoin(ctx, joinType, args) {
5
+ if (args.length === 3) {
9
6
  return parseSingleOnJoin(ctx, joinType, args[0], args[1], args[2]);
10
7
  }
8
+ else if (args.length === 2) {
9
+ return parseCallbackJoin(ctx, joinType, args[0], args[1]);
10
+ }
11
11
  else {
12
12
  throw new Error('not implemented');
13
13
  }
14
14
  }
15
15
  function parseCallbackJoin(ctx, joinType, from, callback) {
16
- const tableNode = parseTableExpression(ctx, from);
17
- const joinBuilder = callback(ctx.createJoinBuilder(joinType, tableNode));
16
+ const joinBuilder = callback(ctx.createJoinBuilder(joinType, from));
18
17
  return joinBuilder.toOperationNode();
19
18
  }
20
19
  function parseSingleOnJoin(ctx, joinType, from, lhsColumn, rhsColumn) {
21
- const tableNode = parseTableExpression(ctx, from);
22
- return JoinNode.cloneWithOn(JoinNode.create(joinType, tableNode), 'And', parseReferenceFilter(ctx, lhsColumn, '=', rhsColumn));
20
+ return JoinNode.createWithOn(joinType, parseTableExpression(ctx, from), parseReferenceFilter(ctx, lhsColumn, '=', rhsColumn));
23
21
  }
@@ -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;
@@ -1,38 +1,46 @@
1
- import { NoopQueryExecutor, SelectQueryNode } from '../index.js';
2
1
  import { JoinNode } from '../operation-node/join-node.js';
2
+ import { SelectQueryNode } from '../operation-node/select-query-node.js';
3
3
  import { JoinBuilder } from '../query-builder/join-builder.js';
4
4
  import { QueryBuilder } from '../query-builder/query-builder.js';
5
- import { SubQueryBuilder } from '../query-builder/sub-query-builder.js';
5
+ import { ExpressionBuilder } from '../query-builder/expression-builder.js';
6
6
  import { QueryCreator } from '../query-creator.js';
7
- import { freeze } from '../util/object-utils.js';
7
+ import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js';
8
8
  import { createQueryId } from '../util/query-id.js';
9
- export function createParseContext(adapter) {
10
- return freeze({
11
- createEmptySelectQuery() {
12
- return new QueryBuilder({
13
- queryId: createQueryId(),
14
- executor: new NoopQueryExecutor(),
15
- queryNode: SelectQueryNode.create([]),
16
- adapter,
17
- });
18
- },
19
- createSubQueryBuilder() {
20
- return new SubQueryBuilder({
21
- executor: new NoopQueryExecutor(),
22
- adapter,
23
- });
24
- },
25
- createQueryCreator() {
26
- return new QueryCreator({
27
- executor: new NoopQueryExecutor(),
28
- adapter,
29
- });
30
- },
31
- createJoinBuilder(joinType, tableNode) {
32
- return new JoinBuilder({
33
- joinNode: JoinNode.create(joinType, tableNode),
34
- adapter,
35
- });
36
- },
37
- });
9
+ import { parseTableExpression, parseTableExpressionOrList, } from './table-parser.js';
10
+ export class DefaultParseContext {
11
+ #adapter;
12
+ #noopExecutor;
13
+ constructor(adapter) {
14
+ this.#adapter = adapter;
15
+ this.#noopExecutor = new NoopQueryExecutor();
16
+ }
17
+ get adapter() {
18
+ return this.#adapter;
19
+ }
20
+ createSelectQueryBuilder(tables) {
21
+ return new QueryBuilder({
22
+ queryId: createQueryId(),
23
+ executor: this.#noopExecutor,
24
+ parseContext: this,
25
+ queryNode: SelectQueryNode.create(parseTableExpressionOrList(this, tables)),
26
+ });
27
+ }
28
+ createJoinBuilder(joinType, table) {
29
+ return new JoinBuilder({
30
+ joinNode: JoinNode.create(joinType, parseTableExpression(this, table)),
31
+ parseContext: this,
32
+ });
33
+ }
34
+ createExpressionBuilder() {
35
+ return new ExpressionBuilder({
36
+ executor: this.#noopExecutor,
37
+ parseContext: this,
38
+ });
39
+ }
40
+ createQueryCreator() {
41
+ return new QueryCreator({
42
+ executor: this.#noopExecutor,
43
+ parseContext: this,
44
+ });
45
+ }
38
46
  }
@@ -14,7 +14,7 @@ export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB,
14
14
  declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, S extends string, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : S extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : S extends keyof R ? R[S] : PrimitiveValue;
15
15
  export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
16
16
  export declare function parseReferenceExpression(ctx: ParseContext, arg: ReferenceExpression<any, any>): ReferenceExpressionNode;
17
- export declare function parseStringReference(str: string): ColumnNode | ReferenceNode;
18
- export declare function parseAliasedStringReference(str: string): ColumnNode | ReferenceNode | AliasNode;
17
+ export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
18
+ export declare function parseAliasedStringReference(ref: string): ColumnNode | ReferenceNode | AliasNode;
19
19
  export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
20
20
  export {};
@@ -24,16 +24,17 @@ export function parseReferenceExpression(ctx, arg) {
24
24
  }
25
25
  }
26
26
  else if (isFunction(arg)) {
27
- const node = arg(ctx.createSubQueryBuilder()).toOperationNode();
27
+ const node = arg(ctx.createExpressionBuilder()).toOperationNode();
28
28
  if (!QueryNode.isMutating(node)) {
29
29
  return node;
30
30
  }
31
31
  }
32
32
  throw new Error(`invalid reference expression ${JSON.stringify(arg)}`);
33
33
  }
34
- export function parseStringReference(str) {
35
- if (str.includes('.')) {
36
- const parts = str.split('.').map((it) => it.trim());
34
+ export function parseStringReference(ref) {
35
+ const COLUMN_SEPARATOR = '.';
36
+ if (ref.includes(COLUMN_SEPARATOR)) {
37
+ const parts = ref.split(COLUMN_SEPARATOR).map(trim);
37
38
  if (parts.length === 3) {
38
39
  return parseStringReferenceWithTableAndSchema(parts);
39
40
  }
@@ -41,21 +42,21 @@ export function parseStringReference(str) {
41
42
  return parseStringReferenceWithTable(parts);
42
43
  }
43
44
  else {
44
- throw new Error(`invalid column reference ${str}`);
45
+ throw new Error(`invalid column reference ${ref}`);
45
46
  }
46
47
  }
47
48
  else {
48
- return ColumnNode.create(str);
49
+ return ColumnNode.create(ref);
49
50
  }
50
51
  }
51
- export function parseAliasedStringReference(str) {
52
- if (str.includes(' as ')) {
53
- const [tableColumn, alias] = str.split(' as ').map((it) => it.trim());
54
- const tableColumnNode = parseStringReference(tableColumn);
55
- return AliasNode.create(tableColumnNode, alias);
52
+ export function parseAliasedStringReference(ref) {
53
+ const ALIAS_SEPARATOR = ' as ';
54
+ if (ref.includes(ALIAS_SEPARATOR)) {
55
+ const [columnRef, alias] = ref.split(ALIAS_SEPARATOR).map(trim);
56
+ return AliasNode.create(parseStringReference(columnRef), alias);
56
57
  }
57
58
  else {
58
- return parseStringReference(str);
59
+ return parseStringReference(ref);
59
60
  }
60
61
  }
61
62
  export function parseColumnName(column) {
@@ -69,3 +70,6 @@ function parseStringReferenceWithTable(parts) {
69
70
  const [table, column] = parts;
70
71
  return ReferenceNode.create(TableNode.create(table), ColumnNode.create(column));
71
72
  }
73
+ function trim(str) {
74
+ return str.trim();
75
+ }
@@ -26,6 +26,5 @@ declare type ExtractAliasFromStringSelectExpression<S extends string> = S extend
26
26
  declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, S, A extends keyof any> = S extends string ? ExtractTypeFromStringSelectExpression<DB, TB, S, A> : S extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : S extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : S extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
27
27
  declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, S extends string, A extends keyof any, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends `${infer C} as ${infer RA}` ? RA extends A ? C extends keyof R ? R[C] : never : never : S extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : S extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : S extends A ? S extends keyof R ? R[S] : never : never;
28
28
  export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
29
- export declare function parseSelectAllArgs(table?: string | string[]): SelectionNode[];
30
- export declare function parseSelectAllArg(table: string): SelectionNode;
29
+ export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
31
30
  export {};