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
@@ -6,13 +6,10 @@ const join_parser_js_1 = require("../parser/join-parser.js");
6
6
  const select_parser_js_1 = require("../parser/select-parser.js");
7
7
  const filter_parser_js_1 = require("../parser/filter-parser.js");
8
8
  const insert_values_parser_js_1 = require("../parser/insert-values-parser.js");
9
- const reference_parser_js_1 = require("../parser/reference-parser.js");
10
- const order_by_item_node_js_1 = require("../operation-node/order-by-item-node.js");
11
9
  const select_query_node_js_1 = require("../operation-node/select-query-node.js");
12
10
  const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
13
11
  const query_node_js_1 = require("../operation-node/query-node.js");
14
12
  const order_by_parser_js_1 = require("../parser/order-by-parser.js");
15
- const group_by_item_node_js_1 = require("../operation-node/group-by-item-node.js");
16
13
  const update_query_node_js_1 = require("../operation-node/update-query-node.js");
17
14
  const update_set_parser_js_1 = require("../parser/update-set-parser.js");
18
15
  const prevent_await_js_1 = require("../util/prevent-await.js");
@@ -22,6 +19,8 @@ const on_conflict_parser_js_1 = require("../parser/on-conflict-parser.js");
22
19
  const object_utils_js_1 = require("../util/object-utils.js");
23
20
  const delete_query_node_js_1 = require("../operation-node/delete-query-node.js");
24
21
  const on_duplicate_key_node_js_1 = require("../operation-node/on-duplicate-key-node.js");
