kysely 0.27.4 → 0.27.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 (209) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/deno.check.d.ts +86 -0
  4. package/deno.check.json +21 -0
  5. package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
  6. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
  7. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  9. package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
  10. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  11. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  12. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  13. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  14. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  15. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  16. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  17. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  18. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  19. package/dist/cjs/driver/dummy-driver.js +13 -12
  20. package/dist/cjs/dynamic/dynamic.d.ts +6 -6
  21. package/dist/cjs/dynamic/dynamic.js +6 -6
  22. package/dist/cjs/expression/expression-builder.d.ts +152 -61
  23. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  24. package/dist/cjs/expression/expression.d.ts +40 -5
  25. package/dist/cjs/helpers/mssql.d.ts +74 -14
  26. package/dist/cjs/helpers/mssql.js +74 -14
  27. package/dist/cjs/helpers/mysql.d.ts +14 -10
  28. package/dist/cjs/helpers/mysql.js +14 -10
  29. package/dist/cjs/helpers/postgres.d.ts +7 -4
  30. package/dist/cjs/helpers/postgres.js +7 -4
  31. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  32. package/dist/cjs/helpers/sqlite.js +41 -16
  33. package/dist/cjs/kysely.d.ts +99 -41
  34. package/dist/cjs/kysely.js +60 -36
  35. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  36. package/dist/cjs/migration/file-migration-provider.js +2 -2
  37. package/dist/cjs/migration/migrator.d.ts +82 -14
  38. package/dist/cjs/migration/migrator.js +82 -14
  39. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  40. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  41. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/data-type-node.js +12 -0
  43. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
  46. package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
  47. package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
  48. package/dist/cjs/operation-node/query-node.d.ts +4 -0
  49. package/dist/cjs/operation-node/query-node.js +8 -0
  50. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  51. package/dist/cjs/operation-node/select-query-node.js +0 -8
  52. package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
  53. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  54. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
  55. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  56. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  57. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  58. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  59. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  60. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  61. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  62. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  63. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  64. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  65. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  66. package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
  67. package/dist/cjs/query-builder/delete-query-builder.js +76 -26
  68. package/dist/cjs/query-builder/function-module.d.ts +35 -88
  69. package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
  70. package/dist/cjs/query-builder/insert-query-builder.js +188 -52
  71. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  72. package/dist/cjs/query-builder/insert-result.js +10 -5
  73. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  74. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  75. package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
  76. package/dist/cjs/query-builder/merge-query-builder.js +68 -6
  77. package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
  78. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  79. package/dist/cjs/query-builder/output-interface.d.ts +50 -7
  80. package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
  81. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
  83. package/dist/cjs/query-builder/select-query-builder.js +7 -7
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
  85. package/dist/cjs/query-builder/update-query-builder.js +75 -10
  86. package/dist/cjs/query-builder/update-result.d.ts +2 -2
  87. package/dist/cjs/query-builder/update-result.js +2 -2
  88. package/dist/cjs/query-builder/where-interface.d.ts +5 -1
  89. package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
  90. package/dist/cjs/query-creator.d.ts +66 -18
  91. package/dist/cjs/query-creator.js +2 -2
  92. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  93. package/dist/cjs/raw-builder/sql.d.ts +26 -7
  94. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  95. package/dist/cjs/schema/alter-column-builder.js +17 -3
  96. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
  97. package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
  98. package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
  99. package/dist/cjs/schema/column-definition-builder.js +283 -26
  100. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  101. package/dist/cjs/schema/create-table-builder.js +86 -33
  102. package/dist/cjs/util/column-type.d.ts +5 -9
  103. package/dist/cjs/util/require-all-props.d.ts +4 -2
  104. package/dist/cjs/util/require-all-props.js +4 -2
  105. package/dist/cjs/util/streamable.d.ts +1 -1
  106. package/dist/cjs/util/type-utils.d.ts +4 -2
  107. package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
  108. package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
  109. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
  110. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  111. package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
  112. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  113. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  114. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  115. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  116. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  117. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  118. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  119. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  120. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  121. package/dist/esm/driver/dummy-driver.js +13 -12
  122. package/dist/esm/dynamic/dynamic.d.ts +6 -6
  123. package/dist/esm/dynamic/dynamic.js +6 -6
  124. package/dist/esm/expression/expression-builder.d.ts +152 -61
  125. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  126. package/dist/esm/expression/expression.d.ts +40 -5
  127. package/dist/esm/helpers/mssql.d.ts +74 -14
  128. package/dist/esm/helpers/mssql.js +74 -14
  129. package/dist/esm/helpers/mysql.d.ts +14 -10
  130. package/dist/esm/helpers/mysql.js +14 -10
  131. package/dist/esm/helpers/postgres.d.ts +7 -4
  132. package/dist/esm/helpers/postgres.js +7 -4
  133. package/dist/esm/helpers/sqlite.d.ts +41 -16
  134. package/dist/esm/helpers/sqlite.js +41 -16
  135. package/dist/esm/kysely.d.ts +99 -41
  136. package/dist/esm/kysely.js +60 -36
  137. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  138. package/dist/esm/migration/file-migration-provider.js +2 -2
  139. package/dist/esm/migration/migrator.d.ts +82 -14
  140. package/dist/esm/migration/migrator.js +82 -14
  141. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  142. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  143. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  144. package/dist/esm/operation-node/data-type-node.js +12 -0
  145. package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
  146. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  147. package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
  148. package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
  149. package/dist/esm/operation-node/operation-node-transformer.js +14 -3
  150. package/dist/esm/operation-node/query-node.d.ts +4 -0
  151. package/dist/esm/operation-node/query-node.js +8 -0
  152. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  153. package/dist/esm/operation-node/select-query-node.js +0 -8
  154. package/dist/esm/operation-node/update-query-node.d.ts +1 -0
  155. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  156. package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
  157. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  158. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  159. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  160. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  161. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  162. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  163. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  164. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  165. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  166. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  167. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  168. package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
  169. package/dist/esm/query-builder/delete-query-builder.js +76 -26
  170. package/dist/esm/query-builder/function-module.d.ts +35 -88
  171. package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
  172. package/dist/esm/query-builder/insert-query-builder.js +188 -52
  173. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  174. package/dist/esm/query-builder/insert-result.js +10 -5
  175. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  176. package/dist/esm/query-builder/json-path-builder.js +8 -5
  177. package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
  178. package/dist/esm/query-builder/merge-query-builder.js +68 -6
  179. package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
  180. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  181. package/dist/esm/query-builder/output-interface.d.ts +50 -7
  182. package/dist/esm/query-builder/returning-interface.d.ts +5 -5
  183. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  184. package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
  185. package/dist/esm/query-builder/select-query-builder.js +7 -7
  186. package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
  187. package/dist/esm/query-builder/update-query-builder.js +75 -10
  188. package/dist/esm/query-builder/update-result.d.ts +2 -2
  189. package/dist/esm/query-builder/update-result.js +2 -2
  190. package/dist/esm/query-builder/where-interface.d.ts +5 -1
  191. package/dist/esm/query-compiler/default-query-compiler.js +20 -0
  192. package/dist/esm/query-creator.d.ts +66 -18
  193. package/dist/esm/query-creator.js +2 -2
  194. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  195. package/dist/esm/raw-builder/sql.d.ts +26 -7
  196. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  197. package/dist/esm/schema/alter-column-builder.js +17 -3
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
  199. package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
  200. package/dist/esm/schema/column-definition-builder.d.ts +283 -26
  201. package/dist/esm/schema/column-definition-builder.js +283 -26
  202. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  203. package/dist/esm/schema/create-table-builder.js +86 -33
  204. package/dist/esm/util/column-type.d.ts +5 -9
  205. package/dist/esm/util/require-all-props.d.ts +4 -2
  206. package/dist/esm/util/require-all-props.js +4 -2
  207. package/dist/esm/util/streamable.d.ts +1 -1
  208. package/dist/esm/util/type-utils.d.ts +4 -2
  209. package/package.json +28 -23
