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
@@ -173,8 +173,8 @@ export declare class ExpressionWrapper<DB, TB extends keyof DB, T> implements Al
173
173
  * )
174
174
  * ```
175
175
  */
176
- or<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
177
- or(expression: OperandExpression<SqlBool>): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
176
+ or<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
177
+ or<E extends OperandExpression<SqlBool>>(expression: E): T extends SqlBool ? OrWrapper<DB, TB, SqlBool> : KyselyTypeError<'or() method can only be called on boolean expressions'>;
178
178
  /**
179
179
  * Combines `this` and another expression using `AND`.
180
180
  *
@@ -235,8 +235,8 @@ export declare class ExpressionWrapper<DB, TB extends keyof DB, T> implements Al
235
235
  * )
236
236
  * ```
237
237
  */
238
- and<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
239
- and(expression: OperandExpression<SqlBool>): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
238
+ and<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
239
+ and<E extends OperandExpression<SqlBool>>(expression: E): T extends SqlBool ? AndWrapper<DB, TB, SqlBool> : KyselyTypeError<'and() method can only be called on boolean expressions'>;
240
240
  /**
241
241
  * Change the output type of the expression.
242
242
  *
@@ -389,8 +389,8 @@ export declare class OrWrapper<DB, TB extends keyof DB, T extends SqlBool> imple
389
389
  *
390
390
  * See {@link ExpressionWrapper.or} for examples.
391
391
  */
392
- or<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): OrWrapper<DB, TB, T>;
393
- or(expression: OperandExpression<SqlBool>): OrWrapper<DB, TB, T>;
392
+ or<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): OrWrapper<DB, TB, T>;
393
+ or<E extends OperandExpression<SqlBool>>(expression: E): OrWrapper<DB, TB, T>;
394
394
  /**
395
395
  * Change the output type of the expression.
396
396
  *
@@ -525,8 +525,8 @@ export declare class AndWrapper<DB, TB extends keyof DB, T extends SqlBool> impl
525
525
  *
526
526
  * See {@link ExpressionWrapper.and} for examples.
527
527
  */
