kysely 0.26.2 → 0.27.0

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 (215) hide show
  1. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  2. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  3. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  4. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  6. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  10. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  12. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.js +97 -0
  14. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  16. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  18. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  19. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  22. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  23. package/dist/cjs/driver/driver.d.ts +1 -1
  24. package/dist/cjs/driver/driver.js +1 -0
  25. package/dist/cjs/driver/runtime-driver.js +5 -1
  26. package/dist/cjs/driver/single-connection-provider.js +7 -8
  27. package/dist/cjs/expression/expression-builder.d.ts +66 -73
  28. package/dist/cjs/expression/expression-builder.js +8 -17
  29. package/dist/cjs/expression/expression-wrapper.d.ts +8 -8
  30. package/dist/cjs/helpers/mssql.d.ts +152 -0
  31. package/dist/cjs/helpers/mssql.js +160 -0
  32. package/dist/cjs/helpers/mysql.d.ts +3 -3
  33. package/dist/cjs/helpers/sqlite.d.ts +3 -3
  34. package/dist/cjs/index.d.ts +8 -2
  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/operation-node-transformer.d.ts +2 -0
  45. package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
  46. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  48. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  50. package/dist/cjs/operation-node/operator-node.js +2 -0
  51. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  52. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  53. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  54. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  55. package/dist/cjs/parser/expression-parser.d.ts +2 -2
  56. package/dist/cjs/parser/reference-parser.d.ts +3 -2
  57. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  58. package/dist/cjs/parser/select-parser.d.ts +20 -9
  59. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  60. package/dist/cjs/parser/update-set-parser.js +13 -3
  61. package/dist/cjs/parser/value-parser.d.ts +2 -2
  62. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
  63. package/dist/cjs/query-builder/case-builder.d.ts +5 -4
  64. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -6
  65. package/dist/cjs/query-builder/function-module.d.ts +98 -27
  66. package/dist/cjs/query-builder/function-module.js +17 -3
  67. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  68. package/dist/cjs/query-builder/insert-query-builder.d.ts +32 -12
  69. package/dist/cjs/query-builder/insert-query-builder.js +3 -3
  70. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  71. package/dist/cjs/query-builder/insert-result.js +8 -1
  72. package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
  73. package/dist/cjs/query-builder/json-path-builder.js +6 -3
  74. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  75. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  76. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  77. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  78. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  79. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  80. package/dist/cjs/query-builder/select-query-builder.d.ts +48 -29
  81. package/dist/cjs/query-builder/select-query-builder.js +5 -2
  82. package/dist/cjs/query-builder/update-query-builder.d.ts +25 -7
  83. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  84. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  85. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  86. package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
  87. package/dist/cjs/query-creator.d.ts +5 -3
  88. package/dist/cjs/query-creator.js +0 -47
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +0 -3
  90. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  91. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  92. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  93. package/dist/cjs/schema/alter-table-builder.js +59 -2
  94. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  95. package/dist/cjs/schema/column-definition-builder.js +27 -0
  96. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  97. package/dist/cjs/schema/create-index-builder.js +30 -0
  98. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  99. package/dist/cjs/schema/create-table-builder.js +38 -3
  100. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  101. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  102. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  103. package/dist/cjs/util/infer-result.d.ts +2 -1
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +1 -1
  106. package/dist/cjs/util/type-utils.d.ts +27 -20
  107. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  108. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  109. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  110. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  112. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  116. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  118. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
  120. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  122. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  124. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  125. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  127. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  128. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  129. package/dist/esm/driver/driver.d.ts +1 -1
  130. package/dist/esm/driver/driver.js +1 -0
  131. package/dist/esm/driver/runtime-driver.js +5 -1
  132. package/dist/esm/driver/single-connection-provider.js +7 -8
  133. package/dist/esm/expression/expression-builder.d.ts +66 -73
  134. package/dist/esm/expression/expression-builder.js +10 -19
  135. package/dist/esm/expression/expression-wrapper.d.ts +8 -8
  136. package/dist/esm/helpers/mssql.d.ts +152 -0
  137. package/dist/esm/helpers/mssql.js +155 -0
  138. package/dist/esm/helpers/mysql.d.ts +3 -3
  139. package/dist/esm/helpers/sqlite.d.ts +3 -3
  140. package/dist/esm/index.d.ts +8 -2
  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/operation-node-transformer.d.ts +2 -0
  151. package/dist/esm/operation-node/operation-node-transformer.js +17 -0
  152. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  153. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  154. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  155. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  156. package/dist/esm/operation-node/operator-node.js +2 -0
  157. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  158. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  159. package/dist/esm/parser/binary-operation-parser.js +1 -1
  160. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  161. package/dist/esm/parser/expression-parser.d.ts +2 -2
  162. package/dist/esm/parser/reference-parser.d.ts +3 -2
  163. package/dist/esm/parser/returning-parser.d.ts +2 -1
  164. package/dist/esm/parser/select-parser.d.ts +20 -9
  165. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  166. package/dist/esm/parser/update-set-parser.js +10 -1
  167. package/dist/esm/parser/value-parser.d.ts +2 -2
  168. package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
  169. package/dist/esm/query-builder/case-builder.d.ts +5 -4
  170. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -6
  171. package/dist/esm/query-builder/function-module.d.ts +98 -27
  172. package/dist/esm/query-builder/function-module.js +17 -3
  173. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  174. package/dist/esm/query-builder/insert-query-builder.d.ts +32 -12
  175. package/dist/esm/query-builder/insert-query-builder.js +4 -4
  176. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  177. package/dist/esm/query-builder/insert-result.js +8 -1
  178. package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
  179. package/dist/esm/query-builder/json-path-builder.js +6 -3
  180. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  181. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  182. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  183. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  184. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  185. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  186. package/dist/esm/query-builder/select-query-builder.d.ts +48 -29
  187. package/dist/esm/query-builder/select-query-builder.js +5 -2
  188. package/dist/esm/query-builder/update-query-builder.d.ts +25 -7
  189. package/dist/esm/query-builder/update-query-builder.js +3 -3
  190. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  191. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  192. package/dist/esm/query-compiler/default-query-compiler.js +65 -12
  193. package/dist/esm/query-creator.d.ts +5 -3
  194. package/dist/esm/query-creator.js +0 -47
  195. package/dist/esm/raw-builder/raw-builder.d.ts +0 -3
  196. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  197. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  198. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  199. package/dist/esm/schema/alter-table-builder.js +59 -2
  200. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  201. package/dist/esm/schema/column-definition-builder.js +27 -0
  202. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  203. package/dist/esm/schema/create-index-builder.js +30 -0
  204. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  205. package/dist/esm/schema/create-table-builder.js +38 -3
  206. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  207. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  208. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  209. package/dist/esm/util/infer-result.d.ts +2 -1
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +1 -1
  212. package/dist/esm/util/type-utils.d.ts +27 -20
  213. package/helpers/mssql.d.ts +1 -0
  214. package/helpers/mssql.js +1 -0
  215. package/package.json +17 -6
