kysely 0.27.3 → 0.27.4

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 (211) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +7 -7
  3. package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
  4. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  5. package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
  6. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
  7. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  9. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  10. package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
  11. package/dist/cjs/dialect/postgres/postgres-introspector.js +1 -1
  12. package/dist/cjs/driver/database-connection.d.ts +3 -1
  13. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  14. package/dist/cjs/dynamic/dynamic.d.ts +1 -1
  15. package/dist/cjs/dynamic/dynamic.js +1 -1
  16. package/dist/cjs/expression/expression-builder.d.ts +2 -2
  17. package/dist/cjs/expression/expression-builder.js +2 -3
  18. package/dist/cjs/expression/expression.js +2 -3
  19. package/dist/cjs/helpers/mssql.js +3 -4
  20. package/dist/cjs/helpers/mysql.d.ts +3 -3
  21. package/dist/cjs/helpers/mysql.js +6 -7
  22. package/dist/cjs/helpers/postgres.d.ts +4 -4
  23. package/dist/cjs/helpers/postgres.js +7 -8
  24. package/dist/cjs/helpers/sqlite.js +3 -4
  25. package/dist/cjs/index.d.ts +28 -21
  26. package/dist/cjs/index.js +28 -21
  27. package/dist/cjs/kysely.d.ts +1 -1
  28. package/dist/cjs/kysely.js +3 -3
  29. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  31. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  32. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  33. package/dist/cjs/operation-node/data-type-node.js +5 -3
  34. package/dist/cjs/operation-node/delete-query-node.d.ts +2 -0
  35. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  36. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  37. package/dist/cjs/operation-node/insert-query-node.d.ts +2 -0
  38. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  39. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  41. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  42. package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
  43. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  44. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  45. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  47. package/dist/cjs/operation-node/operator-node.js +8 -6
  48. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  49. package/dist/cjs/operation-node/output-node.js +26 -0
  50. package/dist/cjs/operation-node/query-node.d.ts +11 -6
  51. package/dist/cjs/operation-node/query-node.js +9 -0
  52. package/dist/cjs/operation-node/select-query-node.d.ts +1 -0
  53. package/dist/cjs/operation-node/select-query-node.js +6 -0
  54. package/dist/cjs/operation-node/update-query-node.d.ts +2 -0
  55. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  56. package/dist/cjs/parser/binary-operation-parser.js +5 -6
  57. package/dist/cjs/parser/data-type-parser.js +1 -2
  58. package/dist/cjs/parser/default-value-parser.js +1 -2
  59. package/dist/cjs/parser/expression-parser.js +3 -4
  60. package/dist/cjs/parser/fetch-parser.js +1 -2
  61. package/dist/cjs/parser/group-by-parser.js +1 -2
  62. package/dist/cjs/parser/identifier-parser.js +1 -2
  63. package/dist/cjs/parser/insert-values-parser.js +1 -2
  64. package/dist/cjs/parser/join-parser.js +1 -2
  65. package/dist/cjs/parser/merge-parser.js +2 -3
  66. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  67. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  68. package/dist/cjs/parser/order-by-parser.js +3 -4
  69. package/dist/cjs/parser/parse-utils.js +4 -5
  70. package/dist/cjs/parser/partition-by-parser.js +1 -2
  71. package/dist/cjs/parser/reference-parser.js +8 -9
  72. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  73. package/dist/cjs/parser/select-parser.js +2 -3
  74. package/dist/cjs/parser/set-operation-parser.js +1 -2
  75. package/dist/cjs/parser/table-parser.js +4 -5
  76. package/dist/cjs/parser/top-parser.js +1 -2
  77. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  78. package/dist/cjs/parser/update-set-parser.js +2 -3
  79. package/dist/cjs/parser/value-parser.js +4 -5
  80. package/dist/cjs/parser/with-parser.js +1 -2
  81. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  82. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
  83. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  84. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  85. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  86. package/dist/cjs/query-builder/delete-query-builder.d.ts +89 -5
  87. package/dist/cjs/query-builder/delete-query-builder.js +19 -5
  88. package/dist/cjs/query-builder/function-module.d.ts +5 -5
  89. package/dist/cjs/query-builder/function-module.js +1 -2
  90. package/dist/cjs/query-builder/insert-query-builder.d.ts +95 -10
  91. package/dist/cjs/query-builder/insert-query-builder.js +25 -10
  92. package/dist/cjs/query-builder/merge-query-builder.d.ts +167 -3
  93. package/dist/cjs/query-builder/merge-query-builder.js +30 -1
  94. package/dist/cjs/query-builder/no-result-error.js +2 -2
  95. package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
  96. package/dist/cjs/query-builder/output-interface.d.ts +95 -0
  97. package/dist/cjs/query-builder/output-interface.js +2 -0
  98. package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
  99. package/dist/cjs/query-builder/select-query-builder.d.ts +76 -11
  100. package/dist/cjs/query-builder/select-query-builder.js +7 -2
  101. package/dist/cjs/query-builder/update-query-builder.d.ts +95 -10
  102. package/dist/cjs/query-builder/update-query-builder.js +21 -7
  103. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  104. package/dist/cjs/query-builder/update-result.js +9 -0
  105. package/dist/cjs/query-builder/where-interface.d.ts +1 -1
  106. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  107. package/dist/cjs/query-compiler/default-query-compiler.js +25 -1
  108. package/dist/cjs/query-creator.d.ts +56 -3
  109. package/dist/cjs/query-creator.js +54 -1
  110. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  111. package/dist/cjs/raw-builder/sql.d.ts +5 -5
  112. package/dist/cjs/schema/alter-column-builder.js +3 -0
  113. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
  114. package/dist/cjs/schema/alter-table-add-index-builder.js +1 -1
  115. package/dist/cjs/schema/alter-table-builder.js +1 -2
  116. package/dist/cjs/schema/column-definition-builder.d.ts +5 -0
  117. package/dist/cjs/schema/column-definition-builder.js +7 -0
  118. package/dist/cjs/util/assert.js +2 -3
  119. package/dist/cjs/util/compilable.js +1 -2
  120. package/dist/cjs/util/json-object-args.js +1 -2
  121. package/dist/cjs/util/log-once.js +1 -2
  122. package/dist/cjs/util/object-utils.js +38 -26
  123. package/dist/cjs/util/performance-now.js +1 -2
  124. package/dist/cjs/util/prevent-await.js +1 -2
  125. package/dist/cjs/util/query-id.js +1 -2
  126. package/dist/cjs/util/random-string.js +1 -2
  127. package/dist/cjs/util/require-all-props.js +1 -2
  128. package/dist/cjs/util/stack-trace-utils.js +1 -2
  129. package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
  130. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  131. package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
  132. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
  133. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  134. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  135. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  136. package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
  137. package/dist/esm/dialect/postgres/postgres-introspector.js +1 -1
  138. package/dist/esm/driver/database-connection.d.ts +3 -1
  139. package/dist/esm/dynamic/dynamic.d.ts +1 -1
  140. package/dist/esm/dynamic/dynamic.js +1 -1
  141. package/dist/esm/expression/expression-builder.d.ts +2 -2
  142. package/dist/esm/helpers/mysql.d.ts +3 -3
  143. package/dist/esm/helpers/mysql.js +3 -3
  144. package/dist/esm/helpers/postgres.d.ts +4 -4
  145. package/dist/esm/helpers/postgres.js +4 -4
  146. package/dist/esm/index.d.ts +28 -21
  147. package/dist/esm/index.js +28 -21
  148. package/dist/esm/kysely.d.ts +1 -1
  149. package/dist/esm/kysely.js +1 -1
  150. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  151. package/dist/esm/operation-node/case-node.d.ts +1 -1
  152. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  153. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  154. package/dist/esm/operation-node/data-type-node.js +3 -1
  155. package/dist/esm/operation-node/delete-query-node.d.ts +2 -0
  156. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  157. package/dist/esm/operation-node/having-node.d.ts +1 -1
  158. package/dist/esm/operation-node/insert-query-node.d.ts +2 -0
  159. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  160. package/dist/esm/operation-node/on-node.d.ts +1 -1
  161. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  162. package/dist/esm/operation-node/operation-node-transformer.js +12 -0
  163. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  164. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  165. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  166. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  167. package/dist/esm/operation-node/operator-node.js +2 -0
  168. package/dist/esm/operation-node/output-node.d.ts +13 -0
  169. package/dist/esm/operation-node/output-node.js +24 -0
  170. package/dist/esm/operation-node/query-node.d.ts +11 -6
  171. package/dist/esm/operation-node/query-node.js +9 -0
  172. package/dist/esm/operation-node/select-query-node.d.ts +1 -0
  173. package/dist/esm/operation-node/select-query-node.js +6 -0
  174. package/dist/esm/operation-node/update-query-node.d.ts +2 -0
  175. package/dist/esm/operation-node/where-node.d.ts +1 -1
  176. package/dist/esm/parser/returning-parser.d.ts +4 -3
  177. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  178. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  179. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  180. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  181. package/dist/esm/query-builder/delete-query-builder.d.ts +89 -5
  182. package/dist/esm/query-builder/delete-query-builder.js +19 -5
  183. package/dist/esm/query-builder/function-module.d.ts +5 -5
  184. package/dist/esm/query-builder/insert-query-builder.d.ts +95 -10
  185. package/dist/esm/query-builder/insert-query-builder.js +25 -10
  186. package/dist/esm/query-builder/merge-query-builder.d.ts +167 -3
  187. package/dist/esm/query-builder/merge-query-builder.js +30 -1
  188. package/dist/esm/query-builder/on-conflict-builder.d.ts +2 -2
  189. package/dist/esm/query-builder/output-interface.d.ts +95 -0
  190. package/dist/esm/query-builder/output-interface.js +2 -0
  191. package/dist/esm/query-builder/returning-interface.d.ts +2 -0
  192. package/dist/esm/query-builder/select-query-builder.d.ts +76 -11
  193. package/dist/esm/query-builder/select-query-builder.js +6 -0
  194. package/dist/esm/query-builder/update-query-builder.d.ts +95 -10
  195. package/dist/esm/query-builder/update-query-builder.js +21 -7
  196. package/dist/esm/query-builder/update-result.d.ts +9 -0
  197. package/dist/esm/query-builder/update-result.js +9 -0
  198. package/dist/esm/query-builder/where-interface.d.ts +1 -1
  199. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  200. package/dist/esm/query-compiler/default-query-compiler.js +25 -1
  201. package/dist/esm/query-creator.d.ts +56 -3
  202. package/dist/esm/query-creator.js +54 -1
  203. package/dist/esm/raw-builder/sql.d.ts +5 -5
  204. package/dist/esm/schema/alter-column-builder.js +3 -0
  205. package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
  206. package/dist/esm/schema/alter-table-add-index-builder.js +1 -1
  207. package/dist/esm/schema/alter-table-builder.js +1 -2
  208. package/dist/esm/schema/column-definition-builder.d.ts +5 -0
  209. package/dist/esm/schema/column-definition-builder.js +7 -0
  210. package/dist/esm/util/object-utils.js +18 -5
  211. package/package.json +7 -6