@@ -77,7 +77,7 @@ class SelectQueryBuilderImpl {
77
77
  modifyEnd(modifier) {
78
78
  return new SelectQueryBuilderImpl({
79
79
  ...this.#props,
80
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.createWithExpression(modifier.toOperationNode())),
80
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.createWithExpression(modifier.toOperationNode())),
81
81
  });
82
82
  }
83
83
  distinct() {
@@ -89,37 +89,37 @@ class SelectQueryBuilderImpl {
89
89
  forUpdate(of) {
90
90
  return new SelectQueryBuilderImpl({
91
91
  ...this.#props,
92
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForUpdate', of ? asArray(of).map(parseTable) : undefined)),
92
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForUpdate', of ? asArray(of).map(parseTable) : undefined)),
93
93
  });
94
94
  }
95
95
  forShare(of) {
96
96
  return new SelectQueryBuilderImpl({
97
97
  ...this.#props,
98
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForShare', of ? asArray(of).map(parseTable) : undefined)),
98
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForShare', of ? asArray(of).map(parseTable) : undefined)),
99
99
  });
100
100
  }
101
101
  forKeyShare(of) {
102
102
  return new SelectQueryBuilderImpl({
103
103
  ...this.#props,
104
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForKeyShare', of ? asArray(of).map(parseTable) : undefined)),
104
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForKeyShare', of ? asArray(of).map(parseTable) : undefined)),
105
105
  });
106
106
  }
107
107
  forNoKeyUpdate(of) {
108
108
  return new SelectQueryBuilderImpl({
109
109
  ...this.#props,
110
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForNoKeyUpdate', of ? asArray(of).map(parseTable) : undefined)),
110
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForNoKeyUpdate', of ? asArray(of).map(parseTable) : undefined)),
111
111
  });
112
112
  }
113
113
  skipLocked() {
114
114
  return new SelectQueryBuilderImpl({
115
115
  ...this.#props,
116
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('SkipLocked')),
116
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('SkipLocked')),
117
117
  });
118
118
  }