22
+ const group_by_parser_js_1 = require("../parser/group-by-parser.js");
23
+ const union_parser_js_1 = require("../parser/union-parser.js");
25
24
  /**
26
25
  * The main query builder class.
27
26
  *
@@ -46,7 +45,7 @@ class QueryBuilder {
46
45
  assertCanHaveWhereClause(this.#props.queryNode);
47
46
  return new QueryBuilder({
48
47
  ...this.#props,
49
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
48
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
50
49
  });
51
50
  }
52
51
  /**
@@ -104,14 +103,14 @@ class QueryBuilder {
104
103
  assertCanHaveWhereClause(this.#props.queryNode);
105
104
  return new QueryBuilder({
106
105
  ...this.#props,
107
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
106
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
108
107
  });
109
108
  }
110
109
  orWhere(...args) {
111
110
  assertCanHaveWhereClause(this.#props.queryNode);
112
111
  return new QueryBuilder({
113
112
  ...this.#props,
114
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
113
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
115
114
  });
116
115
  }
117
116
  /**
@@ -124,7 +123,7 @@ class QueryBuilder {
124
123
  assertCanHaveWhereClause(this.#props.queryNode);
125
124
  return new QueryBuilder({
126
125
  ...this.#props,
127
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
126
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
128
127
  });
129
128
  }
130
129
  /**
@@ -190,7 +189,7 @@ class QueryBuilder {
190
189
  assertCanHaveWhereClause(this.#props.queryNode);
191
190
  return new QueryBuilder({
192
191
  ...this.#props,
193
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
192
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
194
193
  });
195
194
  }
196
195
  /**
@@ -200,7 +199,7 @@ class QueryBuilder {
200
199
  assertCanHaveWhereClause(this.#props.queryNode);
201
200
  return new QueryBuilder({
202
201
  ...this.#props,
203
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
202
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
204
203
  });
205
204
  }
206
205
  /**
@@ -210,7 +209,7 @@ class QueryBuilder {
210
209
  assertCanHaveWhereClause(this.#props.queryNode);
211
210
  return new QueryBuilder({
212
211
  ...this.#props,
213
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
212
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
214
213
  });
215
214
  }
216
215
  /**
@@ -220,14 +219,14 @@ class QueryBuilder {
220
219
  assertCanHaveWhereClause(this.#props.queryNode);
221
220
  return new QueryBuilder({
222
221
  ...this.#props,
223
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
222
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
224
223
  });
225
224
  }
226
225
  having(...args) {
227
226
  assertCanHaveHavingClause(this.#props.queryNode);
228
227
  return new QueryBuilder({
229
228
  ...this.#props,
230
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
229
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
231
230
  });
232
231
  }
233
232
  /**
@@ -238,14 +237,14 @@ class QueryBuilder {
238
237
  assertCanHaveHavingClause(this.#props.queryNode);
239
238
  return new QueryBuilder({
240
239
  ...this.#props,
241
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
240
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
242
241
  });
243
242
  }
244
243
  orHaving(...args) {
245
244
  assertCanHaveHavingClause(this.#props.queryNode);
246
245
  return new QueryBuilder({
247
246
  ...this.#props,
248
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
247
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(this.#props.parseContext, args)),
249
248
  });
250
249
  }
251
250
  /**
@@ -256,7 +255,7 @@ class QueryBuilder {
256
255
  assertCanHaveHavingClause(this.#props.queryNode);
257
256
  return new QueryBuilder({
258
257
  ...this.#props,
259
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
258
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
260
259
  });
261
260
  }
262
261
  /**
@@ -267,7 +266,7 @@ class QueryBuilder {
267
266
  assertCanHaveHavingClause(this.#props.queryNode);
268
267
  return new QueryBuilder({
269
268
  ...this.#props,
270
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
269
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
271
270
  });
272
271
  }
273
272
  /**
@@ -278,7 +277,7 @@ class QueryBuilder {
278
277
  assertCanHaveHavingClause(this.#props.queryNode);
279
278
  return new QueryBuilder({
280
279
  ...this.#props,
281
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
280
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
282
281
  });
283
282
  }
284
283
  /**
@@ -289,7 +288,7 @@ class QueryBuilder {
289
288
  assertCanHaveHavingClause(this.#props.queryNode);
290
289
  return new QueryBuilder({
291
290
  ...this.#props,
292
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
291
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
293
292
  });
294
293
  }
295
294
  /**
@@ -300,7 +299,7 @@ class QueryBuilder {
300
299
  assertCanHaveHavingClause(this.#props.queryNode);
301
300
  return new QueryBuilder({
302
301
  ...this.#props,
303
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
302
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
304
303
  });
305
304
  }
306
305
  select(selection) {
@@ -717,14 +716,14 @@ class QueryBuilder {
717
716
  assertCanHaveOrderByClause(this.#props.queryNode);
718
717
  return new QueryBuilder({
719
718
  ...this.#props,
720
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, order_by_item_node_js_1.OrderByItemNode.create((0, order_by_parser_js_1.parseOrderByExpression)(this.#props.parseContext, orderBy), (0, order_by_parser_js_1.parseOrderByDirectionExpression)(direction))),
719
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(this.#props.parseContext, orderBy, direction)),
721
720
  });
722
721
  }
723
722
  groupBy(orderBy) {
724
723
  assertCanHaveGroupByClause(this.#props.queryNode);
725
724
  return new QueryBuilder({
726
725
  ...this.#props,
727
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, reference_parser_js_1.parseReferenceExpressionOrList)(this.#props.parseContext, orderBy).map(group_by_item_node_js_1.GroupByItemNode.create)),
726
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, group_by_parser_js_1.parseGroupBy)(this.#props.parseContext, orderBy)),
728
727
  });
729
728
  }
730
729
  /**
@@ -779,6 +778,83 @@ class QueryBuilder {
779
778
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create(offset)),
780
779
  });
781
780
  }
781
+ /**
782
+ * Combines another select query or raw expression to this query using `union`.
783
+ *
784
+ * The output row type of the combined query must match `this` query.
785
+ *
786
+ * @xample
787
+ * ```ts
788
+ * db.selectFrom('person')
789
+ * .select(['id', 'first_name as name'])
790
+ * .union(db.selectFrom('pet').select(['id', 'name']))
791
+ * .orderBy('name')
792
+ * ```
793
+ */
794
+ union(expression) {
795
+ assertCanHaveUnion(this.#props.queryNode);
796
+ return new QueryBuilder({
797
+ ...this.#props,
798
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, false)),
799
+ });
800
+ }
801
+ /**
802
+ * Combines another select query or raw expression to this query using `union all`.
803
+ *
804
+ * The output row type of the combined query must match `this` query.
805
+ *
806
+ * @xample
807
+ * ```ts
808
+ * db.selectFrom('person')
809
+ * .select(['id', 'first_name as name'])
810
+ * .unionAll(db.selectFrom('pet').select(['id', 'name']))
811
+ * .orderBy('name')
812
+ * ```
813
+ */
814
+ unionAll(expression) {
815
+ assertCanHaveUnion(this.#props.queryNode);
816
+ return new QueryBuilder({
817
+ ...this.#props,
818
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithUnion(this.#props.queryNode, (0, union_parser_js_1.parseUnion)(expression, true)),
819
+ });
820
+ }
821
+ /**
822
+ * Simply calls the given function passing `this` as the only argument.
823
+ *
824
+ * This method can be useful when adding optional method calls:
825
+ *
826
+ * @example
827
+ * ```ts
828
+ * db.selectFrom('person')
829
+ * .selectAll()
830
+ * .call((qb) => {
831
+ * if (something) {
832
+ * return qb.where('something', '=', something)
833
+ * } else {
834
+ * return qb.where('somethingElse', '=', somethingElse)
835
+ * }
836
+ * })
837
+ * .execute()
838
+ * ```
839
+ *
840
+ * The next example uses a helper funtion `log` to log a query:
841
+ *
842
+ * @example
843
+ * ```ts
844
+ * function log<T extends AnyQueryBuilder>(qb: T): T {
845
+ * console.log(qb.compile())
846
+ * return qb
847
+ * }
848
+ *
849
+ * db.selectFrom('person')
850
+ * .selectAll()
851
+ * .call(log)
852
+ * .execute()
853
+ * ```
854
+ */
855
+ call(func) {
856
+ return func(this);
857
+ }
782
858
  /**
783
859
  * Gives an alias for the query. This method is only useful for sub queries.
784
860
  *
@@ -964,7 +1040,7 @@ function assertCanHaveUpdates(node) {
964
1040
  }
965
1041
  function assertCanHaveReturningClause(node) {
966
1042
  if (!query_node_js_1.QueryNode.isMutating(node)) {
967
- throw new Error('only an insert, delete and update queries can have a returning clause');
1043
+ throw new Error('only insert, delete and update queries can have a returning clause');
968
1044
  }
969
1045
  }
970
1046
  function assertCanHaveOrderByClause(node) {
@@ -987,3 +1063,8 @@ function assertCanHaveOffset(node) {
987
1063
  throw new Error('only a select query can have an offset');
988
1064
  }
989
1065
  }
1066
+ function assertCanHaveUnion(node) {
1067
+ if (!select_query_node_js_1.SelectQueryNode.is(node)) {
1068
+ throw new Error('only a select query can have an union');
1069
+ }
1070
+ }
@@ -1,4 +1,4 @@
1
1
  export interface CompiledQuery {
2
2
  readonly sql: string;
3
- readonly parameters: ReadonlyArray<any>;
3
+ readonly parameters: ReadonlyArray<unknown>;
4
4
  }
@@ -60,6 +60,8 @@ import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constrai
60
60
  import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
61
61
  import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
62
62
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
63
+ import { ColumnNode } from '../operation-node/column-node.js';
64
+ import { UnionNode } from '../operation-node/union-node.js';
63
65
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
64
66
  #private;
65
67
  protected get numParameters(): number;
@@ -67,6 +69,8 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
67
69
  protected getSql(): string;
68
70
  protected visitSelectQuery(node: SelectQueryNode): void;
69
71
  protected visitFrom(node: FromNode): void;
72
+ protected visitSelection(node: SelectionNode): void;
73
+ protected visitColumn(node: ColumnNode): void;
70
74
  protected compileDistinctOn(selections: ReadonlyArray<SelectionNode>): void;
71
75
  protected compileList(nodes: ReadonlyArray<OperationNode>, separator?: string): void;
72
76
  protected visitWhere(node: WhereNode): void;
@@ -125,11 +129,12 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
125
129
  protected visitModifyColumn(node: ModifyColumnNode): void;
126
130
  protected visitAddConstraint(node: AddConstraintNode): void;
127
131
  protected visitDropConstraint(node: DropConstraintNode): void;
132
+ protected visitUnion(node: UnionNode): void;
128
133
  protected append(str: string): void;
129
- protected appendValue(value: PrimitiveValue): void;
134
+ protected appendValue(parameter: unknown): void;
130
135
  protected getLeftIdentifierWrapper(): string;
131
136
  protected getRightIdentifierWrapper(): string;
132
137
  protected getCurrentParameterPlaceholder(): string;
133
- protected addParameter(parameter: any): void;
138
+ protected addParameter(parameter: unknown): void;
134
139
  protected appendImmediateValue(value: PrimitiveValue): void;
135
140
  }
@@ -17,7 +17,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
17
17
  this.visitNode(node);
18
18
  return (0, object_utils_js_1.freeze)({
19
19
  sql: this.getSql(),
20
- parameters: this.#parameters,
20
+ parameters: [...this.#parameters],
21
21
  });
22
22
  }
23
23
  getSql() {
@@ -63,6 +63,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
63
63
  this.append(' ');
64
64
  this.visitNode(node.having);
65
65
  }
66
+ if (node.union) {
67
+ this.append(' ');
68
+ this.compileList(node.union, ' ');
69
+ }
66
70
  if (node.orderBy) {
67
71
  this.append(' ');
68
72
  this.visitNode(node.orderBy);
@@ -89,6 +93,12 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
89
93
  this.append('from ');
90
94
  this.compileList(node.froms);
91
95
  }
96
+ visitSelection(node) {
97
+ this.visitNode(node.selection);
98
+ }
99
+ visitColumn(node) {
100
+ this.visitNode(node.column);
101
+ }
92
102
  compileDistinctOn(selections) {
93
103
  this.append('distinct on (');
94
104
  this.compileList(selections);
@@ -630,11 +640,18 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
630
640
  this.append('drop constraint ');
631
641
  this.visitNode(node.constraintName);
632
642
  }
643
+ visitUnion(node) {
644
+ this.append('union ');
645
+ if (node.all) {
646
+ this.append('all ');
647
+ }
648
+ this.visitNode(node.union);
649
+ }
633
650
  append(str) {
634
651
  this.#sql += str;
635
652
  }
636
- appendValue(value) {
637
- this.addParameter(value);
653
+ appendValue(parameter) {
654
+ this.addParameter(parameter);
638
655
  this.append(this.getCurrentParameterPlaceholder());
639
656
  }
640
657
  getLeftIdentifierWrapper() {
@@ -9,6 +9,7 @@ export declare class DefaultQueryExecutor extends QueryExecutor {
9
9
  constructor(compiler: QueryCompiler, connectionProvider: ConnectionProvider, plugins?: KyselyPlugin[]);
10
10
  compileQuery(node: RootOperationNode): CompiledQuery;
11
11
  protected executeQueryImpl<R>(compiledQuery: CompiledQuery): Promise<QueryResult<R>>;
12
+ withPlugin(plugin: KyselyPlugin): DefaultQueryExecutor;
12
13
  withPluginAtFront(plugin: KyselyPlugin): DefaultQueryExecutor;
13
14
  withConnectionProvider(connectionProvider: ConnectionProvider): QueryExecutor;
14
15
  withoutPlugins(): QueryExecutor;
@@ -18,6 +18,12 @@ class DefaultQueryExecutor extends query_executor_js_1.QueryExecutor {
18
18
  return connection.executeQuery(compiledQuery);
19
19
  });
20
20
  }
21
+ withPlugin(plugin) {
22
+ return new DefaultQueryExecutor(this.#compiler, this.#connectionProvider, [
23
+ ...this.plugins,
24
+ plugin,
25
+ ]);
26
+ }
21
27
  withPluginAtFront(plugin) {
22
28
  return new DefaultQueryExecutor(this.#compiler, this.#connectionProvider, [
23
29
  plugin,
@@ -11,6 +11,7 @@ export declare class NoopQueryExecutor extends QueryExecutor {
11
11
  compileQuery(): CompiledQuery;
12
12
  protected executeQueryImpl<R>(): Promise<QueryResult<R>>;
13
13
  withConnectionProvider(): QueryExecutor;
14
+ withPlugin(plugin: KyselyPlugin): NoopQueryExecutor;
14
15
  withPluginAtFront(plugin: KyselyPlugin): NoopQueryExecutor;
15
16
  withoutPlugins(): QueryExecutor;
16
17
  }
@@ -17,6 +17,9 @@ class NoopQueryExecutor extends query_executor_js_1.QueryExecutor {
17
17
  withConnectionProvider() {
18
18
  throw new Error('this query cannot have a connection provider');
19
19
  }
20
+ withPlugin(plugin) {
21
+ return new NoopQueryExecutor([...this.plugins, plugin]);
22
+ }
20
23
  withPluginAtFront(plugin) {
21
24
  return new NoopQueryExecutor([plugin, ...this.plugins]);
22
25
  }
@@ -35,15 +35,20 @@ export declare abstract class QueryExecutor {
35
35
  * Executes a compiled query.
36
36
  */
37
37
  protected abstract executeQueryImpl<R>(compiledQuery: CompiledQuery, queryId: QueryId): Promise<QueryResult<R>>;
38
+ /**
39
+ * Returns a copy of this executor with a new connection provider.
40
+ */
41
+ abstract withConnectionProvider(connectionProvider: ConnectionProvider): QueryExecutor;
38
42
  /**
39
43
  * Returns a copy of this executor with a plugin added as the
40
- * first plugin.
44
+ * last plugin.
41
45
  */
42
- abstract withPluginAtFront(plugin: KyselyPlugin): QueryExecutor;
46
+ abstract withPlugin(plugin: KyselyPlugin): QueryExecutor;
43
47
  /**
44
- * Returns a copy of this executor with a new connection provider.
48
+ * Returns a copy of this executor with a plugin added as the
49
+ * first plugin.
45
50
  */
46
- abstract withConnectionProvider(connectionProvider: ConnectionProvider): QueryExecutor;
51
+ abstract withPluginAtFront(plugin: KyselyPlugin): QueryExecutor;
47
52
  /**
48
53
  * Returns a copy of this executor without any plugins.
49
54
  */
@@ -0,0 +1,19 @@
1
+ import { ArrayItemType } from './type-utils.js';
2
+ export declare const LOG_LEVELS: readonly ["query", "error"];
3
+ export declare type LogLevel = ArrayItemType<typeof LOG_LEVELS>;
4
+ export declare class Log {
5
+ #private;
6
+ constructor(levels: ReadonlyArray<LogLevel>);
7
+ query(getEvent: () => QueryLogEvent): void;
8
+ error(getEvent: () => ErrorLogEvent): void;
9
+ }
10
+ export declare type LogEvent = QueryLogEvent | ErrorLogEvent;
11
+ export interface QueryLogEvent {
12
+ readonly level: 'query';
13
+ readonly sql: string;
14
+ readonly queryDurationMillis: number;
15
+ }
16
+ export interface ErrorLogEvent {
17
+ readonly level: 'error';
18
+ readonly error: unknown;
19
+ }
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Log = exports.LOG_LEVELS = void 0;
4
+ const object_utils_js_1 = require("./object-utils.js");
5
+ exports.LOG_LEVELS = ['query', 'error'];
6
+ class Log {
7
+ #levels;
8
+ constructor(levels) {
9
+ this.#levels = (0, object_utils_js_1.freeze)({
10
+ query: levels.includes('query'),
11
+ error: levels.includes('error'),
12
+ });
13
+ }
14
+ query(getEvent) {
15
+ if (this.#levels.query) {
16
+ this.#defaultQuery(getEvent());
17
+ }
18
+ }
19
+ error(getEvent) {
20
+ if (this.#levels.error) {
21
+ this.#defaultError(getEvent());
22
+ }
23
+ }
24
+ #defaultQuery(event) {
25
+ console.log(`kysely:query: ${event.sql}`);
26
+ console.log(`kysely:query: duration: ${event.queryDurationMillis.toFixed(1)}ms`);
27
+ }
28
+ #defaultError(event) {
29
+ if (event.error instanceof Error) {
30
+ console.error(`kysely:error: ${event.error.stack ?? event.error.message}`);
31
+ }
32
+ else {
33
+ console.error(`kysely:error: ${event}`);
34
+ }
35
+ }
36
+ }
37
+ exports.Log = Log;
@@ -1,16 +1,16 @@
1
1
  /// <reference types="node" />
