kysely 0.26.3 → 0.27.1

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 (216) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  3. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  4. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  6. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  10. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  12. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  14. package/dist/cjs/dialect/mssql/mssql-introspector.js +99 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  16. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  18. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  22. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  23. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  24. package/dist/cjs/driver/driver.d.ts +1 -1
  25. package/dist/cjs/driver/driver.js +1 -0
  26. package/dist/cjs/driver/runtime-driver.js +5 -1
  27. package/dist/cjs/driver/single-connection-provider.js +7 -8
  28. package/dist/cjs/expression/expression-builder.d.ts +66 -75
  29. package/dist/cjs/expression/expression-builder.js +8 -17
  30. package/dist/cjs/expression/expression-wrapper.d.ts +21 -11
  31. package/dist/cjs/expression/expression-wrapper.js +12 -0
  32. package/dist/cjs/helpers/mssql.d.ts +152 -0
  33. package/dist/cjs/helpers/mssql.js +160 -0
  34. package/dist/cjs/index.d.ts +7 -1
  35. package/dist/cjs/index.js +6 -0
  36. package/dist/cjs/migration/migrator.js +12 -16
  37. package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
  38. package/dist/cjs/operation-node/add-index-node.js +31 -0
  39. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
  40. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  41. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  42. package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
  43. package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/limit-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/limit-node.js +1 -2
  47. package/dist/cjs/operation-node/offset-node.d.ts +2 -3
  48. package/dist/cjs/operation-node/offset-node.js +1 -2
  49. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.js +19 -0
  51. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  52. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  53. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  55. package/dist/cjs/operation-node/operator-node.js +2 -0
  56. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -1
  57. package/dist/cjs/operation-node/select-modifier-node.js +2 -1
  58. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  59. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  60. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  61. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  62. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  63. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  64. package/dist/cjs/parser/update-set-parser.js +13 -3
  65. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +21 -4
  66. package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
  67. package/dist/cjs/query-builder/case-builder.d.ts +6 -5
  68. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -7
  69. package/dist/cjs/query-builder/delete-query-builder.js +4 -3
  70. package/dist/cjs/query-builder/function-module.d.ts +96 -25
  71. package/dist/cjs/query-builder/function-module.js +17 -3
  72. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  73. package/dist/cjs/query-builder/insert-query-builder.d.ts +34 -12
  74. package/dist/cjs/query-builder/insert-query-builder.js +16 -5
  75. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  76. package/dist/cjs/query-builder/insert-result.js +8 -1
  77. package/dist/cjs/query-builder/json-path-builder.d.ts +5 -3
  78. package/dist/cjs/query-builder/json-path-builder.js +9 -3
  79. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  80. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  81. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +49 -31
  83. package/dist/cjs/query-builder/select-query-builder.js +12 -10
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +23 -7
  85. package/dist/cjs/query-builder/update-query-builder.js +4 -4
  86. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  87. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  88. package/dist/cjs/query-compiler/default-query-compiler.js +73 -12
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
  90. package/dist/cjs/raw-builder/raw-builder.js +3 -0
  91. package/dist/cjs/raw-builder/sql.js +9 -2
  92. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  93. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  94. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  95. package/dist/cjs/schema/alter-table-builder.js +59 -2
  96. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  97. package/dist/cjs/schema/column-definition-builder.js +27 -0
  98. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  99. package/dist/cjs/schema/create-index-builder.js +30 -0
  100. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  101. package/dist/cjs/schema/create-table-builder.js +38 -3
  102. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  103. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +2 -2
  106. package/dist/cjs/util/object-utils.js +1 -1
  107. package/dist/cjs/util/type-utils.d.ts +27 -19
  108. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  109. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  110. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  112. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  116. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  118. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  120. package/dist/esm/dialect/mssql/mssql-introspector.js +96 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  122. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  124. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  125. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  127. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  128. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  129. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  130. package/dist/esm/driver/driver.d.ts +1 -1
  131. package/dist/esm/driver/driver.js +1 -0
  132. package/dist/esm/driver/runtime-driver.js +5 -1
  133. package/dist/esm/driver/single-connection-provider.js +7 -8
  134. package/dist/esm/expression/expression-builder.d.ts +66 -75
  135. package/dist/esm/expression/expression-builder.js +10 -19
  136. package/dist/esm/expression/expression-wrapper.d.ts +21 -11
  137. package/dist/esm/expression/expression-wrapper.js +12 -0
  138. package/dist/esm/helpers/mssql.d.ts +152 -0
  139. package/dist/esm/helpers/mssql.js +155 -0
  140. package/dist/esm/index.d.ts +7 -1
  141. package/dist/esm/index.js +6 -0
  142. package/dist/esm/migration/migrator.js +12 -16
  143. package/dist/esm/operation-node/add-index-node.d.ts +21 -0
  144. package/dist/esm/operation-node/add-index-node.js +29 -0
  145. package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
  146. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  147. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  148. package/dist/esm/operation-node/create-index-node.d.ts +1 -0
  149. package/dist/esm/operation-node/create-table-node.d.ts +1 -0
  150. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  151. package/dist/esm/operation-node/limit-node.d.ts +2 -3
  152. package/dist/esm/operation-node/limit-node.js +1 -2
  153. package/dist/esm/operation-node/offset-node.d.ts +2 -3
  154. package/dist/esm/operation-node/offset-node.js +1 -2
  155. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  156. package/dist/esm/operation-node/operation-node-transformer.js +19 -0
  157. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  158. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  159. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  160. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  161. package/dist/esm/operation-node/operator-node.js +2 -0
  162. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -1
  163. package/dist/esm/operation-node/select-modifier-node.js +2 -1
  164. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  165. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  166. package/dist/esm/parser/binary-operation-parser.js +1 -1
  167. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  168. package/dist/esm/parser/reference-parser.d.ts +2 -1
  169. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  170. package/dist/esm/parser/update-set-parser.js +10 -1
  171. package/dist/esm/query-builder/aggregate-function-builder.d.ts +21 -4
  172. package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
  173. package/dist/esm/query-builder/case-builder.d.ts +6 -5
  174. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -7
  175. package/dist/esm/query-builder/delete-query-builder.js +4 -3
  176. package/dist/esm/query-builder/function-module.d.ts +96 -25
  177. package/dist/esm/query-builder/function-module.js +17 -3
  178. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  179. package/dist/esm/query-builder/insert-query-builder.d.ts +34 -12
  180. package/dist/esm/query-builder/insert-query-builder.js +17 -6
  181. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  182. package/dist/esm/query-builder/insert-result.js +8 -1
  183. package/dist/esm/query-builder/json-path-builder.d.ts +5 -3
  184. package/dist/esm/query-builder/json-path-builder.js +9 -3
  185. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  186. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  187. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  188. package/dist/esm/query-builder/select-query-builder.d.ts +49 -31
  189. package/dist/esm/query-builder/select-query-builder.js +13 -11
  190. package/dist/esm/query-builder/update-query-builder.d.ts +23 -7
  191. package/dist/esm/query-builder/update-query-builder.js +5 -5
  192. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  194. package/dist/esm/query-compiler/default-query-compiler.js +73 -12
  195. package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
  196. package/dist/esm/raw-builder/raw-builder.js +3 -0
  197. package/dist/esm/raw-builder/sql.js +9 -2
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  199. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  200. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  201. package/dist/esm/schema/alter-table-builder.js +59 -2
  202. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  203. package/dist/esm/schema/column-definition-builder.js +27 -0
  204. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  205. package/dist/esm/schema/create-index-builder.js +30 -0
  206. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  207. package/dist/esm/schema/create-table-builder.js +38 -3
  208. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  209. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +2 -2
  212. package/dist/esm/util/object-utils.js +1 -1
  213. package/dist/esm/util/type-utils.d.ts +27 -19
  214. package/helpers/mssql.d.ts +1 -0
  215. package/helpers/mssql.js +1 -0
  216. package/package.json +15 -10