119
119
  noWait() {
120
120
  return new SelectQueryBuilderImpl({
121
121
  ...this.#props,
122
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('NoWait')),
122
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('NoWait')),
123
123
  });
124
124
  }
125
125
  selectAll(table) {
@@ -60,6 +60,8 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
60
60
  * you can always use:
61
61
  *
62
62
  * ```ts
63
+ * import { sql } from 'kysely'
64
+ *
63
65
  * sql`your operator`
64
66
  * ```
65
67
  *
@@ -71,7 +73,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
71
73
  * const persons = await db
72
74
  * .selectFrom('person')
73
75
  * .selectAll()
74
- * .where('id', 'in', ['1', '2', '3'])
76
+ * .where('id', 'in', [1, 2, 3])
75
77
  * .execute()
76
78
  * ```
77
79
  *
@@ -319,6 +321,8 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
319
321
  * import { sql } from 'kysely'
320
322
  * const { ref } = db.dynamic
321
323
  *
324
+ * const columnFromUserInput: string = 'id'
325
+ *
322
326
  * const persons = await db
323
327
  * .selectFrom('person')
324
328
  * .selectAll()
@@ -554,7 +558,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
554
558
  * ```ts
555
559
  * await db.selectFrom('person')
556
560
  * .innerJoin(
557
- * qb.selectFrom('pet')
561
+ * db.selectFrom('pet')
558
562
  * .select(['owner_id', 'name'])
559
563
  * .where('name', '=', 'Doggo')
560
564
  * .as('doggos'),
@@ -603,15 +607,17 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
603
607
  * Update the first 2 rows in the 'person' table:
604
608
  *
605
609
  * ```ts
606
- * return await db
610
+ * await db
607
611
  * .updateTable('person')
608
612
  * .set({ first_name: 'Foo' })
609
- * .limit(2);
613
+ * .limit(2)
614
+ * .execute()
610
615
  * ```
611
616
  *
612
617
  * The generated SQL (MySQL):
618
+ *
613
619
  * ```sql
614
- * update `person` set `first_name` = 'Foo' limit 2
620
+ * update `person` set `first_name` = ? limit ?
615
621
  * ```
616
622
  */
617
623
  limit(limit: ValueExpression<DB, TB, number>): UpdateQueryBuilder<DB, UT, TB, O>;
@@ -643,7 +649,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
643
649
  * first_name: 'Jennifer',
644
650
  * last_name: 'Aniston'
645
651
  * })
