kysely 0.26.3 → 0.27.1

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 (216) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
  3. package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
  4. package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
  5. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
  6. package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
  7. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
  10. package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
  12. package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
  13. package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
  14. package/dist/cjs/dialect/mssql/mssql-introspector.js +99 -0
  15. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  16. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
  17. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  18. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
  22. package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  23. package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
  24. package/dist/cjs/driver/driver.d.ts +1 -1
  25. package/dist/cjs/driver/driver.js +1 -0
  26. package/dist/cjs/driver/runtime-driver.js +5 -1
  27. package/dist/cjs/driver/single-connection-provider.js +7 -8
  28. package/dist/cjs/expression/expression-builder.d.ts +66 -75
  29. package/dist/cjs/expression/expression-builder.js +8 -17
  30. package/dist/cjs/expression/expression-wrapper.d.ts +21 -11
  31. package/dist/cjs/expression/expression-wrapper.js +12 -0
  32. package/dist/cjs/helpers/mssql.d.ts +152 -0
  33. package/dist/cjs/helpers/mssql.js +160 -0
  34. package/dist/cjs/index.d.ts +7 -1
  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/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/limit-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/limit-node.js +1 -2
  47. package/dist/cjs/operation-node/offset-node.d.ts +2 -3
  48. package/dist/cjs/operation-node/offset-node.js +1 -2
  49. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.js +19 -0
  51. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  52. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  53. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  55. package/dist/cjs/operation-node/operator-node.js +2 -0
  56. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -1
  57. package/dist/cjs/operation-node/select-modifier-node.js +2 -1
  58. package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
  59. package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
  60. package/dist/cjs/parser/binary-operation-parser.js +1 -1
  61. package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
  62. package/dist/cjs/parser/reference-parser.d.ts +2 -1
  63. package/dist/cjs/parser/update-set-parser.d.ts +5 -2
  64. package/dist/cjs/parser/update-set-parser.js +13 -3
  65. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +21 -4
  66. package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
  67. package/dist/cjs/query-builder/case-builder.d.ts +6 -5
  68. package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -7
  69. package/dist/cjs/query-builder/delete-query-builder.js +4 -3
  70. package/dist/cjs/query-builder/function-module.d.ts +96 -25
  71. package/dist/cjs/query-builder/function-module.js +17 -3
  72. package/dist/cjs/query-builder/having-interface.d.ts +3 -5
  73. package/dist/cjs/query-builder/insert-query-builder.d.ts +34 -12
  74. package/dist/cjs/query-builder/insert-query-builder.js +16 -5
  75. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  76. package/dist/cjs/query-builder/insert-result.js +8 -1
  77. package/dist/cjs/query-builder/json-path-builder.d.ts +5 -3
  78. package/dist/cjs/query-builder/json-path-builder.js +9 -3
  79. package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
  80. package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
  81. package/dist/cjs/query-builder/over-builder.d.ts +2 -2
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +49 -31
  83. package/dist/cjs/query-builder/select-query-builder.js +12 -10
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +23 -7
  85. package/dist/cjs/query-builder/update-query-builder.js +4 -4
  86. package/dist/cjs/query-builder/where-interface.d.ts +3 -3
  87. package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
  88. package/dist/cjs/query-compiler/default-query-compiler.js +73 -12
  89. package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
  90. package/dist/cjs/raw-builder/raw-builder.js +3 -0
  91. package/dist/cjs/raw-builder/sql.js +9 -2
  92. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
  93. package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
  94. package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
  95. package/dist/cjs/schema/alter-table-builder.js +59 -2
  96. package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
  97. package/dist/cjs/schema/column-definition-builder.js +27 -0
  98. package/dist/cjs/schema/create-index-builder.d.ts +23 -0
  99. package/dist/cjs/schema/create-index-builder.js +30 -0
  100. package/dist/cjs/schema/create-table-builder.d.ts +28 -2
  101. package/dist/cjs/schema/create-table-builder.js +38 -3
  102. package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
  103. package/dist/cjs/schema/unique-constraint-builder.js +24 -0
  104. package/dist/cjs/util/log.js +5 -1
  105. package/dist/cjs/util/object-utils.d.ts +2 -2
  106. package/dist/cjs/util/object-utils.js +1 -1
  107. package/dist/cjs/util/type-utils.d.ts +27 -19
  108. package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
  109. package/dist/esm/dialect/dialect-adapter-base.js +3 -0
  110. package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
  111. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
  112. package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
  113. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
  114. package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
  115. package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
  116. package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
  117. package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
  118. package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
  119. package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
  120. package/dist/esm/dialect/mssql/mssql-introspector.js +96 -0
  121. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
  122. package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
  123. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
  124. package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
  125. package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
  126. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
  127. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
  128. package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
  129. package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
  130. package/dist/esm/driver/driver.d.ts +1 -1
  131. package/dist/esm/driver/driver.js +1 -0
  132. package/dist/esm/driver/runtime-driver.js +5 -1
  133. package/dist/esm/driver/single-connection-provider.js +7 -8
  134. package/dist/esm/expression/expression-builder.d.ts +66 -75
  135. package/dist/esm/expression/expression-builder.js +10 -19
  136. package/dist/esm/expression/expression-wrapper.d.ts +21 -11
  137. package/dist/esm/expression/expression-wrapper.js +12 -0
  138. package/dist/esm/helpers/mssql.d.ts +152 -0
  139. package/dist/esm/helpers/mssql.js +155 -0
  140. package/dist/esm/index.d.ts +7 -1
  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/insert-query-node.d.ts +1 -0
  151. package/dist/esm/operation-node/limit-node.d.ts +2 -3
  152. package/dist/esm/operation-node/limit-node.js +1 -2
  153. package/dist/esm/operation-node/offset-node.d.ts +2 -3
  154. package/dist/esm/operation-node/offset-node.js +1 -2
  155. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  156. package/dist/esm/operation-node/operation-node-transformer.js +19 -0
  157. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  158. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  159. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  160. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  161. package/dist/esm/operation-node/operator-node.js +2 -0
  162. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -1
  163. package/dist/esm/operation-node/select-modifier-node.js +2 -1
  164. package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
  165. package/dist/esm/operation-node/unique-constraint-node.js +8 -1
  166. package/dist/esm/parser/binary-operation-parser.js +1 -1
  167. package/dist/esm/parser/coalesce-parser.d.ts +12 -2
  168. package/dist/esm/parser/reference-parser.d.ts +2 -1
  169. package/dist/esm/parser/update-set-parser.d.ts +5 -2
  170. package/dist/esm/parser/update-set-parser.js +10 -1
  171. package/dist/esm/query-builder/aggregate-function-builder.d.ts +21 -4
  172. package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
  173. package/dist/esm/query-builder/case-builder.d.ts +6 -5
  174. package/dist/esm/query-builder/delete-query-builder.d.ts +8 -7
  175. package/dist/esm/query-builder/delete-query-builder.js +4 -3
  176. package/dist/esm/query-builder/function-module.d.ts +96 -25
  177. package/dist/esm/query-builder/function-module.js +17 -3
  178. package/dist/esm/query-builder/having-interface.d.ts +3 -5
  179. package/dist/esm/query-builder/insert-query-builder.d.ts +34 -12
  180. package/dist/esm/query-builder/insert-query-builder.js +17 -6
  181. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  182. package/dist/esm/query-builder/insert-result.js +8 -1
  183. package/dist/esm/query-builder/json-path-builder.d.ts +5 -3
  184. package/dist/esm/query-builder/json-path-builder.js +9 -3
  185. package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
  186. package/dist/esm/query-builder/on-conflict-builder.js +2 -7
  187. package/dist/esm/query-builder/over-builder.d.ts +2 -2
  188. package/dist/esm/query-builder/select-query-builder.d.ts +49 -31
  189. package/dist/esm/query-builder/select-query-builder.js +13 -11
  190. package/dist/esm/query-builder/update-query-builder.d.ts +23 -7
  191. package/dist/esm/query-builder/update-query-builder.js +5 -5
  192. package/dist/esm/query-builder/where-interface.d.ts +3 -3
  193. package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
  194. package/dist/esm/query-compiler/default-query-compiler.js +73 -12
  195. package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
  196. package/dist/esm/raw-builder/raw-builder.js +3 -0
  197. package/dist/esm/raw-builder/sql.js +9 -2
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
  199. package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
  200. package/dist/esm/schema/alter-table-builder.d.ts +41 -1
  201. package/dist/esm/schema/alter-table-builder.js +59 -2
  202. package/dist/esm/schema/column-definition-builder.d.ts +25 -0
  203. package/dist/esm/schema/column-definition-builder.js +27 -0
  204. package/dist/esm/schema/create-index-builder.d.ts +23 -0
  205. package/dist/esm/schema/create-index-builder.js +30 -0
  206. package/dist/esm/schema/create-table-builder.d.ts +28 -2
  207. package/dist/esm/schema/create-table-builder.js +38 -3
  208. package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
  209. package/dist/esm/schema/unique-constraint-builder.js +21 -0
  210. package/dist/esm/util/log.js +5 -1
  211. package/dist/esm/util/object-utils.d.ts +2 -2
  212. package/dist/esm/util/object-utils.js +1 -1
  213. package/dist/esm/util/type-utils.d.ts +27 -19
  214. package/helpers/mssql.d.ts +1 -0
  215. package/helpers/mssql.js +1 -0
  216. package/package.json +15 -10