@@ -1,12 +1,12 @@
1
- import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
2
1
  import { ExpressionWrapper } from '../expression/expression-wrapper.js';
3
2
  import { Expression } from '../expression/expression.js';
4
- import { CoalesceReferenceExpressionList } from '../parser/coalesce-parser.js';
3
+ import { ExtractTypeFromCoalesce1, ExtractTypeFromCoalesce3, ExtractTypeFromCoalesce2, ExtractTypeFromCoalesce4, ExtractTypeFromCoalesce5 } from '../parser/coalesce-parser.js';
5
4
  import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference, ExtractTypeFromStringReference } from '../parser/reference-parser.js';
6
5
  import { KyselyTypeError } from '../util/type-error.js';
7
- import { Equals, IsAny } from '../util/type-utils.js';
6
+ import { IsNever } from '../util/type-utils.js';
8
7
  import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
9
- import { SelectQueryBuilder } from './select-query-builder.js';
8
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
9
+ import { Selectable } from '../util/column-type.js';
10
10
  /**
11
11
  * Helpers for type safe SQL function calls.
12
12
  *
@@ -17,21 +17,47 @@ import { SelectQueryBuilder } from './select-query-builder.js';
17
17
  *
18
18
  * <!-- siteExample("select", "Function calls", 60) -->
19
19
  *
20
- * This example uses the `fn` module to select some aggregates:
20
+ * This example shows how to create function calls. These examples also work in any
21
+ * other place (`where` calls, updates, inserts etc.). The only difference is that you
22
+ * leave out the alias (the `as` call) if you use these in any other place than `select`.
21
23
  *
22
24
  * ```ts
25
+ * import { sql } from 'kysely'
26
+ *
23
27
  * const result = await db.selectFrom('person')
24
28
  * .innerJoin('pet', 'pet.owner_id', 'person.id')
25
- * .select(({ fn }) => [
29
+ * .select(({ fn, val, ref }) => [
26
30
  * 'person.id',
27
31
  *
28
32
  * // The `fn` module contains the most common
29
33
  * // functions.
30
34
  * fn.count<number>('pet.id').as('pet_count'),
31
35
  *
32
- * // You can call any function using the
33
- * // `agg` method
34
- * fn.agg<string[]>('array_agg', ['pet.name']).as('pet_names')
36
+ * // You can call any function by calling `fn`
37
+ * // directly. The arguments are treated as column
38
+ * // references by default. If you want to pass in
39
+ * // values, use the `val` function.
40
+ * fn<string>('concat', [
41
+ * val('Ms. '),
42
+ * 'first_name',
43
+ * val(' '),
44
+ * 'last_name'
45
+ * ]).as('full_name_with_title'),
46
+ *
47
+ * // You can call any aggregate function using the
48
+ * // `fn.agg` function.
49
+ * fn.agg<string[]>('array_agg', ['pet.name']).as('pet_names'),
50
+ *
51
+ * // And once again, you can use the `sql`
52
+ * // template tag. The template tag substitutions
53
+ * // are treated as values by default. If you want
54
+ * // to reference columns, you can use the `ref`
55
+ * // function.
56
+ * sql<string>`concat(
57
+ * ${ref('first_name')},
58
+ * ' ',
59
+ * ${ref('last_name')}
60
+ * )`.as('full_name')
35
61
  * ])
36
62
  * .groupBy('person.id')
37
63
  * .having((eb) => eb.fn.count('pet.id'), '>', 10)
@@ -44,11 +70,13 @@ import { SelectQueryBuilder } from './select-query-builder.js';
44
70
  * select
45
71
  * "person"."id",
46
72
  * count("pet"."id") as "pet_count",
47
- * array_agg("pet"."name") as "pet_names"
73
+ * concat($1, "first_name", $2, "last_name") as "full_name_with_title",
74
+ * array_agg("pet"."name") as "pet_names",
75
+ * concat("first_name", ' ', "last_name") as "full_name"
48
76
  * from "person"
49
77
  * inner join "pet" on "pet"."owner_id" = "person"."id"
50
78
  * group by "person"."id"
51
- * having count("pet"."id") > $1
79
+ * having count("pet"."id") > $3
52
80
  * ```
53
81
  */