646
- * .where('id', '=', '1')
652
+ * .where('id', '=', 1)
647
653
  * .executeTakeFirst()
648
654
  *
649
655
  * console.log(result.numUpdatedRows)
@@ -668,7 +674,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
668
674
  * first_name: eb.selectFrom('pet').select('name').limit(1),
669
675
  * last_name: 'updated',
670
676
  * }))
671
- * .where('id', '=', '1')
677
+ * .where('id', '=', 1)
672
678
  * .executeTakeFirst()
673
679
  *
674
680
  * console.log(result.numUpdatedRows)
@@ -690,13 +696,15 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
690
696
  * (or other target) and the second as the value:
691
697
  *
692
698
  * ```ts
699
+ * import { sql } from 'kysely'
700
+ *
693
701
  * const result = await db
694
702
  * .updateTable('person')
695
703
  * .set('first_name', 'Foo')
696
704
  * // As always, both arguments can be arbitrary expressions or
697
705
  * // callbacks that give you access to an expression builder:
698
- * .set(sql<string>`address['postalCode']`, (eb) => eb.val('61710))
699
- * .where('id', '=', '1')
706
+ * .set(sql<string>`address['postalCode']`, (eb) => eb.val('61710'))
707
+ * .where('id', '=', 1)
700
708
  * .executeTakeFirst()
701
709
  * ```
702
710
  *
@@ -781,20 +789,20 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
781
789
  * last_name: 'Aniston'
782
790
  * })
783
791
  * .returning('id')
784
- * .executeTakeFirst()
792
+ * .executeTakeFirstOrThrow()
785
793
  * ```
786
794
  *
787
795
  * Return multiple columns:
788
796
  *
789
797
  * ```ts
790
- * const { id, first_name } = await db
798
+ * const { id, last_name } = await db
791
799
  * .insertInto('person')
792
800
  * .values({
793
801
  * first_name: 'Jennifer',
794
802
  * last_name: 'Aniston'
795
803
  * })
796
804
  * .returning(['id', 'last_name'])
797
- * .executeTakeFirst()
805
+ * .executeTakeFirstOrThrow()
798
806
  * ```
799
807
  *
800
808
  * Return arbitrary expressions:
@@ -811,9 +819,9 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
811
819
  * .returning((eb) => [
812
820
  * 'id as id',
813
821
  * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
814
- * eb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
822
+ * eb.selectFrom('pet').select('pet.id').limit(1).as('first_pet_id')
815
823
  * ])
816
- * .executeTakeFirst()
824
+ * .executeTakeFirstOrThrow()
817
825
  * ```
818
826
  */
819
827
  returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
@@ -846,15 +854,24 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
846
854
  * .output('inserted.id')
847
855
  * .values({
848
856
  * first_name: 'Jennifer',
849
- * last_name: 'Aniston'
857
+ * last_name: 'Aniston',
858
+ * gender: 'female',
850
859
  * })
851
- * .executeTakeFirst()
860
+ * .executeTakeFirstOrThrow()
861
+ * ```
862
+ *
863
+ * The generated SQL (MSSQL):
864
+ *
865
+ * ```sql
866
+ * insert into "person" ("first_name", "last_name", "gender")
867
+ * output "inserted"."id"
868
+ * values (@1, @2, @3)
852
869
  * ```
853
870
  *
854
871
  * Return multiple columns:
855
872
  *
856
873
  * ```ts
857
- * const { id, first_name } = await db
874
+ * const { old_first_name, old_last_name, new_first_name, new_last_name } = await db
858
875
  * .updateTable('person')