@@ -25,6 +25,7 @@ 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
27
  import { SelectQueryBuilderExpression } from './select-query-builder-expression.js';
28
+ import { ValueExpression } from '../parser/value-parser.js';
28
29
  export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
29
30
  /**
30
31
  * Adds a `where` expression to the query.
@@ -325,8 +326,8 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
325
326
  * .execute()
326
327
  * ```
327
328
  */
328
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
329
- where(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
329
+ where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): SelectQueryBuilder<DB, TB, O>;
330
+ where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): SelectQueryBuilder<DB, TB, O>;
330
331
  /**
331
332
  * Adds a `where` clause where both sides of the operator are references
332
333
  * to columns.
@@ -378,18 +379,18 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
378
379
  * ) as "pet_name"
379
380
  * from "person"
380
381
  */
381
- whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
382
+ whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): SelectQueryBuilder<DB, TB, O>;
382
383
  /**
383
384
  * Just like {@link WhereInterface.where | where} but adds a `having` statement
384
385
  * instead of a `where` statement.
385
386
  */
386
- having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
387
- having(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
387
+ having<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): SelectQueryBuilder<DB, TB, O>;
388
+ having<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): SelectQueryBuilder<DB, TB, O>;
388
389
  /**
389
390
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
390
391
  * instead of a `where` statement.
391
392
  */
