kysely 0.9.1 → 0.9.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 (121) hide show
  1. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +11 -0
  2. package/dist/cjs/dialect/mysql/mysql-dialect.js +7 -0
  3. package/dist/cjs/dialect/mysql/mysql-driver.js +2 -2
  4. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +13 -1
  5. package/dist/cjs/dialect/postgres/postgres-dialect.js +10 -0
  6. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-query-compiler.js +1 -1
  8. package/dist/cjs/driver/runtime-driver.d.ts +3 -2
  9. package/dist/cjs/driver/runtime-driver.js +57 -4
  10. package/dist/cjs/index.d.ts +2 -1
  11. package/dist/cjs/kysely.d.ts +31 -9
  12. package/dist/cjs/kysely.js +25 -9
  13. package/dist/cjs/migration/migration.d.ts +32 -0
  14. package/dist/cjs/operation-node/join-node.d.ts +2 -1
  15. package/dist/cjs/operation-node/join-node.js +8 -6
  16. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  17. package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
  18. package/dist/cjs/operation-node/operation-node-visitor.d.ts +61 -59
  19. package/dist/cjs/operation-node/operation-node-visitor.js +1 -316
  20. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  21. package/dist/cjs/operation-node/query-node.d.ts +4 -3
  22. package/dist/cjs/operation-node/query-node.js +10 -2
  23. package/dist/cjs/operation-node/select-query-node.d.ts +5 -1
  24. package/dist/cjs/operation-node/select-query-node.js +18 -2
  25. package/dist/cjs/operation-node/union-node.d.ts +16 -0
  26. package/dist/cjs/operation-node/union-node.js +19 -0
  27. package/dist/cjs/parser/group-by-parser.d.ts +4 -0
  28. package/dist/cjs/parser/group-by-parser.js +9 -0
  29. package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
  30. package/dist/cjs/parser/join-parser.d.ts +4 -4
  31. package/dist/cjs/parser/order-by-parser.d.ts +2 -4
  32. package/dist/cjs/parser/order-by-parser.js +6 -3
  33. package/dist/cjs/parser/reference-parser.d.ts +1 -1
  34. package/dist/cjs/parser/reference-parser.js +1 -1
  35. package/dist/cjs/parser/union-parser.d.ts +5 -0
  36. package/dist/cjs/parser/union-parser.js +13 -0
  37. package/dist/cjs/parser/value-parser.d.ts +1 -1
  38. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +5 -116
  39. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +8 -0
  40. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +19 -0
  41. package/dist/cjs/plugin/camel-case/camel-case.d.ts +15 -0
  42. package/dist/cjs/plugin/camel-case/camel-case.js +109 -0
  43. package/dist/cjs/plugin/kysely-plugin.d.ts +1 -1
  44. package/dist/cjs/query-builder/join-builder.js +8 -8
  45. package/dist/cjs/query-builder/query-builder.d.ts +65 -1
  46. package/dist/cjs/query-builder/query-builder.js +103 -22
  47. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  48. package/dist/cjs/query-compiler/default-query-compiler.d.ts +7 -2
  49. package/dist/cjs/query-compiler/default-query-compiler.js +20 -3
  50. package/dist/cjs/query-executor/default-query-executor.d.ts +1 -0
  51. package/dist/cjs/query-executor/default-query-executor.js +6 -0
  52. package/dist/cjs/query-executor/noop-query-executor.d.ts +1 -0
  53. package/dist/cjs/query-executor/noop-query-executor.js +3 -0
  54. package/dist/cjs/query-executor/query-executor.d.ts +9 -4
  55. package/dist/cjs/util/log.d.ts +19 -0
  56. package/dist/cjs/util/log.js +37 -0
  57. package/dist/cjs/util/object-utils.d.ts +11 -11
  58. package/dist/cjs/util/object-utils.js +1 -1
  59. package/dist/cjs/util/random-string.js +6 -3
  60. package/dist/cjs/util/type-utils.d.ts +4 -4
  61. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +11 -0
  62. package/dist/esm/dialect/mysql/mysql-dialect.js +7 -0
  63. package/dist/esm/dialect/mysql/mysql-driver.js +3 -3
  64. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +13 -1
  65. package/dist/esm/dialect/postgres/postgres-dialect.js +10 -0
  66. package/dist/esm/dialect/postgres/postgres-driver.js +2 -2
  67. package/dist/esm/dialect/postgres/postgres-query-compiler.js +1 -1
  68. package/dist/esm/driver/runtime-driver.d.ts +3 -2
  69. package/dist/esm/driver/runtime-driver.js +57 -4
  70. package/dist/esm/index.d.ts +2 -1
  71. package/dist/esm/kysely.d.ts +31 -9
  72. package/dist/esm/kysely.js +25 -9
  73. package/dist/esm/migration/migration.d.ts +32 -0
  74. package/dist/esm/operation-node/join-node.d.ts +2 -1
  75. package/dist/esm/operation-node/join-node.js +8 -6
  76. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  77. package/dist/esm/operation-node/operation-node-transformer.js +9 -0
  78. package/dist/esm/operation-node/operation-node-visitor.d.ts +61 -59
  79. package/dist/esm/operation-node/operation-node-visitor.js +1 -316
  80. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  81. package/dist/esm/operation-node/query-node.d.ts +4 -3
  82. package/dist/esm/operation-node/query-node.js +10 -2
  83. package/dist/esm/operation-node/select-query-node.d.ts +5 -1
  84. package/dist/esm/operation-node/select-query-node.js +18 -2
  85. package/dist/esm/operation-node/union-node.d.ts +16 -0
  86. package/dist/esm/operation-node/union-node.js +16 -0
  87. package/dist/esm/parser/group-by-parser.d.ts +4 -0
  88. package/dist/esm/parser/group-by-parser.js +5 -0
  89. package/dist/esm/parser/insert-values-parser.d.ts +1 -1
  90. package/dist/esm/parser/join-parser.d.ts +4 -4
  91. package/dist/esm/parser/order-by-parser.d.ts +2 -4
  92. package/dist/esm/parser/order-by-parser.js +6 -2
  93. package/dist/esm/parser/reference-parser.d.ts +1 -1
  94. package/dist/esm/parser/reference-parser.js +2 -2
  95. package/dist/esm/parser/union-parser.d.ts +5 -0
  96. package/dist/esm/parser/union-parser.js +9 -0
  97. package/dist/esm/parser/value-parser.d.ts +1 -1
  98. package/dist/esm/plugin/camel-case/camel-case-plugin.js +4 -115
  99. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +8 -0
  100. package/dist/esm/plugin/camel-case/camel-case-transformer.js +15 -0
  101. package/dist/esm/plugin/camel-case/camel-case.d.ts +15 -0
  102. package/dist/esm/plugin/camel-case/camel-case.js +104 -0
  103. package/dist/esm/plugin/kysely-plugin.d.ts +1 -1
  104. package/dist/esm/query-builder/join-builder.js +8 -8
  105. package/dist/esm/query-builder/query-builder.d.ts +65 -1
  106. package/dist/esm/query-builder/query-builder.js +104 -23
  107. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  108. package/dist/esm/query-compiler/default-query-compiler.d.ts +7 -2
  109. package/dist/esm/query-compiler/default-query-compiler.js +20 -3
  110. package/dist/esm/query-executor/default-query-executor.d.ts +1 -0
  111. package/dist/esm/query-executor/default-query-executor.js +6 -0
  112. package/dist/esm/query-executor/noop-query-executor.d.ts +1 -0
  113. package/dist/esm/query-executor/noop-query-executor.js +3 -0
  114. package/dist/esm/query-executor/query-executor.d.ts +9 -4
  115. package/dist/esm/util/log.d.ts +19 -0
  116. package/dist/esm/util/log.js +33 -0
  117. package/dist/esm/util/object-utils.d.ts +11 -11
  118. package/dist/esm/util/object-utils.js +1 -1
  119. package/dist/esm/util/random-string.js +6 -3
  120. package/dist/esm/util/type-utils.d.ts +4 -4
  121. package/package.json +1 -1