528
- and<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AndWrapper<DB, TB, T>;
529
- and(expression: OperandExpression<SqlBool>): AndWrapper<DB, TB, T>;
528
+ and<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): AndWrapper<DB, TB, T>;
529
+ and<E extends OperandExpression<SqlBool>>(expression: E): AndWrapper<DB, TB, T>;
530
530
  /**
531
531
  * Change the output type of the expression.
532
532
  *
@@ -0,0 +1,152 @@
1
+ import { Expression } from '../expression/expression.js';
2
+ import { RawBuilder } from '../raw-builder/raw-builder.js';
3
+ import { Simplify } from '../util/type-utils.js';
4
+ /**
5
+ * An MS SQL Server helper for aggregating a subquery into a JSON array.
6
+ *
7
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
8
+ * Otherwise the nested selections will be returned as JSON strings.
9
+ *
10
+ * The plugin can be installed like this:
11
+ *
12
+ * ```ts
13
+ * const db = new Kysely({
14
+ * dialect: new MssqlDialect(config),
15
+ * plugins: [new ParseJSONResultsPlugin()]
16
+ * })
17
+ * ```
18
+ *
19
+ * ### Examples
20
+ *
21
+ * ```ts
22
+ * const result = await db
23
+ * .selectFrom('person')
24
+ * .select((eb) => [
25
+ * 'id',
26
+ * jsonArrayFrom(
27
+ * eb.selectFrom('pet')
28
+ * .select(['pet.id as pet_id', 'pet.name'])
29
+ * .whereRef('pet.owner_id', '=', 'person.id')
30
+ * .orderBy('pet.name')
31
+ * .modifyEnd(sql`offset 0 rows`)
32
+ * ).as('pets')
33
+ * ])
34
+ * .execute()
35
+ *
36
+ * result[0].id
37
+ * result[0].pets[0].pet_id
38
+ * result[0].pets[0].name
39
+ * ```
40
+ *
41
+ * The generated SQL (MS SQL Server):
42
+ *
43
+ * ```sql
44
+ * select "id", (
45
+ * select coalesce((select * from (
46
+ * select "pet"."id" as "pet_id", "pet"."name"
47
+ * from "pet"
48
+ * where "pet"."owner_id" = "person"."id"
49
+ * order by "pet"."name"
50
+ * offset 0 rows
51
+ * ) as "agg" for json path, include_null_values), '[]')
52
+ * ) as "pets"
53
+ * from "person"
54
+ * ```
55
+ */
56
+ export declare function jsonArrayFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O>[]>;
57
+ /**
58
+ * An MS SQL Server helper for turning a subquery into a JSON object.
59
+ *
60
+ * The subquery must only return one row.
61
+ *
62
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
63
+ * Otherwise the nested selections will be returned as JSON strings.
64
+ *
65
+ * The plugin can be installed like this:
66
+ *
67
+ * ```ts
68
+ * const db = new Kysely({
69
+ * dialect: new MssqlDialect(config),
70
+ * plugins: [new ParseJSONResultsPlugin()]
71
+ * })
72
+ * ```
73
+ *
74
+ * ### Examples
75
+ *
76
+ * ```ts
77
+ * const result = await db
78
+ * .selectFrom('person')
79
+ * .select((eb) => [
80
+ * 'id',
81
+ * jsonObjectFrom(
82
+ * eb.selectFrom('pet')
83
+ * .select(['pet.id as pet_id', 'pet.name'])
84
+ * .whereRef('pet.owner_id', '=', 'person.id')
85
+ * .where('pet.is_favorite', '=', 1)
86
+ * ).as('favorite_pet')
87
+ * ])
88
+ * .execute()
89
+ *
90
+ * result[0].id
91
+ * result[0].favorite_pet.pet_id
92
+ * result[0].favorite_pet.name
93
+ * ```
94
+ *
95
+ * The generated SQL (MS SQL Server):
96
+ *
97
+ * ```sql
98
+ * select "id", (
99
+ * select * from (
100
+ * select "pet"."id" as "pet_id", "pet"."name"
101
+ * from "pet"
102
+ * where "pet"."owner_id" = "person"."id"
103
+ * and "pet"."is_favorite" = @1
104
+ * ) as "agg" for json path, include_null_values, without_array_wrapper
105
+ * ) as "favorite_pet"
106
+ * from "person"
107
+ * ```
108
+ */
109
+ export declare function jsonObjectFrom<O>(expr: Expression<O>): RawBuilder<Simplify<O> | null>;
110
+ /**
111
+ * The MS SQL Server `json_query` function, single argument variant.
112
+ *
113
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
114
+ * Otherwise the nested selections will be returned as JSON strings.
115
+ *
116
+ * The plugin can be installed like this:
117
+ *
118
+ * ```ts
119
+ * const db = new Kysely({
120
+ * dialect: new MssqlDialect(config),
121
+ * plugins: [new ParseJSONResultsPlugin()]
122
+ * })
123
+ * ```
124
+ *
125
+ * ### Examples
126
+ *
127
+ * ```ts
128
+ * const result = await db
129
+ * .selectFrom('person')
130
+ * .select((eb) => [
131
+ * 'id',
132
+ * jsonBuildObject({
133
+ * first: eb.ref('first_name'),
134
+ * last: eb.ref('last_name'),
135
+ * full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
136
+ * }).as('name')
137
+ * ])
138
+ * .execute()
139
+ * ```
140
+ *
141
+ * The generated SQL (MS SQL Server):
142
+ *
143
+ * ```sql
144
+ * select "id", json_query(
145
+ * '{"first":"'+"first_name"+',"last":"'+"last_name"+',"full":"'+concat("first_name", ' ', "last_name")+'"}'
146
+ * ) as "name"
147
+ * from "person"
148
+ * ```
149
+ */
150
+ export declare function jsonBuildObject<O extends Record<string, Expression<unknown>>>(obj: O): RawBuilder<Simplify<{
151
+ [K in keyof O]: O[K] extends Expression<infer V> ? V : never;
152
+ }>>;
@@ -0,0 +1,155 @@
1
+ /// <reference types="./mssql.d.ts" />
2
+ import { sql } from '../raw-builder/sql.js';
3
+ /**
4
+ * An MS SQL Server helper for aggregating a subquery into a JSON array.
5
+ *
6
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
7
+ * Otherwise the nested selections will be returned as JSON strings.
8
+ *
9
+ * The plugin can be installed like this:
10
+ *
11
+ * ```ts
12
+ * const db = new Kysely({
13
+ * dialect: new MssqlDialect(config),
14
+ * plugins: [new ParseJSONResultsPlugin()]
15
+ * })
16
+ * ```
17
+ *
18
+ * ### Examples
19
+ *
20
+ * ```ts
21
+ * const result = await db
22
+ * .selectFrom('person')
23
+ * .select((eb) => [
24
+ * 'id',
25
+ * jsonArrayFrom(
26
+ * eb.selectFrom('pet')
27
+ * .select(['pet.id as pet_id', 'pet.name'])
28
+ * .whereRef('pet.owner_id', '=', 'person.id')
29
+ * .orderBy('pet.name')
30
+ * .modifyEnd(sql`offset 0 rows`)
31
+ * ).as('pets')
32
+ * ])
33
+ * .execute()
34
+ *
35
+ * result[0].id
36
+ * result[0].pets[0].pet_id
37
+ * result[0].pets[0].name
38
+ * ```
39
+ *
40
+ * The generated SQL (MS SQL Server):
41
+ *
42
+ * ```sql
43
+ * select "id", (
44
+ * select coalesce((select * from (
45
+ * select "pet"."id" as "pet_id", "pet"."name"
46
+ * from "pet"
47
+ * where "pet"."owner_id" = "person"."id"
48
+ * order by "pet"."name"
49
+ * offset 0 rows
50
+ * ) as "agg" for json path, include_null_values), '[]')
51
+ * ) as "pets"
52
+ * from "person"
53
+ * ```
54
+ */
55
+ export function jsonArrayFrom(expr) {
56
+ return sql `coalesce((select * from ${expr} as agg for json path, include_null_values), '[]')`;
57
+ }
58
+ /**
59
+ * An MS SQL Server helper for turning a subquery into a JSON object.
60
+ *
61
+ * The subquery must only return one row.
62
+ *
63
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
64
+ * Otherwise the nested selections will be returned as JSON strings.
65
+ *
66
+ * The plugin can be installed like this:
67
+ *
68
+ * ```ts
69
+ * const db = new Kysely({
70
+ * dialect: new MssqlDialect(config),
71
+ * plugins: [new ParseJSONResultsPlugin()]
72
+ * })
73
+ * ```
74
+ *
75
+ * ### Examples
76
+ *
77
+ * ```ts
78
+ * const result = await db
79
+ * .selectFrom('person')
80
+ * .select((eb) => [
81
+ * 'id',
82
+ * jsonObjectFrom(
83
+ * eb.selectFrom('pet')
84
+ * .select(['pet.id as pet_id', 'pet.name'])
85
+ * .whereRef('pet.owner_id', '=', 'person.id')
86
+ * .where('pet.is_favorite', '=', 1)
87
+ * ).as('favorite_pet')
88
+ * ])
89
+ * .execute()
90
+ *
91
+ * result[0].id
92
+ * result[0].favorite_pet.pet_id
93
+ * result[0].favorite_pet.name
94
+ * ```
95
+ *
96
+ * The generated SQL (MS SQL Server):
97
+ *
98
+ * ```sql
99
+ * select "id", (
100
+ * select * from (
101
+ * select "pet"."id" as "pet_id", "pet"."name"
102
+ * from "pet"
103
+ * where "pet"."owner_id" = "person"."id"
104
+ * and "pet"."is_favorite" = @1
105
+ * ) as "agg" for json path, include_null_values, without_array_wrapper
106
+ * ) as "favorite_pet"
107
+ * from "person"
108
+ * ```
109
+ */
110
+ export function jsonObjectFrom(expr) {
111
+ return sql `(select * from ${expr} as agg for json path, include_null_values, without_array_wrapper)`;
112
+ }
113
+ /**
114
+ * The MS SQL Server `json_query` function, single argument variant.
115
+ *
116
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
117
+ * Otherwise the nested selections will be returned as JSON strings.
118
+ *
119
+ * The plugin can be installed like this:
120
+ *
121
+ * ```ts
122
+ * const db = new Kysely({
123
+ * dialect: new MssqlDialect(config),
124
+ * plugins: [new ParseJSONResultsPlugin()]
125
+ * })
126
+ * ```
127
+ *
128
+ * ### Examples
129
+ *
130
+ * ```ts
131
+ * const result = await db
132
+ * .selectFrom('person')
133
+ * .select((eb) => [
134
+ * 'id',
135
+ * jsonBuildObject({
136
+ * first: eb.ref('first_name'),
137
+ * last: eb.ref('last_name'),
138
+ * full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
139
+ * }).as('name')
140
+ * ])
141
+ * .execute()
142
+ * ```
143
+ *
144
+ * The generated SQL (MS SQL Server):
145
+ *
146
+ * ```sql
147
+ * select "id", json_query(
148
+ * '{"first":"'+"first_name"+',"last":"'+"last_name"+',"full":"'+concat("first_name", ' ', "last_name")+'"}'
149
+ * ) as "name"
150
+ * from "person"
151
+ * ```
152
+ */
153
+ export function jsonBuildObject(obj) {
154
+ return sql `json_query('{${sql.join(Object.keys(obj).map((k) => sql `"${sql.raw(k)}":"'+${obj[k]}+'"`), sql `,`)}}')`;
155
+ }
@@ -1,5 +1,5 @@
1
1
  import { Expression } from '../expression/expression.js';
