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
@@ -3,7 +3,7 @@ import { ColumnNode } from '../operation-node/column-node.js';
3
3
  import { IdentifierNode } from '../operation-node/identifier-node.js';
4
4
  import { OnConflictNode } from '../operation-node/on-conflict-node.js';
5
5
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
6
- import { parseUpdateExpression, } from '../parser/update-set-parser.js';
6
+ import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js';
7
7
  import { freeze } from '../util/object-utils.js';
8
8
  import { preventAwait } from '../util/prevent-await.js';
9
9
  export class OnConflictBuilder {
@@ -81,11 +81,6 @@ export class OnConflictBuilder {
81
81
  onConflictNode: OnConflictNode.cloneWithIndexWhere(this.#props.onConflictNode, parseValueBinaryOperationOrExpression(args)),
82
82
  });
83
83
  }
84
- /**
85
- * Specify an index predicate for the index target.
86
- *
87
- * See {@link WhereInterface.whereRef} for more info.
88
- */
89
84
  whereRef(lhs, op, rhs) {
90
85
  return new OnConflictBuilder({
91
86
  ...this.#props,
@@ -173,7 +168,7 @@ export class OnConflictBuilder {
173
168
  return new OnConflictUpdateBuilder({
174
169
  ...this.#props,
175
170
  onConflictNode: OnConflictNode.cloneWith(this.#props.onConflictNode, {
176
- updates: parseUpdateExpression(update),
171
+ updates: parseUpdateObjectExpression(update),
177
172
  }),
178
173
  });
179
174
  }
@@ -28,7 +28,7 @@ export declare class OverBuilder<DB, TB extends keyof DB> implements OperationNo
28
28
  * from "person"
29
29
  * ```
30
30
  */
31
- orderBy(orderBy: StringReference<DB, TB> | DynamicReferenceBuilder<any>, direction?: OrderByDirectionExpression): OverBuilder<DB, TB>;
31
+ orderBy<OE extends StringReference<DB, TB> | DynamicReferenceBuilder<any>>(orderBy: OE, direction?: OrderByDirectionExpression): OverBuilder<DB, TB>;
32
32
  /**
33
33
  * Adds partition by clause item/s inside the over function.
34
34
  *
@@ -51,7 +51,7 @@ export declare class OverBuilder<DB, TB extends keyof DB> implements OperationNo
51
51
  * ```
52
52
  */
53
53
  partitionBy(partitionBy: ReadonlyArray<PartitionByExpression<DB, TB>>): OverBuilder<DB, TB>;
54
- partitionBy(partitionBy: PartitionByExpression<DB, TB>): OverBuilder<DB, TB>;
54
+ partitionBy<PE extends PartitionByExpression<DB, TB>>(partitionBy: PE): OverBuilder<DB, TB>;
55
55
  /**
56
56
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
57
57
  * what the provided function returns.
@@ -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 {};
@@ -1,7 +1,7 @@
1
1
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
2
2
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
3
3
  import { TableExpression } from '../parser/table-parser.js';
4
- import { SelectExpression, Selection, SelectArg, AllSelection } from '../parser/select-parser.js';
4
+ import { SelectExpression, Selection, AllSelection, SelectCallback, CallbackSelection } from '../parser/select-parser.js';
5
5
  import { ReferenceExpression } from '../parser/reference-parser.js';
6
6
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
7
7
  import { QueryNode } from '../operation-node/query-node.js';
@@ -17,14 +17,15 @@ import { NoResultErrorConstructor } from './no-result-error.js';
17
17
  import { HavingInterface } from './having-interface.js';
18
18
  import { Explainable, ExplainFormat } from '../util/explainable.js';
19
19
  import { SetOperandExpression } from '../parser/set-operation-parser.js';
20
- import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
20
+ import { AliasedExpression, Expression } from '../expression/expression.js';
21
21
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
22
22
  import { KyselyTypeError } from '../util/type-error.js';
23
23
  import { Selectable } from '../util/column-type.js';
24
24
  import { Streamable } from '../util/streamable.js';
25
25
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
26
26
  import { ExpressionWrapper } from '../expression/expression-wrapper.js';
27
- export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, AliasableExpression<O>, Compilable<O>, Explainable, Streamable<O> {
27
+ import { SelectQueryBuilderExpression } from './select-query-builder-expression.js';
28
+ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
28
29
  /**
29
30
  * Adds a `where` expression to the query.
30
31
  *
@@ -324,8 +325,8 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
324
325
  * .execute()
325
326
  * ```
326
327
  */
327
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
328
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
328
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): SelectQueryBuilder<DB, TB, O>;
329
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): SelectQueryBuilder<DB, TB, O>;
329
330
  /**
330
331
  * Adds a `where` clause where both sides of the operator are references
331
332
  * to columns.
@@ -377,18 +378,18 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
377
378
  * ) as "pet_name"
378
379
  * from "person"
379
380
  */