@@ -59,326 +59,11 @@ export class OperationNodeVisitor {
59
59
  AddConstraintNode: this.visitAddConstraint.bind(this),
60
60
  DropConstraintNode: this.visitDropConstraint.bind(this),
61
61
  ForeignKeyConstraintNode: this.visitForeignKeyConstraint.bind(this),
62
+ UnionNode: this.visitUnion.bind(this),
62
63
  };
63
64
  visitNode = (node) => {
64
65
  this.nodeStack.push(node);
65
66
  this.#visitors[node.kind](node);
66
67
  this.nodeStack.pop();
67
68
  };
68
- visitSelectQuery(node) {
69
- if (node.with) {
70
- this.visitNode(node.with);
71
- }
72
- if (node.distinctOnSelections) {
73
- node.distinctOnSelections.forEach(this.visitNode);
74
- }
75
- if (node.selections) {
76
- node.selections.forEach(this.visitNode);
77
- }
78
- this.visitNode(node.from);
79
- if (node.joins) {
80
- node.joins.forEach(this.visitNode);
81
- }
82
- if (node.where) {
83
- this.visitNode(node.where);
84
- }
85
- if (node.groupBy) {
86
- this.visitNode(node.groupBy);
87
- }
88
- if (node.having) {
89
- this.visitNode(node.having);
90
- }
91
- if (node.orderBy) {
92
- this.visitNode(node.orderBy);
93
- }
94
- if (node.limit) {
95
- this.visitNode(node.limit);
96
- }
97
- if (node.offset) {
98
- this.visitNode(node.offset);
99
- }
100
- }
101
- visitSelection(node) {
102
- this.visitNode(node.selection);
103
- }
104
- visitColumn(node) {
105
- this.visitNode(node.column);
106
- }
107
- visitAlias(node) {
108
- this.visitNode(node.node);
109
- }
110
- visitTable(node) {
111
- if (node.schema) {
112
- this.visitNode(node.schema);
113
- }
114
- this.visitNode(node.table);
115
- }
116
- visitFrom(node) {
117
- node.froms.forEach(this.visitNode);
118
- }
119
- visitReference(node) {
120
- this.visitNode(node.column);
121
- this.visitNode(node.table);
122
- }
123
- visitFilter(node) {
124
- if (node.left) {
125
- this.visitNode(node.left);
126
- }
127
- this.visitNode(node.op);
128
- this.visitNode(node.right);
129
- }
130
- visitAnd(node) {
131
- this.visitNode(node.left);
132
- this.visitNode(node.right);
133
- }
134
- visitOr(node) {
135
- this.visitNode(node.left);
136
- this.visitNode(node.right);
137
- }
138
- visitValueList(node) {
139
- node.values.forEach(this.visitNode);
140
- }
141
- visitParens(node) {
142
- this.visitNode(node.node);
143
- }
144
- visitJoin(node) {
145
- this.visitNode(node.table);
146
- if (node.on) {
147
- this.visitNode(node.on);
148
- }
149
- }
150
- visitRaw(node) {
151
- node.params.forEach(this.visitNode);
152
- }
153
- visitWhere(node) {
154
- this.visitNode(node.where);
155
- }
156
- visitInsertQuery(node) {
157
- if (node.with) {
158
- this.visitNode(node.with);
159
- }
160
- this.visitNode(node.into);
161
- if (node.columns) {
162
- node.columns.forEach(this.visitNode);
163
- }
164
- if (node.values) {
165
- node.values.forEach(this.visitNode);
166
- }
167
- if (node.returning) {
168
- this.visitNode(node.returning);
169
- }
170
- }
171
- visitDeleteQuery(node) {
172
- if (node.with) {
173
- this.visitNode(node.with);
174
- }
175
- this.visitNode(node.from);
176
- if (node.joins) {
177
- node.joins.forEach(this.visitNode);
178
- }
179
- if (node.where) {
180
- this.visitNode(node.where);
181
- }
182
- if (node.returning) {
183
- this.visitNode(node.returning);
184
- }
185
- }
186
- visitReturning(node) {
187
- node.selections.forEach(this.visitNode);
188
- }
189
- visitCreateTable(node) {
190
- this.visitNode(node.table);
191
- node.columns.forEach(this.visitNode);
192
- if (node.constraints) {
193
- node.constraints.forEach(this.visitNode);
194
- }
195
- }
196
- visitAddColumn(node) {
197
- this.visitNode(node.column);
198
- }
199
- visitColumnDefinition(node) {
200
- this.visitNode(node.column);
201
- this.visitNode(node.dataType);
202
- if (node.defaultTo) {
203
- this.visitNode(node.defaultTo);
204
- }
205
- if (node.references) {
206
- this.visitNode(node.references);
207
- }
208
- if (node.check) {
209
- this.visitNode(node.check);
210
- }
211
- }
212
- visitDropTable(node) {
213
- this.visitNode(node.table);
214
- }
215
- visitOrderBy(node) {
216
- node.items.forEach(this.visitNode);
217
- }
218
- visitOrderByItem(node) {
219
- this.visitNode(node.orderBy);
220
- }
221
- visitGroupBy(node) {
222
- node.items.forEach(this.visitNode);
223
- }
224
- visitGroupByItem(node) {
225
- this.visitNode(node.groupBy);
226
- }
227
- visitUpdateQuery(node) {
228
- if (node.with) {
229
- this.visitNode(node.with);
230
- }
231
- this.visitNode(node.table);
232
- if (node.updates) {
233
- node.updates.forEach(this.visitNode);
234
- }
235
- if (node.joins) {
236
- node.joins.forEach(this.visitNode);
237
- }
238
- if (node.where) {
239
- this.visitNode(node.where);
240
- }
241
- if (node.returning) {
242
- this.visitNode(node.returning);
243
- }
244
- }
245
- visitColumnUpdate(node) {
246
- this.visitNode(node.column);
247
- this.visitNode(node.value);
248
- }
249
- visitLimit(node) {
250
- this.visitNode(node.limit);
251
- }
252
- visitOffset(node) {
253
- this.visitNode(node.offset);
254
- }
255
- visitOnConflict(node) {
256
- if (node.columns) {
257
- node.columns.forEach(this.visitNode);
258
- }
259
- if (node.constraint) {
260
- this.visitNode(node.constraint);
261
- }
262
- if (node.updates) {
263
- node.updates.forEach(this.visitNode);
264
- }
265
- }
266
- visitOnDuplicateKey(node) {
267
- node.updates.forEach(this.visitNode);
268
- }
269
- visitCreateIndex(node) {
270
- this.visitNode(node.name);
271
- if (node.table) {
272
- this.visitNode(node.table);
273
- }
274
- if (node.using) {
275
- this.visitNode(node.using);
276
- }
277
- if (node.expression) {
278
- this.visitNode(node.expression);
279
- }
280
- }
281
- visitList(node) {
282
- node.items.forEach(this.visitNode);
283
- }
284
- visitDropIndex(node) {
285
- this.visitNode(node.name);
286
- if (node.table) {
287
- this.visitNode(node.table);
288
- }
289
- }
290
- visitPrimaryKeyConstraint(node) {
291
- if (node.name) {
292
- this.visitNode(node.name);
293
- }
294
- node.columns.forEach(this.visitNode);
295
- }
296
- visitUniqueConstraint(node) {
297
- if (node.name) {
298
- this.visitNode(node.name);
299
- }
300
- node.columns.forEach(this.visitNode);
301
- }
302
- visitReferences(node) {
303
- node.columns.forEach(this.visitNode);
304
- this.visitNode(node.table);
305
- }
306
- visitCheckConstraint(node) {
307
- if (node.name) {
308
- this.visitNode(node.name);
309
- }
310
- this.visitNode(node.expression);
311
- }
312
- visitWith(node) {
313
- node.expressions.forEach(this.visitNode);
314
- }
315
- visitCommonTableExpression(node) {
316
- this.visitNode(node.name);
317
- this.visitNode(node.expression);
318
- }
319
- visitHaving(node) {
320
- this.visitNode(node.having);
321
- }
322
- visitCreateSchema(node) {
323
- this.visitNode(node.schema);
324
- }
325
- visitDropSchema(node) {
326
- this.visitNode(node.schema);
327
- }
328
- visitAlterTable(node) {
329
- this.visitNode(node.table);
330
- if (node.renameTo) {
331
- this.visitNode(node.renameTo);
332
- }
333
- if (node.renameColumn) {
334
- this.visitNode(node.renameColumn);
335
- }
336
- if (node.setSchema) {
337
- this.visitNode(node.setSchema);
338
- }
339
- if (node.addColumn) {
340
- this.visitNode(node.addColumn);
341
- }
342
- if (node.dropColumn) {
343
- this.visitNode(node.dropColumn);
344
- }
345
- if (node.alterColumn) {
346
- this.visitNode(node.alterColumn);
347
- }
348
- if (node.modifyColumn) {
349
- this.visitNode(node.modifyColumn);
350
- }
351
- }
352
- visitDropColumn(node) {
353
- this.visitNode(node.column);
354
- }
355
- visitRenameColumn(node) {
356
- this.visitNode(node.column);
357
- this.visitNode(node.renameTo);
358
- }
359
- visitAlterColumn(node) {
360
- this.visitNode(node.column);
361
- }
362
- visitModifyColumn(node) {
363
- this.visitNode(node.column);
364
- }
365
- visitAddConstraint(node) {
366
- this.visitNode(node.constraint);
367
- }
368
- visitDropConstraint(node) {
369
- this.visitNode(node.constraintName);
370
- }
371
- visitForeignKeyConstraint(node) {
372
- if (node.name) {
373
- this.visitNode(node.name);
374
- }
375
- node.columns.forEach(this.visitNode);
376
- this.visitNode(node.references);
377
- }
378
- visitDataType(node) { }
379
- visitSelectAll(_) { }
380
- visitIdentifier(_) { }
381
- visitValue(_) { }
382
- visitPrimitiveValueList(_) { }
383
- visitOperator(node) { }
384
69
  }
