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,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseUpdateExpression = void 0;
3
+ exports.parseUpdateObjectExpression = exports.parseUpdate = void 0;
4
4
  const column_node_js_1 = require("../operation-node/column-node.js");
5
5
  const column_update_node_js_1 = require("../operation-node/column-update-node.js");
6
6
  const expression_builder_js_1 = require("../expression/expression-builder.js");
7
7
  const object_utils_js_1 = require("../util/object-utils.js");
8
8
  const value_parser_js_1 = require("./value-parser.js");
9
- function parseUpdateExpression(update) {
9
+ const reference_parser_js_1 = require("./reference-parser.js");
10
+ function parseUpdate(...args) {
11
+ if (args.length === 2) {
12
+ return [
13
+ column_update_node_js_1.ColumnUpdateNode.create((0, reference_parser_js_1.parseReferenceExpression)(args[0]), (0, value_parser_js_1.parseValueExpression)(args[1])),
14
+ ];
15
+ }
16
+ return parseUpdateObjectExpression(args[0]);
17
+ }
18
+ exports.parseUpdate = parseUpdate;
19
+ function parseUpdateObjectExpression(update) {
10
20
  const updateObj = (0, object_utils_js_1.isFunction)(update) ? update((0, expression_builder_js_1.expressionBuilder)()) : update;
11
21
  return Object.entries(updateObj)
12
22
  .filter(([_, value]) => value !== undefined)
@@ -14,4 +24,4 @@ function parseUpdateExpression(update) {
14
24
  return column_update_node_js_1.ColumnUpdateNode.create(column_node_js_1.ColumnNode.create(key), (0, value_parser_js_1.parseValueExpression)(value));
15
25
  });
16
26
  }
17
- exports.parseUpdateExpression = parseUpdateExpression;
27
+ exports.parseUpdateObjectExpression = parseUpdateObjectExpression;
@@ -2,11 +2,11 @@ import { ValueNode } from '../operation-node/value-node.js';
2
2
  import { ExpressionOrFactory } from './expression-parser.js';
3
3
  import { OperationNode } from '../operation-node/operation-node.js';
4
4
  import { Expression } from '../expression/expression.js';
5
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
5
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
6
6
  export type ValueExpression<DB, TB extends keyof DB, V> = V | ExpressionOrFactory<DB, TB, V>;
7
7
  export type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
8
8
  export type ExtractTypeFromValueExpressionOrList<VE> = VE extends ReadonlyArray<infer AV> ? ExtractTypeFromValueExpression<AV> : ExtractTypeFromValueExpression<VE>;
9
- export type ExtractTypeFromValueExpression<VE> = VE extends SelectQueryBuilder<any, any, Record<string, infer SV>> ? SV : VE extends Expression<infer V> ? V : VE;
9
+ export type ExtractTypeFromValueExpression<VE> = VE extends SelectQueryBuilderExpression<Record<string, infer SV>> ? SV : VE extends Expression<infer V> ? V : VE;
10
10
  export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): OperationNode;
11
11
  export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): OperationNode;
12
12
  export declare function isSafeImmediateValue(value: unknown): value is number | boolean | null;
@@ -116,8 +116,8 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
116
116
  * from "person"
117
117
  * ```
118
118
  */
119
- filterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AggregateFunctionBuilder<DB, TB, O>;
120
- filterWhere(expression: ExpressionOrFactory<DB, TB, SqlBool>): AggregateFunctionBuilder<DB, TB, O>;
119
+ filterWhere<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): AggregateFunctionBuilder<DB, TB, O>;
120
+ filterWhere<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): AggregateFunctionBuilder<DB, TB, O>;
121
121
  /**
122
122
  * Adds a `filter` clause with a nested `where` clause after the function, where
123
123
  * both sides of the operator are references to columns.
@@ -150,7 +150,7 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
150
150
  * from "person"
151
151
  * ```
152
152
  */
