kysely 0.26.1 → 0.26.3

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 (226) hide show
  1. package/README.md +6 -6
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
  3. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
  4. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  5. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
  6. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  8. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  9. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
  10. package/dist/cjs/driver/runtime-driver.js +17 -2
  11. package/dist/cjs/expression/expression-builder.d.ts +300 -27
  12. package/dist/cjs/expression/expression-builder.js +36 -26
  13. package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
  14. package/dist/cjs/expression/expression-wrapper.js +4 -4
  15. package/dist/cjs/expression/expression.d.ts +64 -1
  16. package/dist/cjs/helpers/mysql.d.ts +14 -11
  17. package/dist/cjs/helpers/mysql.js +21 -32
  18. package/dist/cjs/helpers/postgres.d.ts +8 -5
  19. package/dist/cjs/helpers/postgres.js +8 -5
  20. package/dist/cjs/helpers/sqlite.d.ts +164 -0
  21. package/dist/cjs/helpers/sqlite.js +180 -0
  22. package/dist/cjs/index.d.ts +5 -3
  23. package/dist/cjs/index.js +1 -0
  24. package/dist/cjs/kysely.d.ts +4 -3
  25. package/dist/cjs/kysely.js +1 -1
  26. package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
  27. package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
  28. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
  29. package/dist/cjs/operation-node/delete-query-node.js +3 -3
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  31. package/dist/cjs/operation-node/operation-node-transformer.js +8 -0
  32. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  33. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  34. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  36. package/dist/cjs/operation-node/operator-node.js +3 -0
  37. package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
  38. package/dist/cjs/operation-node/order-by-node.js +4 -4
  39. package/dist/cjs/operation-node/over-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/over-node.js +3 -3
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
  42. package/dist/cjs/operation-node/select-query-node.js +13 -7
  43. package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
  44. package/dist/cjs/operation-node/tuple-node.js +18 -0
  45. package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
  46. package/dist/cjs/parser/binary-operation-parser.js +35 -46
  47. package/dist/cjs/parser/expression-parser.d.ts +10 -5
  48. package/dist/cjs/parser/join-parser.d.ts +2 -2
  49. package/dist/cjs/parser/join-parser.js +2 -3
  50. package/dist/cjs/parser/order-by-parser.d.ts +6 -2
  51. package/dist/cjs/parser/order-by-parser.js +41 -7
  52. package/dist/cjs/parser/parse-utils.js +2 -2
  53. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  54. package/dist/cjs/parser/reference-parser.js +1 -1
  55. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  56. package/dist/cjs/parser/select-parser.d.ts +20 -9
  57. package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
  58. package/dist/cjs/parser/set-operation-parser.js +13 -4
  59. package/dist/cjs/parser/tuple-parser.d.ts +47 -0
  60. package/dist/cjs/parser/tuple-parser.js +2 -0
  61. package/dist/cjs/parser/value-parser.d.ts +5 -3
  62. package/dist/cjs/parser/value-parser.js +12 -1
  63. package/dist/cjs/parser/with-parser.d.ts +3 -2
  64. package/dist/cjs/parser/with-parser.js +16 -4
  65. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  66. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
  67. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  68. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
  69. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
  70. package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
  71. package/dist/cjs/query-builder/case-builder.js +8 -4
  72. package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
  73. package/dist/cjs/query-builder/cte-builder.js +39 -0
  74. package/dist/cjs/query-builder/delete-query-builder.d.ts +39 -10
  75. package/dist/cjs/query-builder/delete-query-builder.js +3 -3
  76. package/dist/cjs/query-builder/function-module.d.ts +41 -6
  77. package/dist/cjs/query-builder/function-module.js +3 -0
  78. package/dist/cjs/query-builder/having-interface.d.ts +2 -5
  79. package/dist/cjs/query-builder/insert-query-builder.d.ts +5 -3
  80. package/dist/cjs/query-builder/join-builder.d.ts +2 -6
  81. package/dist/cjs/query-builder/join-builder.js +2 -2
  82. package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
  83. package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
  84. package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
  85. package/dist/cjs/query-builder/over-builder.js +1 -1
  86. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  87. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  88. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  89. package/dist/cjs/query-builder/select-query-builder.d.ts +206 -67
  90. package/dist/cjs/query-builder/select-query-builder.js +75 -924
  91. package/dist/cjs/query-builder/update-query-builder.d.ts +39 -10
  92. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  93. package/dist/cjs/query-builder/where-interface.d.ts +32 -8
  94. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  95. package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
  96. package/dist/cjs/query-creator.d.ts +76 -2
  97. package/dist/cjs/query-creator.js +36 -6
  98. package/dist/cjs/raw-builder/raw-builder.d.ts +87 -51
  99. package/dist/cjs/raw-builder/raw-builder.js +18 -45
  100. package/dist/cjs/raw-builder/sql.js +8 -8
  101. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  102. package/dist/cjs/schema/alter-table-builder.js +12 -0
  103. package/dist/cjs/schema/create-index-builder.d.ts +1 -1
  104. package/dist/cjs/schema/create-index-builder.js +1 -1
  105. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  106. package/dist/cjs/util/column-type.d.ts +7 -6
  107. package/dist/cjs/util/infer-result.d.ts +2 -1
  108. package/dist/cjs/util/json-object-args.d.ts +3 -0
  109. package/dist/cjs/util/json-object-args.js +35 -0
  110. package/dist/cjs/util/object-utils.d.ts +1 -0
  111. package/dist/cjs/util/object-utils.js +9 -1
  112. package/dist/cjs/util/type-utils.d.ts +16 -17
  113. package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
  114. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
  115. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  116. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
  117. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
  118. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  119. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  120. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
  121. package/dist/esm/driver/runtime-driver.js +17 -2
  122. package/dist/esm/expression/expression-builder.d.ts +300 -27
  123. package/dist/esm/expression/expression-builder.js +40 -30
  124. package/dist/esm/expression/expression-wrapper.d.ts +177 -8
  125. package/dist/esm/expression/expression-wrapper.js +5 -5
  126. package/dist/esm/expression/expression.d.ts +64 -1
  127. package/dist/esm/helpers/mysql.d.ts +14 -11
  128. package/dist/esm/helpers/mysql.js +21 -32
  129. package/dist/esm/helpers/postgres.d.ts +8 -5
  130. package/dist/esm/helpers/postgres.js +8 -5
  131. package/dist/esm/helpers/sqlite.d.ts +164 -0
  132. package/dist/esm/helpers/sqlite.js +175 -0
  133. package/dist/esm/index.d.ts +5 -3
  134. package/dist/esm/index.js +1 -0
  135. package/dist/esm/kysely.d.ts +4 -3
  136. package/dist/esm/kysely.js +1 -1
  137. package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
  138. package/dist/esm/operation-node/common-table-expression-node.js +6 -0
  139. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  140. package/dist/esm/operation-node/delete-query-node.js +3 -3
  141. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  142. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  143. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  144. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  145. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  146. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  147. package/dist/esm/operation-node/operator-node.js +3 -0
  148. package/dist/esm/operation-node/order-by-node.d.ts +2 -2
  149. package/dist/esm/operation-node/order-by-node.js +4 -4
  150. package/dist/esm/operation-node/over-node.d.ts +1 -1
  151. package/dist/esm/operation-node/over-node.js +3 -3
  152. package/dist/esm/operation-node/select-query-node.d.ts +5 -4
  153. package/dist/esm/operation-node/select-query-node.js +13 -7
  154. package/dist/esm/operation-node/tuple-node.d.ts +12 -0
  155. package/dist/esm/operation-node/tuple-node.js +16 -0
  156. package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
  157. package/dist/esm/parser/binary-operation-parser.js +36 -47
  158. package/dist/esm/parser/expression-parser.d.ts +10 -5
  159. package/dist/esm/parser/join-parser.d.ts +2 -2
  160. package/dist/esm/parser/join-parser.js +3 -4
  161. package/dist/esm/parser/order-by-parser.d.ts +6 -2
  162. package/dist/esm/parser/order-by-parser.js +40 -7
  163. package/dist/esm/parser/parse-utils.js +3 -3
  164. package/dist/esm/parser/reference-parser.d.ts +2 -2
  165. package/dist/esm/parser/reference-parser.js +1 -1
  166. package/dist/esm/parser/returning-parser.d.ts +2 -1
  167. package/dist/esm/parser/select-parser.d.ts +20 -9
  168. package/dist/esm/parser/set-operation-parser.d.ts +3 -1
  169. package/dist/esm/parser/set-operation-parser.js +11 -2
  170. package/dist/esm/parser/tuple-parser.d.ts +47 -0
  171. package/dist/esm/parser/tuple-parser.js +2 -0
  172. package/dist/esm/parser/value-parser.d.ts +5 -3
  173. package/dist/esm/parser/value-parser.js +10 -1
  174. package/dist/esm/parser/with-parser.d.ts +3 -2
  175. package/dist/esm/parser/with-parser.js +16 -4
  176. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  177. package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
  178. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  179. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
  180. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
  181. package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
  182. package/dist/esm/query-builder/case-builder.js +10 -6
  183. package/dist/esm/query-builder/cte-builder.d.ts +20 -0
  184. package/dist/esm/query-builder/cte-builder.js +36 -0
  185. package/dist/esm/query-builder/delete-query-builder.d.ts +39 -10
  186. package/dist/esm/query-builder/delete-query-builder.js +4 -4
  187. package/dist/esm/query-builder/function-module.d.ts +41 -6
  188. package/dist/esm/query-builder/function-module.js +3 -0
  189. package/dist/esm/query-builder/having-interface.d.ts +2 -5
  190. package/dist/esm/query-builder/insert-query-builder.d.ts +5 -3
  191. package/dist/esm/query-builder/join-builder.d.ts +2 -6
  192. package/dist/esm/query-builder/join-builder.js +3 -3
  193. package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
  194. package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
  195. package/dist/esm/query-builder/on-conflict-builder.js +5 -5
  196. package/dist/esm/query-builder/over-builder.js +1 -1
  197. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  198. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  199. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  200. package/dist/esm/query-builder/select-query-builder.d.ts +206 -67
  201. package/dist/esm/query-builder/select-query-builder.js +75 -923
  202. package/dist/esm/query-builder/update-query-builder.d.ts +39 -10
  203. package/dist/esm/query-builder/update-query-builder.js +3 -3
  204. package/dist/esm/query-builder/where-interface.d.ts +32 -8
  205. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  206. package/dist/esm/query-compiler/default-query-compiler.js +39 -7
  207. package/dist/esm/query-creator.d.ts +76 -2
  208. package/dist/esm/query-creator.js +37 -7
  209. package/dist/esm/raw-builder/raw-builder.d.ts +87 -51
  210. package/dist/esm/raw-builder/raw-builder.js +17 -42
  211. package/dist/esm/raw-builder/sql.js +9 -9
  212. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  213. package/dist/esm/schema/alter-table-builder.js +12 -0
  214. package/dist/esm/schema/create-index-builder.d.ts +1 -1
  215. package/dist/esm/schema/create-index-builder.js +2 -2
  216. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  217. package/dist/esm/util/column-type.d.ts +7 -6
  218. package/dist/esm/util/infer-result.d.ts +2 -1
  219. package/dist/esm/util/json-object-args.d.ts +3 -0
  220. package/dist/esm/util/json-object-args.js +32 -0
  221. package/dist/esm/util/object-utils.d.ts +1 -0
  222. package/dist/esm/util/object-utils.js +7 -0
  223. package/dist/esm/util/type-utils.d.ts +16 -17
  224. package/helpers/sqlite.d.ts +1 -0
  225. package/helpers/sqlite.js +1 -0
  226. package/package.json +7 -4