@@ -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';
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';
2
2
  export interface OperationNode {
3
3
  readonly kind: OperationNodeKind;
4
4
  }
@@ -16,7 +16,8 @@ export declare const QueryNode: Readonly<{
16
16
  is(node: OperationNode): node is QueryNode;
17
17
  isMutating(node: OperationNode): node is MutatingQueryNode;
18
18
  isFilterable(node: OperationNode): node is FilterableQueryNode;
19
- cloneWithWhere<T extends FilterableQueryNode>(node: T, op: 'And' | 'Or', filter: WhereChildNode): T;
20
- cloneWithJoin<T_1 extends FilterableQueryNode>(node: T_1, join: JoinNode): T_1;
21
- cloneWithReturning<T_2 extends MutatingQueryNode>(node: T_2, selections: ReadonlyArray<SelectionNode>): T_2;
19
+ cloneWithWhere<T extends FilterableQueryNode>(node: T, filter: WhereChildNode): T;
20
+ cloneWithOrWhere<T_1 extends FilterableQueryNode>(node: T_1, filter: WhereChildNode): T_1;
21
+ cloneWithJoin<T_2 extends FilterableQueryNode>(node: T_2, join: JoinNode): T_2;
22
+ cloneWithReturning<T_3 extends MutatingQueryNode>(node: T_3, selections: ReadonlyArray<SelectionNode>): T_3;
22
23
  }>;