392
- havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
393
+ havingRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): SelectQueryBuilder<DB, TB, O>;
393
394
  /**
394
395
  * Adds a select statement to the query.
395
396
  *
@@ -468,14 +469,14 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
468
469
  *
469
470
  * <!-- siteExample("select", "Aliases", 40) -->
470
471
  *
471
- * You can provide an alias for the selections by appending `as the_alias` to the selection.
472
+ * You can give an alias for selections and tables by appending `as the_alias` to the name:
472
473
  *
473
474
  * ```ts
474
475
  * const persons = await db
475
- * .selectFrom('person')
476
+ * .selectFrom('person as p')
476
477
  * .select([
477
478
  * 'first_name as fn',
478
- * 'person.last_name as ln'
479
+ * 'p.last_name as ln'
479
480
  * ])
480
481
  * .execute()
481
482
  * ```
@@ -485,8 +486,8 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
485
486
  * ```sql
486
487
  * select
487
488
  * "first_name" as "fn",
488
- * "person"."last_name" as "ln"
489
- * from "person"
489
+ * "p"."last_name" as "ln"
490
+ * from "person" as "p"
490
491
  * ```
491
492
  *
492
493
  * <!-- siteExample("select", "Complex selections", 50) -->
@@ -674,19 +675,19 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
674
675
  /**
675
676
  * Adds the `for update` modifier to a select query on supported databases.
676
677
  */
677
- forUpdate(): SelectQueryBuilder<DB, TB, O>;
678
+ forUpdate(of?: TableOrList<TB>): SelectQueryBuilder<DB, TB, O>;
678
679
  /**
679
680
  * Adds the `for share` modifier to a select query on supported databases.
680
681
  */
681
- forShare(): SelectQueryBuilder<DB, TB, O>;
682
+ forShare(of?: TableOrList<TB>): SelectQueryBuilder<DB, TB, O>;
682
683
  /**
683
684
  * Adds the `for key share` modifier to a select query on supported databases.
684
685
  */
