kysely 0.26.0 → 0.26.2

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 (212) 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 +299 -28
  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 +11 -8
  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 +3 -1
  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 +9 -4
  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.js +1 -1
  54. package/dist/cjs/parser/select-parser.d.ts +5 -5
  55. package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
  56. package/dist/cjs/parser/set-operation-parser.js +13 -4
  57. package/dist/cjs/parser/tuple-parser.d.ts +47 -0
  58. package/dist/cjs/parser/tuple-parser.js +2 -0
  59. package/dist/cjs/parser/value-parser.d.ts +4 -2
  60. package/dist/cjs/parser/value-parser.js +12 -1
  61. package/dist/cjs/parser/with-parser.d.ts +3 -2
  62. package/dist/cjs/parser/with-parser.js +16 -4
  63. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  64. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
  65. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  66. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
  67. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
  68. package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
  69. package/dist/cjs/query-builder/case-builder.js +8 -4
  70. package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
  71. package/dist/cjs/query-builder/cte-builder.js +39 -0
  72. package/dist/cjs/query-builder/delete-query-builder.d.ts +74 -24
  73. package/dist/cjs/query-builder/delete-query-builder.js +3 -3
  74. package/dist/cjs/query-builder/function-module.d.ts +41 -6
  75. package/dist/cjs/query-builder/function-module.js +3 -0
  76. package/dist/cjs/query-builder/having-interface.d.ts +2 -5
  77. package/dist/cjs/query-builder/insert-query-builder.d.ts +1 -1
  78. package/dist/cjs/query-builder/join-builder.d.ts +2 -6
  79. package/dist/cjs/query-builder/join-builder.js +2 -2
  80. package/dist/cjs/query-builder/json-path-builder.d.ts +60 -4
  81. package/dist/cjs/query-builder/on-conflict-builder.d.ts +143 -44
  82. package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
  83. package/dist/cjs/query-builder/over-builder.js +1 -1
  84. package/dist/cjs/query-builder/select-query-builder.d.ts +245 -86
  85. package/dist/cjs/query-builder/select-query-builder.js +72 -924
  86. package/dist/cjs/query-builder/update-query-builder.d.ts +106 -25
  87. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  88. package/dist/cjs/query-builder/where-interface.d.ts +71 -24
  89. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  90. package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
  91. package/dist/cjs/query-creator.d.ts +74 -2
  92. package/dist/cjs/query-creator.js +83 -6
  93. package/dist/cjs/raw-builder/raw-builder.d.ts +88 -49
  94. package/dist/cjs/raw-builder/raw-builder.js +18 -45
  95. package/dist/cjs/raw-builder/sql.js +8 -8
  96. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  97. package/dist/cjs/schema/alter-table-builder.js +12 -0
  98. package/dist/cjs/schema/create-index-builder.d.ts +1 -1
  99. package/dist/cjs/schema/create-index-builder.js +1 -1
  100. package/dist/cjs/util/column-type.d.ts +7 -6
  101. package/dist/cjs/util/json-object-args.d.ts +3 -0
  102. package/dist/cjs/util/json-object-args.js +35 -0
  103. package/dist/cjs/util/object-utils.d.ts +1 -0
  104. package/dist/cjs/util/object-utils.js +9 -1
  105. package/dist/cjs/util/type-utils.d.ts +10 -10
  106. package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
  107. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
  108. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  109. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
  110. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
  111. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  112. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  113. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
  114. package/dist/esm/driver/runtime-driver.js +17 -2
  115. package/dist/esm/expression/expression-builder.d.ts +299 -28
  116. package/dist/esm/expression/expression-builder.js +40 -30
  117. package/dist/esm/expression/expression-wrapper.d.ts +177 -8
  118. package/dist/esm/expression/expression-wrapper.js +5 -5
  119. package/dist/esm/expression/expression.d.ts +64 -1
  120. package/dist/esm/helpers/mysql.d.ts +11 -8
  121. package/dist/esm/helpers/mysql.js +21 -32
  122. package/dist/esm/helpers/postgres.d.ts +8 -5
  123. package/dist/esm/helpers/postgres.js +8 -5
  124. package/dist/esm/helpers/sqlite.d.ts +164 -0
  125. package/dist/esm/helpers/sqlite.js +175 -0
  126. package/dist/esm/index.d.ts +3 -1
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/kysely.d.ts +4 -3
  129. package/dist/esm/kysely.js +1 -1
  130. package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
  131. package/dist/esm/operation-node/common-table-expression-node.js +6 -0
  132. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  133. package/dist/esm/operation-node/delete-query-node.js +3 -3
  134. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  135. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  136. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  137. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  138. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  139. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  140. package/dist/esm/operation-node/operator-node.js +3 -0
  141. package/dist/esm/operation-node/order-by-node.d.ts +2 -2
  142. package/dist/esm/operation-node/order-by-node.js +4 -4
  143. package/dist/esm/operation-node/over-node.d.ts +1 -1
  144. package/dist/esm/operation-node/over-node.js +3 -3
  145. package/dist/esm/operation-node/select-query-node.d.ts +5 -4
  146. package/dist/esm/operation-node/select-query-node.js +13 -7
  147. package/dist/esm/operation-node/tuple-node.d.ts +12 -0
  148. package/dist/esm/operation-node/tuple-node.js +16 -0
  149. package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
  150. package/dist/esm/parser/binary-operation-parser.js +36 -47
  151. package/dist/esm/parser/expression-parser.d.ts +9 -4
  152. package/dist/esm/parser/join-parser.d.ts +2 -2
  153. package/dist/esm/parser/join-parser.js +3 -4
  154. package/dist/esm/parser/order-by-parser.d.ts +6 -2
  155. package/dist/esm/parser/order-by-parser.js +40 -7
  156. package/dist/esm/parser/parse-utils.js +3 -3
  157. package/dist/esm/parser/reference-parser.js +1 -1
  158. package/dist/esm/parser/select-parser.d.ts +5 -5
  159. package/dist/esm/parser/set-operation-parser.d.ts +3 -1
  160. package/dist/esm/parser/set-operation-parser.js +11 -2
  161. package/dist/esm/parser/tuple-parser.d.ts +47 -0
  162. package/dist/esm/parser/tuple-parser.js +2 -0
  163. package/dist/esm/parser/value-parser.d.ts +4 -2
  164. package/dist/esm/parser/value-parser.js +10 -1
  165. package/dist/esm/parser/with-parser.d.ts +3 -2
  166. package/dist/esm/parser/with-parser.js +16 -4
  167. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  168. package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
  169. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  170. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
  171. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
  172. package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
  173. package/dist/esm/query-builder/case-builder.js +10 -6
  174. package/dist/esm/query-builder/cte-builder.d.ts +20 -0
  175. package/dist/esm/query-builder/cte-builder.js +36 -0
  176. package/dist/esm/query-builder/delete-query-builder.d.ts +74 -24
  177. package/dist/esm/query-builder/delete-query-builder.js +4 -4
  178. package/dist/esm/query-builder/function-module.d.ts +41 -6
  179. package/dist/esm/query-builder/function-module.js +3 -0
  180. package/dist/esm/query-builder/having-interface.d.ts +2 -5
  181. package/dist/esm/query-builder/insert-query-builder.d.ts +1 -1
  182. package/dist/esm/query-builder/join-builder.d.ts +2 -6
  183. package/dist/esm/query-builder/join-builder.js +3 -3
  184. package/dist/esm/query-builder/json-path-builder.d.ts +60 -4
  185. package/dist/esm/query-builder/on-conflict-builder.d.ts +143 -44
  186. package/dist/esm/query-builder/on-conflict-builder.js +5 -5
  187. package/dist/esm/query-builder/over-builder.js +1 -1
  188. package/dist/esm/query-builder/select-query-builder.d.ts +245 -86
  189. package/dist/esm/query-builder/select-query-builder.js +72 -923
  190. package/dist/esm/query-builder/update-query-builder.d.ts +106 -25
  191. package/dist/esm/query-builder/update-query-builder.js +3 -3
  192. package/dist/esm/query-builder/where-interface.d.ts +71 -24
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  194. package/dist/esm/query-compiler/default-query-compiler.js +39 -7
  195. package/dist/esm/query-creator.d.ts +74 -2
  196. package/dist/esm/query-creator.js +84 -7
  197. package/dist/esm/raw-builder/raw-builder.d.ts +88 -49
  198. package/dist/esm/raw-builder/raw-builder.js +17 -42
  199. package/dist/esm/raw-builder/sql.js +9 -9
  200. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  201. package/dist/esm/schema/alter-table-builder.js +12 -0
  202. package/dist/esm/schema/create-index-builder.d.ts +1 -1
  203. package/dist/esm/schema/create-index-builder.js +2 -2
  204. package/dist/esm/util/column-type.d.ts +7 -6
  205. package/dist/esm/util/json-object-args.d.ts +3 -0
  206. package/dist/esm/util/json-object-args.js +32 -0
  207. package/dist/esm/util/object-utils.d.ts +1 -0
  208. package/dist/esm/util/object-utils.js +7 -0
  209. package/dist/esm/util/type-utils.d.ts +10 -10
  210. package/helpers/sqlite.d.ts +1 -0
  211. package/helpers/sqlite.js +1 -0
  212. package/package.json +7 -4