54
82
  export interface FunctionModule<DB, TB extends keyof DB> {
@@ -81,7 +109,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
81
109
  * .where(sql`upper(first_name)`, '=', 'JENNIFER')
82
110
  * ```
83
111
  */
84
- <T>(name: string, args: ReadonlyArray<ReferenceExpression<DB, TB>>): ExpressionWrapper<DB, TB, T>;
112
+ <O, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): ExpressionWrapper<DB, TB, O>;
85
113
  /**
86
114
  * Creates an aggregate function call.
87
115
  *
@@ -110,7 +138,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
110
138
  * from "person"
111
139
  * ```
112
140
  */
113
- agg<O>(name: string, args?: ReadonlyArray<ReferenceExpression<DB, TB>>): AggregateFunctionBuilder<DB, TB, O>;
141
+ agg<O, RE extends ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): AggregateFunctionBuilder<DB, TB, O>;
114
142
  /**
115
143
  * Calls the `avg` function for the column or expression given as the argument.
116
144
  *
@@ -169,7 +197,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
169
197
  * .execute()
170
198
  * ```
171
199
  */
172
- avg<O extends number | string | null = number | string, C extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(column: C): AggregateFunctionBuilder<DB, TB, O>;
200
+ avg<O extends number | string | null = number | string, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
173
201
  /**
174
202
  * Calls the `coalesce` function for given arguments.
175
203
  *
@@ -230,7 +258,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
230
258
  * select coalesce(avg("age"), 0) as "avg_age" from "person" where "first_name" = $1
231
259
  * ```
232
260
  */