@@ -5,7 +5,7 @@ import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-
5
5
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
6
6
  import { QueryNode } from '../operation-node/query-node.js';
7
7
  import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
8
- import { UpdateExpression } from '../parser/update-set-parser.js';
8
+ import { UpdateObjectExpression } from '../parser/update-set-parser.js';
9
9
  import { Compilable } from '../util/compilable.js';
10
10
  import { QueryExecutor } from '../query-executor/query-executor.js';
11
11
  import { QueryId } from '../util/query-id.js';
@@ -60,13 +60,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
60
60
  * })
61
61
  * .executeTakeFirst()
62
62
  *
63
+ * // `insertId` is only available on dialects that
64
+ * // automatically return the id of the inserted row
65
+ * // such as MySQL and SQLite. On PostgreSQL, for example,
66
+ * // you need to add a `returning` clause to the query to
67
+ * // get anything out. See the "returning data" example.
63
68
  * console.log(result.insertId)
64
69
  * ```
65
70
  *
66
- * The generated SQL (PostgreSQL):
71
+ * The generated SQL (MySQL):
67
72
  *
68
73
  * ```sql
69
- * insert into "person" ("first_name", "last_name", "age") values ($1, $2, $3)
74
+ * insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?)
70
75
  * ```
71
76
  *
72
77
  * <!-- siteExample("insert", "Multiple rows", 20) -->
@@ -131,11 +136,14 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
131
136
  * ```ts