@@ -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>;
@@ -539,7 +539,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
539
539
  * }
540
540
  * ```
541
541
  */
542
- $if<O2>(condition: boolean, func: (qb: this) => InsertQueryBuilder<DB, TB, O2>): O2 extends InsertResult ? InsertQueryBuilder<DB, TB, InsertResult> : O2 extends O & infer E ? InsertQueryBuilder<DB, TB, O & Partial<E>> : InsertQueryBuilder<DB, TB, Partial<O2>>;
542
+ $if<O2>(condition: boolean, func: (qb: this) => InsertQueryBuilder<any, any, O2>): O2 extends InsertResult ? InsertQueryBuilder<DB, TB, InsertResult> : O2 extends O & infer E ? InsertQueryBuilder<DB, TB, O & Partial<E>> : InsertQueryBuilder<DB, TB, Partial<O2>>;
543
543
  /**
544
544
  * Change the output type of the query.
545
545
  *
@@ -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 {};
@@ -14,7 +14,7 @@ class JoinBuilder {
14
14
  on(...args) {
15
15
  return new JoinBuilder({
16
16
  ...this.#props,
17
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseFilter)(args)),
17
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)),
18
18
  });
19
19
  }
20
20
  /**
@@ -26,7 +26,7 @@ class JoinBuilder {
26
26
  onRef(lhs, op, rhs) {
27
27
  return new JoinBuilder({
28
28
  ...this.#props,
29
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
29
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(lhs, op, rhs)),
30
30
  });
31
31
  }
32
32
  /**
@@ -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 */
@@ -152,7 +152,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
152
152
  * const result = await db
153
153
  * .selectFrom('person')
154
154
  * .select(eb =>
155
- * eb.cmpr('first_name', '=', 'Jennifer').as('is_jennifer')
155
+ * eb('first_name', '=', 'Jennifer').as('is_jennifer')
156
156
  * )
157
157
  * .executeTakeFirstOrThrow()
158
158
  *
@@ -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,24 +99,53 @@ 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) -->
102
103
  *
103
- * To combine conditions using `OR`, you can use the expression builder:
104
+ * You can use the `and` function to create a simple equality
105
+ * filter using an object
104
106
  *
105
107
  * ```ts
