kysely 0.7.2 → 0.7.6

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 (122) hide show
  1. package/README.md +9 -5
  2. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
  3. package/dist/cjs/index.d.ts +2 -1
  4. package/dist/cjs/index.js +2 -1
  5. package/dist/cjs/kysely.d.ts +2 -2
  6. package/dist/cjs/kysely.js +9 -7
  7. package/dist/cjs/operation-node/create-table-node.d.ts +2 -1
  8. package/dist/cjs/operation-node/create-table-node.js +1 -5
  9. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +12 -1
  10. package/dist/cjs/operation-node/foreign-key-constraint-node.js +6 -0
  11. package/dist/cjs/operation-node/join-node.d.ts +1 -0
  12. package/dist/cjs/operation-node/join-node.js +8 -0
  13. package/dist/cjs/operation-node/operation-node-transformer.js +3 -0
  14. package/dist/cjs/operation-node/references-node.d.ts +5 -3
  15. package/dist/cjs/operation-node/references-node.js +6 -0
  16. package/dist/cjs/operation-node/table-node.js +2 -2
  17. package/dist/cjs/parser/data-type-parser.d.ts +5 -0
  18. package/dist/cjs/parser/data-type-parser.js +11 -0
  19. package/dist/cjs/parser/default-value-parser.d.ts +6 -0
  20. package/dist/cjs/parser/default-value-parser.js +11 -0
  21. package/dist/cjs/parser/filter-parser.d.ts +2 -2
  22. package/dist/cjs/parser/filter-parser.js +34 -36
  23. package/dist/cjs/parser/join-parser.d.ts +1 -1
  24. package/dist/cjs/parser/join-parser.js +9 -11
  25. package/dist/cjs/parser/parse-context.d.ts +33 -6
  26. package/dist/cjs/parser/parse-context.js +40 -33
  27. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  28. package/dist/cjs/parser/reference-parser.js +16 -12
  29. package/dist/cjs/parser/select-parser.d.ts +1 -2
  30. package/dist/cjs/parser/select-parser.js +4 -5
  31. package/dist/cjs/parser/table-parser.js +11 -6
  32. package/dist/cjs/parser/update-set-parser.js +1 -1
  33. package/dist/cjs/parser/value-parser.js +1 -1
  34. package/dist/cjs/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +6 -6
  35. package/dist/cjs/query-builder/{sub-query-builder.js → expression-builder.js} +6 -10
  36. package/dist/cjs/query-builder/join-builder.d.ts +2 -2
  37. package/dist/cjs/query-builder/join-builder.js +8 -12
  38. package/dist/cjs/query-builder/query-builder.d.ts +2 -2
  39. package/dist/cjs/query-builder/query-builder.js +34 -36
  40. package/dist/cjs/query-builder/type-utils.d.ts +5 -5
  41. package/dist/cjs/query-compiler/default-query-compiler.js +13 -1
  42. package/dist/cjs/query-creator.d.ts +2 -2
  43. package/dist/cjs/query-creator.js +8 -12
  44. package/dist/cjs/schema/alter-table-builder.d.ts +26 -8
  45. package/dist/cjs/schema/alter-table-builder.js +75 -7
  46. package/dist/cjs/schema/column-definition-builder.d.ts +10 -4
  47. package/dist/cjs/schema/column-definition-builder.js +11 -6
  48. package/dist/cjs/schema/create-index-builder.d.ts +5 -5
  49. package/dist/cjs/schema/create-index-builder.js +19 -28
  50. package/dist/cjs/schema/create-schema-builder.d.ts +5 -5
  51. package/dist/cjs/schema/create-schema-builder.js +9 -13
  52. package/dist/cjs/schema/create-table-builder.d.ts +22 -10
  53. package/dist/cjs/schema/create-table-builder.js +41 -34
  54. package/dist/cjs/schema/drop-index-builder.d.ts +5 -5
  55. package/dist/cjs/schema/drop-index-builder.js +11 -16
  56. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -5
  57. package/dist/cjs/schema/drop-schema-builder.js +9 -13
  58. package/dist/cjs/schema/drop-table-builder.d.ts +5 -5
  59. package/dist/cjs/schema/drop-table-builder.js +9 -13
  60. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +14 -0
  61. package/dist/cjs/schema/foreign-key-constraint-builder.js +26 -0
  62. package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
  63. package/dist/esm/index.d.ts +2 -1
  64. package/dist/esm/index.js +2 -1
  65. package/dist/esm/kysely.d.ts +2 -2
  66. package/dist/esm/kysely.js +9 -7
  67. package/dist/esm/operation-node/create-table-node.d.ts +2 -1
  68. package/dist/esm/operation-node/create-table-node.js +1 -5
  69. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +12 -1
  70. package/dist/esm/operation-node/foreign-key-constraint-node.js +6 -0
  71. package/dist/esm/operation-node/join-node.d.ts +1 -0
  72. package/dist/esm/operation-node/join-node.js +8 -0
  73. package/dist/esm/operation-node/operation-node-transformer.js +3 -0
  74. package/dist/esm/operation-node/references-node.d.ts +5 -3
  75. package/dist/esm/operation-node/references-node.js +6 -0
  76. package/dist/esm/operation-node/table-node.js +2 -2
  77. package/dist/esm/parser/data-type-parser.d.ts +5 -0
  78. package/dist/esm/parser/data-type-parser.js +7 -0
  79. package/dist/esm/parser/default-value-parser.d.ts +6 -0
  80. package/dist/esm/parser/default-value-parser.js +7 -0
  81. package/dist/esm/parser/filter-parser.d.ts +2 -2
  82. package/dist/esm/parser/filter-parser.js +31 -33
  83. package/dist/esm/parser/join-parser.d.ts +1 -1
  84. package/dist/esm/parser/join-parser.js +7 -9
  85. package/dist/esm/parser/parse-context.d.ts +33 -6
  86. package/dist/esm/parser/parse-context.js +38 -31
  87. package/dist/esm/parser/reference-parser.d.ts +2 -2
  88. package/dist/esm/parser/reference-parser.js +16 -12
  89. package/dist/esm/parser/select-parser.d.ts +1 -2
  90. package/dist/esm/parser/select-parser.js +3 -3
  91. package/dist/esm/parser/table-parser.js +11 -6
  92. package/dist/esm/parser/update-set-parser.js +1 -1
  93. package/dist/esm/parser/value-parser.js +1 -1
  94. package/dist/esm/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +6 -6
  95. package/dist/esm/query-builder/{sub-query-builder.js → expression-builder.js} +4 -8
  96. package/dist/esm/query-builder/join-builder.d.ts +2 -2
  97. package/dist/esm/query-builder/join-builder.js +9 -13
  98. package/dist/esm/query-builder/query-builder.d.ts +2 -2
  99. package/dist/esm/query-builder/query-builder.js +37 -39
  100. package/dist/esm/query-builder/type-utils.d.ts +5 -5
  101. package/dist/esm/query-compiler/default-query-compiler.js +14 -2
  102. package/dist/esm/query-creator.d.ts +2 -2
  103. package/dist/esm/query-creator.js +8 -12
  104. package/dist/esm/schema/alter-table-builder.d.ts +26 -8
  105. package/dist/esm/schema/alter-table-builder.js +73 -6
  106. package/dist/esm/schema/column-definition-builder.d.ts +10 -4
  107. package/dist/esm/schema/column-definition-builder.js +12 -7
  108. package/dist/esm/schema/create-index-builder.d.ts +5 -5
  109. package/dist/esm/schema/create-index-builder.js +19 -28
  110. package/dist/esm/schema/create-schema-builder.d.ts +5 -5
  111. package/dist/esm/schema/create-schema-builder.js +9 -13
  112. package/dist/esm/schema/create-table-builder.d.ts +22 -10
  113. package/dist/esm/schema/create-table-builder.js +41 -34
  114. package/dist/esm/schema/drop-index-builder.d.ts +5 -5
  115. package/dist/esm/schema/drop-index-builder.js +11 -16
  116. package/dist/esm/schema/drop-schema-builder.d.ts +5 -5
  117. package/dist/esm/schema/drop-schema-builder.js +9 -13
  118. package/dist/esm/schema/drop-table-builder.d.ts +5 -5
  119. package/dist/esm/schema/drop-table-builder.js +9 -13
  120. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +14 -0
  121. package/dist/esm/schema/foreign-key-constraint-builder.js +22 -0
  122. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import { AliasNode } from '../operation-node/alias-node.js';