@@ -1,9 +1,12 @@
1
1
  import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
2
2
  import { ExpressionWrapper } from '../expression/expression-wrapper.js';
3
+ import { Expression } from '../expression/expression.js';
3
4
  import { CoalesceReferenceExpressionList } from '../parser/coalesce-parser.js';
4
- import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
+ import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference, ExtractTypeFromStringReference } from '../parser/reference-parser.js';
6
+ import { KyselyTypeError } from '../util/type-error.js';
5
7
  import { Equals, IsAny } from '../util/type-utils.js';
6
8
  import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
9
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
7
10
  /**
8
11
  * Helpers for type safe SQL function calls.
9
12
  *
@@ -109,7 +112,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
109
112
  */
110
113
  agg<O>(name: string, args?: ReadonlyArray<ReferenceExpression<DB, TB>>): AggregateFunctionBuilder<DB, TB, O>;
111
114
  /**
112
- * Calls the `avg` function for the column given as the argument.
115
+ * Calls the `avg` function for the column or expression given as the argument.
113
116
  *
114
117
  * This sql function calculates the average value for a given column.
115
118
  *
@@ -229,7 +232,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
229
232
  */
230
233
  coalesce<V extends ReferenceExpression<DB, TB>, OV extends ReferenceExpression<DB, TB>[]>(value: V, ...otherValues: OV): ExpressionWrapper<DB, TB, CoalesceReferenceExpressionList<DB, TB, [V, ...OV]>>;