380
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
381
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): SelectQueryBuilder<DB, TB, O>;
381
382
  /**
382
383
  * Just like {@link WhereInterface.where | where} but adds a `having` statement
383
384
  * instead of a `where` statement.
384
385
  */
385
- having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
386
- having(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
386
+ having<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): SelectQueryBuilder<DB, TB, O>;
387
+ having<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): SelectQueryBuilder<DB, TB, O>;
387
388
  /**
388
389
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
389
390
  * instead of a `where` statement.
390
391
  */
391
- havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
392
+ havingRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): SelectQueryBuilder<DB, TB, O>;
392
393
  /**
393
394
  * Adds a select statement to the query.
394
395
  *
@@ -467,14 +468,14 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
467
468
  *
468
469
  * <!-- siteExample("select", "Aliases", 40) -->
469
470
  *
470
- * You can provide an alias for the selections by appending `as the_alias` to the selection.
471
+ * You can give an alias for selections and tables by appending `as the_alias` to the name:
471
472
  *
472
473
  * ```ts
473
474
  * const persons = await db
474
- * .selectFrom('person')
475
+ * .selectFrom('person as p')
475
476
  * .select([
476
477
  * 'first_name as fn',
477
- * 'person.last_name as ln'
478
+ * 'p.last_name as ln'
478
479
  * ])
479
480
  * .execute()
480
481
  * ```
@@ -484,8 +485,8 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
484
485
  * ```sql
485
486
  * select
486
487
  * "first_name" as "fn",
487
- * "person"."last_name" as "ln"
488
- * from "person"
488
+ * "p"."last_name" as "ln"
489
+ * from "person" as "p"
489
490
  * ```
490
491
  *
491
492
  * <!-- siteExample("select", "Complex selections", 50) -->
@@ -575,7 +576,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
575
576
  * persons[0].id
576
577
  * ```
577
578
  */
578
- select<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
579
+ select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
580
+ select<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, O & CallbackSelection<DB, TB, CB>>;
581
+ select<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
579
582
  /**
580
583
  * Adds `distinct on` expressions to the select clause.
581
584
  *
@@ -1032,9 +1035,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1032
1035
  * order by "fn" asc
1033
1036
  * ```
1034
1037
  */