2
- import { parseJoinArgs, } from '../parser/join-parser.js';
3
- import { parseSelectExpressionOrList, parseSelectAllArgs, } from '../parser/select-parser.js';
4
- import { parseExistExpression, parseReferenceFilter, parseWhereFilter, parseHavingFilter, parseNotExistExpression, } from '../parser/filter-parser.js';
2
+ import { parseJoin, } from '../parser/join-parser.js';
3
+ import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
4
+ import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseHavingFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
5
5
  import { parseInsertObjectOrList, } from '../parser/insert-values-parser.js';
6
6
  import { parseReferenceExpression, parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
7
7
  import { OrderByItemNode, } from '../operation-node/order-by-item-node.js';
@@ -16,7 +16,6 @@ import { LimitNode } from '../operation-node/limit-node.js';
16
16
  import { OffsetNode } from '../operation-node/offset-node.js';
17
17
  import { parseOnConflictDoNothing, parseOnConflictUpdate, } from '../parser/on-conflict-parser.js';
18
18
  import { freeze } from '../util/object-utils.js';
19
- import { createParseContext } from '../parser/parse-context.js';
20
19
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
21
20
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
22
21
  /**
@@ -43,7 +42,7 @@ export class QueryBuilder {
43
42
  assertCanHaveWhereClause(this.#props.queryNode);
44
43
  return new QueryBuilder({
45
44
  ...this.#props,
46
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseWhereFilter(this.#parseContext, args)),
45
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseWhereFilter(this.#props.parseContext, args)),
47
46
  });
48
47
  }
49
48
  /**
@@ -101,14 +100,14 @@ export class QueryBuilder {
101
100
  assertCanHaveWhereClause(this.#props.queryNode);
102
101
  return new QueryBuilder({
103
102
  ...this.#props,
104
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
103
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
105
104
  });
106
105
  }
107
106
  orWhere(...args) {
108
107
  assertCanHaveWhereClause(this.#props.queryNode);
109
108
  return new QueryBuilder({
110
109
  ...this.#props,
111
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseWhereFilter(this.#parseContext, args)),
110
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseWhereFilter(this.#props.parseContext, args)),
112
111
  });
113
112
  }
114
113
  /**
@@ -121,7 +120,7 @@ export class QueryBuilder {
121
120
  assertCanHaveWhereClause(this.#props.queryNode);
122
121
  return new QueryBuilder({
123
122
  ...this.#props,
124
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
123
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
125
124
  });
126
125
  }
127
126
  /**
@@ -187,7 +186,7 @@ export class QueryBuilder {
187
186
  assertCanHaveWhereClause(this.#props.queryNode);
188
187
  return new QueryBuilder({
189
188
  ...this.#props,
190
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseExistExpression(this.#parseContext, arg)),
189
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
191
190
  });
192
191
  }
193
192
  /**
@@ -197,7 +196,7 @@ export class QueryBuilder {
197
196
  assertCanHaveWhereClause(this.#props.queryNode);
198
197
  return new QueryBuilder({
199
198
  ...this.#props,
200
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseNotExistExpression(this.#parseContext, arg)),
199
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
201
200
  });
202
201
  }
203
202
  /**
@@ -207,7 +206,7 @@ export class QueryBuilder {
207
206
  assertCanHaveWhereClause(this.#props.queryNode);
208
207
  return new QueryBuilder({
209
208
  ...this.#props,
210
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseExistExpression(this.#parseContext, arg)),
209
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
211
210
  });
212
211
  }
213
212
  /**
@@ -217,14 +216,14 @@ export class QueryBuilder {
217
216
  assertCanHaveWhereClause(this.#props.queryNode);
218
217
  return new QueryBuilder({
219
218
  ...this.#props,
220
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseNotExistExpression(this.#parseContext, arg)),
219
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
221
220
  });
222
221
  }
223
222
  having(...args) {
224
223
  assertCanHaveHavingClause(this.#props.queryNode);
225
224
  return new QueryBuilder({
226
225
  ...this.#props,
227
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseHavingFilter(this.#parseContext, args)),
226
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseHavingFilter(this.#props.parseContext, args)),
228
227
  });
229
228
  }
230
229
  /**
@@ -235,14 +234,14 @@ export class QueryBuilder {
235
234
  assertCanHaveHavingClause(this.#props.queryNode);
236
235
  return new QueryBuilder({
237
236
  ...this.#props,
238
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
237
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
239
238
  });
240
239
  }
241
240
  orHaving(...args) {
242
241
  assertCanHaveHavingClause(this.#props.queryNode);
243
242
  return new QueryBuilder({
244
243
  ...this.#props,
245
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseHavingFilter(this.#parseContext, args)),
244
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseHavingFilter(this.#props.parseContext, args)),
246
245
  });
247
246
  }
248
247
  /**
@@ -253,7 +252,7 @@ export class QueryBuilder {
253
252
  assertCanHaveHavingClause(this.#props.queryNode);
254
253
  return new QueryBuilder({
255
254
  ...this.#props,
256
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
255
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
257
256
  });
258
257
  }
259
258
  /**
@@ -264,7 +263,7 @@ export class QueryBuilder {
264
263
  assertCanHaveHavingClause(this.#props.queryNode);
265
264
  return new QueryBuilder({
266
265
  ...this.#props,
267
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseExistExpression(this.#parseContext, arg)),
266
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
268
267
  });
269
268
  }
270
269
  /**
@@ -275,7 +274,7 @@ export class QueryBuilder {
275
274
  assertCanHaveHavingClause(this.#props.queryNode);
276
275
  return new QueryBuilder({
277
276
  ...this.#props,
278
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseNotExistExpression(this.#parseContext, arg)),
277
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
279
278
  });
280
279
  }
281
280
  /**
@@ -286,7 +285,7 @@ export class QueryBuilder {
286
285
  assertCanHaveHavingClause(this.#props.queryNode);
287
286
  return new QueryBuilder({
288
287
  ...this.#props,
289
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseExistExpression(this.#parseContext, arg)),
288
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
290
289
  });
291
290
  }
292
291
  /**
@@ -297,21 +296,21 @@ export class QueryBuilder {
297
296
  assertCanHaveHavingClause(this.#props.queryNode);
298
297
  return new QueryBuilder({
299
298
  ...this.#props,
300
- queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseNotExistExpression(this.#parseContext, arg)),
299
+ queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
301
300
  });
302
301
  }
303
302
  select(selection) {
304
303
  assertCanHaveSelectClause(this.#props.queryNode);
305
304
  return new QueryBuilder({
306
305
  ...this.#props,
307
- queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#parseContext, selection)),
306
+ queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
308
307
  });
309
308
  }
310
309
  distinctOn(selection) {
311
310
  assertCanHaveSelectClause(this.#props.queryNode);
312
311
  return new QueryBuilder({
313
312
  ...this.#props,
314
- queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#parseContext, selection)),
313
+ queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
315
314
  });
316
315
  }
317
316
  /**
@@ -402,35 +401,35 @@ export class QueryBuilder {
402
401
  assertCanHaveSelectClause(this.#props.queryNode);
403
402
  return new QueryBuilder({
404
403
  ...this.#props,
405
- queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectAllArgs(table)),
404
+ queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectAll(table)),
406
405
  });
407
406
  }
408
407
  innerJoin(...args) {
409
408
  assertCanHaveJoins(this.#props.queryNode);
410
409
  return new QueryBuilder({
411
410
  ...this.#props,
412
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoinArgs(this.#parseContext, 'InnerJoin', args)),
411
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'InnerJoin', args)),
413
412
  });
414
413
  }
415
414
  leftJoin(...args) {
416
415
  assertCanHaveJoins(this.#props.queryNode);
417
416
  return new QueryBuilder({
418
417
  ...this.#props,
419
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoinArgs(this.#parseContext, 'LeftJoin', args)),
418
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'LeftJoin', args)),
420
419
  });
421
420
  }
422
421
  rightJoin(...args) {
423
422
  assertCanHaveJoins(this.#props.queryNode);
424
423
  return new QueryBuilder({
425
424
  ...this.#props,
426
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoinArgs(this.#parseContext, 'RightJoin', args)),
425
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'RightJoin', args)),
427
426
  });
428
427
  }
429
428
  fullJoin(...args) {
430
429
  assertCanHaveJoins(this.#props.queryNode);
431
430
  return new QueryBuilder({
432
431
  ...this.#props,
433
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoinArgs(this.#parseContext, 'FullJoin', args)),
432
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'FullJoin', args)),
434
433
  });
435
434
  }
436
435
  values(args) {
@@ -487,7 +486,7 @@ export class QueryBuilder {
487
486
  return new QueryBuilder({
488
487
  ...this.#props,
489
488
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
490
- onConflict: parseOnConflictUpdate(this.#parseContext, target, updates),
489
+ onConflict: parseOnConflictUpdate(this.#props.parseContext, target, updates),
491
490
  }),
492
491
  });
493
492
  }
@@ -513,7 +512,7 @@ export class QueryBuilder {
513
512
  return new QueryBuilder({
514
513
  ...this.#props,
515
514
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
516
- onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObject(this.#parseContext, updates)),
515
+ onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObject(this.#props.parseContext, updates)),
517
516
  }),
518
517
  });
519
518
  }
@@ -603,14 +602,14 @@ export class QueryBuilder {
603
602
  assertCanHaveUpdates(this.#props.queryNode);
604
603
  return new QueryBuilder({
605
604
  ...this.#props,
606
- queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(this.#parseContext, row)),
605
+ queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(this.#props.parseContext, row)),
607
606
  });
608
607
  }
609
608
  returning(selection) {
610
609
  assertCanHaveReturningClause(this.#props.queryNode);
611
610
  return new QueryBuilder({
612
611
  ...this.#props,
613
- queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#parseContext, selection)),
612
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
614
613
  });
615
614
  }
616
615
  /**
@@ -621,7 +620,7 @@ export class QueryBuilder {
621
620
  assertCanHaveReturningClause(this.#props.queryNode);
622
621
  return new QueryBuilder({
623
622
  ...this.#props,
624
- queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAllArgs()),
623
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
625
624
  });
626
625
  }
627
626
  /**
@@ -714,14 +713,14 @@ export class QueryBuilder {
714
713
  assertCanHaveOrderByClause(this.#props.queryNode);
715
714
  return new QueryBuilder({
716
715
  ...this.#props,
717
- queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, OrderByItemNode.create(parseReferenceExpression(this.#parseContext, orderBy), direction)),
716
+ queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, OrderByItemNode.create(parseReferenceExpression(this.#props.parseContext, orderBy), direction)),
718
717
  });
719
718
  }
720
719
  groupBy(orderBy) {
721
720
  assertCanHaveGroupByClause(this.#props.queryNode);
722
721
  return new QueryBuilder({
723
722
  ...this.#props,
724
- queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseReferenceExpressionOrList(this.#parseContext, orderBy).map(GroupByItemNode.create)),
723
+ queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseReferenceExpressionOrList(this.#props.parseContext, orderBy).map(GroupByItemNode.create)),
725
724
  });
726
725
  }
727
726
  /**
@@ -820,7 +819,8 @@ export class QueryBuilder {
820
819
  const compildQuery = this.#props.executor.compileQuery(node, this.#props.queryId);
821
820
  const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
822
821
  if (InsertQueryNode.is(node)) {
823
- if (this.#props.adapter.supportsReturning && node.returning) {
822
+ if (this.#props.parseContext.adapter.supportsReturning &&
823
+ node.returning) {
824
824
  return result.rows;
825
825
  }
826
826
  else if (result.insertedPrimaryKey != null) {
@@ -831,7 +831,8 @@ export class QueryBuilder {
831
831
  }
832
832
  }
833
833
  else if (UpdateQueryNode.is(node) || DeleteQueryNode.is(node)) {
834
- if (this.#props.adapter.supportsReturning && node.returning) {
834
+ if (this.#props.parseContext.adapter.supportsReturning &&
835
+ node.returning) {
835
836
  return result.rows;
836
837
  }
837
838
  else if (result.numUpdatedOrDeletedRows != null) {
@@ -868,9 +869,6 @@ export class QueryBuilder {
868
869
  }
869
870
  return result;
870
871
  }
871
- get #parseContext() {
872
- return createParseContext(this.#props.adapter);
873
- }
874
872
  }
875
873
  preventAwait(QueryBuilder, "don't await QueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
876
874
  /**
@@ -1,6 +1,6 @@
1
1
  import { AliasedRawBuilder, RawBuilder } from '../raw-builder/raw-builder.js';
2
2
  import { AliasedQueryBuilder, QueryBuilder } from './query-builder.js';
3
- import { SubQueryBuilder } from './sub-query-builder.js';
3
+ import { ExpressionBuilder } from './expression-builder.js';
4
4
  export declare type ValueType<T> = T[keyof T];
5
5
  /**
6
6
  * Given a database type and a union of table names returns the row type
@@ -127,10 +127,10 @@ export declare type AnyQueryBuilder = QueryBuilder<any, any, any>;
127
127
  export declare type AnyAliasedQueryBuilder = AliasedQueryBuilder<any, any, any, any>;
128
128
  export declare type AnyRawBuilder = RawBuilder<any>;
129
129
  export declare type AnyAliasedRawBuilder = AliasedRawBuilder<any, any>;
130
- export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => QueryBuilder<any, any, any>;
131
- export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => AnyAliasedQueryBuilder;
132
- export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => AnyRawBuilder;
133
- export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: SubQueryBuilder<DB, TB>) => AnyAliasedRawBuilder;
130
+ export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => QueryBuilder<any, any, any>;
131
+ export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
132
+ export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyRawBuilder;
133
+ export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
134
134
  export interface InsertResultTypeTag {
135
135
  /** @internal */
136
136
  __isInsertResultTypeTag__: true;
@@ -2,7 +2,7 @@ import { DataTypeNode } from '../operation-node/data-type-node.js';
2
2
  import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
3
3
  import { QueryNode } from '../operation-node/query-node.js';
4
4
  import { RawNode } from '../operation-node/raw-node.js';
5
- import { isEmpty, getLast, freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
5
+ import { getLast, freeze, isString, isNumber, isBoolean, isNull, isDate, isBigInt, } from '../util/object-utils.js';
6
6
  export class DefaultQueryCompiler extends OperationNodeVisitor {
7
7
  #sqlFragments = [];
8
8
  #bindings = [];
@@ -32,7 +32,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
32
32
  this.append(' ');
33
33
  }
34
34
  this.append('select ');
35
- if (node.distinctOnSelections && !isEmpty(node.distinctOnSelections)) {
35
+ if (node.distinctOnSelections) {
36
36
  this.compileDistinctOn(node.distinctOnSelections);
37
37
  this.append(' ');
38
38
  }
@@ -334,6 +334,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
334
334
  this.append(' on delete ');
335
335
  this.append(node.onDelete);
336
336
  }
337
+ if (node.onUpdate) {
338
+ this.append(' on update ');
339
+ this.append(node.onUpdate);
340
+ }
337
341
  }
338
342
  visitDropTable(node) {
339
343
  this.append('drop table ');
@@ -520,6 +524,14 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
520
524
  this.compileList(node.columns);
521
525
  this.append(') ');
522
526
  this.visitNode(node.references);
527
+ if (node.onDelete) {
528
+ this.append(' on delete ');
529
+ this.append(node.onDelete);
530
+ }
531
+ if (node.onUpdate) {
532
+ this.append(' on update ');
533
+ this.append(node.onUpdate);
534
+ }
523
535
  }
524
536
  visitList(node) {
525
537
  this.compileList(node.items);
@@ -5,7 +5,7 @@ import { QueryExecutor } from './query-executor/query-executor.js';
5
5
  import { RawBuilder } from './raw-builder/raw-builder.js';
6
6
  import { CommonTableExpression, QueryCreatorWithCommonTableExpression } from './parser/with-parser.js';
7
7
  import { WithNode } from './operation-node/with-node.js';
8
- import { DialectAdapter } from './dialect/dialect-adapter.js';
8
+ import { ParseContext } from './parser/parse-context.js';
9
9
  export declare class QueryCreator<DB> {
10
10
  #private;
11
11
  constructor(props: QueryCreatorProps);
@@ -378,7 +378,7 @@ export declare class QueryCreator<DB> {
378
378
  raw<T = unknown>(sql: string, params?: any[]): RawBuilder<T>;
379
379
  }
380
380
  export interface QueryCreatorProps {
381
- readonly adapter: DialectAdapter;
382
381
  readonly executor: QueryExecutor;
382
+ readonly parseContext: ParseContext;
383
383
  readonly withNode?: WithNode;
384
384
  }
@@ -10,7 +10,6 @@ import { WithNode } from './operation-node/with-node.js';
10
10
  import { createQueryId } from './util/query-id.js';
11
11
  import { WithSchemaPlugin } from './plugin/with-schema/with-schema-plugin.js';
12
12
  import { freeze } from './util/object-utils.js';
13
- import { createParseContext } from './parser/parse-context.js';
14
13
  export class QueryCreator {
15
14
  #props;
16
15
  constructor(props) {
@@ -20,8 +19,8 @@ export class QueryCreator {
20
19
  return new QueryBuilder({
21
20
  queryId: createQueryId(),
22
21
  executor: this.#props.executor,
23
- adapter: this.#props.adapter,
24
- queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#parseContext, from), this.#props.withNode),
22
+ parseContext: this.#props.parseContext,
23
+ queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#props.parseContext, from), this.#props.withNode),
25
24
  });
26
25
  }
27
26
  /**
@@ -69,7 +68,7 @@ export class QueryCreator {
69
68
  return new QueryBuilder({
70
69
  queryId: createQueryId(),
71
70
  executor: this.#props.executor,
72
- adapter: this.#props.adapter,
71
+ parseContext: this.#props.parseContext,
73
72
  queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode),
74
73
  });
75
74
  }
@@ -91,8 +90,8 @@ export class QueryCreator {
91
90
  return new QueryBuilder({
92
91
  queryId: createQueryId(),
93
92
  executor: this.#props.executor,
94
- adapter: this.#props.adapter,
95
- queryNode: DeleteQueryNode.create(parseTableExpression(this.#parseContext, table), this.#props.withNode),
93
+ parseContext: this.#props.parseContext,
94
+ queryNode: DeleteQueryNode.create(parseTableExpression(this.#props.parseContext, table), this.#props.withNode),
96
95
  });
97
96
  }
98
97
  /**
@@ -117,8 +116,8 @@ export class QueryCreator {
117
116
  return new QueryBuilder({
118
117
  queryId: createQueryId(),
119
118
  executor: this.#props.executor,
120
- adapter: this.#props.adapter,
121
- queryNode: UpdateQueryNode.create(parseTableExpression(this.#parseContext, table), this.#props.withNode),
119
+ parseContext: this.#props.parseContext,
120
+ queryNode: UpdateQueryNode.create(parseTableExpression(this.#props.parseContext, table), this.#props.withNode),
122
121
  });
123
122
  }
124
123
  /**
@@ -144,7 +143,7 @@ export class QueryCreator {
144
143
  * ```
145
144
  */
146
145
  with(name, expression) {
147
- const cte = parseCommonTableExpression(this.#parseContext, name, expression);
146
+ const cte = parseCommonTableExpression(this.#props.parseContext, name, expression);
148
147
  return new QueryCreator({
149
148
  ...this.#props,
150
149
  withNode: this.#props.withNode
@@ -322,7 +321,4 @@ export class QueryCreator {
322
321
  executor: this.#props.executor,
323
322
  });
324
323
  }
325
- get #parseContext() {
326
- return createParseContext(this.#props.adapter);
327
- }
328
324
  }
@@ -2,15 +2,16 @@ import { AlterColumnNode } from '../operation-node/alter-column-node.js';
2
2
  import { AlterTableNode } from '../operation-node/alter-table-node.js';
3
3
  import { ColumnDataType } from '../operation-node/data-type-node.js';
4
4
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
5
- import { OnDelete } from '../operation-node/references-node.js';
5
+ import { OnModifyForeignAction } from '../operation-node/references-node.js';
6
6
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
7
- import { RawBuilder } from '../raw-builder/raw-builder.js';
8
7
  import { Compilable } from '../util/compilable.js';
9
8
  import { PrimitiveValue } from '../util/object-utils.js';
10
9
  import { ColumnDefinitionBuilder, ColumnDefinitionBuilderInterface } from './column-definition-builder.js';
11
10
  import { AnyRawBuilder } from '../query-builder/type-utils.js';
12
11
  import { QueryId } from '../util/query-id.js';
13
12
  import { QueryExecutor } from '../query-executor/query-executor.js';
13
+ import { DataTypeExpression } from '../parser/data-type-parser.js';
14
+ import { ForeignKeyConstraintBuilder, ForeignKeyConstraintBuilderInterface } from './foreign-key-constraint-builder.js';
14
15
  export declare class AlterTableBuilder {
15
16
  #private;
16
17
  constructor(props: AlterTableBuilderProps);
@@ -19,13 +20,16 @@ export declare class AlterTableBuilder {
19
20
  alterColumn(column: string): AlterColumnBuilder;
20
21
  dropColumn(column: string): AlterTableExecutor;
21
22
  renameColumn(column: string, newColumn: string): AlterTableExecutor;
22
- addColumn(columnName: string, dataType: ColumnDataType | RawBuilder): AlterTableAddColumnBuilder;
23
+ addColumn(columnName: string, dataType: DataTypeExpression): AlterTableAddColumnBuilder;
23
24
  /**
24
25
  * Creates an `alter table modify column` query. The `modify column` statement
25
26
  * is only implemeted by MySQL and oracle AFAIK. On other databases you
26
27
  * should use the `alterColumn` method.
27
28
  */
28
- modifyColumn(columnName: string, dataType: ColumnDataType | RawBuilder): AlterTableModifyColumnBuilder;
29
+ modifyColumn(columnName: string, dataType: DataTypeExpression): AlterTableModifyColumnBuilder;
30
+ addUniqueConstraint(constraintName: string, columns: string[]): AlterTableExecutor;
31
+ addCheckConstraint(constraintName: string, checkExpression: string): AlterTableExecutor;
32
+ addForeignKeyConstraint(constraintName: string, columns: string[], targetTable: string, targetColumns: string[]): AlterTableAddForeignKeyConstraintBuilder;
29
33
  }
30
34
  export interface AlterTableBuilderProps {
31
35
  readonly queryId: QueryId;
@@ -53,13 +57,14 @@ export declare class AlterTableExecutor implements OperationNodeSource, Compilab
53
57
  }
54
58
  export interface AlterTableExecutorProps extends AlterTableBuilderProps {
55
59
  }
56
- export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableAddColumnBuilder> {
60
+ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableAddColumnBuilder>, OperationNodeSource, Compilable {
57
61
  #private;
58
62
  constructor(props: AlterTableAddColumnBuilderProps);
59
63
  increments(): AlterTableAddColumnBuilder;
60
64
  primaryKey(): AlterTableAddColumnBuilder;
61
65
  references(ref: string): AlterTableAddColumnBuilder;
62
- onDelete(onDelete: OnDelete): AlterTableAddColumnBuilder;
66
+ onDelete(onDelete: OnModifyForeignAction): AlterTableAddColumnBuilder;
67
+ onUpdate(onDelete: OnModifyForeignAction): AlterTableAddColumnBuilder;
63
68
  unique(): AlterTableAddColumnBuilder;
64
69
  notNull(): AlterTableAddColumnBuilder;
65
70
  defaultTo(value: PrimitiveValue | AnyRawBuilder): AlterTableAddColumnBuilder;
@@ -71,13 +76,14 @@ export declare class AlterTableAddColumnBuilder implements ColumnDefinitionBuild
71
76
  export interface AlterTableAddColumnBuilderProps extends AlterTableBuilderProps {
72
77
  readonly columnBuilder: ColumnDefinitionBuilder;
73
78
  }
74
- export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableModifyColumnBuilder> {
79
+ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBuilderInterface<AlterTableModifyColumnBuilder>, OperationNodeSource, Compilable {
75
80
  #private;
76
81
  constructor(props: AlterTableModifyColumnBuilderProps);
77
82
  increments(): AlterTableModifyColumnBuilder;
78
83
  primaryKey(): AlterTableModifyColumnBuilder;
79
84
  references(ref: string): AlterTableModifyColumnBuilder;
80
- onDelete(onDelete: OnDelete): AlterTableModifyColumnBuilder;
85
+ onDelete(onDelete: OnModifyForeignAction): AlterTableModifyColumnBuilder;
86
+ onUpdate(onUpdate: OnModifyForeignAction): AlterTableModifyColumnBuilder;
81
87
  unique(): AlterTableModifyColumnBuilder;
82
88
  notNull(): AlterTableModifyColumnBuilder;
83
89
  defaultTo(value: PrimitiveValue | AnyRawBuilder): AlterTableModifyColumnBuilder;
@@ -89,3 +95,15 @@ export declare class AlterTableModifyColumnBuilder implements ColumnDefinitionBu
89
95
  export interface AlterTableModifyColumnBuilderProps extends AlterTableBuilderProps {
90
96
  readonly columnBuilder: ColumnDefinitionBuilder;
91
97
  }
98
+ export declare class AlterTableAddForeignKeyConstraintBuilder implements ForeignKeyConstraintBuilderInterface<AlterTableAddForeignKeyConstraintBuilder>, OperationNodeSource, Compilable {
99
+ #private;
100
+ constructor(props: AlterTableAddForeignKeyConstraintBuilderProps);
101
+ onDelete(onDelete: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
102
+ onUpdate(onUpdate: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
103
+ toOperationNode(): AlterTableNode;
104
+ compile(): CompiledQuery;
105
+ execute(): Promise<void>;
106
+ }
107
+ export interface AlterTableAddForeignKeyConstraintBuilderProps extends AlterTableBuilderProps {
108
+ readonly constraintBuilder: ForeignKeyConstraintBuilder;
109
+ }