231
234
  /**
232
- * Calls the `count` function for the column given as the argument.
235
+ * Calls the `count` function for the column or expression given as the argument.
233
236
  *
234
237
  * When called with a column as argument, this sql function counts the number of rows where there
235
238
  * is a non-null value in that column.
@@ -351,7 +354,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
351
354
  countAll<O extends number | string | bigint, T extends TB = TB>(table: T): AggregateFunctionBuilder<DB, TB, O>;
352
355
  countAll<O extends number | string | bigint>(): AggregateFunctionBuilder<DB, TB, O>;
353
356
  /**
354
- * Calls the `max` function for the column given as the argument.
357
+ * Calls the `max` function for the column or expression given as the argument.
355
358
  *
356
359
  * This sql function calculates the maximum value for a given column.
357
360
  *
@@ -399,7 +402,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
399
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>;
400
403
  max<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
401
404
  /**
402
- * Calls the `min` function for the column given as the argument.
405
+ * Calls the `min` function for the column or expression given as the argument.
403
406
  *
404
407
  * This sql function calculates the minimum value for a given column.
405
408
  *
@@ -447,7 +450,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
447
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>;
448
451
  min<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
449
452
  /**
450
- * Calls the `sum` function for the column given as the argument.
453
+ * Calls the `sum` function for the column or expression given as the argument.
451
454
  *
452
455
  * This sql function sums the values of a given column.
453
456
  *
@@ -505,6 +508,38 @@ export interface FunctionModule<DB, TB extends keyof DB> {
505
508
  * ```
506
509
  */