685
- forKeyShare(): SelectQueryBuilder<DB, TB, O>;
686
+ forKeyShare(of?: TableOrList<TB>): SelectQueryBuilder<DB, TB, O>;
686
687
  /**
687
688
  * Adds the `for no key update` modifier to a select query on supported databases.
688
689
  */
689
- forNoKeyUpdate(): SelectQueryBuilder<DB, TB, O>;
690
+ forNoKeyUpdate(of?: TableOrList<TB>): SelectQueryBuilder<DB, TB, O>;
690
691
  /**
691
692
  * Adds the `skip locked` modifier to a select query on supported databases.
692
693
  */
@@ -1035,9 +1036,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1035
1036
  * order by "fn" asc
1036
1037
  * ```
1037
1038
  */
1038
- orderBy(orderBy: UndirectedOrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1039
- orderBy(ref: DirectedOrderByStringReference<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1040
- orderBy(refs: ReadonlyArray<OrderByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
1039
+ orderBy<OE extends UndirectedOrderByExpression<DB, TB, O>>(orderBy: OE, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1040
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, O>>(ref: OE): SelectQueryBuilder<DB, TB, O>;
1041
+ orderBy<OE extends OrderByExpression<DB, TB, O>>(refs: ReadonlyArray<OE>): SelectQueryBuilder<DB, TB, O>;
1041
1042
  /**
1042
1043
  * Adds a `group by` clause to the query.
1043
1044
  *
@@ -1136,7 +1137,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1136
1137
  * group by "first_name"
1137
1138
  * ```
1138
1139
  */