1035
- orderBy(orderBy: UndirectedOrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1036
- orderBy(ref: DirectedOrderByStringReference<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1037
- orderBy(refs: ReadonlyArray<OrderByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
1038
+ orderBy<OE extends UndirectedOrderByExpression<DB, TB, O>>(orderBy: OE, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1039
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, O>>(ref: OE): SelectQueryBuilder<DB, TB, O>;
1040
+ orderBy<OE extends OrderByExpression<DB, TB, O>>(refs: ReadonlyArray<OE>): SelectQueryBuilder<DB, TB, O>;
1038
1041
  /**
1039
1042
  * Adds a `group by` clause to the query.
1040
1043
  *
@@ -1133,7 +1136,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1133
1136
  * group by "first_name"
1134
1137
  * ```
1135
1138
  */
1136
- groupBy(groupBy: GroupByArg<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1139
+ groupBy<GE extends GroupByArg<DB, TB, O>>(groupBy: GE): SelectQueryBuilder<DB, TB, O>;
1137
1140
  /**
1138
1141
  * Adds a limit clause to the query.
1139
1142
  *
@@ -1201,7 +1204,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1201
1204
  * .orderBy('name')
1202
1205
  * ```
1203
1206
  */
1204
- union(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1207
+ union<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1205
1208
  /**
1206
1209
  * Combines another select query or raw expression to this query using `union all`.
1207
1210
  *
@@ -1228,7 +1231,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1228
1231
  * .orderBy('name')
1229
1232
  * ```
1230
1233
  */
1231
- unionAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1234
+ unionAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1232
1235
  /**
1233
1236
  * Combines another select query or raw expression to this query using `intersect`.
1234
1237
  *
@@ -1255,7 +1258,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1255
1258
  * .orderBy('name')
1256
1259
  * ```
1257
1260
  */
1258
- intersect(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1261
+ intersect<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1259
1262
  /**
1260
1263
  * Combines another select query or raw expression to this query using `intersect all`.
1261
1264
  *
@@ -1282,7 +1285,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1282
1285
  * .orderBy('name')
1283
1286
  * ```
1284
1287
  */
1285
- intersectAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1288
+ intersectAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1286
1289
  /**
1287
1290
  * Combines another select query or raw expression to this query using `except`.
1288
1291
  *
@@ -1309,7 +1312,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1309
1312
  * .orderBy('name')
1310
1313
  * ```
1311
1314
  */
1312
- except(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1315
+ except<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1313
1316
  /**
1314
1317
  * Combines another select query or raw expression to this query using `except all`.
1315
1318
  *
@@ -1336,7 +1339,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1336
1339
  * .orderBy('name')
1337
1340
  * ```
1338
1341
  */
1339
- exceptAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1342
+ exceptAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1340
1343
  /**
1341
1344
  * Gives an alias for the query. This method is only useful for sub queries.
1342
1345
  *
@@ -1356,7 +1359,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1356
1359
  * pets[0].owner_first_name
1357
1360
  * ```
1358
1361
  */
1359
- as<A extends string>(alias: A): AliasedSelectQueryBuilder<DB, TB, O, A>;
1362
+ as<A extends string>(alias: A): AliasedSelectQueryBuilder<O, A>;
1360
1363
  /**
1361
1364
  * Clears all select clauses from the query.
1362
1365
  *
@@ -1542,7 +1545,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1542
1545
  * )
1543
1546
  * ```
1544
1547
  */
1545
- $if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<any, any, O & O2>): SelectQueryBuilder<DB, TB, O & Partial<O2>>;
1548
+ $if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<any, any, O & O2>): SelectQueryBuilder<DB, TB, O & Partial<Omit<O2, keyof O>>>;
1546
1549
  /**
1547
1550
  * Change the output type of the query.
1548
1551
  *
@@ -1637,6 +1640,22 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1637
1640
  *
1638
1641
  * functionThatExpectsPersonWithNonNullValue(person)
1639
1642
  * ```
1643
+ *
1644
+ * Giving the explicit narrowed type (`string` in the example above) works fine for
1645
+ * simple types. If the type is complex, for example a JSON column or a subquery,
1646
+ * you can use the special `NotNull` type to make the column not null.
1647
+ *
1648
+ * ```ts
1649
+ * import { NotNull } from 'kysely'
1650
+ *
1651
+ * const person = await db.selectFrom('person')
1652
+ * .where('nullable_column', 'is not', null)
1653
+ * .selectAll()
1654
+ * .$narrowType<{ nullable_column: NotNull }>()
1655
+ * .executeTakeFirstOrThrow()
1656
+ *
1657
+ * functionThatExpectsPersonWithNonNullValue(person)
1658
+ * ```
1640
1659
  */
1641
1660
  $narrowType<T>(): SelectQueryBuilder<DB, TB, NarrowPartial<O, T>>;
1642
1661
  /**
@@ -1789,8 +1808,8 @@ export interface SelectQueryBuilderProps {
1789
1808
  readonly queryNode: SelectQueryNode;
1790
1809
  readonly executor: QueryExecutor;
1791
1810
  }
1792
- export interface AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> extends AliasedExpression<O, A> {
1793
- get selectQueryBuilder(): SelectQueryBuilder<DB, TB, O>;
1811
+ export interface AliasedSelectQueryBuilder<O = undefined, A extends string = never> extends AliasedExpression<O, A> {
1812
+ get isAliasedSelectQueryBuilder(): true;
1794
1813
  }
1795
1814
  export type SelectQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? SelectQueryBuilder<DB, TB | TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : never;
1796
1815
  type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? SelectQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & ShallowRecord<A, R>, TB | A, O>;
@@ -25,6 +25,9 @@ class SelectQueryBuilderImpl {
25
25
  get expressionType() {
26
26
  return undefined;
27
27
  }
28
+ get isSelectQueryBuilder() {
29
+ return true;
30
+ }
28
31
  where(...args) {
29
32
  return new SelectQueryBuilderImpl({
30
33
  ...this.#props,
@@ -339,8 +342,8 @@ class AliasedSelectQueryBuilderImpl {
339
342
  get alias() {
340
343
  return this.#alias;
341
344
  }
342
- get selectQueryBuilder() {
343
- return this.#queryBuilder;
345
+ get isAliasedSelectQueryBuilder() {
346
+ return true;
344
347
  }
345
348
  toOperationNode() {
346
349
  return AliasNode.create(this.#queryBuilder.toOperationNode(), IdentifierNode.create(this.#alias));
@@ -2,13 +2,13 @@ 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 { TableExpression, From, FromTables } from '../parser/table-parser.js';
5
- import { SelectExpression, SelectArg } from '../parser/select-parser.js';
6
- import { ReturningRow } from '../parser/returning-parser.js';
5
+ import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
6
+ import { 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';
10
10
  import { UpdateQueryNode } from '../operation-node/update-query-node.js';
11
- import { UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js';
11
+ import { UpdateObject, UpdateObjectFactory, ExtractUpdateTypeFromReferenceExpression } from '../parser/update-set-parser.js';
12
12
  import { Compilable } from '../util/compilable.js';
13
13
  import { QueryExecutor } from '../query-executor/query-executor.js';
14
14
  import { QueryId } from '../util/query-id.js';
@@ -24,6 +24,7 @@ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../p
24
24
  import { KyselyTypeError } from '../util/type-error.js';
25
25
  import { Streamable } from '../util/streamable.js';
26
26
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
27
+ import { ValueExpression } from '../parser/value-parser.js';
27
28
  export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
28
29
  #private;
29
30
  constructor(props: UpdateQueryBuilderProps);
@@ -326,8 +327,8 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
326
327
  * .execute()
327
328
  * ```
328
329
  */
329
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, UT, TB, O>;
330
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): UpdateQueryBuilder<DB, UT, TB, O>;
330
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): UpdateQueryBuilder<DB, UT, TB, O>;
331
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): UpdateQueryBuilder<DB, UT, TB, O>;
331
332
  /**
332
333
  * Adds a `where` clause where both sides of the operator are references
333
334
  * to columns.
@@ -379,7 +380,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
379
380
  * ) as "pet_name"
380
381
  * from "person"
381
382
  */
382
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, UT, TB, O>;
383
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): UpdateQueryBuilder<DB, UT, TB, O>;
383
384
  /**
384
385
  * Clears all where expressions from the query.
385
386
  *
@@ -625,6 +626,20 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
625
626
  * "id" = $4
626
627
  * ```
627
628
  *
629
+ * If you provide two arguments the first one is interpreted as the column
630
+ * (or other target) and the second as the value:
631
+ *
632
+ * ```ts
633
+ * const result = await db
634
+ * .updateTable('person')
635
+ * .set('first_name', 'Foo')
636
+ * // As always, both arguments can be arbitrary expressions or
637
+ * // callbacks that give you access to an expression builder:
638
+ * .set(sql`address['postalCode']`, (eb) => eb.val('61710))
639
+ * .where('id', '=', '1')
640
+ * .executeTakeFirst()
641
+ * ```
642
+ *
628
643
  * On PostgreSQL you can chain `returning` to the query to get
629
644
  * the updated rows' columns (or any other expression) as the
630
645
  * return value:
@@ -682,6 +697,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
682
697
  */
683
698
  set(update: UpdateObject<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
684
699
  set(update: UpdateObjectFactory<DB, TB, UT>): UpdateQueryBuilder<DB, UT, TB, O>;
700
+ set<RE extends ReferenceExpression<DB, UT>>(key: RE, value: ValueExpression<DB, TB, ExtractUpdateTypeFromReferenceExpression<DB, UT, RE>>): UpdateQueryBuilder<DB, UT, TB, O>;
685
701
  /**
686
702
  * Allows you to return data from modified rows.
687
703
  *
@@ -741,7 +757,9 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
741
757
  * .executeTakeFirst()
742
758
  * ```
743
759
  */
744
- returning<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
760
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
761
+ returning<CB extends SelectCallback<DB, TB>>(callback: CB): UpdateQueryBuilder<DB, UT, TB, ReturningCallbackRow<DB, TB, O, CB>>;
762
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SE>>;
745
763
  /**
746
764
  * Adds a `returning *` to an insert/update/delete query on databases
747
765
  * that support `returning` such as PostgreSQL.
@@ -4,7 +4,7 @@ import { parseTableExpressionOrList, } from '../parser/table-parser.js';
4
4
  import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
5
5
  import { QueryNode } from '../operation-node/query-node.js';
6
6
  import { UpdateQueryNode } from '../operation-node/update-query-node.js';
7
- import { parseUpdateExpression, } from '../parser/update-set-parser.js';
7
+ import { parseUpdate, } from '../parser/update-set-parser.js';
8
8
  import { preventAwait } from '../util/prevent-await.js';
9
9
  import { freeze } from '../util/object-utils.js';
10
10
  import { UpdateResult } from './update-result.js';
@@ -63,10 +63,10 @@ export class UpdateQueryBuilder {
63
63
  queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
64
64
  });
65
65
  }
66
- set(update) {
66
+ set(...args) {
67
67
  return new UpdateQueryBuilder({
68
68
  ...this.#props,
69
- queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateExpression(update)),
69
+ queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdate(...args)),
70
70
  });
71
71
  }
72
72
  returning(selection) {
@@ -302,8 +302,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
302
302
  * .execute()
303
303
  * ```
304
304
  */
305
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): WhereInterface<DB, TB>;
306
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): WhereInterface<DB, TB>;
305
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): WhereInterface<DB, TB>;
306
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): WhereInterface<DB, TB>;
307
307
  /**
308
308
  * Adds a `where` clause where both sides of the operator are references
309
309
  * to columns.
@@ -355,7 +355,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
355
355
  * ) as "pet_name"
356
356
  * from "person"
357
357
  */