859
876
  * .set({ first_name: 'John', last_name: 'Doe' })
860
877
  * .output([
@@ -864,7 +881,19 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
864
881
  * 'inserted.last_name as new_last_name',
865
882
  * ])
866
883
  * .where('created_at', '<', new Date())
867
- * .executeTakeFirst()
884
+ * .executeTakeFirstOrThrow()
885
+ * ```
886
+ *
887
+ * The generated SQL (MSSQL):
888
+ *
889
+ * ```sql
890
+ * update "person"
891
+ * set "first_name" = @1, "last_name" = @2
892
+ * output "deleted"."first_name" as "old_first_name",
893
+ * "deleted"."last_name" as "old_last_name",
894
+ * "inserted"."first_name" as "new_first_name",
895
+ * "inserted"."last_name" as "new_last_name"
896
+ * where "created_at" < @3
868
897
  * ```
869
898
  *
870
899
  * Return arbitrary expressions:
@@ -872,11 +901,19 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
872
901
  * ```ts
873
902
  * import { sql } from 'kysely'
874
903
  *
875
- * const { id, full_name } = await db
904
+ * const { full_name } = await db
876
905
  * .deleteFrom('person')
877
- * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
906
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name'))
878
907
  * .where('created_at', '<', new Date())
879
- * .executeTakeFirst()
908
+ * .executeTakeFirstOrThrow()
909
+ * ```
910
+ *
911
+ * The generated SQL (MSSQL):
912
+ *
913
+ * ```sql
914
+ * delete from "person"
915
+ * output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"
916
+ * where "created_at" < @1
880
917
  * ```
881
918
  *
882
919
  * Return the action performed on the row:
@@ -897,7 +934,21 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
897
934
  * 'inserted.id as inserted_id',
898
935
  * 'deleted.id as deleted_id',
899
936
  * ])
937
+ * .execute()
938
+ * ```
939
+ *
940
+ * The generated SQL (MSSQL):
941
+ *
942
+ * ```sql
943
+ * merge into "person"
944
+ * using "pet" on "pet"."owner_id" = "person"."id"
945
+ * when matched then delete
946
+ * when not matched then
947
+ * insert ("first_name", "last_name", "gender")
948
+ * values (@1, @2, @3)
949
+ * output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
900
950
  * ```
951
+ *
901
952
  */
902
953
  output<OE extends OutputExpression<DB, UT>>(selections: readonly OE[]): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
903
954
  output<CB extends OutputCallback<DB, TB>>(callback: CB): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
@@ -909,6 +960,30 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
909
960
  * Also see the {@link output} method.
910
961
  */
911
962
  outputAll(table: OutputPrefix): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, TB, O>>;
963
+ /**
964
+ * This can be used to add any additional SQL to the end of the query.
965
+ *
966
+ * ### Examples
967
+ *
968
+ * ```ts
969
+ * import { sql } from 'kysely'
970
+ *
971
+ * await db.updateTable('person')
972
+ * .set({ age: 39 })
973
+ * .where('first_name', '=', 'John')
974
+ * .modifyEnd(sql.raw('-- This is a comment'))
975
+ * .execute()
976
+ * ```
977
+ *
978
+ * The generated SQL (MySQL):
979
+ *
980
+ * ```sql
981
+ * update `person`
982
+ * set `age` = 39
983
+ * where `first_name` = "John" -- This is a comment
984
+ * ```
985
+ */
986
+ modifyEnd(modifier: Expression<any>): UpdateQueryBuilder<DB, UT, TB, O>;
912
987
  /**
913
988
  * Clears all `returning` clauses from the query.
914
989
  *
@@ -941,11 +1016,18 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
941
1016
  * The next example uses a helper function `log` to log a query:
942
1017
  *
943
1018
  * ```ts
1019
+ * import type { Compilable } from 'kysely'
1020
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
1021
+ *
944
1022
  * function log<T extends Compilable>(qb: T): T {
945
1023
  * console.log(qb.compile())
946
1024
  * return qb
947
1025
  * }
948
1026
  *
1027
+ * const values = {
1028
+ * first_name: 'John',
1029
+ * } satisfies PersonUpdate
1030
+ *
949
1031
  * db.updateTable('person')
950
1032
  * .set(values)
951
1033
  * .$call(log)
@@ -966,7 +1048,9 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
966
1048
  * ### Examples
967
1049
  *
968
1050
  * ```ts
969
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
1051
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
1052
+ *
1053
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
970
1054
  * return await db
971
1055
  * .updateTable('person')
972
1056
  * .set(updates)
@@ -982,11 +1066,11 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
982
1066
  * the code. In the example above the return type of the `updatePerson` function is:
983
1067
  *
984
1068
  * ```ts
985
- * {
1069
+ * Promise<{
986
1070
  * id: number
987
1071
  * first_name: string
988
1072
  * last_name?: string
989
- * }
1073
+ * }>
990
1074
  * ```
991
1075
  */