507
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>;
511
+ /**
512
+ * Calls the `any` function for the column or expression given as the argument.
513
+ *
514
+ * The argument must be a subquery or evaluate to an array.
515
+ *
516
+ * ### Examples
517
+ *
518
+ * In the following example, `nicknames` is assumed to be a column of type `string[]`:
519
+ *
520
+ * ```ts
521
+ * db.selectFrom('person')
522
+ * .selectAll('person')
523
+ * .where((eb) => eb(
524
+ * eb.val('Jen'), '=', eb.fn.any('person.nicknames')
525
+ * ))
526
+ * ```
527
+ *
528
+ *
529
+ * The generated SQL (PostgreSQL):
530
+ *
531
+ * ```sql
532
+ * select
533
+ * "person".*
534
+ * from
535
+ * "person"
536
+ * where
537
+ * $1 = any("person"."nicknames")
538
+ * ```
539
+ */
540
+ 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: SelectQueryBuilderExpression<Record<string, T>>): ExpressionWrapper<DB, TB, T>;
542
+ any<T>(expr: Expression<ReadonlyArray<T>>): ExpressionWrapper<DB, TB, T>;
508
543
  }
509
544
  export declare function createFunctionModule<DB, TB extends keyof DB>(): FunctionModule<DB, TB>;
510
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;
@@ -39,5 +39,8 @@ export function createFunctionModule() {
39
39
  sum(column) {
40
40
  return agg('sum', [column]);
41
41
  },
42
+ any(column) {
43
+ return fn('any', [column]);
44
+ },
42
45
  });
43
46
  }
@@ -1,6 +1,5 @@
1
- import { ExpressionBuilder } from '../expression/expression-builder.js';
2
- import { Expression } from '../expression/expression.js';
3
1
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
2
+ import { ExpressionOrFactory } from '../parser/expression-parser.js';
4
3
  import { ReferenceExpression } from '../parser/reference-parser.js';
5
4
  import { SqlBool } from '../util/type-utils.js';