@@ -25,11 +25,19 @@ export const QueryNode = freeze({
25
25
  DeleteQueryNode.is(node) ||
26
26
  UpdateQueryNode.is(node));
27
27
  },
28
- cloneWithWhere(node, op, filter) {
28
+ cloneWithWhere(node, filter) {
29
29
  return freeze({
30
30
  ...node,
31
31
  where: node.where
32
- ? WhereNode.cloneWithFilter(node.where, op, filter)
32
+ ? WhereNode.cloneWithFilter(node.where, 'And', filter)
33
+ : WhereNode.create(filter),
34
+ });
35
+ },
36
+ cloneWithOrWhere(node, filter) {
37
+ return freeze({
38
+ ...node,
39
+ where: node.where
40
+ ? WhereNode.cloneWithFilter(node.where, 'Or', filter)
33
41
  : WhereNode.create(filter),
34
42
  });
35
43
  },
@@ -12,6 +12,7 @@ import { OrderByNode } from './order-by-node.js';
12
12
  import { SelectionNode } from './selection-node.js';
13
13
  import { WhereNode } from './where-node.js';
14
14
  import { WithNode } from './with-node.js';
15
+ import { UnionNode } from './union-node.js';
15
16
  export declare type SelectModifier = 'ForUpdate' | 'ForNoKeyUpdate' | 'ForShare' | 'ForKeyShare' | 'NoWait' | 'SkipLocked';
16
17
  export interface SelectQueryNode extends OperationNode {
17
18
  readonly kind: 'SelectQueryNode';
@@ -28,6 +29,7 @@ export interface SelectQueryNode extends OperationNode {
28
29
  readonly offset?: OffsetNode;
29
30
  readonly with?: WithNode;
30
31
  readonly having?: HavingNode;
32
+ readonly union?: ReadonlyArray<UnionNode>;
31
33
  }
32
34
  /**
33
35
  * @internal
@@ -42,6 +44,8 @@ export declare const SelectQueryNode: Readonly<{
42
44
  cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
43
45
  cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
44
46
  cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
45
- cloneWithHaving(selectNode: SelectQueryNode, op: 'And' | 'Or', filter: HavingNodeChild): SelectQueryNode;
47
+ cloneWithHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
48
+ cloneWithOrHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
46
49
  cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
50
+ cloneWithUnion(selectNode: SelectQueryNode, union: UnionNode): SelectQueryNode;
47
51
  }>;
@@ -69,11 +69,19 @@ export const SelectQueryNode = freeze({
69
69
  offset,
70
70
  });
71
71
  },
72
- cloneWithHaving(selectNode, op, filter) {
72
+ cloneWithHaving(selectNode, filter) {
73
73
  return freeze({
74
74
  ...selectNode,
75
75
  having: selectNode.having
76
- ? HavingNode.cloneWithFilter(selectNode.having, op, filter)
76
+ ? HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
77
+ : HavingNode.create(filter),
78
+ });
79
+ },
80
+ cloneWithOrHaving(selectNode, filter) {
81
+ return freeze({
82
+ ...selectNode,
83
+ having: selectNode.having
84
+ ? HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
77
85
  : HavingNode.create(filter),
78
86
  });
79
87
  },
@@ -83,4 +91,12 @@ export const SelectQueryNode = freeze({
83
91
  isDistinct: true,
84
92
  });
85
93
  },
94
+ cloneWithUnion(selectNode, union) {
95
+ return freeze({
96
+ ...selectNode,
97
+ union: selectNode.union
98
+ ? freeze([...selectNode.union, union])
99
+ : freeze([union]),
100
+ });
101
+ },
86
102
  });
@@ -0,0 +1,16 @@
1
+ import { OperationNode } from './operation-node.js';
2
+ import { RawNode } from './raw-node.js';
3
+ import { SelectQueryNode } from './select-query-node.js';
4
+ export declare type UnionExpressionNode = SelectQueryNode | RawNode;
5
+ export interface UnionNode extends OperationNode {
6
+ readonly kind: 'UnionNode';
7
+ readonly union: UnionExpressionNode;
8
+ readonly all: boolean;
9
+ }
10
+ /**
11
+ * @internal
12
+ */
13
+ export declare const UnionNode: Readonly<{
14
+ is(node: OperationNode): node is UnionNode;
15
+ create(union: UnionExpressionNode, all: boolean): UnionNode;
16
+ }>;
@@ -0,0 +1,16 @@
1
+ import { freeze } from '../util/object-utils.js';
2
+ /**
3
+ * @internal
4
+ */
5
+ export const UnionNode = freeze({
6
+ is(node) {
7
+ return node.kind === 'UnionNode';
8
+ },
9
+ create(union, all) {
10
+ return freeze({
11
+ kind: 'UnionNode',
12
+ union,
13
+ all,
14
+ });
15
+ },
16
+ });
@@ -0,0 +1,4 @@
1
+ import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
2
+ import { ParseContext } from './parse-context.js';
3
+ import { ReferenceExpressionOrList } from './reference-parser.js';
4
+ export declare function parseGroupBy(ctx: ParseContext, orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
@@ -0,0 +1,5 @@
1
+ import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
2
+ import { parseReferenceExpressionOrList, } from './reference-parser.js';
3
+ export function parseGroupBy(ctx, orderBy) {
4
+ return parseReferenceExpressionOrList(ctx, orderBy).map(GroupByItemNode.create);
5
+ }
@@ -8,7 +8,7 @@ import { PrimitiveValue } from '../util/object-utils.js';
8
8
  export declare type InsertObject<DB, TB extends keyof DB> = {
9
9
  [C in keyof DB[TB]]: InsertValueExpression<DB[TB][C]>;
10
10
  };
11
- export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | InsertObject<DB, TB>[];
11
+ export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
12
12
  declare type InsertValueExpression<T> = T | AnyQueryBuilder | AnyRawBuilder | GeneratedPlaceholder;
13
13
  export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ReadonlyArray<InsertValuesNode>];
14
14
  export declare function parseInsertValueExpression(value: InsertValueExpression<PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
@@ -3,9 +3,9 @@ import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
3
3
  import { ExtractAliasFromTableExpression, TableExpressionDatabase } from './table-parser.js';
4
4
  import { JoinBuilder } from '../query-builder/join-builder.js';
5
5
  import { ParseContext } from './parse-context.js';
6
- export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyJoinColumn<DB, TB, F> | AnyJoinColumnWithTable<DB, TB, F>;
7
- export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
8
- declare type AnyJoinColumn<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
9
- declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, F> = AnyColumnWithTable<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
6
+ export declare type JoinReferenceExpression<DB, TB extends keyof DB, TE> = AnyJoinColumn<DB, TB, TE> | AnyJoinColumnWithTable<DB, TB, TE>;
7
+ export declare type JoinCallbackExpression<DB, TB extends keyof DB, TE> = (join: JoinBuilder<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>>) => JoinBuilder<any, any>;
8
+ declare type AnyJoinColumn<DB, TB extends keyof DB, TE> = AnyColumn<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>>;
9
+ declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, TE> = AnyColumnWithTable<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>>;
10
10
  export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
11
11
  export {};
@@ -1,10 +1,8 @@
1
- import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
2
- import { RawNode } from '../operation-node/raw-node.js';
1
+ import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
3
2
  import { AnyRawBuilder } from '../util/type-utils.js';
4
3
  import { ParseContext } from './parse-context.js';
5
4
  import { ReferenceExpression } from './reference-parser.js';
6
5
  export declare type OrderByDirection = 'asc' | 'desc';
7
6
  export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | keyof O;
8
7
  export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
9
- export declare function parseOrderByExpression(ctx: ParseContext, expr: OrderByExpression<any, any, any>): ReferenceExpressionNode;
10
- export declare function parseOrderByDirectionExpression(expr?: OrderByDirectionExpression): RawNode | undefined;
8
+ export declare function parseOrderBy(ctx: ParseContext, orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
@@ -1,9 +1,13 @@
1
+ import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
1
2
  import { RawNode } from '../operation-node/raw-node.js';
2
3
  import { parseReferenceExpression, } from './reference-parser.js';
3
- export function parseOrderByExpression(ctx, expr) {
4
+ export function parseOrderBy(ctx, orderBy, direction) {
5
+ return OrderByItemNode.create(parseOrderByExpression(ctx, orderBy), parseOrderByDirectionExpression(direction));
6
+ }
7
+ function parseOrderByExpression(ctx, expr) {
4
8
  return parseReferenceExpression(ctx, expr);
5
9
  }
6
- export function parseOrderByDirectionExpression(expr) {
10
+ function parseOrderByDirectionExpression(expr) {
7
11
  if (!expr) {
8
12
  return undefined;
9
13
  }
@@ -9,7 +9,7 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
9
9
  import { QueryBuilder } from '../query-builder/query-builder.js';
10
10
  import { ParseContext } from './parse-context.js';
11
11
  export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
12
- export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReferenceExpression<DB, TB>[];
12
+ export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
13
13
  export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
14
14
  export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
15
15
  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;
@@ -3,10 +3,10 @@ import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
4
4
  import { ReferenceNode } from '../operation-node/reference-node.js';
5
5
  import { TableNode } from '../operation-node/table-node.js';
6
- import { isFunction, isString } from '../util/object-utils.js';
6
+ import { isFunction, isReadonlyArray, isString, } from '../util/object-utils.js';
7
7
  import { QueryNode } from '../operation-node/query-node.js';
8
8
  export function parseReferenceExpressionOrList(ctx, arg) {
9
- if (Array.isArray(arg)) {
9
+ if (isReadonlyArray(arg)) {
10
10
  return arg.map((it) => parseReferenceExpression(ctx, it));
11
11
  }
12
12
  else {
@@ -0,0 +1,5 @@
1
+ import { UnionNode } from '../operation-node/union-node.js';
2
+ import { QueryBuilder } from '../query-builder/query-builder.js';
3
+ import { RawBuilder } from '../raw-builder/raw-builder.js';
4
+ export declare type UnionExpression<DB, O> = QueryBuilder<DB, any, O> | RawBuilder<O>;
5
+ export declare function parseUnion(union: UnionExpression<any, any>, all: boolean): UnionNode;
@@ -0,0 +1,9 @@
1
+ import { QueryNode } from '../operation-node/query-node.js';
2
+ import { UnionNode } from '../operation-node/union-node.js';
3
+ export function parseUnion(union, all) {
4
+ const node = union.toOperationNode();
5
+ if (QueryNode.isMutating(node)) {
6
+ throw new Error("can't combine insert, update or delete queries using union");
7
+ }
8
+ return UnionNode.create(node, all);
9
+ }
@@ -3,6 +3,6 @@ import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory
3
3
  import { ExtractTypeFromReferenceExpression } from './reference-parser.js';
4
4
  import { ParseContext } from './parse-context.js';
5
5
  export declare type ValueExpression<DB, TB extends keyof DB, RE> = ExtractTypeFromReferenceExpression<DB, TB, RE> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
6
- export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ValueExpression<DB, TB, RE>[];
6
+ export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ReadonlyArray<ValueExpression<DB, TB, RE>>;
7
7
  export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, any>): ValueExpressionNode;
8
8
  export declare function parseValueExpression(ctx: ParseContext, arg: ValueExpression<any, any, any>): ValueExpressionNode;