358
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): WhereInterface<DB, TB>;
358
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): WhereInterface<DB, TB>;
359
359
  /**
360
360
  * Clears all where expressions from the query.
361
361
  *
@@ -48,7 +48,7 @@ import { RootOperationNode, QueryCompiler } from './query-compiler.js';
48
48
  import { HavingNode } from '../operation-node/having-node.js';
49
49
  import { CreateSchemaNode } from '../operation-node/create-schema-node.js';
50
50
  import { DropSchemaNode } from '../operation-node/drop-schema-node.js';
51
- import { AlterTableNode } from '../operation-node/alter-table-node.js';
51
+ import { AlterTableColumnAlterationNode, AlterTableNode } from '../operation-node/alter-table-node.js';
52
52
  import { DropColumnNode } from '../operation-node/drop-column-node.js';
53
53
  import { RenameColumnNode } from '../operation-node/rename-column-node.js';
54
54
  import { AlterColumnNode } from '../operation-node/alter-column-node.js';
@@ -88,6 +88,7 @@ import { JSONPathNode } from '../operation-node/json-path-node.js';
88
88
  import { JSONPathLegNode } from '../operation-node/json-path-leg-node.js';
89
89
  import { JSONOperatorChainNode } from '../operation-node/json-operator-chain-node.js';
90
90
  import { TupleNode } from '../operation-node/tuple-node.js';
91
+ import { AddIndexNode } from '../operation-node/add-index-node.js';
91
92
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
92
93
  #private;
93
94
  protected get numParameters(): number;
@@ -184,6 +185,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
184
185
  protected visitJSONPath(node: JSONPathNode): void;
185
186
  protected visitJSONPathLeg(node: JSONPathLegNode): void;
186
187
  protected visitJSONOperatorChain(node: JSONOperatorChainNode): void;
188
+ protected visitAddIndex(node: AddIndexNode): void;
187
189
  protected append(str: string): void;
188
190
  protected appendValue(parameter: unknown): void;
189
191
  protected getLeftIdentifierWrapper(): string;
@@ -197,4 +199,10 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
197
199
  protected addParameter(parameter: unknown): void;
198
200
  protected appendImmediateValue(value: unknown): void;
199
201
  protected sortSelectModifiers(arr: SelectModifierNode[]): ReadonlyArray<SelectModifierNode>;
202
+ protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
203
+ /**
204
+ * controls whether the dialect adds a "type" keyword before a column's new data
205
+ * type in an ALTER TABLE statement.
206
+ */
207
+ protected announcesNewColumnDataType(): boolean;
200
208
  }