153
- filterWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
153
+ filterWhereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): AggregateFunctionBuilder<DB, TB, O>;
154
154
  /**
155
155
  * Adds an `over` clause (window functions) after the function.
156
156
  *
@@ -239,4 +239,4 @@ export declare class AliasedAggregateFunctionBuilder<DB, TB extends keyof DB, O
239
239
  export interface AggregateFunctionBuilderProps {
240
240
  aggregateFunctionNode: AggregateFunctionNode;
241
241
  }
242
- export type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<DB, TB>;
242
+ export type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<any, any>;
@@ -3,6 +3,7 @@ import { ExpressionWrapper } from '../expression/expression-wrapper.js';
3
3
  import { ReferenceExpression } from '../parser/reference-parser.js';
4
4
  import { CaseNode } from '../operation-node/case-node.js';
5
5
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
6
+ import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
6
7
  import { KyselyTypeError } from '../util/type-error.js';
7
8
  export declare class CaseBuilder<DB, TB extends keyof DB, W = unknown, O = never> implements Whenable<DB, TB, W, O> {
8
9
  #private;
@@ -12,7 +13,7 @@ export declare class CaseBuilder<DB, TB extends keyof DB, W = unknown, O = never
12
13
  *
13
14
  * A `when` call must be followed by a {@link CaseThenBuilder.then} call.
14
15
  */
15
- when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): CaseThenBuilder<DB, TB, W, O>;
16
+ when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
16
17
  when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
17
18
  when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
18
19
  }
@@ -28,7 +29,7 @@ export declare class CaseThenBuilder<DB, TB extends keyof DB, W, O> {
28
29
  * A `then` call can be followed by {@link Whenable.when}, {@link CaseWhenBuilder.else},
29
30
  * {@link CaseWhenBuilder.end} or {@link CaseWhenBuilder.endCase} call.
30
31
  */
31
- then<O2>(expression: Expression<O2>): CaseWhenBuilder<DB, TB, W, O | O2>;
32
+ then<E extends Expression<any>>(expression: E): CaseWhenBuilder<DB, TB, W, O | ExtractTypeFromValueExpression<E>>;
32
33
  then<V>(value: V): CaseWhenBuilder<DB, TB, W, O | V>;
33
34
  }
34
35
  export declare class CaseWhenBuilder<DB, TB extends keyof DB, W, O> implements Whenable<DB, TB, W, O>, Endable<DB, TB, O | null> {
@@ -39,7 +40,7 @@ export declare class CaseWhenBuilder<DB, TB extends keyof DB, W, O> implements W
39
40
  *
40
41
  * A `when` call must be followed by a {@link CaseThenBuilder.then} call.
41
42
  */
42
- when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): CaseThenBuilder<DB, TB, W, O>;
43
+ when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
43
44
  when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
44
45
  when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
45
46
  /**
@@ -88,7 +89,7 @@ interface Whenable<DB, TB extends keyof DB, W, O> {
88
89
  *
89
90
  * A `when` call must be followed by a {@link CaseThenBuilder.then} call.
90
91
  */
91
- when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): CaseThenBuilder<DB, TB, W, O>;
92
+ when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
92
93
  when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
93
94
  when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
94
95
  }
@@ -2,8 +2,8 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js'
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
4
  import { From, FromTables, TableExpression } from '../parser/table-parser.js';