992
1076
  $if<O2>(condition: boolean, func: (qb: this) => UpdateQueryBuilder<any, any, any, O2>): O2 extends UpdateResult ? UpdateQueryBuilder<DB, UT, TB, UpdateResult> : O2 extends O & infer E ? UpdateQueryBuilder<DB, UT, TB, O & Partial<E>> : UpdateQueryBuilder<DB, UT, TB, Partial<O2>>;
@@ -1015,27 +1099,41 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
1015
1099
  * Turn this code:
1016
1100
  *
1017
1101
  * ```ts
1102
+ * import type { Person } from 'type-editor' // imaginary module
1103
+ *
1104
+ * const id = 1
1105
+ * const now = new Date().toISOString()
1106
+ *
1018
1107
  * const person = await db.updateTable('person')
1019
- * .set({ deletedAt: now })
1108
+ * .set({ deleted_at: now })
1020
1109
  * .where('id', '=', id)
1021
1110
  * .where('nullable_column', 'is not', null)
1022
1111
  * .returningAll()
1023
1112
  * .executeTakeFirstOrThrow()
1024
1113
  *
1025
- * if (person.nullable_column) {
1114
+ * if (isWithNoNullValue(person)) {
1026
1115
  * functionThatExpectsPersonWithNonNullValue(person)
1027
1116
  * }
1117
+ *
1118
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
1119
+ * return person.nullable_column != null
1120
+ * }
1028
1121
  * ```
1029
1122
  *
1030
1123
  * Into this:
1031
1124
  *
1032
1125
  * ```ts
1126
+ * import type { NotNull } from 'kysely'
1127
+ *
1128
+ * const id = 1
1129
+ * const now = new Date().toISOString()
1130
+ *
1033
1131
  * const person = await db.updateTable('person')
1034
- * .set({ deletedAt: now })
1132
+ * .set({ deleted_at: now })
1035
1133
  * .where('id', '=', id)
1036
1134
  * .where('nullable_column', 'is not', null)
1037
1135
  * .returningAll()
1038
- * .$narrowType<{ deletedAt: Date; nullable_column: string }>()
1136
+ * .$narrowType<{ deleted_at: Date; nullable_column: NotNull }>()
1039
1137
  * .executeTakeFirstOrThrow()
1040
1138
  *
1041
1139
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -1065,6 +1163,17 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
1065
1163
  * ### Examples
1066
1164
  *
1067
1165
  * ```ts
1166
+ * import type { PersonUpdate, PetUpdate, Species } from 'type-editor' // imaginary module
1167
+ *
1168
+ * const person = {
1169
+ * id: 1,
1170
+ * gender: 'other',
1171
+ * } satisfies PersonUpdate
1172
+ *
1173
+ * const pet = {
1174
+ * name: 'Fluffy',
1175
+ * } satisfies PetUpdate
1176
+ *
1068
1177
  * const result = await db