2
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
3
3
  import { RawBuilder } from '../raw-builder/raw-builder.js';
4
4
  import { Simplify } from '../util/type-utils.js';
5
5
  /**
@@ -48,7 +48,7 @@ import { Simplify } from '../util/type-utils.js';
48
48
  * from `person`
49
49
  * ```
50
50
  */
51
- export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
51
+ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O>[]>;
52
52
  /**
53
53
  * A MySQL helper for turning a subquery into a JSON object.
54
54
  *
@@ -97,7 +97,7 @@ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>):
97
97
  * from `person`
98
98
  * ```
99
99
  */
100
- export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O> | null>;
100
+ export declare function jsonObjectFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O> | null>;
101
101
  /**
102
102
  * The MySQL `json_object` function.
103
103
  *
@@ -1,5 +1,5 @@
1
1
  import { Expression } from '../expression/expression.js';
2
- import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
2
+ import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
3
3
  import { RawBuilder } from '../raw-builder/raw-builder.js';
4
4
  import { Simplify } from '../util/type-utils.js';
5
5
  /**
@@ -55,7 +55,7 @@ import { Simplify } from '../util/type-utils.js';
55
55
  * from "person"
56
56
  * ```
57
57
  */
58
- export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O>[]>;
58
+ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O>[]>;
59
59
  /**
60
60
  * A SQLite helper for turning a subquery into a JSON object.
61
61
  *
@@ -111,7 +111,7 @@ export declare function jsonArrayFrom<O>(expr: SelectQueryBuilder<any, any, O>):
111
111
  * from "person";
112
112
  * ```
113
113
  */