2
2
  export declare type PrimitiveValue = string | number | boolean | null | Date | Buffer | BigInt;
3
- export declare function isEmpty(obj: ArrayLike<any> | string | object | Buffer): boolean;
4
- export declare function isString(obj: any): obj is string;
5
- export declare function isNumber(obj: any): obj is number;
6
- export declare function isBoolean(obj: any): obj is boolean;
7
- export declare function isNull(obj: any): obj is null;
8
- export declare function isDate(obj: any): obj is Date;
9
- export declare function isBuffer(obj: any): obj is Buffer;
10
- export declare function isBigInt(obj: any): obj is BigInt;
11
- export declare function isPrimitive(obj: any): obj is PrimitiveValue;
12
- export declare function isFunction(obj: any): obj is Function;
13
- export declare function isObject(obj: any): obj is Record<string, any>;
3
+ export declare function isEmpty(obj: ArrayLike<unknown> | string | object | Buffer): boolean;
4
+ export declare function isString(obj: unknown): obj is string;
5
+ export declare function isNumber(obj: unknown): obj is number;
6
+ export declare function isBoolean(obj: unknown): obj is boolean;
7
+ export declare function isNull(obj: unknown): obj is null;
8
+ export declare function isDate(obj: unknown): obj is Date;
9
+ export declare function isBuffer(obj: unknown): obj is Buffer;
10
+ export declare function isBigInt(obj: unknown): obj is BigInt;
11
+ export declare function isPrimitive(obj: unknown): obj is PrimitiveValue;
12
+ export declare function isFunction(obj: unknown): obj is Function;
13
+ export declare function isObject(obj: unknown): obj is Record<string, unknown>;
14
14
  export declare function getLast<T>(arr: ArrayLike<T>): T | undefined;