1069
1178
  * .with('updated_person', (qb) => qb
1070
1179
  * .updateTable('person')
@@ -1121,7 +1230,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
1121
1230
  * ### Examples
1122
1231
  *
1123
1232
  * ```ts
1124
- * const stream = db.
1233
+ * const stream = db
1125
1234
  * .selectFrom('person')
1126
1235
  * .select(['first_name', 'last_name'])
1127
1236
  * .where('gender', '=', 'other')
@@ -119,15 +119,17 @@ export class UpdateQueryBuilder {
119
119
  * Update the first 2 rows in the 'person' table:
120
120
  *
121
121
  * ```ts
122
- * return await db
122
+ * await db
123
123
  * .updateTable('person')
124
124
  * .set({ first_name: 'Foo' })
125
- * .limit(2);
125
+ * .limit(2)
126
+ * .execute()
126
127
  * ```
127
128
  *
128
129
  * The generated SQL (MySQL):
130
+ *
129
131
  * ```sql
130
- * update `person` set `first_name` = 'Foo' limit 2
132
+ * update `person` set `first_name` = ? limit ?
131
133
  * ```
132
134
  */
133
135
  limit(limit) {
@@ -166,6 +168,35 @@ export class UpdateQueryBuilder {
166
168
  queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
167
169
  });
168
170
  }
171
+ /**
172
+ * This can be used to add any additional SQL to the end of the query.
173
+ *
174
+ * ### Examples
175
+ *
176
+ * ```ts
177
+ * import { sql } from 'kysely'
178
+ *
179
+ * await db.updateTable('person')
180
+ * .set({ age: 39 })
181
+ * .where('first_name', '=', 'John')
182
+ * .modifyEnd(sql.raw('-- This is a comment'))
183
+ * .execute()
184
+ * ```
185
+ *
186
+ * The generated SQL (MySQL):
187
+ *
188
+ * ```sql
189
+ * update `person`
190
+ * set `age` = 39
191
+ * where `first_name` = "John" -- This is a comment
192
+ * ```
193
+ */
194
+ modifyEnd(modifier) {
195
+ return new UpdateQueryBuilder({
196
+ ...this.#props,
197
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
198
+ });
199
+ }
169
200
  /**
170
201
  * Clears all `returning` clauses from the query.
171
202
  *
@@ -203,11 +234,18 @@ export class UpdateQueryBuilder {
203
234
  * The next example uses a helper function `log` to log a query:
204
235
  *
205
236
  * ```ts
237
+ * import type { Compilable } from 'kysely'
238
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
239
+ *
206
240
  * function log<T extends Compilable>(qb: T): T {
207
241
  * console.log(qb.compile())
208
242
  * return qb
209
243
  * }
210
244
  *
245
+ * const values = {
246
+ * first_name: 'John',
247
+ * } satisfies PersonUpdate
248
+ *
211
249
  * db.updateTable('person')
212
250
  * .set(values)
213
251
  * .$call(log)
@@ -230,7 +268,9 @@ export class UpdateQueryBuilder {
230
268
  * ### Examples
231
269
  *
232
270
  * ```ts
233
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
271
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
272
+ *
273
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
234
274
  * return await db
235
275
  * .updateTable('person')
236
276
  * .set(updates)
@@ -246,11 +286,11 @@ export class UpdateQueryBuilder {
246
286
  * the code. In the example above the return type of the `updatePerson` function is:
247
287
  *
248
288
  * ```ts
249
- * {
289
+ * Promise<{
250
290
  * id: number
251
291
  * first_name: string
252
292
  * last_name?: string
253
- * }
293
+ * }>
254
294
  * ```
255
295
  */
256
296
  $if(condition, func) {
@@ -288,27 +328,41 @@ export class UpdateQueryBuilder {
288
328
  * Turn this code:
289
329
  *
290
330
  * ```ts
331
+ * import type { Person } from 'type-editor' // imaginary module
332
+ *
333
+ * const id = 1
334
+ * const now = new Date().toISOString()
335
+ *
291
336
  * const person = await db.updateTable('person')
292
- * .set({ deletedAt: now })
337
+ * .set({ deleted_at: now })
293
338
  * .where('id', '=', id)
294
339
  * .where('nullable_column', 'is not', null)
295
340
  * .returningAll()
296
341
  * .executeTakeFirstOrThrow()
297
342
  *
298
- * if (person.nullable_column) {
343
+ * if (isWithNoNullValue(person)) {
299
344
  * functionThatExpectsPersonWithNonNullValue(person)
300
345
  * }
346
+ *
347
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
348
+ * return person.nullable_column != null
349
+ * }
301
350
  * ```
302
351
  *
303
352
  * Into this:
304
353
  *
305
354
  * ```ts
355
+ * import type { NotNull } from 'kysely'
356
+ *
357
+ * const id = 1
358
+ * const now = new Date().toISOString()
359
+ *
306
360
  * const person = await db.updateTable('person')
307
- * .set({ deletedAt: now })
361
+ * .set({ deleted_at: now })
308
362
  * .where('id', '=', id)
309
363
  * .where('nullable_column', 'is not', null)
310
364
  * .returningAll()
311
- * .$narrowType<{ deletedAt: Date; nullable_column: string }>()
365
+ * .$narrowType<{ deleted_at: Date; nullable_column: NotNull }>()
312
366
  * .executeTakeFirstOrThrow()
313
367
  *
314
368
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -340,6 +394,17 @@ export class UpdateQueryBuilder {
340
394
  * ### Examples
341
395
  *
342
396
  * ```ts
397
+ * import type { PersonUpdate, PetUpdate, Species } from 'type-editor' // imaginary module
398
+ *
399
+ * const person = {
400
+ * id: 1,
401
+ * gender: 'other',
402
+ * } satisfies PersonUpdate
403
+ *
404
+ * const pet = {
405
+ * name: 'Fluffy',
406
+ * } satisfies PetUpdate
407
+ *
343
408
  * const result = await db
344
409
  * .with('updated_person', (qb) => qb
345
410
  * .updateTable('person')
@@ -1,14 +1,14 @@
1
1
  export declare class UpdateResult {
2
2
  /**
3
3
  * The number of rows the update query updated (even if not changed).
4
- */
4
+ */
5
5
  readonly numUpdatedRows: bigint;
6
6
  /**
7
7
  * The number of rows the update query changed.
8
8
  *
9
9
  * This is **optional** and only supported in dialects such as MySQL.
10
10
  * You would probably use {@link numUpdatedRows} in most cases.
11
- */
11
+ */
12
12
  readonly numChangedRows?: bigint;
13
13
  constructor(numUpdatedRows: bigint, numChangedRows: bigint | undefined);
14
14
  }
@@ -2,14 +2,14 @@
2
2
  export class UpdateResult {
3
3
  /**
4
4
  * The number of rows the update query updated (even if not changed).
5
- */
5
+ */
6
6
  numUpdatedRows;
7
7
  /**
8
8
  * The number of rows the update query changed.
9
9
  *
10
10
  * This is **optional** and only supported in dialects such as MySQL.
11
11
  * You would probably use {@link numUpdatedRows} in most cases.
12
- */
12
+ */
13
13
  numChangedRows;
14
14
  constructor(numUpdatedRows, numChangedRows) {
15
15
  this.numUpdatedRows = numUpdatedRows;
@@ -35,6 +35,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
35
35
  * you can always use:
36
36
  *
37
37
  * ```ts
38
+ * import { sql } from 'kysely'
39
+ *
38
40
  * sql`your operator`
39
41
  * ```
40
42
  *
@@ -46,7 +48,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
46
48
  * const persons = await db
47
49
  * .selectFrom('person')
48
50
  * .selectAll()
49
- * .where('id', 'in', ['1', '2', '3'])
51
+ * .where('id', 'in', [1, 2, 3])
50
52
  * .execute()
51
53
  * ```
52
54
  *
@@ -294,6 +296,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
294
296
  * import { sql } from 'kysely'
295
297
  * const { ref } = db.dynamic
296
298
  *
299
+ * const columnFromUserInput: string = 'id'
300
+ *
297
301
  * const persons = await db
298
302
  * .selectFrom('person')
299
303
  * .selectAll()