@@ -1,4 +1,5 @@
1
1
  /// <reference types="./default-query-compiler.d.ts" />
2
+ import { CreateTableNode } from '../operation-node/create-table-node.js';
2
3
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
3
4
  import { OperationNodeVisitor } from '../operation-node/operation-node-visitor.js';
4
5
  import { OperatorNode } from '../operation-node/operator-node.js';
@@ -30,6 +31,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
30
31
  const wrapInParens = this.parentNode !== undefined &&
31
32
  !ParensNode.is(this.parentNode) &&
32
33
  !InsertQueryNode.is(this.parentNode) &&
34
+ !CreateTableNode.is(this.parentNode) &&
33
35
  !CreateViewNode.is(this.parentNode) &&
34
36
  !SetOperationNode.is(this.parentNode);
35
37
  if (this.parentNode === undefined && node.explain) {
@@ -346,16 +348,22 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
346
348
  this.append('if not exists ');
347
349
  }
348
350
  this.visitNode(node.table);
349
- this.append(' (');
350
- this.compileList([...node.columns, ...(node.constraints ?? [])]);
351
- this.append(')');
352
- if (node.onCommit) {
353
- this.append(' on commit ');
354
- this.append(node.onCommit);
351
+ if (node.selectQuery) {
352
+ this.append(' as ');
353
+ this.visitNode(node.selectQuery);
355
354
  }
356
- if (node.endModifiers && node.endModifiers.length > 0) {
357
- this.append(' ');
358
- this.compileList(node.endModifiers, ' ');
355
+ else {
356
+ this.append(' (');
357
+ this.compileList([...node.columns, ...(node.constraints ?? [])]);
358
+ this.append(')');
359
+ if (node.onCommit) {
360
+ this.append(' on commit ');
361
+ this.append(node.onCommit);
362
+ }
363
+ if (node.endModifiers && node.endModifiers.length > 0) {
364
+ this.append(' ');
365
+ this.compileList(node.endModifiers, ' ');
366
+ }
359
367
  }
360
368
  }
361
369
  visitColumnDefinition(node) {
@@ -383,6 +391,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
383
391
  if (node.unique) {
384
392
  this.append(' unique');
385
393
  }
394
+ if (node.nullsNotDistinct) {
395
+ this.append(' nulls not distinct');
396
+ }
386
397
  if (node.primaryKey) {
387
398
  this.append(' primary key');
388
399
  }
@@ -563,6 +574,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
563
574
  this.compileList(node.columns);
564
575
  this.append(')');
565
576
  }
577
+ if (node.nullsNotDistinct) {
578
+ this.append(' nulls not distinct');
579
+ }
566
580
  if (node.where) {
567
581
  this.append(' ');
568
582
  this.visitNode(node.where);
@@ -615,7 +629,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
615
629
  this.visitNode(node.name);
616
630
  this.append(' ');
617
631
  }
618
- this.append('unique (');
632
+ this.append('unique');
633
+ if (node.nullsNotDistinct) {
634
+ this.append(' nulls not distinct');
635
+ }
636
+ this.append(' (');
619
637
  this.compileList(node.columns);
620
638
  this.append(')');
621
639
  }