106
108
  * const persons = await db
107
109
  * .selectFrom('person')
108
110
  * .selectAll()
109
- * .where(({ or, and, cmpr }) => or([
110
- * and([
111
- * cmpr('first_name', '=', 'Jennifer'),
112
- * cmpr('last_name', '=', 'Aniston')
113
- * ]),
114
- * and([
115
- * cmpr('first_name', '=', 'Sylvester'),
116
- * cmpr('last_name', '=', 'Stallone')
117
- * ])
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) -->
130
+ *
131
+ * To combine conditions using `OR`, you can use the expression builder.
132
+ * There are two ways to create `OR` expressions. Both are shown in this
133
+ * example:
134
+ *
135
+ * ```ts
136
+ * const persons = await db
137
+ * .selectFrom('person')
138
+ * .selectAll()
139
+ * // 1. Using the `or` method on the expression builder:
140
+ * .where((eb) => eb.or([
141
+ * eb('first_name', '=', 'Jennifer'),
142
+ * eb('first_name', '=', 'Sylvester')
118
143
  * ]))
144
+ * // 2. Chaining expressions using the `or` method on the
145
+ * // created expressions:
146
+ * .where((eb) =>
147
+ * eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
148
+ * )
119
149
  * .execute()
120
150
  * ```
121
151
  *
@@ -125,19 +155,23 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
125
155
  * select *
126
156
  * from "person"
127
157
  * where (
128
- * ("first_name" = $1 AND "last_name" = $2)
129
- * OR
130
- * ("first_name" = $3 AND "last_name" = $4)
158
+ * ("first_name" = $1 or "first_name" = $2)
159
+ * and
160
+ * ("last_name" = $3 or "last_name" = $4)
131
161
  * )
132
162
  * ```
133
163
  *
134
- * <!-- siteExample("where", "Conditional where calls", 40) -->
164
+ * <!-- siteExample("where", "Conditional where calls", 50) -->
135
165
  *
136
166
  * You can add expressions conditionally like this:
137
167
  *
138
168
  * ```ts
169
+ * import { Expression, SqlBool } from 'kysely'
170
+ *
139
171
  * const firstName: string | undefined = 'Jennifer'
140
172
  * const lastName: string | undefined = 'Aniston'
173
+ * const under18 = true
174
+ * const over60 = true
141
175
  *
142
176
  * let query = db
143
177
  * .selectFrom('person')
@@ -153,6 +187,23 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
153
187
  * query = query.where('last_name', '=', lastName)
154
188
  * }
155
189
  *
190
+ * if (under18 || over60) {
191
+ * // Conditional OR expressions can be added like this.
192
+ * query = query.where((eb) => {
193
+ * const ors: Expression<SqlBool>[] = []
194
+ *
195
+ * if (under18) {
196
+ * ors.push(eb('age', '<', 18))
197
+ * }
198
+ *
199
+ * if (over60) {
200
+ * ors.push(eb('age', '>', 60))
201
+ * }
202
+ *
203
+ * return eb.or(ors)
204
+ * })
205
+ * }
206
+ *
156
207
  * const persons = await query.execute()
157
208
  * ```
158
209
  *
@@ -205,7 +256,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
205
256
  * select * from "person" where "id" in ($1, $2, $3)
206
257
  * ```
207
258
  *
208
- * <!-- siteExample("where", "Complex where clause", 50) -->
259
+ * <!-- siteExample("where", "Complex where clause", 60) -->
209
260
  *
210
261
  * For complex `where` expressions you can pass in a single callback and
211
262
  * use the `ExpressionBuilder` to build your expression:
@@ -217,10 +268,10 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
217
268
  * const persons = await db
218
269
  * .selectFrom('person')
219
270
  * .selectAll('person')
220
- * .where(({ cmpr, or, and, not, exists, selectFrom }) => and([
271
+ * .where(({ eb, or, and, not, exists, selectFrom }) => and([
221
272
  * or([
222
- * cmpr('first_name', '=', firstName),
223
- * cmpr('age', '<', maxAge)
273
+ * eb('first_name', '=', firstName),
274
+ * eb('age', '<', maxAge)
224
275
  * ]),
225
276
  * not(exists(
226
277
  * selectFrom('pet')
@@ -294,8 +345,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
294
345
  * .execute()
295
346
  * ```
296
347
  */
297
- where(factory: WhereExpressionFactory<DB, TB>): OnConflictBuilder<DB, TB>;
298
- where(expression: Expression<any>): OnConflictBuilder<DB, TB>;
348
+ where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictBuilder<DB, TB>;
299
349
  /**
300
350
  * Specify an index predicate for the index target.
301
351
  *
@@ -466,24 +516,53 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
466
516
  * select * from "person" where "id" in ($1, $2, $3)
467
517
  * ```
468
518
  *
469
- * <!-- siteExample("where", "OR where", 30) -->
519
+ * <!-- siteExample("where", "Object filter", 30) -->
470
520
  *
471
- * To combine conditions using `OR`, you can use the expression builder:
521
+ * You can use the `and` function to create a simple equality
522
+ * filter using an object
472
523
  *
473
524
  * ```ts
474
525
  * const persons = await db
475
526
  * .selectFrom('person')
476
527
  * .selectAll()
477
- * .where(({ or, and, cmpr }) => or([
478
- * and([
479
- * cmpr('first_name', '=', 'Jennifer'),
480
- * cmpr('last_name', '=', 'Aniston')
481
- * ]),
482
- * and([
483
- * cmpr('first_name', '=', 'Sylvester'),
484
- * cmpr('last_name', '=', 'Stallone')
485
- * ])
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) -->
547
+ *
548
+ * To combine conditions using `OR`, you can use the expression builder.
549
+ * There are two ways to create `OR` expressions. Both are shown in this
550
+ * example:
551
+ *
552
+ * ```ts
553
+ * const persons = await db
554
+ * .selectFrom('person')
555
+ * .selectAll()
556
+ * // 1. Using the `or` method on the expression builder:
557
+ * .where((eb) => eb.or([
558
+ * eb('first_name', '=', 'Jennifer'),
559
+ * eb('first_name', '=', 'Sylvester')
486
560
  * ]))
561
+ * // 2. Chaining expressions using the `or` method on the
562
+ * // created expressions:
563
+ * .where((eb) =>
564
+ * eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
565
+ * )
487
566
  * .execute()
488
567
  * ```
489
568
  *
@@ -493,19 +572,23 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
493
572
  * select *
494
573
  * from "person"
495
574
  * where (
496
- * ("first_name" = $1 AND "last_name" = $2)
497
- * OR
498
- * ("first_name" = $3 AND "last_name" = $4)
575
+ * ("first_name" = $1 or "first_name" = $2)
576
+ * and
577
+ * ("last_name" = $3 or "last_name" = $4)
499
578
  * )
500
579
  * ```
501
580
  *
502
- * <!-- siteExample("where", "Conditional where calls", 40) -->
581
+ * <!-- siteExample("where", "Conditional where calls", 50) -->
503
582
  *
504
583
  * You can add expressions conditionally like this:
505
584
  *
506
585
  * ```ts
586
+ * import { Expression, SqlBool } from 'kysely'
587
+ *
507
588
  * const firstName: string | undefined = 'Jennifer'
508
589
  * const lastName: string | undefined = 'Aniston'
590
+ * const under18 = true
591
+ * const over60 = true
509
592
  *
510
593
  * let query = db
511
594
  * .selectFrom('person')
@@ -521,6 +604,23 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
521
604
  * query = query.where('last_name', '=', lastName)
522
605
  * }
523
606
  *
607
+ * if (under18 || over60) {
608
+ * // Conditional OR expressions can be added like this.
609
+ * query = query.where((eb) => {
610
+ * const ors: Expression<SqlBool>[] = []
611
+ *
612
+ * if (under18) {
613
+ * ors.push(eb('age', '<', 18))
614
+ * }
615
+ *
616
+ * if (over60) {
617
+ * ors.push(eb('age', '>', 60))
618
+ * }
619
+ *
620
+ * return eb.or(ors)
621
+ * })
622
+ * }
623
+ *
524
624
  * const persons = await query.execute()
525
625
  * ```
526
626
  *
@@ -573,7 +673,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
573
673
  * select * from "person" where "id" in ($1, $2, $3)
574
674
  * ```
575
675
  *
576
- * <!-- siteExample("where", "Complex where clause", 50) -->
676
+ * <!-- siteExample("where", "Complex where clause", 60) -->
577
677
  *
578
678
  * For complex `where` expressions you can pass in a single callback and
579
679
  * use the `ExpressionBuilder` to build your expression:
@@ -585,10 +685,10 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
585
685
  * const persons = await db
586
686
  * .selectFrom('person')
587
687
  * .selectAll('person')
588
- * .where(({ cmpr, or, and, not, exists, selectFrom }) => and([
688
+ * .where(({ eb, or, and, not, exists, selectFrom }) => and([
589
689
  * or([
590
- * cmpr('first_name', '=', firstName),
591
- * cmpr('age', '<', maxAge)
690
+ * eb('first_name', '=', firstName),
691
+ * eb('age', '<', maxAge)
592
692
  * ]),
593
693
  * not(exists(
594
694
  * selectFrom('pet')
@@ -662,8 +762,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
662
762
  * .execute()
663
763
  * ```
664
764
  */
665
- where(factory: WhereExpressionFactory<DB, TB>): OnConflictUpdateBuilder<DB, TB>;
666
- where(expression: Expression<any>): OnConflictUpdateBuilder<DB, TB>;
765
+ where(expression: ExpressionOrFactory<DB, TB, SqlBool>): OnConflictUpdateBuilder<DB, TB>;
667
766
  /**
668
767
  * Specify a where condition for the update operation.
669
768
  *
@@ -80,7 +80,7 @@ class OnConflictBuilder {
80
80
  where(...args) {
81
81
  return new OnConflictBuilder({
82
82
  ...this.#props,
83
- onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseFilter)(args)),
83
+ onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)),
84
84
  });
85
85
  }
86
86
  /**
@@ -91,7 +91,7 @@ class OnConflictBuilder {
91
91
  whereRef(lhs, op, rhs) {
92
92
  return new OnConflictBuilder({
93
93
  ...this.#props,
94
- onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
94
+ onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(lhs, op, rhs)),
95
95
  });
96
96
  }
97
97
  clearWhere() {
@@ -208,7 +208,7 @@ class OnConflictUpdateBuilder {
208
208
  where(...args) {
209
209
  return new OnConflictUpdateBuilder({
210
210
  ...this.#props,
211
- onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseFilter)(args)),
211
+ onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args)),
212
212
  });
213
213
  }
214
214
  /**
@@ -219,7 +219,7 @@ class OnConflictUpdateBuilder {
219
219
  whereRef(lhs, op, rhs) {
220
220
  return new OnConflictUpdateBuilder({
221
221
  ...this.#props,
222
- onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
222
+ onConflictNode: on_conflict_node_js_1.OnConflictNode.cloneWithUpdateWhere(this.#props.onConflictNode, (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(lhs, op, rhs)),
223
223
  });
224
224
  }
225
225
  clearWhere() {
@@ -34,7 +34,7 @@ class OverBuilder {
34
34
  */
35
35
  orderBy(orderBy, direction) {
36
36
  return new OverBuilder({
37
- overNode: over_node_js_1.OverNode.cloneWithOrderByItem(this.#props.overNode, (0, order_by_parser_js_1.parseOrderBy)(orderBy, direction)),
37
+ overNode: over_node_js_1.OverNode.cloneWithOrderByItems(this.#props.overNode, (0, order_by_parser_js_1.parseOrderBy)([orderBy, direction])),
38
38
  });
39
39
  }
40
40
  partitionBy(partitionBy) {