132
137
  * import { sql } from 'kysely'
133
138
  *
139
+ * const ani = "Ani"
140
+ * const ston = "ston"
141
+ *
134
142
  * const result = await db
135
143
  * .insertInto('person')
136
144
  * .values(({ ref, selectFrom, fn }) => ({
137
145
  * first_name: 'Jennifer',
138
- * last_name: sql`${'Ani'} || ${'ston'}`,
146
+ * last_name: sql`concat(${ani}, ${ston})`,
139
147
  * middle_name: ref('first_name'),
140
148
  * age: selectFrom('person')
141
149
  * .select(fn.avg<number>('age')
@@ -147,8 +155,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
147
155
  * The generated SQL (PostgreSQL):
148
156
  *
149
157
  * ```sql
150
- * insert into "person" ("first_name", "last_name", "age")
151
- * values ($1, $2 || $3, (select avg("age") as "avg_age" from "person"))
158
+ * insert into "person" (
159
+ * "first_name",
160
+ * "last_name",
161
+ * "middle_name",
162
+ * "age"
163
+ * )
164
+ * values (
165
+ * $1,
166
+ * concat($2, $3),
167
+ * "first_name",
168
+ * (select avg("age") as "avg_age" from "person")
169
+ * )
152
170
  * ```
153
171
  *
154
172
  * You can also use the callback version of subqueries or raw expressions:
@@ -208,7 +226,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
208
226
  * .select((eb) => [
209
227
  * 'pet.name',
210
228
  * eb.val('Petson').as('last_name'),
211
- * eb.val(7).as('age'),
229
+ * eb.lit(7).as('age'),
212
230
  * ])
213
231
  * )
214
232
  * .execute()
@@ -218,10 +236,14 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
218
236
  *
219
237
  * ```sql
220
238
  * insert into "person" ("first_name", "last_name", "age")
221
- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet"
239
+ * select "pet"."name", $1 as "last_name", 7 as "age from "pet"
222
240
  * ```
223
241
  */
224
242
  expression(expression: ExpressionOrFactory<DB, TB, any>): InsertQueryBuilder<DB, TB, O>;
243
+ /**
244
+ * Creates an `insert into "person" default values` query.
245
+ */
246
+ defaultValues(): InsertQueryBuilder<DB, TB, O>;
225
247
  /**
226
248
  * Changes an `insert into` query to an `insert ignore into` query.
227
249
  *
@@ -414,7 +436,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
414
436
  * .onDuplicateKeyUpdate({ species: 'hamster' })
415
437
  * ```
416
438
  */
417
- onDuplicateKeyUpdate(update: UpdateExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
439
+ onDuplicateKeyUpdate(update: UpdateObjectExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
418
440
  /**
419
441
  * Allows you to return data from modified rows.
420
442
  *
@@ -545,10 +567,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
545
567
  /**
546
568
  * Change the output type of the query.
547
569
  *
548
- * You should only use this method as the last resort if the types
549
- * don't support your use case.
570
+ * This method call doesn't change the SQL in any way. This methods simply
571
+ * returns a copy of this `InsertQueryBuilder` with a new output type.
550
572
  */
551
- $castTo<T>(): InsertQueryBuilder<DB, TB, T>;
573
+ $castTo<C>(): InsertQueryBuilder<DB, TB, C>;
552
574
  /**
553
575
  * Narrows (parts of) the output type of the query.
554
576
  *
@@ -3,7 +3,7 @@ import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
3
3
  import { parseInsertExpression, } from '../parser/insert-values-parser.js';
4
4
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
5
5
  import { QueryNode } from '../operation-node/query-node.js';
6
- import { parseUpdateExpression, } from '../parser/update-set-parser.js';
6
+ import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js';
7
7
  import { preventAwait } from '../util/prevent-await.js';
8
8
  import { freeze } from '../util/object-utils.js';
9
9
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
@@ -75,7 +75,7 @@ export class InsertQueryBuilder {
75
75
  * .select((eb) => [
76
76
  * 'pet.name',
77
77
  * eb.val('Petson').as('last_name'),
78
- * eb.val(7).as('age'),
78
+ * eb.lit(7).as('age'),
79
79
  * ])
80
80
  * )
81
81
  * .execute()
@@ -85,7 +85,7 @@ export class InsertQueryBuilder {
85
85
  *
86
86
  * ```sql
87
87
  * insert into "person" ("first_name", "last_name", "age")
88
- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet"
88
+ * select "pet"."name", $1 as "last_name", 7 as "age from "pet"
89
89
  * ```
90
90
  */
91
91
  expression(expression) {
@@ -96,6 +96,17 @@ export class InsertQueryBuilder {
96
96
  }),
97
97
  });
98
98
  }
99
+ /**
100
+ * Creates an `insert into "person" default values` query.
101
+ */
102
+ defaultValues() {
103
+ return new InsertQueryBuilder({
104
+ ...this.#props,
105
+ queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
106
+ defaultValues: true,
107
+ }),
108
+ });
109
+ }
99
110
  /**
100
111
  * Changes an `insert into` query to an `insert ignore into` query.
101
112
  *
@@ -308,7 +319,7 @@ export class InsertQueryBuilder {
308
319
  return new InsertQueryBuilder({
309
320
  ...this.#props,
310
321
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
311
- onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateExpression(update)),
322
+ onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObjectExpression(update)),
312
323
  }),
313
324
  });
314
325
  }
@@ -396,8 +407,8 @@ export class InsertQueryBuilder {
396
407
  /**
397
408
  * Change the output type of the query.
398
409
  *
399
- * You should only use this method as the last resort if the types
400
- * don't support your use case.
410
+ * This method call doesn't change the SQL in any way. This methods simply
411
+ * returns a copy of this `InsertQueryBuilder` with a new output type.
401
412
  */