233
- coalesce<V extends ReferenceExpression<DB, TB>, OV extends ReferenceExpression<DB, TB>[]>(value: V, ...otherValues: OV): ExpressionWrapper<DB, TB, CoalesceReferenceExpressionList<DB, TB, [V, ...OV]>>;
261
+ coalesce<V1 extends ReferenceExpression<DB, TB>>(v1: V1): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce1<DB, TB, V1>>;
262
+ coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce2<DB, TB, V1, V2>>;
263
+ coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce3<DB, TB, V1, V2, V3>>;
264
+ coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>, V4 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3, v4: V4): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce4<DB, TB, V1, V2, V3, V4>>;
265
+ coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>, V4 extends ReferenceExpression<DB, TB>, V5 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3, v4: V4, v5: V5): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce5<DB, TB, V1, V2, V3, V4, V5>>;
234
266
  /**
235
267
  * Calls the `count` function for the column or expression given as the argument.
236
268
  *
@@ -281,7 +313,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
281
313
  * .execute()
282
314
  * ```
283
315
  */
284
- count<O extends number | string | bigint, C extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(column: C): AggregateFunctionBuilder<DB, TB, O>;
316
+ count<O extends number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
285
317
  /**
286
318
  * Calls the `count` function with `*` or `table.*` as argument.
287
319
  *
@@ -395,12 +427,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
395
427
  *
396
428
  * ```ts
397
429
  * db.selectFrom('toy')
398
- * .select((eb) => eb.fn.max<number | null, 'price'>('price').as('max_price'))
430
+ * .select((eb) => eb.fn.max<number | null>('price').as('max_price'))
399
431
  * .execute()
400
432
  * ```
401
433
  */
402
- max<O extends number | string | bigint | null = any, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: OutputBoundStringReference<DB, TB, C, O>): StringReferenceBoundAggregateFunctionBuilder<DB, TB, C, O>;
403
- max<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
434
+ max<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
404
435
  /**
405
436
  * Calls the `min` function for the column or expression given as the argument.
406
437
  *
@@ -443,12 +474,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
443
474
  *
444
475
  * ```ts
445
476
  * db.selectFrom('toy')
446
- * .select((eb) => eb.fn.min<number | null, 'price'>('price').as('min_price'))
477
+ * .select((eb) => eb.fn.min<number | null>('price').as('min_price'))
447
478
  * .execute()
448
479
  * ```
449
480
  */
450
- min<O extends number | string | bigint | null = any, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: OutputBoundStringReference<DB, TB, C, O>): StringReferenceBoundAggregateFunctionBuilder<DB, TB, C, O>;
451
- min<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
481
+ min<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
452
482
  /**
453
483
  * Calls the `sum` function for the column or expression given as the argument.
454
484
  *
@@ -507,7 +537,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
507
537
  * .execute()
508
538
  * ```
509
539
  */