@@ -696,7 +714,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
696
714
  this.visitNode(node.dropConstraint);
697
715
  }
698
716
  if (node.columnAlterations) {
699
- this.compileList(node.columnAlterations);
717
+ this.compileColumnAlterations(node.columnAlterations);
718
+ }
719
+ if (node.addIndex) {
720
+ this.visitNode(node.addIndex);
721
+ }
722
+ if (node.dropIndex) {
723
+ this.visitNode(node.dropIndex);
700
724
  }
701
725
  }
702
726
  visitAddColumn(node) {
@@ -718,7 +742,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
718
742
  this.visitNode(node.column);
719
743
  this.append(' ');
720
744
  if (node.dataType) {
721
- this.append('type ');
745
+ if (this.announcesNewColumnDataType()) {
746
+ this.append('type ');
747
+ }
722
748
  this.visitNode(node.dataType);
723
749
  if (node.dataTypeExpression) {
724
750
  this.append('using ');
@@ -1004,6 +1030,23 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1004
1030
  this.visitNode(node.values[i]);
1005
1031
  }
1006
1032
  }
1033
+ visitAddIndex(node) {
1034
+ this.append('add ');
1035
+ if (node.unique) {
1036
+ this.append('unique ');
1037
+ }
1038
+ this.append('index ');
1039
+ this.visitNode(node.name);
1040
+ if (node.columns) {
1041
+ this.append(' (');
1042
+ this.compileList(node.columns);
1043
+ this.append(')');
1044
+ }
1045
+ if (node.using) {
1046
+ this.append(' using ');
1047
+ this.visitNode(node.using);
1048
+ }
1049
+ }
1007
1050
  append(str) {
1008
1051
  this.#sql += str;
1009
1052
  }
@@ -1077,6 +1120,16 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1077
1120
  : 1);
1078
1121
  return freeze(arr);
1079
1122
  }
1123
+ compileColumnAlterations(columnAlterations) {
1124
+ this.compileList(columnAlterations);
1125
+ }
1126
+ /**
1127
+ * controls whether the dialect adds a "type" keyword before a column's new data
1128
+ * type in an ALTER TABLE statement.
1129
+ */
1130
+ announcesNewColumnDataType() {
1131
+ return true;
1132
+ }
1080
1133
  }
1081
1134
  const SELECT_MODIFIER_SQL = freeze({
1082
1135
  ForKeyShare: 'for key share',