6
5
  export interface HavingInterface<DB, TB extends keyof DB> {
@@ -9,12 +8,10 @@ export interface HavingInterface<DB, TB extends keyof DB> {
9
8
  * instead of a `where` statement.
10
9
  */
11
10
  having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
12
- having(factory: HavingExpressionFactory<DB, TB>): HavingInterface<DB, TB>;
13
- having(expression: Expression<any>): HavingInterface<DB, TB>;
11
+ having(expression: ExpressionOrFactory<DB, TB, SqlBool>): HavingInterface<DB, TB>;
14
12
  /**
15
13
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
16
14
  * instead of a `where` statement.
17
15
  */
18
16
  havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
19
17
  }
20
- export type HavingExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => Expression<SqlBool>;
@@ -1,6 +1,6 @@
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';
@@ -11,7 +11,7 @@ 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';
@@ -474,7 +474,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
474
474
  * .executeTakeFirst()
475
475
  * ```
476
476
  */
477
- returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
477
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
478
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
479
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
478
480
  /**
479
481
  * Adds a `returning *` to an insert/update/delete query on databases
480
482
  * that support `returning` such as PostgreSQL.
@@ -1,8 +1,7 @@
1
- import { ExpressionBuilder } from '../expression/expression-builder.js';
2
- import { Expression } from '../expression/expression.js';
3
1
  import { JoinNode } from '../operation-node/join-node.js';
4
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
5
3
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
4
+ import { ExpressionOrFactory } from '../parser/expression-parser.js';
6
5
  import { ReferenceExpression } from '../parser/reference-parser.js';
7
6
  import { SqlBool } from '../util/type-utils.js';
8
7
  export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
@@ -15,8 +14,7 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
15
14
  * See {@link WhereInterface.where} for documentation and examples.
16
15
  */
17
16
  on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
18
- on(factory: OnExpressionFactory<DB, TB>): JoinBuilder<DB, TB>;
19
- on(expression: Expression<any>): JoinBuilder<DB, TB>;
17
+ on(expression: ExpressionOrFactory<DB, TB, SqlBool>): JoinBuilder<DB, TB>;
20
18
  /**
21
19
  * Just like {@link WhereInterface.whereRef} but adds an item to the join's
22
20
  * `on` clause instead.
@@ -38,5 +36,3 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
38
36
  export interface JoinBuilderProps {
39
37
  readonly joinNode: JoinNode;
40
38
  }
41
- type OnExpressionFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => Expression<SqlBool>;
42
- export {};
@@ -1,7 +1,7 @@
1
1
  /// <reference types="./join-builder.d.ts" />
2
2
  import { JoinNode } from '../operation-node/join-node.js';
3
3
  import { RawNode } from '../operation-node/raw-node.js';
4
- import { parseFilter, parseReferentialComparison, } from '../parser/binary-operation-parser.js';
4
+ import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
5
5
  import { freeze } from '../util/object-utils.js';
6
6
  import { preventAwait } from '../util/prevent-await.js';
7
7
  export class JoinBuilder {
@@ -12,7 +12,7 @@ export class JoinBuilder {
12
12
  on(...args) {
13
13
  return new JoinBuilder({
14
14
  ...this.#props,
15
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseFilter(args)),
15
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseValueBinaryOperationOrExpression(args)),
16
16
  });
17
17
  }
18
18
  /**
@@ -24,7 +24,7 @@ export class JoinBuilder {
24
24
  onRef(lhs, op, rhs) {
25
25
  return new JoinBuilder({
26
26
  ...this.#props,
27
- joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferentialComparison(lhs, op, rhs)),
27
+ joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferentialBinaryOperation(lhs, op, rhs)),
28
28
  });
29
29
  }
30
30
  /**
@@ -1,4 +1,4 @@
1
- import { AliasedExpression, Expression } from '../expression/expression.js';
1
+ import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { JSONReferenceNode } from '../operation-node/json-reference-node.js';
4
4
  import { OperationNode } from '../operation-node/operation-node.js';
@@ -119,9 +119,9 @@ export declare class JSONPathBuilder<S, O = S> {
119
119
  * select "profile"->'addresses'->0->'city' as "city" from "person"
120
120
  * ```
121
121
  */
122
- key<K extends any[] extends O ? never : O extends object ? keyof NonNullable<O> & string : never, O2 = undefined extends O ? null | NonNullable<NonNullable<O>[K]> : null extends O ? null | NonNullable<NonNullable<O>[K]> : NonNullable<O>[K]>(key: K): TraversedJSONPathBuilder<S, O2>;
122
+ key<K extends any[] extends O ? never : O extends object ? keyof NonNullable<O> & string : never, O2 = undefined extends O ? null | NonNullable<NonNullable<O>[K]> : null extends O ? null | NonNullable<NonNullable<O>[K]> : string extends keyof NonNullable<O> ? null | NonNullable<NonNullable<O>[K]> : NonNullable<O>[K]>(key: K): TraversedJSONPathBuilder<S, O2>;
123
123
  }