114
- export declare function jsonObjectFrom<O>(expr: SelectQueryBuilder<any, any, O>): RawBuilder<Simplify<O> | null>;
114
+ export declare function jsonObjectFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O> | null>;
115
115
  /**
116
116
  * The SQLite `json_object` function.
117
117
  *
@@ -72,6 +72,12 @@ export * from './dialect/postgres/postgres-dialect.js';
72
72
  export * from './dialect/sqlite/sqlite-query-compiler.js';
73
73
  export * from './dialect/sqlite/sqlite-introspector.js';
74
74
  export * from './dialect/sqlite/sqlite-adapter.js';
75
+ export * from './dialect/mssql/mssql-adapter.js';
76
+ export * from './dialect/mssql/mssql-dialect-config.js';
77
+ export * from './dialect/mssql/mssql-dialect.js';
78
+ export * from './dialect/mssql/mssql-driver.js';
79
+ export * from './dialect/mssql/mssql-introspector.js';
80
+ export * from './dialect/mssql/mssql-query-compiler.js';
75
81
  export * from './query-compiler/default-query-compiler.js';
76
82
  export * from './query-compiler/query-compiler.js';
77
83
  export * from './migration/migrator.js';
@@ -176,10 +182,10 @@ export * from './util/compilable.js';
176
182
  export * from './util/explainable.js';
177
183
  export * from './util/streamable.js';
178
184
  export * from './util/log.js';
179
- export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, AnySelectQueryBuilder, Equals, UnknownRow, Simplify, SqlBool, } from './util/type-utils.js';
185
+ export { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, Equals, UnknownRow, Simplify, SqlBool, Nullable, NotNull, } from './util/type-utils.js';
180
186
  export * from './util/infer-result.js';
181
187
  export { logOnce } from './util/log-once.js';
182
- export { SelectExpression, SelectArg, Selection, } from './parser/select-parser.js';
188
+ export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
183
189
  export { ReferenceExpression, ReferenceExpressionOrList, SimpleReferenceExpression, StringReference, ExtractTypeFromStringReference, ExtractTypeFromReferenceExpression, } from './parser/reference-parser.js';
184
190
  export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
185
191
  export { TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
package/dist/esm/index.js CHANGED
@@ -73,6 +73,12 @@ export * from './dialect/postgres/postgres-dialect.js';
73
73
  export * from './dialect/sqlite/sqlite-query-compiler.js';
74
74
  export * from './dialect/sqlite/sqlite-introspector.js';
75
75
  export * from './dialect/sqlite/sqlite-adapter.js';
76
+ export * from './dialect/mssql/mssql-adapter.js';
77
+ export * from './dialect/mssql/mssql-dialect-config.js';
78
+ export * from './dialect/mssql/mssql-dialect.js';
79
+ export * from './dialect/mssql/mssql-driver.js';
80
+ export * from './dialect/mssql/mssql-introspector.js';
81
+ export * from './dialect/mssql/mssql-query-compiler.js';
76
82
  export * from './query-compiler/default-query-compiler.js';
77
83
  export * from './query-compiler/query-compiler.js';
78
84
  export * from './migration/migrator.js';
@@ -218,10 +218,7 @@ export class Migrator {
218
218
  }
219
219
  if (!(await this.#doesSchemaExists())) {
220
220
  try {
221
- await this.#props.db.schema
222
- .createSchema(this.#migrationTableSchema)
223
- .ifNotExists()
224
- .execute();
221
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
225
222
  }
226
223
  catch (error) {
227
224
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create schema`
@@ -237,20 +234,15 @@ export class Migrator {
237
234
  if (!(await this.#doesTableExists(this.#migrationTable))) {
238
235
  try {
239
236
  if (this.#migrationTableSchema) {
240
- await this.#props.db.schema
241
- .createSchema(this.#migrationTableSchema)
242
- .ifNotExists()
243
- .execute();
237
+ await this.#createIfNotExists(this.#props.db.schema.createSchema(this.#migrationTableSchema));
244
238
  }
245
- await this.#props.db.schema
239
+ await this.#createIfNotExists(this.#props.db.schema
246
240
  .withPlugin(this.#schemaPlugin)
247
241
  .createTable(this.#migrationTable)
248
- .ifNotExists()
249
242
  .addColumn('name', 'varchar(255)', (col) => col.notNull().primaryKey())
250
243
  // The migration run time as ISO string. This is not a real date type as we
251
244
  // can't know which data type is supported by all future dialects.
252
- .addColumn('timestamp', 'varchar(255)', (col) => col.notNull())
253
- .execute();
245
+ .addColumn('timestamp', 'varchar(255)', (col) => col.notNull()));
254
246
  }
255
247
  catch (error) {
256
248
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -265,13 +257,11 @@ export class Migrator {
265
257
  async #ensureMigrationLockTableExists() {
266
258
  if (!(await this.#doesTableExists(this.#migrationLockTable))) {
267
259
  try {
268
- await this.#props.db.schema
260
+ await this.#createIfNotExists(this.#props.db.schema
269
261
  .withPlugin(this.#schemaPlugin)
270
262
  .createTable(this.#migrationLockTable)
271
- .ifNotExists()
272
263
  .addColumn('id', 'varchar(255)', (col) => col.notNull().primaryKey())
273
- .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0))
274
- .execute();
264
+ .addColumn('is_locked', 'integer', (col) => col.notNull().defaultTo(0)));
275
265
  }
276
266
  catch (error) {
277
267
  // At least on PostgreSQL, `if not exists` doesn't guarantee the `create table`
@@ -479,6 +469,12 @@ export class Migrator {
479
469
  }
480
470
  return { results };
481
471
  }
472
+ async #createIfNotExists(qb) {
473
+ if (this.#props.db.getExecutor().adapter.supportsCreateIfNotExists) {
474
+ qb = qb.ifNotExists();
475
+ }
476
+ await qb.execute();
477
+ }
482
478
  }
483
479
  class MigrationResultSetError extends Error {
484
480
  #resultSet;
@@ -0,0 +1,21 @@
1
+ import { IdentifierNode } from './identifier-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ import { RawNode } from './raw-node.js';
4
+ export type AddIndexNodeProps = Omit<AddIndexNode, 'kind' | 'name'>;
5
+ export interface AddIndexNode extends OperationNode {
6
+ readonly kind: 'AddIndexNode';
7
+ readonly name: IdentifierNode;
8
+ readonly columns?: OperationNode[];
9
+ readonly unique?: boolean;
10
+ readonly using?: RawNode;
11
+ readonly ifNotExists?: boolean;
12
+ }
13
+ /**
14
+ * @internal
15
+ */
16
+ export declare const AddIndexNode: Readonly<{
17
+ is(node: OperationNode): node is AddIndexNode;
18
+ create(name: string): AddIndexNode;
19
+ cloneWith(node: AddIndexNode, props: AddIndexNodeProps): AddIndexNode;
20
+ cloneWithColumns(node: AddIndexNode, columns: OperationNode[]): AddIndexNode;
21
+ }>;
@@ -0,0 +1,29 @@
1
+ /// <reference types="./add-index-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { IdentifierNode } from './identifier-node.js';
4
+ /**
5
+ * @internal
6
+ */
7
+ export const AddIndexNode = freeze({
8
+ is(node) {
9
+ return node.kind === 'AddIndexNode';
10
+ },
11
+ create(name) {
12
+ return freeze({
13
+ kind: 'AddIndexNode',
14
+ name: IdentifierNode.create(name)
15
+ });
16
+ },
17
+ cloneWith(node, props) {
18
+ return freeze({
19
+ ...node,
20
+ ...props,
21
+ });
22
+ },
23
+ cloneWithColumns(node, columns) {
24
+ return freeze({
25
+ ...node,
26
+ columns: [...(node.columns || []), ...columns],
27
+ });
28
+ },
29
+ });
@@ -8,7 +8,9 @@ import { AlterColumnNode } from './alter-column-node.js';
8
8
  import { AddConstraintNode } from './add-constraint-node.js';