1139
- groupBy(groupBy: GroupByArg<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1140
+ groupBy<GE extends GroupByArg<DB, TB, O>>(groupBy: GE): SelectQueryBuilder<DB, TB, O>;
1140
1141
  /**
1141
1142
  * Adds a limit clause to the query.
1142
1143
  *
@@ -1161,7 +1162,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1161
1162
  * .limit(10)
1162
1163
  * ```
1163
1164
  */
1164
- limit(limit: number): SelectQueryBuilder<DB, TB, O>;
1165
+ limit(limit: ValueExpression<DB, TB, number>): SelectQueryBuilder<DB, TB, O>;
1165
1166
  /**
1166
1167
  * Adds an offset clause to the query.
1167
1168
  *
@@ -1177,7 +1178,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1177
1178
  * .limit(10)
1178
1179
  * ```
1179
1180
  */
1180
- offset(offset: number): SelectQueryBuilder<DB, TB, O>;
1181
+ offset(offset: ValueExpression<DB, TB, number>): SelectQueryBuilder<DB, TB, O>;
1181
1182
  /**
1182
1183
  * Combines another select query or raw expression to this query using `union`.
1183
1184
  *
@@ -1204,7 +1205,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1204
1205
  * .orderBy('name')
1205
1206
  * ```
1206
1207
  */
1207
- union(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1208
+ union<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1208
1209
  /**
1209
1210
  * Combines another select query or raw expression to this query using `union all`.
1210
1211
  *
@@ -1231,7 +1232,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1231
1232
  * .orderBy('name')
1232
1233
  * ```
1233
1234
  */
1234
- unionAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1235
+ unionAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1235
1236
  /**
1236
1237
  * Combines another select query or raw expression to this query using `intersect`.
1237
1238
  *
@@ -1258,7 +1259,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1258
1259
  * .orderBy('name')
1259
1260
  * ```
1260
1261
  */
1261
- intersect(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1262
+ intersect<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1262
1263
  /**
1263
1264
  * Combines another select query or raw expression to this query using `intersect all`.
1264
1265
  *
@@ -1285,7 +1286,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1285
1286
  * .orderBy('name')
1286
1287
  * ```
1287
1288
  */
1288
- intersectAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1289
+ intersectAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1289
1290
  /**
1290
1291
  * Combines another select query or raw expression to this query using `except`.
1291
1292
  *
@@ -1312,7 +1313,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1312
1313
  * .orderBy('name')
1313
1314
  * ```
1314
1315
  */
1315
- except(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1316
+ except<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1316
1317
  /**
1317
1318
  * Combines another select query or raw expression to this query using `except all`.
1318
1319
  *
@@ -1339,7 +1340,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1339
1340
  * .orderBy('name')
1340
1341
  * ```
1341
1342
  */
1342
- exceptAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1343
+ exceptAll<E extends SetOperandExpression<DB, O>>(expression: E): SelectQueryBuilder<DB, TB, O>;
1343
1344
  /**
1344
1345
  * Gives an alias for the query. This method is only useful for sub queries.
1345
1346
  *
@@ -1545,14 +1546,14 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1545
1546
  * )
1546
1547
  * ```
1547
1548
  */
1548
- $if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<any, any, O & O2>): SelectQueryBuilder<DB, TB, O & Partial<O2>>;
1549
+ $if<O2>(condition: boolean, func: (qb: this) => SelectQueryBuilder<any, any, O & O2>): SelectQueryBuilder<DB, TB, O & Partial<Omit<O2, keyof O>>>;
1549
1550
  /**
1550
1551
  * Change the output type of the query.
1551
1552
  *
1552
- * You should only use this method as the last resort if the types
1553
- * don't support your use case.
1553
+ * This method call doesn't change the SQL in any way. This methods simply
1554
+ * returns a copy of this `SelectQueryBuilder` with a new output type.
1554
1555
  */
1555
- $castTo<T>(): SelectQueryBuilder<DB, TB, T>;
1556
+ $castTo<C>(): SelectQueryBuilder<DB, TB, C>;
1556
1557
  /**
1557
1558
  * Changes the output type from an object to a tuple.
1558
1559
  *
@@ -1640,6 +1641,22 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1640
1641
  *
1641
1642
  * functionThatExpectsPersonWithNonNullValue(person)
1642
1643
  * ```
1644
+ *
1645
+ * Giving the explicit narrowed type (`string` in the example above) works fine for
1646
+ * simple types. If the type is complex, for example a JSON column or a subquery,
1647
+ * you can use the special `NotNull` type to make the column not null.
1648
+ *
1649
+ * ```ts
1650
+ * import { NotNull } from 'kysely'
1651
+ *
1652
+ * const person = await db.selectFrom('person')
1653
+ * .where('nullable_column', 'is not', null)
1654
+ * .selectAll()
1655
+ * .$narrowType<{ nullable_column: NotNull }>()
1656
+ * .executeTakeFirstOrThrow()
1657
+ *
1658
+ * functionThatExpectsPersonWithNonNullValue(person)
1659
+ * ```
1643
1660
  */
1644
1661
  $narrowType<T>(): SelectQueryBuilder<DB, TB, NarrowPartial<O, T>>;
1645
1662
  /**
@@ -1815,4 +1832,5 @@ type OuterJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = Se
1815
1832
  type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = DrainOuterGeneric<{
1816
1833
  [C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
1817
1834
  }>;
1835
+ type TableOrList<TB extends keyof any> = (TB & string) | ReadonlyArray<TB & string>;
1818
1836
  export {};
@@ -2,6 +2,7 @@
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { SelectModifierNode } from '../operation-node/select-modifier-node.js';
4
4
  import { parseJoin, } from '../parser/join-parser.js';
5
+ import { parseTable } from '../parser/table-parser.js';
5
6
  import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
6
7
  import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
7
8
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
@@ -10,13 +11,14 @@ import { parseOrderBy, } from '../parser/order-by-parser.js';
10
11
  import { preventAwait } from '../util/prevent-await.js';
11
12
  import { LimitNode } from '../operation-node/limit-node.js';
12
13
  import { OffsetNode } from '../operation-node/offset-node.js';
13
- import { freeze } from '../util/object-utils.js';
14
+ import { asArray, freeze } from '../util/object-utils.js';
14
15
  import { parseGroupBy } from '../parser/group-by-parser.js';
15
16
  import { isNoResultErrorConstructor, NoResultError, } from './no-result-error.js';
16
17
  import { IdentifierNode } from '../operation-node/identifier-node.js';
17
18
  import { parseSetOperations, } from '../parser/set-operation-parser.js';
18
19
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
19
20
  import { ExpressionWrapper } from '../expression/expression-wrapper.js';
21
+ import { parseValueExpression, } from '../parser/value-parser.js';
20
22
  class SelectQueryBuilderImpl {
21
23
  #props;
22
24
  constructor(props) {
@@ -82,28 +84,28 @@ class SelectQueryBuilderImpl {
82
84
  queryNode: SelectQueryNode.cloneWithFrontModifier(this.#props.queryNode, SelectModifierNode.create('Distinct')),
83
85
  });
84
86
  }
85
- forUpdate() {
87
+ forUpdate(of) {
86
88
  return new SelectQueryBuilderImpl({
87
89
  ...this.#props,
88
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForUpdate')),
90
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForUpdate', of ? asArray(of).map(parseTable) : undefined)),
89
91
  });
90
92
  }
91
- forShare() {
93
+ forShare(of) {
92
94
  return new SelectQueryBuilderImpl({
93
95
  ...this.#props,
94
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForShare')),
96
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForShare', of ? asArray(of).map(parseTable) : undefined)),
95
97
  });
96
98
  }
97
- forKeyShare() {
99
+ forKeyShare(of) {
98
100
  return new SelectQueryBuilderImpl({
99
101
  ...this.#props,
100
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForKeyShare')),
102
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForKeyShare', of ? asArray(of).map(parseTable) : undefined)),
101
103
  });
102
104
  }
103
- forNoKeyUpdate() {
105
+ forNoKeyUpdate(of) {
104
106
  return new SelectQueryBuilderImpl({
105
107
  ...this.#props,
106
- queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForNoKeyUpdate')),
108
+ queryNode: SelectQueryNode.cloneWithEndModifier(this.#props.queryNode, SelectModifierNode.create('ForNoKeyUpdate', of ? asArray(of).map(parseTable) : undefined)),
107
109
  });
108
110
  }
109
111
  skipLocked() {
@@ -175,13 +177,13 @@ class SelectQueryBuilderImpl {
175
177
  limit(limit) {
176
178
  return new SelectQueryBuilderImpl({
177
179
  ...this.#props,
178
- queryNode: SelectQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(limit)),
180
+ queryNode: SelectQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(parseValueExpression(limit))),
179
181
  });
180
182
  }
181
183
  offset(offset) {
182
184
  return new SelectQueryBuilderImpl({
183
185
  ...this.#props,
184
- queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(offset)),
186
+ queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(parseValueExpression(offset))),
185
187
  });
186
188
  }
187
189
  union(expression) {
@@ -8,7 +8,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
  *
@@ -813,10 +829,10 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
813
829
  /**
814
830
  * Change the output type of the query.
815
831
  *
816
- * You should only use this method as the last resort if the types
817
- * don't support your use case.
832
+ * This method call doesn't change the SQL in any way. This methods simply
833
+ * returns a copy of this `UpdateQueryBuilder` with a new output type.
818
834
  */
819
- $castTo<T>(): UpdateQueryBuilder<DB, UT, TB, T>;
835
+ $castTo<C>(): UpdateQueryBuilder<DB, UT, TB, C>;
820
836
  /**
821
837
  * Narrows (parts of) the output type of the query.
822
838
  *
@@ -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) {
@@ -154,8 +154,8 @@ export class UpdateQueryBuilder {
154
154
  /**
155
155
  * Change the output type of the query.
156
156
  *
157
- * You should only use this method as the last resort if the types
158
- * don't support your use case.
157
+ * This method call doesn't change the SQL in any way. This methods simply
158
+ * returns a copy of this `UpdateQueryBuilder` with a new output type.
159
159
  */
160
160
  $castTo() {
161
161
  return new UpdateQueryBuilder(this.#props);
@@ -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) {
@@ -160,6 +162,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
160
162
  this.append(' ');
161
163
  this.visitNode(node.values);
162
164
  }
165
+ if (node.defaultValues) {
166
+ this.append(' ');
167
+ this.append('default values');
168
+ }
163
169
  if (node.onConflict) {
164
170
  this.append(' ');
165
171
  this.visitNode(node.onConflict);
@@ -346,16 +352,22 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
346
352
  this.append('if not exists ');
347
353
  }
348
354
  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);
355
+ if (node.selectQuery) {
356
+ this.append(' as ');
357
+ this.visitNode(node.selectQuery);
355
358
  }
356
- if (node.endModifiers && node.endModifiers.length > 0) {
357
- this.append(' ');
358
- this.compileList(node.endModifiers, ' ');
359
+ else {
360
+ this.append(' (');
361
+ this.compileList([...node.columns, ...(node.constraints ?? [])]);
362
+ this.append(')');
363
+ if (node.onCommit) {
364
+ this.append(' on commit ');
365
+ this.append(node.onCommit);
366
+ }
367
+ if (node.endModifiers && node.endModifiers.length > 0) {
368
+ this.append(' ');
369
+ this.compileList(node.endModifiers, ' ');
370
+ }
359
371
  }
360
372
  }
361
373
  visitColumnDefinition(node) {
@@ -383,6 +395,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
383
395
  if (node.unique) {
384
396
  this.append(' unique');
385
397
  }
398
+ if (node.nullsNotDistinct) {
399
+ this.append(' nulls not distinct');
400
+ }
386
401
  if (node.primaryKey) {
387
402
  this.append(' primary key');
388
403
  }
@@ -563,6 +578,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
563
578
  this.compileList(node.columns);
564
579
  this.append(')');
565
580
  }
581
+ if (node.nullsNotDistinct) {
582
+ this.append(' nulls not distinct');
583
+ }
566
584
  if (node.where) {
567
585
  this.append(' ');
568
586
  this.visitNode(node.where);
@@ -615,7 +633,11 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
615
633
  this.visitNode(node.name);
616
634
  this.append(' ');
617
635
  }
618
- this.append('unique (');
636
+ this.append('unique');
637
+ if (node.nullsNotDistinct) {
638
+ this.append(' nulls not distinct');
639
+ }
640
+ this.append(' (');
619
641
  this.compileList(node.columns);
620
642
  this.append(')');
621
643
  }
@@ -696,7 +718,13 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
696
718
  this.visitNode(node.dropConstraint);
697
719
  }
698
720
  if (node.columnAlterations) {
699
- this.compileList(node.columnAlterations);
721
+ this.compileColumnAlterations(node.columnAlterations);
722
+ }
723
+ if (node.addIndex) {
724
+ this.visitNode(node.addIndex);
725
+ }
726
+ if (node.dropIndex) {
727
+ this.visitNode(node.dropIndex);
700
728
  }
701
729
  }