15
15
  export declare function freeze<T>(obj: T): Readonly<T>;
16
16
  export declare function asArray<T>(arg: T | T[]): T[];
@@ -54,7 +54,7 @@ function isFunction(obj) {
54
54
  }
55
55
  exports.isFunction = isFunction;
56
56
  function isObject(obj) {
57
- return obj && typeof obj === 'object';
57
+ return typeof obj === 'object' && obj !== null;
58
58
  }
59
59
  exports.isObject = isObject;
60
60
  function getLast(arr) {
@@ -3,10 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.randomString = void 0;
4
4
  const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
5
5
  function randomString(length) {
6
- let chars = new Array(length);
6
+ let chars = '';
7
7
  for (let i = 0; i < length; ++i) {
8
- chars[i] = CHARS[Math.floor(Math.random() * CHARS.length)];
8
+ chars += randomChar();
9
9
  }
10
- return chars.join('');
10
+ return chars;
11
11
  }
12
12
  exports.randomString = randomString;
13
+ function randomChar() {
14
+ return CHARS[Math.floor(Math.random() * CHARS.length)];
15
+ }
@@ -136,19 +136,19 @@ export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: Expression
136
136
  export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
137
137
  export interface InsertResultTypeTag {
138
138
  /** @internal */
139
- __isInsertResultTypeTag__: true;
139
+ readonly __isInsertResultTypeTag__: true;
140
140
  }
141
141
  export interface DeleteResultTypeTag {
142
142
  /** @internal */
143
- __isDeleteResultTypeTag__: true;
143
+ readonly __isDeleteResultTypeTag__: true;
144
144
  }
145
145
  export interface UpdateResultTypeTag {
146
146
  /** @internal */
147
- __isUpdateResultTypeTag__: true;
147
+ readonly __isUpdateResultTypeTag__: true;
148
148
  }
149
149
  export interface GeneratedPlaceholder {
150
150
  /** @internal */
151
- __isGeneratedPlaceholder__: true;
151
+ readonly __isGeneratedPlaceholder__: true;
152
152
  }
153
153
  export declare type ManyResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O;
154
154
  export declare type SingleResultRowType<O> = O extends InsertResultTypeTag ? number | undefined : O extends DeleteResultTypeTag ? number : O extends UpdateResultTypeTag ? number : O | undefined;
@@ -5,6 +5,13 @@ import { Dialect } from '../dialect.js';
5
5
  import { DatabaseIntrospector } from '../../introspection/database-introspector.js';
6
6
  import { DialectAdapter } from '../dialect-adapter.js';
7
7
  import { DatabaseConnection } from '../../driver/database-connection.js';
8
+ /**
9
+ * MySQL dialect that uses the [mysql2](https://github.com/sidorares/node-mysql2#readme) library.
10
+ *
11
+ * The {@link MysqlDialectConfig | configuration} passed to the constructor
12
+ * is given as-is to the mysql2 library's [createPool](https://github.com/sidorares/node-mysql2#using-connection-pools)
13
+ * method.
14
+ */
8
15
  export declare class MysqlDialect implements Dialect {
9
16
  #private;
10
17
  constructor(config: MysqlDialectConfig);
@@ -17,6 +24,8 @@ export declare class MysqlDialect implements Dialect {
17
24
  * Config for the mysql dialect.
18
25
  *
19
26
  * This interface is equal to `mysql2` library's pool config.
27
+ *
28
+ * https://github.com/sidorares/node-mysql2#using-connection-pools
20
29
  */
21
30
  export interface MysqlDialectConfig {
22
31
  /**
@@ -176,6 +185,8 @@ export interface MysqlDialectConfig {
176
185
  keepAliveInitialDelay?: number;
177
186
  /**
178
187
  * Called once for each created connection.
188
+ *
189
+ * This is a Kysely specific feature and does not come from the `pg` module.
179
190
  */
180
191
  onCreateConnection?: (connection: DatabaseConnection) => Promise<void>;
181
192
  }
@@ -2,6 +2,13 @@ import { MysqlDriver } from './mysql-driver.js';
2
2
  import { MysqlQueryCompiler } from './mysql-query-compiler.js';
3
3
  import { MysqlIntrospector } from './mysql-introspector.js';
4
4
  import { MysqlAdapter } from './mysql-adapter.js';
5
+ /**
6
+ * MySQL dialect that uses the [mysql2](https://github.com/sidorares/node-mysql2#readme) library.
7
+ *
8
+ * The {@link MysqlDialectConfig | configuration} passed to the constructor
9
+ * is given as-is to the mysql2 library's [createPool](https://github.com/sidorares/node-mysql2#using-connection-pools)
10
+ * method.
11
+ */
5
12
  export class MysqlDialect {
6
13
  #config;
7
14
  constructor(config) {
@@ -1,4 +1,4 @@
1
- import { isFunction, isObject } from '../../util/object-utils.js';
1
+ import { isFunction, isNumber, isObject } from '../../util/object-utils.js';
2
2
  const PRIVATE_RELEASE_METHOD = Symbol();
3
3
  export class MysqlDriver {
4
4
  #config;
@@ -103,13 +103,13 @@ class MysqlConnection {
103
103
  async executeQuery(compiledQuery) {
104
104
  const result = await this.#executeQuery(compiledQuery);
105
105
  if (isObject(result) && 'insertId' in result && 'affectedRows' in result) {
106
- if (result.insertId) {
106
+ if (isNumber(result.insertId) && result.insertId > 0) {
107
107
  return {
108
108
  insertedPrimaryKey: result.insertId,
109
109
  rows: [],
110
110
  };
111
111
  }
112
- else {
112
+ else if (isNumber(result.affectedRows)) {
113
113
  return {
114
114
  numUpdatedOrDeletedRows: result.affectedRows,
115
115
  rows: [],