402
413
  $castTo() {
403
414
  return new InsertQueryBuilder(this.#props);
@@ -23,7 +23,14 @@
23
23
  */
24
24
  export declare class InsertResult {
25
25
  /**
26
- * The auto incrementing primary key
26
+ * The auto incrementing primary key of the inserted row.
27
+ *
28
+ * This property can be undefined when the query contains an `on conflict`
29
+ * clause that makes the query succeed even when nothing gets inserted.
30
+ *
31
+ * This property is always undefined on dialects like PostgreSQL that
32
+ * don't return the inserted id by default. On those dialects you need
33
+ * to use the {@link ReturningInterface.returning | returning} method.
27
34
  */
28
35
  readonly insertId: bigint | undefined;
29
36
  /**
@@ -24,7 +24,14 @@
24
24
  */
25
25
  export class InsertResult {
26
26
  /**
27
- * The auto incrementing primary key
27
+ * The auto incrementing primary key of the inserted row.
28
+ *
29
+ * This property can be undefined when the query contains an `on conflict`
30
+ * clause that makes the query succeed even when nothing gets inserted.
31
+ *
32
+ * This property is always undefined on dialects like PostgreSQL that
33
+ * don't return the inserted id by default. On those dialects you need
34
+ * to use the {@link ReturningInterface.returning | returning} method.
28
35
  */
29
36
  insertId;
30
37
  /**
@@ -1,10 +1,11 @@
1
1
  import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
+ import { JSONPathNode } from '../operation-node/json-path-node.js';
3
4
  import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
4
5
  import { OperationNode } from '../operation-node/operation-node.js';
5
6
  export declare class JSONPathBuilder<S, O = S> {
6
7
  #private;
7
- constructor(node: JSONReferenceNode);
8
+ constructor(node: JSONReferenceNode | JSONPathNode);
8
9
  /**
9
10
  * Access an element of a JSON array in a specific location.
10
11
  *
@@ -123,7 +124,7 @@ export declare class JSONPathBuilder<S, O = S> {
123
124
  }
124
125
  export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements AliasableExpression<O> {
125
126
  #private;
126
- constructor(node: JSONReferenceNode);
127
+ constructor(node: JSONReferenceNode | JSONPathNode);
127
128
  /** @private */
128
129
  /**
129
130
  * All expressions need to have this getter for complicated type-related reasons.
@@ -231,7 +232,8 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
231
232
  * This method call doesn't change the SQL in any way. This methods simply
232
233
  * returns a copy of this `JSONPathBuilder` with a new output type.
233
234
  */
234
- $castTo<T>(): JSONPathBuilder<T>;
235
+ $castTo<C>(): JSONPathBuilder<C>;
236
+ $notNull(): JSONPathBuilder<Exclude<O, null>>;
235
237
  /**
236
238
  * Creates the OperationNode that describes how to compile this expression into SQL.
237
239
  *
@@ -132,9 +132,12 @@ export class JSONPathBuilder {
132
132
  return this.#createBuilderWithPathLeg('Member', key);
133
133
  }
134
134
  #createBuilderWithPathLeg(legType, value) {
135
- return new TraversedJSONPathBuilder(JSONReferenceNode.cloneWithTraversal(this.#node, JSONPathNode.is(this.#node.traversal)
136
- ? JSONPathNode.cloneWithLeg(this.#node.traversal, JSONPathLegNode.create(legType, value))
137
- : JSONOperatorChainNode.cloneWithValue(this.#node.traversal, ValueNode.createImmediate(value))));
135
+ if (JSONReferenceNode.is(this.#node)) {
136
+ return new TraversedJSONPathBuilder(JSONReferenceNode.cloneWithTraversal(this.#node, JSONPathNode.is(this.#node.traversal)
137
+ ? JSONPathNode.cloneWithLeg(this.#node.traversal, JSONPathLegNode.create(legType, value))
138
+ : JSONOperatorChainNode.cloneWithValue(this.#node.traversal, ValueNode.createImmediate(value))));
139
+ }
140
+ return new TraversedJSONPathBuilder(JSONPathNode.cloneWithLeg(this.#node, JSONPathLegNode.create(legType, value)));
138
141
  }
139
142
  }
140
143
  export class TraversedJSONPathBuilder extends JSONPathBuilder {
@@ -159,6 +162,9 @@ export class TraversedJSONPathBuilder extends JSONPathBuilder {
159
162
  $castTo() {
160
163
  return new JSONPathBuilder(this.#node);
161
164
  }
165
+ $notNull() {
166
+ return new JSONPathBuilder(this.#node);
167
+ }
162
168
  toOperationNode() {
163
169
  return this.#node;
164
170
  }
@@ -4,7 +4,8 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js'
4
4
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
5
5
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
6
6
  import { ReferenceExpression } from '../parser/reference-parser.js';
7
- import { UpdateExpression } from '../parser/update-set-parser.js';
7
+ import { UpdateObjectExpression } from '../parser/update-set-parser.js';
8
+ import { Updateable } from '../util/column-type.js';
8
9
  import { AnyColumn, SqlBool } from '../util/type-utils.js';
9
10
  import { WhereInterface } from './where-interface.js';
10
11
  export declare class OnConflictBuilder<DB, TB extends keyof DB> implements WhereInterface<DB, TB> {
@@ -40,12 +41,6 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
40
41
  * methods for alternative ways to specify the conflict target.
41
42
  */
42
43
  expression(expression: Expression<any>): OnConflictBuilder<DB, TB>;
43
- /**
44
- * Specify an index predicate for the index target.
45
- *
46
- * See {@link WhereInterface.where} for more info.
47
- */
48
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): OnConflictBuilder<DB, TB>;
49
44
  /**
50
45
  * Adds a `where` expression to the query.
51
46
  *
@@ -345,13 +340,60 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
345
340
  * .execute()
346
341
  * ```
347
342
  */
348
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictBuilder<DB, TB>;
343
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): OnConflictBuilder<DB, TB>;
344
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): OnConflictBuilder<DB, TB>;
349
345
  /**
350
- * Specify an index predicate for the index target.
346
+ * Adds a `where` clause where both sides of the operator are references
347
+ * to columns.
351
348
  *
352
- * See {@link WhereInterface.whereRef} for more info.
349
+ * The normal `where` method treats the right hand side argument as a
350
+ * value by default. `whereRef` treats it as a column reference. This method is
351
+ * expecially useful with joins and correlated subqueries.
352
+ *
353
+ * ### Examples
354
+ *
355
+ * Usage with a join:
356
+ *
357
+ * ```ts
358
+ * db.selectFrom(['person', 'pet'])
359
+ * .selectAll()
360
+ * .whereRef('person.first_name', '=', 'pet.name')
361
+ * ```
362
+ *
363
+ * The generated SQL (PostgreSQL):
364
+ *
365
+ * ```sql
366
+ * select * from "person", "pet" where "person"."first_name" = "pet"."name"
367
+ * ```
368
+ *
369
+ * Usage in a subquery:
370
+ *
371
+ * ```ts
372
+ * const persons = await db
373
+ * .selectFrom('person')
374
+ * .selectAll('person')
375
+ * .select((eb) => eb
376
+ * .selectFrom('pet')
377
+ * .select('name')
378
+ * .whereRef('pet.owner_id', '=', 'person.id')
379
+ * .limit(1)
380
+ * .as('pet_name')
381
+ * )
382
+ * .execute()
383
+ * ```
384
+ *
385
+ * The generated SQL (PostgreSQL):
386
+ *
387
+ * ```sql
388
+ * select "person".*, (
389
+ * select "name"
390
+ * from "pet"
391
+ * where "pet"."owner_id" = "person"."id"
392
+ * limit $1
393
+ * ) as "pet_name"
394
+ * from "person"
353
395
  */
354
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): OnConflictBuilder<DB, TB>;
396
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): OnConflictBuilder<DB, TB>;
355
397
  /**
356
398
  * Clears all where expressions from the query.
357
399
  *
@@ -435,7 +477,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
435
477
  * )
436
478
  * ```
437
479
  */