510
- sum<O extends number | string | bigint | null = number | string | bigint, C extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(column: C): AggregateFunctionBuilder<DB, TB, O>;
540
+ sum<O extends number | string | bigint | null = number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
511
541
  /**
512
542
  * Calls the `any` function for the column or expression given as the argument.
513
543
  *
@@ -538,10 +568,51 @@ export interface FunctionModule<DB, TB extends keyof DB> {
538
568
  * ```
539
569
  */
540
570
  any<RE extends StringReference<DB, TB>>(expr: RE): Exclude<ExtractTypeFromStringReference<DB, TB, RE>, null> extends ReadonlyArray<infer I> ? ExpressionWrapper<DB, TB, I> : KyselyTypeError<'any(expr) call failed: expr must be an array'>;
541
- any<T>(subquery: SelectQueryBuilder<any, any, Record<string, T>>): ExpressionWrapper<DB, TB, T>;
571
+ any<T>(subquery: SelectQueryBuilderExpression<Record<string, T>>): ExpressionWrapper<DB, TB, T>;
542
572
  any<T>(expr: Expression<ReadonlyArray<T>>): ExpressionWrapper<DB, TB, T>;
573
+ /**
574
+ * Creates a json_agg function call.
575
+ *
576
+ * This function is only available on PostgreSQL.
577
+ *
578
+ * ```ts
579
+ * db.selectFrom('person')
580
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
581
+ * .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')])
582
+ * .groupBy('person.first_name')
583
+ * .execute()
584
+ * ```
585
+ *
586
+ * The generated SQL (PostgreSQL):
587
+ *
588
+ * ```sql
589
+ * select "first_name", json_agg("pet") as "pets"
590
+ * from "person"
591
+ * inner join "pet" on "pet"."owner_id" = "person"."id"
592
+ * group by "person"."first_name"
593
+ * ```
594
+ */
595
+ jsonAgg<T extends (TB & string) | Expression<unknown>>(table: T): AggregateFunctionBuilder<DB, TB, T extends TB ? Selectable<DB[T]>[] : T extends Expression<infer O> ? O[] : never>;
596
+ /**
597
+ * Creates a to_json function call.
598
+ *
599
+ * This function is only available on PostgreSQL.
600
+ *
601
+ * ```ts
602
+ * db.selectFrom('person')
603
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
604
+ * .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')])
605
+ * .execute()
606
+ * ```
607
+ *
608
+ * The generated SQL (PostgreSQL):
609
+ *
610
+ * ```sql
611
+ * select "first_name", to_json("pet") as "pet"
612
+ * from "person"
613
+ * inner join "pet" on "pet"."owner_id" = "person"."id"
614
+ * ```
615
+ */
616
+ toJson<T extends (TB & string) | Expression<unknown>>(table: T): ExpressionWrapper<DB, TB, T extends TB ? Selectable<DB[T]> : T extends Expression<infer O> ? O : never>;
543
617
  }
544
618
  export declare function createFunctionModule<DB, TB extends keyof DB>(): FunctionModule<DB, TB>;
545
- type OutputBoundStringReference<DB, TB extends keyof DB, C extends StringReference<DB, TB>, O> = IsAny<O> extends true ? C : Equals<ExtractTypeFromReferenceExpression<DB, TB, C> | null, O | null> extends true ? C : never;
546
- type StringReferenceBoundAggregateFunctionBuilder<DB, TB extends keyof DB, C extends StringReference<DB, TB>, O> = AggregateFunctionBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C> | (IsAny<O> extends true ? never : null extends O ? null : never)>;
547
- export {};
@@ -5,9 +5,11 @@ import { FunctionNode } from '../operation-node/function-node.js';
5
5
  import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
6
6
  import { parseSelectAll } from '../parser/select-parser.js';
7
7
  import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
8
+ import { isString } from '../util/object-utils.js';
9
+ import { parseTable } from '../parser/table-parser.js';
8
10
  export function createFunctionModule() {
9
11
  const fn = (name, args) => {
10
- return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args)));
12
+ return new ExpressionWrapper(FunctionNode.create(name, parseReferenceExpressionOrList(args ?? [])));
11
13
  };