5
- import { SelectExpression, SelectArg } from '../parser/select-parser.js';
6
- import { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
5
+ import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
6
+ import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
7
7
  import { ReferenceExpression } from '../parser/reference-parser.js';
8
8
  import { QueryNode } from '../operation-node/query-node.js';
9
9
  import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
@@ -325,8 +325,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
325
325
  * .execute()
326
326
  * ```
327
327
  */
328
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
329
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): DeleteQueryBuilder<DB, TB, O>;
328
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): DeleteQueryBuilder<DB, TB, O>;
329
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): DeleteQueryBuilder<DB, TB, O>;
330
330
  /**
331
331
  * Adds a `where` clause where both sides of the operator are references
332
332
  * to columns.
@@ -378,7 +378,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
378
378
  * ) as "pet_name"
379
379
  * from "person"
380
380
  */
381
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
381
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): DeleteQueryBuilder<DB, TB, O>;
382
382
  /**
383
383
  * Clears all where expressions from the query.
384
384
  *
@@ -659,7 +659,9 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
659
659
  * .executeTakeFirst()
660
660
  * ```
661
661
  */
662
- returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
662
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
663
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): DeleteQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
664
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
663
665
  /**
664
666
  * Adds `returning *` or `returning table.*` clause to the query.
665
667
  *
@@ -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 {};
@@ -7,9 +7,11 @@ const function_node_js_1 = require("../operation-node/function-node.js");
7
7
  const reference_parser_js_1 = require("../parser/reference-parser.js");
8
8
  const select_parser_js_1 = require("../parser/select-parser.js");
9
9
  const aggregate_function_builder_js_1 = require("./aggregate-function-builder.js");
10
+ const object_utils_js_1 = require("../util/object-utils.js");
11
+ const table_parser_js_1 = require("../parser/table-parser.js");
10
12
  function createFunctionModule() {
11
13
  const fn = (name, args) => {
12
- return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args)));
14
+ return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args ?? [])));
13
15
  };
14
16
  const agg = (name, args) => {
15
17
  return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
@@ -21,8 +23,8 @@ function createFunctionModule() {
21
23
  avg(column) {
22
24
  return agg('avg', [column]);
23
25
  },
24
- coalesce(value, ...otherValues) {
25
- return fn('coalesce', [value, ...otherValues]);
26
+ coalesce(...values) {
27
+ return fn('coalesce', values);
26
28
  },
27
29
  count(column) {
28
30
  return agg('count', [column]);
@@ -44,6 +46,18 @@ function createFunctionModule() {
44
46
  any(column) {
45
47
  return fn('any', [column]);
46
48
  },
49
+ jsonAgg(table) {
50
+ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
51
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('json_agg', [
52
+ (0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(),
53
+ ]),
54
+ });
55
+ },
56
+ toJson(table) {
57
+ return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create('to_json', [
58
+ (0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(),
59
+ ]));
60
+ },
47
61
  });
48
62
  }
49
63
  exports.createFunctionModule = createFunctionModule;
@@ -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.
@@ -77,7 +77,7 @@ class InsertQueryBuilder {
77
77
  * .select((eb) => [
78
78
  * 'pet.name',
79
79
  * eb.val('Petson').as('last_name'),
80
- * eb.val(7).as('age'),
80
+ * eb.lit(7).as('age'),
81
81
  * ])
82
82
  * )
83
83
  * .execute()
@@ -87,7 +87,7 @@ class InsertQueryBuilder {
87
87
  *
88
88
  * ```sql
89
89
  * insert into "person" ("first_name", "last_name", "age")
90
- * select "pet"."name", $1 as "first_name", $2 as "last_name" from "pet"
90
+ * select "pet"."name", $1 as "last_name", 7 as "age from "pet"
91
91
  * ```
92
92
  */
93
93
  expression(expression) {
@@ -310,7 +310,7 @@ class InsertQueryBuilder {
310
310
  return new InsertQueryBuilder({
311
311
  ...this.#props,
312
312
  queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
313
- onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateExpression)(update)),
313
+ onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateObjectExpression)(update)),
314
314
  }),
315
315
  });
316
316
  }
@@ -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
  /**
@@ -26,7 +26,14 @@ exports.InsertResult = void 0;
26
26
  */
27
27
  class InsertResult {
28
28
  /**
29
- * The auto incrementing primary key
29
+ * The auto incrementing primary key of the inserted row.
30
+ *
31
+ * This property can be undefined when the query contains an `on conflict`
32
+ * clause that makes the query succeed even when nothing gets inserted.
33
+ *
34
+ * This property is always undefined on dialects like PostgreSQL that
35
+ * don't return the inserted id by default. On those dialects you need
36
+ * to use the {@link ReturningInterface.returning | returning} method.
30
37
  */
31
38
  insertId;
32
39
  /**