@@ -125,10 +125,10 @@ export declare class QueryCreator<DB> {
125
125
  * ```
126
126
  */
127
127
  selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
128
- selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
128
+ selectFrom<TE extends TableExpression<DB, never>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
129
129
  selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
130
130
  selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
131
- selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
131
+ selectFrom<TE extends TableExpression<DB, never>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
132
132
  /**
133
133
  * Creates a `select` query builder without a `from` clause.
134
134
  *
@@ -365,24 +365,77 @@ export declare class QueryCreator<DB> {
365
365
  *
366
366
  * ### Examples
367
367
  *
368
+ * <!-- siteExample("cte", "Simple selects", 10) -->
369
+ *
370
+ * Common table expressions (CTE) are a great way to modularize complex queries.
371
+ * Essentially they allow you to run multiple separate queries within a
372
+ * single roundtrip to the DB.
373
+ *
374
+ * Since CTEs are a part of the main query, query optimizers inside DB
375
+ * engines are able to optimize the overall query. For example, postgres
376
+ * is able to inline the CTEs inside the using queries if it decides it's
377
+ * faster.
378
+ *
368
379
  * ```ts
369
- * await db
380
+ * const result = await db
381
+ * // Create a CTE called `jennifers` that selects all
382
+ * // persons named 'Jennifer'.
370
383
  * .with('jennifers', (db) => db
371
384
  * .selectFrom('person')
372
385
  * .where('first_name', '=', 'Jennifer')
373
386
  * .select(['id', 'age'])
374
387
  * )
388
+ * // Select all rows from the `jennifers` CTE and
389
+ * // further filter it.
375
390
  * .with('adult_jennifers', (db) => db
376
391
  * .selectFrom('jennifers')
377
392
  * .where('age', '>', 18)
378
393
  * .select(['id', 'age'])
379
394
  * )
395
+ * // Finally select all adult jennifers that are
396
+ * // also younger than 60.
380
397
  * .selectFrom('adult_jennifers')
381
398
  * .where('age', '<', 60)
382
399
  * .selectAll()
383
400
  * .execute()
384
401
  * ```
385
402
  *
403
+ * <!-- siteExample("cte", "Inserts, updates and deletions", 20) -->
404
+ *
405
+ * Some databases like postgres also allow you to run other queries than selects
406
+ * in CTEs. On these databases CTEs are extremely powerful:
407
+ *
408
+ * ```ts
409
+ * const result = await db
410
+ * .with('new_person', (db) => db
411
+ * .insertInto('person')
412
+ * .values({
413
+ * first_name: 'Jennifer',
414
+ * age: 35,
415
+ * })
416
+ * .returning('id')
417
+ * )
418
+ * .with('new_pet', (db) => db
419
+ * .insertInto('pet')
420
+ * .values({
421
+ * name: 'Doggo',
422
+ * species: 'dog',
423
+ * is_favorite: true,
424
+ * // Use the id of the person we just inserted.
425
+ * owner_id: db
426
+ * .selectFrom('new_person')
427
+ * .select('id')
428
+ * })
429
+ * .returning('id')
430
+ * )
431
+ * .selectFrom(['new_person', 'new_pet'])
432
+ * .select([
433
+ * 'new_person.id as person_id',
434
+ * 'new_pet.id as pet_id'
435
+ * ])
436
+ * .execute()
437
+ * ```
438
+ *
386
439
  * The CTE name can optionally specify column names in addition to
387
440
  * a name. In that case Kysely requires the expression to retun
388
441
  * rows with the same columns.
@@ -141,24 +141,77 @@ class QueryCreator {
141
141
  *
142
142
  * ### Examples
143
143
  *
144
+ * <!-- siteExample("cte", "Simple selects", 10) -->
145
+ *
146
+ * Common table expressions (CTE) are a great way to modularize complex queries.
147
+ * Essentially they allow you to run multiple separate queries within a
148
+ * single roundtrip to the DB.
149
+ *
150
+ * Since CTEs are a part of the main query, query optimizers inside DB
151
+ * engines are able to optimize the overall query. For example, postgres
152
+ * is able to inline the CTEs inside the using queries if it decides it's
153
+ * faster.
154
+ *
144
155
  * ```ts
145
- * await db
156
+ * const result = await db
157
+ * // Create a CTE called `jennifers` that selects all
158
+ * // persons named 'Jennifer'.
146
159
  * .with('jennifers', (db) => db
147
160
  * .selectFrom('person')
148
161
  * .where('first_name', '=', 'Jennifer')
149
162
  * .select(['id', 'age'])
150
163
  * )
164
+ * // Select all rows from the `jennifers` CTE and
165
+ * // further filter it.
151
166
  * .with('adult_jennifers', (db) => db
152
167
  * .selectFrom('jennifers')
153
168
  * .where('age', '>', 18)
154
169
  * .select(['id', 'age'])
155
170
  * )
171
+ * // Finally select all adult jennifers that are
172
+ * // also younger than 60.
156
173
  * .selectFrom('adult_jennifers')
157
174
  * .where('age', '<', 60)
158
175
  * .selectAll()
159
176
  * .execute()
160
177
  * ```
161
178
  *
179
+ * <!-- siteExample("cte", "Inserts, updates and deletions", 20) -->
180
+ *
181
+ * Some databases like postgres also allow you to run other queries than selects
182
+ * in CTEs. On these databases CTEs are extremely powerful:
183
+ *
184
+ * ```ts
185
+ * const result = await db
186
+ * .with('new_person', (db) => db
187
+ * .insertInto('person')
188
+ * .values({
189
+ * first_name: 'Jennifer',
190
+ * age: 35,
191
+ * })
192
+ * .returning('id')
193
+ * )
194
+ * .with('new_pet', (db) => db
195
+ * .insertInto('pet')
196
+ * .values({
197
+ * name: 'Doggo',
198
+ * species: 'dog',
199
+ * is_favorite: true,
200
+ * // Use the id of the person we just inserted.
201
+ * owner_id: db
202
+ * .selectFrom('new_person')
203
+ * .select('id')
204
+ * })
205
+ * .returning('id')
206
+ * )
207
+ * .selectFrom(['new_person', 'new_pet'])
208
+ * .select([
209
+ * 'new_person.id as person_id',
210
+ * 'new_pet.id as pet_id'
211
+ * ])
212
+ * .execute()
213
+ * ```
214
+ *
162
215
  * The CTE name can optionally specify column names in addition to
163
216
  * a name. In that case Kysely requires the expression to retun
164
217
  * rows with the same columns.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createRawBuilder = void 0;
3
+ exports.createRawBuilder = createRawBuilder;
4
4
  const alias_node_js_1 = require("../operation-node/alias-node.js");
5
5
  const prevent_await_js_1 = require("../util/prevent-await.js");
6
6
  const object_utils_js_1 = require("../util/object-utils.js");
@@ -63,7 +63,6 @@ class RawBuilderImpl {
63
63
  function createRawBuilder(props) {
64
64
  return new RawBuilderImpl(props);
65
65
  }
66
- exports.createRawBuilder = createRawBuilder;
67
66
  (0, prevent_await_js_1.preventAwait)(RawBuilderImpl, "don't await RawBuilder instances directly. To execute the query you need to call `execute`");
68
67
  class AliasedRawBuilderImpl {
69
68
  #rawBuilder;
@@ -33,12 +33,12 @@ export interface Sql {
33
33
  * // method to give it an alias.
34
34
  * sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
35
35
  * )
36
- * .where(sql`birthdate between ${date1} and ${date2}`)
36
+ * .where(sql<boolean>`birthdate between ${date1} and ${date2}`)
37
37
  * // Here we assume we have list of nicknames for the person
38
38
  * // (a list of strings) and we use the PostgreSQL `@>` operator
39
39
  * // to test if all of them are valid nicknames for the user.
40
- * .where('nicknames', '@>', sql`ARRAY[${sql.join(nicknames)}]`)
41
- * .orderBy(sql`concat(first_name, ' ', last_name)`)
40
+ * .where('nicknames', '@>', sql<string[]>`ARRAY[${sql.join(nicknames)}]`)
41
+ * .orderBy(sql<string>`concat(first_name, ' ', last_name)`)
42
42
  * .execute()
43
43
  * ```
44
44
  *
@@ -63,7 +63,7 @@ export interface Sql {
63
63
  *
64
64
  * ```ts
65
65
  * const petName = db.selectFrom('pet').select('name').limit(1)
66
- * const fullName = sql`concat(first_name, ' ', last_name)`
66
+ * const fullName = sql<string>`concat(first_name, ' ', last_name)`
67
67
  *
68
68
  * sql`
69
69
  * select ${fullName} as full_name, ${petName} as pet_name
@@ -301,7 +301,7 @@ export interface Sql {
301
301
  * return db
302
302
  * .selectFrom('person')
303
303
  * .selectAll()
304
- * .where('nicknames', '@>', sql`ARRAY[${sql.join(nicknames)}]`)
304
+ * .where('nicknames', '@>', sql<string[]>`ARRAY[${sql.join(nicknames)}]`)
305
305
  * .execute()
306
306
  * }
307
307
  * ```
@@ -4,6 +4,7 @@ exports.AlteredColumnBuilder = exports.AlterColumnBuilder = void 0;
4
4
  const alter_column_node_js_1 = require("../operation-node/alter-column-node.js");
5
5
  const data_type_parser_js_1 = require("../parser/data-type-parser.js");
6
6
  const default_value_parser_js_1 = require("../parser/default-value-parser.js");
7
+ const prevent_await_js_1 = require("../util/prevent-await.js");
7
8
  class AlterColumnBuilder {
8
9
  #column;
9
10
  constructor(column) {
@@ -33,6 +34,7 @@ class AlterColumnBuilder {
33
34
  }
34
35
  }
35
36
  exports.AlterColumnBuilder = AlterColumnBuilder;
37
+ (0, prevent_await_js_1.preventAwait)(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
36
38
  /**
37
39
  * Allows us to force consumers to do exactly one alteration to a column.
38
40
  *
@@ -58,3 +60,4 @@ class AlteredColumnBuilder {
58
60
  }
59
61
  }
60
62
  exports.AlteredColumnBuilder = AlteredColumnBuilder;
63
+ (0, prevent_await_js_1.preventAwait)(AlteredColumnBuilder, "don't await AlteredColumnBuilder instances");
@@ -72,7 +72,7 @@ export declare class AlterTableAddIndexBuilder implements OperationNodeSource, C
72
72
  * await db.schema
73
73
  * .alterTable('person')
74
74
  * .addIndex('person_first_name_index')
75
- * .expression(sql`(first_name < 'Sami')`)
75
+ * .expression(sql<boolean>`(first_name < 'Sami')`)
76
76
  * .execute()
77
77
  * ```
78
78
  *
@@ -99,7 +99,7 @@ class AlterTableAddIndexBuilder {
99
99
  * await db.schema
100
100
  * .alterTable('person')
101
101
  * .addIndex('person_first_name_index')
102
- * .expression(sql`(first_name < 'Sami')`)
102
+ * .expression(sql<boolean>`(first_name < 'Sami')`)
103
103
  * .execute()
104
104
  * ```
105
105
  *
@@ -203,6 +203,7 @@ class AlterTableBuilder {
203
203
  }
204
204
  }
205
205
  exports.AlterTableBuilder = AlterTableBuilder;
206
+ (0, prevent_await_js_1.preventAwait)(AlterTableBuilder, "don't await AlterTableBuilder instances");
206
207
  class AlterTableColumnAlteringBuilder {
207
208
  #props;
208
209
  constructor(props) {
@@ -252,6 +253,4 @@ class AlterTableColumnAlteringBuilder {
252
253
  }
253
254
  }
254
255
  exports.AlterTableColumnAlteringBuilder = AlterTableColumnAlteringBuilder;
255
- (0, prevent_await_js_1.preventAwait)(AlterTableBuilder, "don't await AlterTableBuilder instances");
256
- (0, prevent_await_js_1.preventAwait)(alter_column_builder_js_1.AlterColumnBuilder, "don't await AlterColumnBuilder instances");
257
256
  (0, prevent_await_js_1.preventAwait)(AlterTableColumnAlteringBuilder, "don't await AlterTableColumnAlteringBuilder instances directly. To execute the query you need to call `execute`");
@@ -220,6 +220,11 @@ export declare class ColumnDefinitionBuilder implements OperationNodeSource {
220
220
  * ```
221
221
  */
222
222
  nullsNotDistinct(): ColumnDefinitionBuilder;
223
+ /**
224
+ * Adds `if not exists` specifier.
225
+ * This only works for PostgreSQL.
226
+ */
227
+ ifNotExists(): ColumnDefinitionBuilder;
223
228
  /**
224
229
  * This can be used to add any additional SQL to the end of the column definition.
225
230
  *
@@ -299,6 +299,13 @@ class ColumnDefinitionBuilder {
299
299
  nullsNotDistinct() {
300
300
  return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { nullsNotDistinct: true }));
301
301
  }
302
+ /**
303
+ * Adds `if not exists` specifier.
304
+ * This only works for PostgreSQL.
305
+ */
306
+ ifNotExists() {
307
+ return new ColumnDefinitionBuilder(column_definition_node_js_1.ColumnDefinitionNode.cloneWith(this.#node, { ifNotExists: true }));
308
+ }
302
309
  /**
303
310
  * This can be used to add any additional SQL to the end of the column definition.
304
311
  *
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.assertIsString = exports.assertNotNullOrUndefined = void 0;
3
+ exports.assertNotNullOrUndefined = assertNotNullOrUndefined;
4
+ exports.assertIsString = assertIsString;
4
5
  function assertNotNullOrUndefined(value) {
5
6
  if (value === null || value === undefined) {
6
7
  throw new Error(`${value} must not be null or undefined`);
7
8
  }
8
9
  }
9
- exports.assertNotNullOrUndefined = assertNotNullOrUndefined;
10
10
  function assertIsString(value) {
11
11
  if (typeof value !== 'string') {
12
12
  throw new Error(`${value} must be a string`);
13
13
  }
14
14
  }
15
- exports.assertIsString = assertIsString;
@@ -1,8 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isCompilable = void 0;
3
+ exports.isCompilable = isCompilable;
4
4
  const object_utils_js_1 = require("./object-utils.js");
5
5
  function isCompilable(value) {
6
6
  return (0, object_utils_js_1.isObject)(value) && (0, object_utils_js_1.isFunction)(value.compile);
7
7
  }
8
- exports.isCompilable = isCompilable;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getJsonObjectArgs = void 0;
3
+ exports.getJsonObjectArgs = getJsonObjectArgs;
4
4
  const expression_wrapper_js_1 = require("../expression/expression-wrapper.js");
5
5
  const alias_node_js_1 = require("../operation-node/alias-node.js");
6
6
  const column_node_js_1 = require("../operation-node/column-node.js");
@@ -26,7 +26,6 @@ function getJsonObjectArgs(node, table) {
26
26
  }
27
27
  return args;
28
28
  }
29
- exports.getJsonObjectArgs = getJsonObjectArgs;
30
29
  function colName(col) {
31
30
  return new expression_wrapper_js_1.ExpressionWrapper(value_node_js_1.ValueNode.createImmediate(col));
32
31
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.logOnce = void 0;
3
+ exports.logOnce = logOnce;
4
4
  const LOGGED_MESSAGES = new Set();
5
5
  /**
6
6
  * Use for system-level logging, such as deprecation messages.
@@ -13,4 +13,3 @@ function logOnce(message) {
13
13
  LOGGED_MESSAGES.add(message);
14
14
  console.log(message);
15
15
  }
16
- exports.logOnce = logOnce;
@@ -1,6 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.compare = exports.noop = exports.isReadonlyArray = exports.asReadonlyArray = exports.asArray = exports.freeze = exports.getLast = exports.isPlainObject = exports.isArrayBufferOrView = exports.isObject = exports.isFunction = exports.isBuffer = exports.isBigInt = exports.isDate = exports.isNull = exports.isBoolean = exports.isNumber = exports.isString = exports.isUndefined = exports.isEmpty = void 0;
3
+ exports.isEmpty = isEmpty;
4
+ exports.isUndefined = isUndefined;
5
+ exports.isString = isString;
6
+ exports.isNumber = isNumber;
7
+ exports.isBoolean = isBoolean;
8
+ exports.isNull = isNull;
9
+ exports.isDate = isDate;
10
+ exports.isBigInt = isBigInt;
11
+ exports.isBuffer = isBuffer;
12
+ exports.isFunction = isFunction;
13
+ exports.isObject = isObject;
14
+ exports.isArrayBufferOrView = isArrayBufferOrView;
15
+ exports.isPlainObject = isPlainObject;
16
+ exports.getLast = getLast;
17
+ exports.freeze = freeze;
18
+ exports.asArray = asArray;
19
+ exports.asReadonlyArray = asReadonlyArray;
20
+ exports.isReadonlyArray = isReadonlyArray;
21
+ exports.noop = noop;
22
+ exports.compare = compare;
4
23
  function isEmpty(obj) {
5
24
  if (Array.isArray(obj) || isString(obj) || isBuffer(obj)) {
6
25
  return obj.length === 0;
@@ -10,69 +29,60 @@ function isEmpty(obj) {
10
29
  }
11
30
  return false;
12
31
  }
13
- exports.isEmpty = isEmpty;
14
32
  function isUndefined(obj) {
15
33
  return typeof obj === 'undefined' || obj === undefined;
16
34
  }
17
- exports.isUndefined = isUndefined;
18
35
  function isString(obj) {
19
36
  return typeof obj === 'string';
20
37
  }
21
- exports.isString = isString;
22
38
  function isNumber(obj) {
23
39
  return typeof obj === 'number';
24
40
  }
25
- exports.isNumber = isNumber;
26
41
  function isBoolean(obj) {
27
42
  return typeof obj === 'boolean';
28
43
  }
29
- exports.isBoolean = isBoolean;
30
44
  function isNull(obj) {
31
45
  return obj === null;
32
46
  }
33
- exports.isNull = isNull;
34
47
  function isDate(obj) {
35
48
  return obj instanceof Date;
36
49
  }
37
- exports.isDate = isDate;
38
50
  function isBigInt(obj) {
39
51
  return typeof obj === 'bigint';
40
52
  }
41
- exports.isBigInt = isBigInt;
42
53
  // Don't change the returnd type to `obj is Buffer` to not create a
43
54
  // hard dependency to node.
44
55
  function isBuffer(obj) {
45
56
  return typeof Buffer !== 'undefined' && Buffer.isBuffer(obj);
46
57
  }
47
- exports.isBuffer = isBuffer;
48
58
  function isFunction(obj) {
49
59
  return typeof obj === 'function';
50
60
  }
51
- exports.isFunction = isFunction;
52
61
  function isObject(obj) {
53
62
  return typeof obj === 'object' && obj !== null;
54
63
  }
55
- exports.isObject = isObject;
56
64
  function isArrayBufferOrView(obj) {
57
65
  return obj instanceof ArrayBuffer || ArrayBuffer.isView(obj);
58
66
  }
59
- exports.isArrayBufferOrView = isArrayBufferOrView;
60
67
  function isPlainObject(obj) {
61
- return (isObject(obj) &&
62
- !Array.isArray(obj) &&
63
- !isDate(obj) &&
64
- !isBuffer(obj) &&
65
- !isArrayBufferOrView(obj));
68
+ if (!isObject(obj) || getTag(obj) !== '[object Object]') {
69
+ return false;
70
+ }
71
+ if (Object.getPrototypeOf(obj) === null) {
72
+ return true;
73
+ }
74
+ let proto = obj;
75
+ while (Object.getPrototypeOf(proto) !== null) {
76
+ proto = Object.getPrototypeOf(proto);
77
+ }
78
+ return Object.getPrototypeOf(obj) === proto;
66
79
  }
67
- exports.isPlainObject = isPlainObject;
68
80
  function getLast(arr) {
69
81
  return arr[arr.length - 1];
70
82
  }
71
- exports.getLast = getLast;
72
83
  function freeze(obj) {
73
84
  return Object.freeze(obj);
74
85
  }
75
- exports.freeze = freeze;
76
86
  function asArray(arg) {
77
87
  if (isReadonlyArray(arg)) {
78
88
  return arg;
@@ -81,7 +91,6 @@ function asArray(arg) {
81
91
  return [arg];
82
92
  }
83
93
  }
84
- exports.asArray = asArray;
85
94
  function asReadonlyArray(arg) {
86
95
  if (isReadonlyArray(arg)) {
87
96
  return arg;
@@ -90,15 +99,12 @@ function asReadonlyArray(arg) {
90
99
  return freeze([arg]);
91
100
  }
92
101
  }
93
- exports.asReadonlyArray = asReadonlyArray;
94
102
  function isReadonlyArray(arg) {
95
103
  return Array.isArray(arg);
96
104
  }
97
- exports.isReadonlyArray = isReadonlyArray;
98
105
  function noop(obj) {
99
106
  return obj;
100
107
  }
101
- exports.noop = noop;
102
108
  function compare(obj1, obj2) {
103
109
  if (isReadonlyArray(obj1) && isReadonlyArray(obj2)) {
104
110
  return compareArrays(obj1, obj2);
@@ -108,7 +114,6 @@ function compare(obj1, obj2) {
108
114
  }
109
115
  return obj1 === obj2;
110
116
  }
111
- exports.compare = compare;
112
117
  function compareArrays(arr1, arr2) {
113
118
  if (arr1.length !== arr2.length) {
114
119
  return false;
@@ -148,3 +153,10 @@ function compareGenericObjects(obj1, obj2) {
148
153
  }
149
154
  return true;
150
155
  }
156
+ const toString = Object.prototype.toString;
157
+ function getTag(value) {
158
+ if (value == null) {
159
+ return value === undefined ? '[object Undefined]' : '[object Null]';
160
+ }
161
+ return toString.call(value);
162
+ }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.performanceNow = void 0;
3
+ exports.performanceNow = performanceNow;
4
4
  const object_utils_js_1 = require("./object-utils.js");
5
5
  function performanceNow() {
6
6
  if (typeof performance !== 'undefined' && (0, object_utils_js_1.isFunction)(performance.now)) {
@@ -10,4 +10,3 @@ function performanceNow() {
10
10
  return Date.now();
11
11
  }
12
12
  }
13
- exports.performanceNow = performanceNow;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.preventAwait = void 0;
3
+ exports.preventAwait = preventAwait;
4
4
  function preventAwait(clazz, message) {
5
5
  Object.defineProperties(clazz.prototype, {
6
6
  then: {
@@ -11,4 +11,3 @@ function preventAwait(clazz, message) {
11
11
  },
12
12
  });
13
13
  }
14
- exports.preventAwait = preventAwait;
@@ -1,11 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createQueryId = void 0;
3
+ exports.createQueryId = createQueryId;
4
4
  const random_string_js_1 = require("./random-string.js");
5
5
  function createQueryId() {
6
6
  return new LazyQueryId();
7
7
  }
8
- exports.createQueryId = createQueryId;
9
8
  class LazyQueryId {
10
9
  #queryId;
11
10
  get queryId() {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.randomString = void 0;
3
+ exports.randomString = randomString;
4
4
  const CHARS = [
5
5
  'A',
6
6
  'B',
@@ -72,7 +72,6 @@ function randomString(length) {
72
72
  }
73
73
  return chars;
74
74
  }
75
- exports.randomString = randomString;
76
75
  function randomChar() {
77
76
  return CHARS[~~(Math.random() * CHARS.length)];
78
77
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requireAllProps = void 0;
3
+ exports.requireAllProps = requireAllProps;
4
4
  /**
5
5
  * Helper function to check listed properties according to given type. Check if all properties has been used when object is initialised.
6
6
  *
@@ -37,4 +37,3 @@ exports.requireAllProps = void 0;
37
37
  function requireAllProps(obj) {
38
38
  return obj;
39
39
  }
40
- exports.requireAllProps = requireAllProps;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.extendStackTrace = void 0;
3
+ exports.extendStackTrace = extendStackTrace;
4
4
  const object_utils_js_1 = require("./object-utils.js");
5
5
  function extendStackTrace(err, stackError) {
6
6
  if (isStackHolder(err) && stackError.stack) {
@@ -11,7 +11,6 @@ function extendStackTrace(err, stackError) {
11
11
  }
12
12
  return err;
13
13
  }
14
- exports.extendStackTrace = extendStackTrace;
15
14
  function isStackHolder(obj) {
16
15
  return (0, object_utils_js_1.isObject)(obj) && (0, object_utils_js_1.isString)(obj.stack);
17
16
  }
@@ -2,7 +2,7 @@ import { Kysely } from '../kysely.js';
2
2
  import { DialectAdapter, MigrationLockOptions } from './dialect-adapter.js';
3
3
  /**
4
4
  * A basic implementation of `DialectAdapter` with sensible default values.
5
- * 3rd party dialects can extend this instead of implementing the `DialectAdapter`
5
+ * Third-party dialects can extend this instead of implementing the `DialectAdapter`
6
6
  * interface from scratch. That way all new settings will get default values when
7
7
  * they are added and there will be less breaking changes.
8
8
  */
@@ -26,6 +26,7 @@ export declare abstract class DialectAdapterBase implements DialectAdapter {
26
26
  * updates and deletes.
27
27
  */
28
28
  get supportsReturning(): boolean;
29
+ get supportsOutput(): boolean;
29
30
  /**
30
31
  * This method is used to acquire a lock for the migrations so that
31
32
  * it's not possible for two migration operations to run in parallel.
@@ -1,7 +1,7 @@
1
1
  /// <reference types="./dialect-adapter-base.d.ts" />
2
2
  /**
3
3
  * A basic implementation of `DialectAdapter` with sensible default values.
4
- * 3rd party dialects can extend this instead of implementing the `DialectAdapter`
4
+ * Third-party dialects can extend this instead of implementing the `DialectAdapter`
5
5
  * interface from scratch. That way all new settings will get default values when
6
6
  * they are added and there will be less breaking changes.
7
7
  */
@@ -15,4 +15,7 @@ export class DialectAdapterBase {
15
15
  get supportsReturning() {
16
16
  return false;
17
17
  }
18
+ get supportsOutput() {
19
+ return false;
20
+ }
18
21
  }
@@ -27,6 +27,11 @@ export interface DialectAdapter {
27
27
  * updates and deletes.
28
28
  */
29
29
  readonly supportsReturning: boolean;
30
+ /**
31
+ * Whether or not this dialect supports the `output` clause in inserts
32
+ * updates and deletes.
33
+ */
34
+ readonly supportsOutput?: boolean;
30
35
  /**
31
36
  * This method is used to acquire a lock for the migrations so that
32
37
  * it's not possible for two migration operations to run in parallel.
@@ -15,11 +15,7 @@ export declare class MssqlAdapter extends DialectAdapterBase {
15
15
  * If this is true, migrations are executed inside a transaction.
16
16
  */
17
17
  get supportsTransactionalDdl(): boolean;
18
- /**
19
- * Whether or not this dialect supports the `returning` in inserts
20
- * updates and deletes.
21
- */
22
- get supportsReturning(): boolean;
18
+ get supportsOutput(): boolean;
23
19
  /**
24
20
  * This method is used to acquire a lock for the migrations so that
25
21
  * it's not possible for two migration operations to run in parallel.