9
9
  import { DropConstraintNode } from './drop-constraint-node.js';
10
10
  import { ModifyColumnNode } from './modify-column-node.js';
11
- export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint'>;
11
+ import { DropIndexNode } from './drop-index-node.js';
12
+ import { AddIndexNode } from './add-index-node.js';
13
+ export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint' | 'addIndex' | 'dropIndex'>;
12
14
  export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode;
13
15
  export interface AlterTableNode extends OperationNode {
14
16
  readonly kind: 'AlterTableNode';
@@ -18,6 +20,8 @@ export interface AlterTableNode extends OperationNode {
18
20
  readonly columnAlterations?: ReadonlyArray<AlterTableColumnAlterationNode>;
19
21
  readonly addConstraint?: AddConstraintNode;
20
22
  readonly dropConstraint?: DropConstraintNode;
23
+ readonly addIndex?: AddIndexNode;
24
+ readonly dropIndex?: DropIndexNode;
21
25
  }
22
26
  /**
23
27
  * @internal
@@ -20,6 +20,7 @@ export interface ColumnDefinitionNode extends OperationNode {
20
20
  readonly unsigned?: boolean;
21
21
  readonly frontModifiers?: ReadonlyArray<OperationNode>;
22
22
  readonly endModifiers?: ReadonlyArray<OperationNode>;
23
+ readonly nullsNotDistinct?: boolean;
23
24
  }
24
25
  /**
25
26
  * @internal
@@ -1,8 +1,7 @@
1
- import { ColumnNode } from './column-node.js';
2
1
  import { OperationNode } from './operation-node.js';
3
2
  export interface ColumnUpdateNode extends OperationNode {
4
3
  readonly kind: 'ColumnUpdateNode';
5
- readonly column: ColumnNode;
4
+ readonly column: OperationNode;
6
5
  readonly value: OperationNode;
7
6
  }
8
7
  /**
@@ -10,5 +9,5 @@ export interface ColumnUpdateNode extends OperationNode {
10
9
  */
11
10
  export declare const ColumnUpdateNode: Readonly<{
12
11
  is(node: OperationNode): node is ColumnUpdateNode;
13
- create(column: ColumnNode, value: OperationNode): ColumnUpdateNode;
12
+ create(column: OperationNode, value: OperationNode): ColumnUpdateNode;
14
13
  }>;
@@ -14,6 +14,7 @@ export interface CreateIndexNode extends OperationNode {
14
14
  readonly using?: RawNode;
15
15
  readonly ifNotExists?: boolean;
16
16
  readonly where?: WhereNode;
17
+ readonly nullsNotDistinct?: boolean;
17
18
  }
18
19
  /**
19
20
  * @internal
@@ -16,6 +16,7 @@ export interface CreateTableNode extends OperationNode {
16
16
  readonly onCommit?: OnCommitAction;
17
17
  readonly frontModifiers?: ReadonlyArray<OperationNode>;
18
18
  readonly endModifiers?: ReadonlyArray<OperationNode>;
19
+ readonly selectQuery?: OperationNode;
19
20
  }
20
21
  /**
21
22
  * @internal
@@ -85,6 +85,7 @@ import { JSONPathNode } from './json-path-node.js';
85
85
  import { JSONPathLegNode } from './json-path-leg-node.js';
86
86
  import { JSONOperatorChainNode } from './json-operator-chain-node.js';
87
87
  import { TupleNode } from './tuple-node.js';
88
+ import { AddIndexNode } from './add-index-node.js';
88
89
  /**
89
90
  * Transforms an operation node tree into another one.
90
91
  *
@@ -199,6 +200,7 @@ export declare class OperationNodeTransformer {
199
200
  protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
200
201
  protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
201
202
  protected transformTuple(node: TupleNode): TupleNode;
203
+ protected transformAddIndex(node: AddIndexNode): AddIndexNode;
202
204
  protected transformDataType(node: DataTypeNode): DataTypeNode;
203
205
  protected transformSelectAll(node: SelectAllNode): SelectAllNode;
204
206
  protected transformIdentifier(node: IdentifierNode): IdentifierNode;