438
- doUpdateSet(update: UpdateExpression<OnConflictDatabase<DB, TB>, OnConflictTables<TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
480
+ doUpdateSet(update: UpdateObjectExpression<OnConflictDatabase<DB, TB>, OnConflictTables<TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
439
481
  /**
440
482
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
441
483
  * what the provided function returns.
@@ -446,7 +488,7 @@ export interface OnConflictBuilderProps {
446
488
  readonly onConflictNode: OnConflictNode;
447
489
  }
448
490
  export type OnConflictDatabase<DB, TB extends keyof DB> = {
449
- [K in keyof DB | 'excluded']: K extends keyof DB ? DB[K] : DB[TB];
491
+ [K in keyof DB | 'excluded']: Updateable<K extends keyof DB ? DB[K] : DB[TB]>;
450
492
  };
451
493
  export type OnConflictTables<TB> = TB | 'excluded';
452
494
  export declare class OnConflictDoNothingBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
@@ -462,7 +504,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
462
504
  *
463
505
  * See {@link WhereInterface.where} for more info.
464
506
  */
465
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): OnConflictUpdateBuilder<DB, TB>;
507
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): OnConflictUpdateBuilder<DB, TB>;
466
508
  /**
467
509
  * Adds a `where` expression to the query.
468
510
  *
@@ -762,13 +804,13 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
762
804
  * .execute()
763
805
  * ```
764
806
  */