124
- export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements Expression<O> {
124
+ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O> implements AliasableExpression<O> {
125
125
  #private;
126
126
  constructor(node: JSONReferenceNode);
127
127
  /** @private */
@@ -168,6 +168,62 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
168
168
  * ```
169
169
  */
170
170
  as<A extends string>(alias: A): AliasedExpression<O, A>;
171
+ /**
172
+ * Returns an aliased version of the expression.
173
+ *
174
+ * In addition to slapping `as "the_alias"` at the end of the expression,
175
+ * this method also provides strict typing:
176
+ *
177
+ * ```ts
178
+ * const result = await db
179
+ * .selectFrom('person')
180
+ * .select((eb) =>
181
+ * // `eb.fn<string>` returns an AliasableExpression<string>
182
+ * eb.fn<string>('concat', ['first_name' eb.val(' '), 'last_name']).as('full_name')
183
+ * )
184
+ * .executeTakeFirstOrThrow()
185
+ *
186
+ * // `full_name: string` field exists in the result type.
187
+ * console.log(result.full_name)
188
+ * ```
189
+ *
190
+ * The generated SQL (PostgreSQL):
191
+ *
192
+ * ```ts
193
+ * select
194
+ * concat("first_name", $1, "last_name") as "full_name"
195
+ * from
196
+ * "person"
197
+ * ```
198
+ *
199
+ * You can also pass in a raw SQL snippet (or any expression) but in that case you must
200
+ * provide the alias as the only type argument:
201
+ *
202
+ * ```ts
203
+ * const values = sql<{ a: number, b: string }>`(values (1, 'foo'))`
204
+ *
205
+ * // The alias is `t(a, b)` which specifies the column names
206
+ * // in addition to the table name. We must tell kysely that
207
+ * // columns of the table can be referenced through `t`
208
+ * // by providing an explicit type argument.
209
+ * const aliasedValues = values.as<'t'>(sql`t(a, b)`)
210
+ *
211
+ * await db
212
+ * .insertInto('person')
213
+ * .columns(['first_name', 'last_name'])
214
+ * .expression(
215
+ * db.selectFrom(aliasedValues).select(['t.a', 't.b'])
216
+ * )
217
+ * ```
218
+ *
219
+ * The generated SQL (PostgreSQL):
220
+ *
221
+ * ```ts
222
+ * insert into "person" ("first_name", "last_name")
223
+ * from (values (1, 'foo')) as t(a, b)
224
+ * select "t"."a", "t"."b"
225
+ * ```
226
+ */
171
227
  as<A extends string>(alias: Expression<unknown>): AliasedExpression<O, A>;
172
228
  /**
173
229
  * Change the output type of the json path.
@@ -2,10 +2,11 @@ import { Expression } from '../expression/expression.js';
2
2
  import { OnConflictNode } from '../operation-node/on-conflict-node.js';
3
3
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
4
4
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
5
+ import { ExpressionOrFactory } from '../parser/expression-parser.js';
5
6
  import { ReferenceExpression } from '../parser/reference-parser.js';
6
7
  import { UpdateExpression } from '../parser/update-set-parser.js';
7
- import { AnyColumn } from '../util/type-utils.js';
8
- import { WhereExpressionFactory, WhereInterface } from './where-interface.js';
8
+ import { AnyColumn, SqlBool } from '../util/type-utils.js';
9
+ import { WhereInterface } from './where-interface.js';
9
10
  export declare class OnConflictBuilder<DB, TB extends keyof DB> implements WhereInterface<DB, TB> {
10
11
  #private;
11
12
  constructor(props: OnConflictBuilderProps);
@@ -98,7 +99,34 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
98
99
  * select * from "person" where "id" in ($1, $2, $3)
99
100
  * ```
100
101
  *
101
- * <!-- siteExample("where", "OR where", 30) -->
102
+ * <!-- siteExample("where", "Object filter", 30) -->
103
+ *
104
+ * You can use the `and` function to create a simple equality
105
+ * filter using an object
106
+ *
107
+ * ```ts
108
+ * const persons = await db
109
+ * .selectFrom('person')
110
+ * .selectAll()
111
+ * .where((eb) => eb.and({
112
+ * first_name: 'Jennifer',
113
+ * last_name: eb.ref('first_name')
114
+ * }))
115
+ * .execute()
116
+ * ```
117
+ *
118
+ * The generated SQL (PostgreSQL):
119
+ *
120
+ * ```sql
121
+ * select *
122
+ * from "person"
123
+ * where (
124
+ * "first_name" = $1
125
+ * and "last_name" = "first_name"
126
+ * )
127
+ * ```
128
+ *
129
+ * <!-- siteExample("where", "OR where", 40) -->
102
130
  *
103
131
  * To combine conditions using `OR`, you can use the expression builder.
104
132
  * There are two ways to create `OR` expressions. Both are shown in this
@@ -133,7 +161,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
133
161
  * )
134
162
  * ```
135
163
  *
136
- * <!-- siteExample("where", "Conditional where calls", 40) -->
164
+ * <!-- siteExample("where", "Conditional where calls", 50) -->
137
165
  *
138
166
  * You can add expressions conditionally like this:
139
167
  *
@@ -228,7 +256,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
228
256
  * select * from "person" where "id" in ($1, $2, $3)
229
257
  * ```
230
258
  *
231
- * <!-- siteExample("where", "Complex where clause", 50) -->
259
+ * <!-- siteExample("where", "Complex where clause", 60) -->
232
260
  *
233
261
  * For complex `where` expressions you can pass in a single callback and
234
262
  * use the `ExpressionBuilder` to build your expression:
@@ -317,8 +345,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
317
345
  * .execute()
318
346
  * ```
319
347
  */
320
- where(factory: WhereExpressionFactory<DB, TB>): OnConflictBuilder<DB, TB>;
321
- where(expression: Expression<any>): OnConflictBuilder<DB, TB>;
348
+ where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictBuilder<DB, TB>;
322
349
  /**
323
350
  * Specify an index predicate for the index target.
324
351
  *
@@ -489,7 +516,34 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
489
516
  * select * from "person" where "id" in ($1, $2, $3)
490
517
  * ```
491
518
  *
492
- * <!-- siteExample("where", "OR where", 30) -->
519
+ * <!-- siteExample("where", "Object filter", 30) -->
520
+ *
521
+ * You can use the `and` function to create a simple equality
522
+ * filter using an object
523
+ *
524
+ * ```ts
525
+ * const persons = await db
526
+ * .selectFrom('person')
527
+ * .selectAll()
528
+ * .where((eb) => eb.and({
529
+ * first_name: 'Jennifer',
530
+ * last_name: eb.ref('first_name')
531
+ * }))
532
+ * .execute()
533
+ * ```
534
+ *
535
+ * The generated SQL (PostgreSQL):
536
+ *
537
+ * ```sql
538
+ * select *
539
+ * from "person"
540
+ * where (
541
+ * "first_name" = $1
542
+ * and "last_name" = "first_name"
543
+ * )
544
+ * ```
545
+ *
546
+ * <!-- siteExample("where", "OR where", 40) -->
493
547
  *
494
548
  * To combine conditions using `OR`, you can use the expression builder.
495
549
  * There are two ways to create `OR` expressions. Both are shown in this
@@ -524,7 +578,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
524
578
  * )