702
730
  visitAddColumn(node) {
@@ -718,7 +746,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
718
746
  this.visitNode(node.column);
719
747
  this.append(' ');
720
748
  if (node.dataType) {
721
- this.append('type ');
749
+ if (this.announcesNewColumnDataType()) {
750
+ this.append('type ');
751
+ }
722
752
  this.visitNode(node.dataType);
723
753
  if (node.dataTypeExpression) {
724
754
  this.append('using ');
@@ -841,6 +871,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
841
871
  else {
842
872
  this.append(SELECT_MODIFIER_SQL[node.modifier]);
843
873
  }
874
+ if (node.of) {
875
+ this.append(' of ');
876
+ this.compileList(node.of, ', ');
877
+ }
844
878
  }
845
879
  visitCreateType(node) {
846
880
  this.append('create type ');
@@ -1004,6 +1038,23 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1004
1038
  this.visitNode(node.values[i]);
1005
1039
  }
1006
1040
  }
1041
+ visitAddIndex(node) {
1042
+ this.append('add ');
1043
+ if (node.unique) {
1044
+ this.append('unique ');
1045
+ }
1046
+ this.append('index ');
1047
+ this.visitNode(node.name);
1048
+ if (node.columns) {
1049
+ this.append(' (');
1050
+ this.compileList(node.columns);
1051
+ this.append(')');
1052
+ }
1053
+ if (node.using) {
1054
+ this.append(' using ');
1055
+ this.visitNode(node.using);
1056
+ }
1057
+ }
1007
1058
  append(str) {
1008
1059
  this.#sql += str;
1009
1060
  }
@@ -1077,6 +1128,16 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1077
1128
  : 1);
1078
1129
  return freeze(arr);
1079
1130
  }
1131
+ compileColumnAlterations(columnAlterations) {
1132
+ this.compileList(columnAlterations);
1133
+ }
1134
+ /**
1135
+ * controls whether the dialect adds a "type" keyword before a column's new data
1136
+ * type in an ALTER TABLE statement.
1137
+ */
1138
+ announcesNewColumnDataType() {
1139
+ return true;
1140
+ }
1080
1141
  }
1081
1142
  const SELECT_MODIFIER_SQL = freeze({
1082
1143
  ForKeyShare: 'for key share',