765
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictUpdateBuilder<DB, TB>;
807
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): OnConflictUpdateBuilder<DB, TB>;
766
808
  /**
767
809
  * Specify a where condition for the update operation.
768
810
  *
769
811
  * See {@link WhereInterface.whereRef} for more info.
770
812
  */
771
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): OnConflictUpdateBuilder<DB, TB>;
813
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): OnConflictUpdateBuilder<DB, TB>;
772
814
  /**
773
815
  * Clears all where expressions from the query.
774
816
  *
@@ -3,7 +3,7 @@ import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { IdentifierNode } from '../operation-node/identifier-node.js';
4
4
  import { OnConflictNode } from '../operation-node/on-conflict-node.js';
5
5
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
6
- import { parseUpdateExpression, } from '../parser/update-set-parser.js';
6
+ import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js';
7
7
  import { freeze } from '../util/object-utils.js';
8
8
  import { preventAwait } from '../util/prevent-await.js';
9
9
  export class OnConflictBuilder {
@@ -81,11 +81,6 @@ export class OnConflictBuilder {
81
81
  onConflictNode: OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, parseValueBinaryOperationOrExpression(args)),
82
82
  });
83
83
  }
84
- /**
85
- * Specify an index predicate for the index target.
86
- *
87
- * See {@link WhereInterface.whereRef} for more info.
88
- */
89
84
  whereRef(lhs, op, rhs) {
90
85
  return new OnConflictBuilder({
91
86
  ...this.#props,
@@ -173,7 +168,7 @@ export class OnConflictBuilder {
173
168
  return new OnConflictUpdateBuilder({
174
169
  ...this.#props,
175
170
  onConflictNode: OnConflictNode.cloneWith(this.#props.onConflictNode, {
176
- updates: parseUpdateExpression(update),
171
+ updates: parseUpdateObjectExpression(update),
177
172
  }),
178
173
  });
179
174
  }
@@ -28,7 +28,7 @@ export declare class OverBuilder<DB, TB extends keyof DB> implements OperationNo
28
28
  * from "person"
29
29
  * ```
30
30
  */
31
- orderBy(orderBy: StringReference<DB, TB> | DynamicReferenceBuilder<any>, direction?: OrderByDirectionExpression): OverBuilder<DB, TB>;
31
+ orderBy<OE extends StringReference<DB, TB> | DynamicReferenceBuilder<any>>(orderBy: OE, direction?: OrderByDirectionExpression): OverBuilder<DB, TB>;
32
32
  /**
33
33
  * Adds partition by clause item/s inside the over function.
34
34
  *
@@ -51,7 +51,7 @@ export declare class OverBuilder<DB, TB extends keyof DB> implements OperationNo
51
51
  * ```
52
52
  */
53
53
  partitionBy(partitionBy: ReadonlyArray<PartitionByExpression<DB, TB>>): OverBuilder<DB, TB>;
54
- partitionBy(partitionBy: PartitionByExpression<DB, TB>): OverBuilder<DB, TB>;
54
+ partitionBy<PE extends PartitionByExpression<DB, TB>>(partitionBy: PE): OverBuilder<DB, TB>;
55
55
  /**
56
56
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
57
57
  * what the provided function returns.