525
579
  * ```
526
580
  *
527
- * <!-- siteExample("where", "Conditional where calls", 40) -->
581
+ * <!-- siteExample("where", "Conditional where calls", 50) -->
528
582
  *
529
583
  * You can add expressions conditionally like this:
530
584
  *
@@ -619,7 +673,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
619
673
  * select * from "person" where "id" in ($1, $2, $3)
620
674
  * ```
621
675
  *
622
- * <!-- siteExample("where", "Complex where clause", 50) -->
676
+ * <!-- siteExample("where", "Complex where clause", 60) -->
623
677
  *
624
678
  * For complex `where` expressions you can pass in a single callback and
625
679
  * use the `ExpressionBuilder` to build your expression:
@@ -708,8 +762,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
708
762
  * .execute()
709
763
  * ```
710
764
  */
711
- where(factory: WhereExpressionFactory<DB, TB>): OnConflictUpdateBuilder<DB, TB>;
712
- where(expression: Expression<any>): OnConflictUpdateBuilder<DB, TB>;
765
+ where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictUpdateBuilder<DB, TB>;
713
766
  /**
714
767
  * Specify a where condition for the update operation.
715
768
  *
@@ -2,7 +2,7 @@
2
2
  import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { IdentifierNode } from '../operation-node/identifier-node.js';
4
4
  import { OnConflictNode } from '../operation-node/on-conflict-node.js';
5
- import { parseFilter, parseReferentialComparison, } from '../parser/binary-operation-parser.js';
5
+ import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
6
6
  import { parseUpdateExpression, } from '../parser/update-set-parser.js';
7
7
  import { freeze } from '../util/object-utils.js';
8
8
  import { preventAwait } from '../util/prevent-await.js';
@@ -78,7 +78,7 @@ export class OnConflictBuilder {
78
78
  where(...args) {
79
79
  return new OnConflictBuilder({
80
80
  ...this.#props,
81
- onConflictNode: OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, parseFilter(args)),
81
+ onConflictNode: OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, parseValueBinaryOperationOrExpression(args)),
82
82
  });
83
83
  }
84
84
  /**
@@ -89,7 +89,7 @@ export class OnConflictBuilder {
89
89
  whereRef(lhs, op, rhs) {
90
90
  return new OnConflictBuilder({
91
91
  ...this.#props,
92
- onConflictNode: OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, parseReferentialComparison(lhs, op, rhs)),
92
+ onConflictNode: OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, parseReferentialBinaryOperation(lhs, op, rhs)),
93
93
  });
94
94
  }
95
95
  clearWhere() {
@@ -204,7 +204,7 @@ export class OnConflictUpdateBuilder {
204
204
  where(...args) {
205
205
  return new OnConflictUpdateBuilder({
206
206
  ...this.#props,
207
- onConflictNode: OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, parseFilter(args)),
207
+ onConflictNode: OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, parseValueBinaryOperationOrExpression(args)),
208
208
  });
209
209
  }
210
210
  /**
@@ -215,7 +215,7 @@ export class OnConflictUpdateBuilder {
215
215
  whereRef(lhs, op, rhs) {
216
216
  return new OnConflictUpdateBuilder({
217
217
  ...this.#props,
218
- onConflictNode: OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, parseReferentialComparison(lhs, op, rhs)),
218
+ onConflictNode: OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, parseReferentialBinaryOperation(lhs, op, rhs)),
219
219
  });
220
220
  }
221
221
  clearWhere() {
@@ -32,7 +32,7 @@ export class OverBuilder {
32
32
  */
33
33
  orderBy(orderBy, direction) {
34
34
  return new OverBuilder({
35
- overNode: OverNode.cloneWithOrderByItem(this.#props.overNode, parseOrderBy(orderBy, direction)),
35
+ overNode: OverNode.cloneWithOrderByItems(this.#props.overNode, parseOrderBy([orderBy, direction])),
36
36
  });
37
37
  }
38
38
  partitionBy(partitionBy) {
@@ -1,5 +1,5 @@
1
- import { ReturningRow } from '../parser/returning-parser.js';
2
- import { SelectExpression } from '../parser/select-parser.js';
1
+ import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
2
+ import { SelectCallback, SelectExpression } from '../parser/select-parser.js';
3
3
  import { Selectable } from '../util/column-type.js';
4
4
  export interface ReturningInterface<DB, TB extends keyof DB, O> {
5
5
  /**
@@ -62,6 +62,7 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
62
62
  * ```