12
14
  const agg = (name, args) => {
13
15
  return new AggregateFunctionBuilder({
@@ -19,8 +21,8 @@ export function createFunctionModule() {
19
21
  avg(column) {
20
22
  return agg('avg', [column]);
21
23
  },
22
- coalesce(value, ...otherValues) {
23
- return fn('coalesce', [value, ...otherValues]);
24
+ coalesce(...values) {
25
+ return fn('coalesce', values);
24
26
  },
25
27
  count(column) {
26
28
  return agg('count', [column]);
@@ -42,5 +44,17 @@ export function createFunctionModule() {
42
44
  any(column) {
43
45
  return fn('any', [column]);
44
46
  },
47
+ jsonAgg(table) {
48
+ return new AggregateFunctionBuilder({
49
+ aggregateFunctionNode: AggregateFunctionNode.create('json_agg', [
50
+ isString(table) ? parseTable(table) : table.toOperationNode(),
51
+ ]),
52
+ });
53
+ },
54
+ toJson(table) {
55
+ return new ExpressionWrapper(FunctionNode.create('to_json', [
56
+ isString(table) ? parseTable(table) : table.toOperationNode(),
57
+ ]));
58
+ },
45
59
  });
46
60
  }
@@ -1,17 +1,15 @@
1
1
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
2
- import { ExpressionOrFactory } from '../parser/expression-parser.js';
3
2
  import { ReferenceExpression } from '../parser/reference-parser.js';
4
- import { SqlBool } from '../util/type-utils.js';
5
3
  export interface HavingInterface<DB, TB extends keyof DB> {
6
4
  /**
7
5
  * Just like {@link WhereInterface.where | where} but adds a `having` statement
8
6
  * instead of a `where` statement.
9
7
  */
10
- having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
11
- having(expression: ExpressionOrFactory<DB, TB, SqlBool>): HavingInterface<DB, TB>;
8
+ having<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): HavingInterface<DB, TB>;
9
+ having<E>(expression: E): HavingInterface<DB, TB>;
12
10
  /**
13
11
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
14
12
  * instead of a `where` statement.
15
13
  */
16
- havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
14
+ havingRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): HavingInterface<DB, TB>;
17
15
  }
@@ -1,17 +1,17 @@
1
1
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
- import { SelectExpression, SelectArg } from '../parser/select-parser.js';
3
+ import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
4
4
  import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
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';
12
12
  import { InsertResult } from './insert-result.js';
13
13
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
- import { ReturningRow } from '../parser/returning-parser.js';
14
+ import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
15
15
  import { NoResultErrorConstructor } from './no-result-error.js';
16
16
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
17
17
  import { ReturningInterface } from './returning-interface.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,7 +236,7 @@ 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>;
@@ -414,7 +432,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
414
432
  * .onDuplicateKeyUpdate({ species: 'hamster' })
415
433
  * ```
416
434
  */
417
- onDuplicateKeyUpdate(update: UpdateExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
435
+ onDuplicateKeyUpdate(update: UpdateObjectExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
418
436
  /**
419
437
  * Allows you to return data from modified rows.
420
438
  *
@@ -474,7 +492,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
474
492
  * .executeTakeFirst()
475
493
  * ```
476
494
  */
477
- returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
495
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
496
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
497
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
478
498
  /**
479
499
  * Adds a `returning *` to an insert/update/delete query on databases
480
500
  * that support `returning` such as PostgreSQL.
@@ -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) {
@@ -308,7 +308,7 @@ export class InsertQueryBuilder {
308
308
  return new InsertQueryBuilder({
309
309
  ...this.#props,
310
310
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
311
- onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateExpression(update)),
311
+ onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObjectExpression(update)),
312
312
  }),
313
313
  });
314
314
  }
@@ -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.
@@ -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 {
@@ -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
  *