63
63
  */
64
64
  returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): ReturningInterface<DB, TB, ReturningRow<DB, TB, O, SE>>;
65
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): ReturningInterface<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
65
66
  returning<SE extends SelectExpression<DB, TB>>(selection: SE): ReturningInterface<DB, TB, ReturningRow<DB, TB, O, SE>>;
66
67
  /**
67
68
  * Adds a `returning *` to an insert/update/delete query on databases
@@ -0,0 +1,20 @@
1
+ import { AliasableExpression } from '../expression/expression.js';
2
+ import { SelectQueryNode } from '../operation-node/select-query-node.js';
3
+ export interface SelectQueryBuilderExpression<O> extends AliasableExpression<O> {
4
+ get isSelectQueryBuilder(): true;
5
+ /**
6
+ * Creates the OperationNode that describes how to compile this expression into SQL.
7
+ *
8
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
9
+ * template tag to build the node:
10
+ *
11
+ * ```ts
12
+ * class SomeExpression<T> implements Expression<T> {
13
+ * toOperationNode(): OperationNode {
14
+ * return sql`some sql here`.toOperationNode()
15
+ * }
16
+ * }
17
+ * ```
18
+ */
19
+ toOperationNode(): SelectQueryNode;
20
+ }
@@ -0,0 +1,2 @@
1
+ /// <reference types="./select-query-builder-expression.d.ts" />
2
+ export {};