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,17 +3,18 @@ import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable,
3
3
  import { FunctionModule } from '../query-builder/function-module.js';
4
4
  import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
5
  import { QueryExecutor } from '../query-executor/query-executor.js';
6
- import { BinaryOperatorExpression, ComparisonOperatorExpression, FilterObject, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
6
+ import { BinaryOperatorExpression, FilterObject, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
7
7
  import { Expression } from './expression.js';
8
8
  import { ExpressionWrapper } from './expression-wrapper.js';
9
9
  import { ComparisonOperator, JSONOperatorWith$, UnaryOperator } from '../operation-node/operator-node.js';
10
- import { SqlBool } from '../util/type-utils.js';
10
+ import { IsNever, SqlBool } from '../util/type-utils.js';
11
11
  import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
12
12
  import { CaseBuilder } from '../query-builder/case-builder.js';
13
13
  import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
14
14
  import { OperandExpression } from '../parser/expression-parser.js';
15
- import { SelectArg, SelectExpression, Selection } from '../parser/select-parser.js';
16
15
  import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js';
16
+ import { Selectable } from '../util/column-type.js';
17
+ import { KyselyTypeError } from '../util/type-error.js';
17
18
  export interface ExpressionBuilder<DB, TB extends keyof DB> {
18
19
  /**
19
20
  * Creates a binary expression.
@@ -89,7 +90,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
89
90
  * ))
90
91
  * ```
91
92
  */
92
- <RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
93
+ <RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: OP, rhs: VE): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
93
94
  /**
94
95
  * Returns a copy of `this` expression builder, for destructuring purposes.
95
96
  *
@@ -195,16 +196,6 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
195
196
  selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
196
197
  selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
197
198
  selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
198
- /**
199
- * Creates a `select` expression without a `from` clause.
200
- *
201
- * If you want to create a `select from` query, use the `selectFrom` method instead.
202
- * This one can be used to create a plain `select` statement without a `from` clause.
203
- *
204
- * This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
205
- * documentation for examples.
206
- */
207
- selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
208
199
  /**
209
200
  * Creates a `case` statement/operator.
210
201
  *
@@ -258,13 +249,14 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
258
249
  */
259
250
  case(): CaseBuilder<DB, TB>;
260
251
  case<C extends SimpleReferenceExpression<DB, TB>>(column: C): CaseBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C>>;
261
- case<O>(expression: Expression<O>): CaseBuilder<DB, TB, O>;
252
+ case<E extends Expression<any>>(expression: E): CaseBuilder<DB, TB, ExtractTypeFromValueExpression<E>>;
262
253
  /**
263
254
  * This method can be used to reference columns within the query's context. For
264
255
  * a non-type-safe version of this method see {@link sql}'s version.
265
256
  *
266
257
  * Additionally, this method can be used to reference nested JSON properties or
267
- * array elements. See {@link JSONPathBuilder} for more information.
258
+ * array elements. See {@link JSONPathBuilder} for more information. For regular
259
+ * JSON path expressions you can use {@link jsonPath}.
268
260
  *
269
261
  * ### Examples
270
262
  *
@@ -342,6 +334,57 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
342
334
  */
343
335
  ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
344
336
  ref<RE extends StringReference<DB, TB>>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
337
+ /**
338
+ * Creates a JSON path expression with provided column as root document (the $).
339
+ *
340
+ * For a JSON reference expression, see {@link ref}.
341
+ *
342
+ * ### Examples
343
+ *
344
+ * ```ts
345
+ * db.updateTable('person')
346
+ * .set('experience', (eb) => eb.fn('json_set', [
347
+ * 'experience',
348
+ * eb.jsonPath<'experience'>().at('last').key('title'),
349
+ * eb.val('CEO')
350
+ * ]))
351
+ * .where('id', '=', id)
352
+ * .execute()
353
+ * ```
354
+ *
355
+ * The generated SQL (MySQL):
356
+ *
357
+ * ```sql
358
+ * update `person`
359
+ * set `experience` = json_set(`experience`, '$[last].title', ?)
360
+ * where `id` = ?
361
+ * ```
362
+ */
363
+ jsonPath<$ extends StringReference<DB, TB> = never>(): IsNever<$> extends true ? KyselyTypeError<"You must provide a column reference as this method's $ generic"> : JSONPathBuilder<ExtractTypeFromReferenceExpression<DB, TB, $>>;
364
+ /**
365
+ * Creates a table reference.
366
+ *
367
+ * ```ts
368
+ * db.selectFrom('person')
369
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
370
+ * .select(eb => [
371
+ * 'person.id',
372
+ * sql<Pet[]>`jsonb_agg(${eb.table('pet')})`.as('pets')
373
+ * ])
374
+ * .groupBy('person.id')
375
+ * .execute()
376
+ * ```
377
+ *
378
+ * The generated SQL (PostgreSQL):
379
+ *
380
+ * ```sql
381
+ * select "person"."id", jsonb_agg("pet") as "pets"
382
+ * from "person"
383
+ * inner join "pet" on "pet"."owner_id" = "person"."id"
384
+ * group by "person"."id"
385
+ * ```
386
+ */
387
+ table<T extends TB & string>(table: T): ExpressionWrapper<DB, TB, Selectable<DB[T]>>;
345
388
  /**
346
389
  * Returns a value expression.
347
390
  *
@@ -502,56 +545,6 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
502
545
  * ```
503
546
  */
504
547
  lit<VE extends number | boolean | null>(literal: VE): ExpressionWrapper<DB, TB, VE>;
505
- /**
506
- * @deprecated Use the expression builder as a function instead.
507
- *
508
- * Before:
509
- *
510
- * ```ts
511
- * where((eb) => eb.cmpr('first_name', '=', 'Jennifer'))
512
- * ```
513
- *
514
- * After:
515
- *
516
- * ```ts
517
- * where((eb) => eb('first_name', '=', 'Jennifer'))
518
- * ```
519
- *
520
- * or
521
- *
522
- * ```ts
523
- * where(({ eb }) => eb('first_name', '=', 'Jennifer'))
524
- * ```
525
- */
526
- cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, O>;
527
- /**
528
- * @deprecated Use the expression builder as a function instead.
529
- *
530
- * Before:
531
- *
532
- * ```ts
533
- * set((eb) => ({
534
- * age: eb.bxp('age', '+', 10)
535
- * }))
536
- * ```
537
- *
538
- * After:
539
- *
540
- * ```ts
541
- * set((eb) => ({
542
- * age: eb('age', '+', 10)
543
- * }))
544
- * ```
545
- *
546
- * or
547
- *
548
- * ```ts
549
- * set(({ eb }) => ({
550
- * age: eb('age', '+', 10)
551
- * }))
552
- * ```
553
- */
554
- bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
555
548
  /**
556
549
  * Creates an unary expression.
557
550
  *
@@ -619,7 +612,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
619
612
  * select * from "person" where "age" between $1 and $2
620
613
  * ```
621
614
  */
622
- between<RE extends ReferenceExpression<DB, TB>>(expr: RE, start: OperandValueExpression<DB, TB, RE>, end: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, SqlBool>;
615
+ between<RE extends ReferenceExpression<DB, TB>, SE extends OperandValueExpression<DB, TB, RE>, EE extends OperandValueExpression<DB, TB, RE>>(expr: RE, start: SE, end: EE): ExpressionWrapper<DB, TB, SqlBool>;
623
616
  /**
624
617
  * Creates a `between symmetric` expression.
625
618
  *
@@ -637,7 +630,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
637
630
  * select * from "person" where "age" between symmetric $1 and $2
638
631
  * ```
639
632
  */
640
- betweenSymmetric<RE extends ReferenceExpression<DB, TB>>(expr: RE, start: OperandValueExpression<DB, TB, RE>, end: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, SqlBool>;
633
+ betweenSymmetric<RE extends ReferenceExpression<DB, TB>, SE extends OperandValueExpression<DB, TB, RE>, EE extends OperandValueExpression<DB, TB, RE>>(expr: RE, start: SE, end: EE): ExpressionWrapper<DB, TB, SqlBool>;
641
634
  /**
642
635
  * Combines two or more expressions using the logical `and` operator.
643
636
  *
@@ -696,8 +689,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
696
689
  * )
697
690
  * ```
698
691
  */
699
- and(exprs: ReadonlyArray<OperandExpression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
700
- and(exprs: Readonly<FilterObject<DB, TB>>): ExpressionWrapper<DB, TB, SqlBool>;
692
+ and<E extends OperandExpression<SqlBool>>(exprs: ReadonlyArray<E>): ExpressionWrapper<DB, TB, SqlBool>;
693
+ and<E extends Readonly<FilterObject<DB, TB>>>(exprs: E): ExpressionWrapper<DB, TB, SqlBool>;
701
694
  /**
702
695
  * Combines two or more expressions using the logical `or` operator.
703
696
  *
@@ -756,8 +749,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
756
749
  * )
757
750
  * ```
758
751
  */
759
- or(exprs: ReadonlyArray<OperandExpression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
760
- or(exprs: Readonly<FilterObject<DB, TB>>): ExpressionWrapper<DB, TB, SqlBool>;
752
+ or<E extends OperandExpression<SqlBool>>(exprs: ReadonlyArray<E>): ExpressionWrapper<DB, TB, SqlBool>;
753
+ or<E extends Readonly<FilterObject<DB, TB>>>(exprs: E): ExpressionWrapper<DB, TB, SqlBool>;
761
754
  /**
762
755
  * Wraps the expression in parentheses.
763
756
  *
@@ -797,7 +790,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
797
790
  * where ("age" = $1 or "age" = $2) and ("first_name" = $3 or "first_name" = $4)
798
791
  * ```
799
792
  */
800
- parens<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
793
+ parens<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: OP, rhs: VE): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
801
794
  parens<T>(expr: Expression<T>): ExpressionWrapper<DB, TB, T>;
802
795
  /**
803
796
  * See {@link QueryCreator.withSchema}
@@ -21,8 +21,8 @@ const object_utils_js_1 = require("../util/object-utils.js");
21
21
  const json_path_builder_js_1 = require("../query-builder/json-path-builder.js");
22
22
  const binary_operation_node_js_1 = require("../operation-node/binary-operation-node.js");
23
23
  const and_node_js_1 = require("../operation-node/and-node.js");
24
- const select_parser_js_1 = require("../parser/select-parser.js");
25
24
  const tuple_node_js_1 = require("../operation-node/tuple-node.js");
25
+ const json_path_node_js_1 = require("../operation-node/json-path-node.js");
26
26
  function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_EXECUTOR) {
27
27
  function binary(lhs, op, rhs) {
28
28
  return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
@@ -40,13 +40,6 @@ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_
40
40
  queryNode: select_query_node_js_1.SelectQueryNode.createFrom((0, table_parser_js_1.parseTableExpressionOrList)(table)),
41
41
  });
42
42
  },
43
- selectNoFrom(selection) {
44
- return (0, select_query_builder_js_1.createSelectQueryBuilder)({
45
- queryId: (0, query_id_js_1.createQueryId)(),
46
- executor,
47
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(select_query_node_js_1.SelectQueryNode.create(), (0, select_parser_js_1.parseSelectArg)(selection)),
48
- });
49
- },
50
43
  case(reference) {
51
44
  return new case_builder_js_1.CaseBuilder({
52
45
  node: case_node_js_1.CaseNode.create((0, object_utils_js_1.isUndefined)(reference)
@@ -60,8 +53,14 @@ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_
60
53
  }
61
54
  return new json_path_builder_js_1.JSONPathBuilder((0, reference_parser_js_1.parseJSONReference)(reference, op));
62
55
  },
56
+ jsonPath() {
57
+ return new json_path_builder_js_1.JSONPathBuilder(json_path_node_js_1.JSONPathNode.create());
58
+ },
59
+ table(table) {
60
+ return new expression_wrapper_js_1.ExpressionWrapper((0, table_parser_js_1.parseTable)(table));
61
+ },
63
62
  val(value) {
64
- return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpressionOrList)(value));
63
+ return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseValueExpression)(value));
65
64
  },
66
65
  refTuple(...values) {
67
66
  return new expression_wrapper_js_1.ExpressionWrapper(tuple_node_js_1.TupleNode.create(values.map(reference_parser_js_1.parseReferenceExpression)));
@@ -72,14 +71,6 @@ function createExpressionBuilder(executor = noop_query_executor_js_1.NOOP_QUERY_
72
71
  lit(value) {
73
72
  return new expression_wrapper_js_1.ExpressionWrapper((0, value_parser_js_1.parseSafeImmediateValue)(value));
74
73
  },
75
- // @deprecated
76
- cmpr(lhs, op, rhs) {
77
- return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
78
- },
79
- // @deprecated
80
- bxp(lhs, op, rhs) {
81
- return new expression_wrapper_js_1.ExpressionWrapper((0, binary_operation_parser_js_1.parseValueBinaryOperation)(lhs, op, rhs));
82
- },
83
74
  unary,
84
75
  not(expr) {
85
76
  return unary('not', expr);
@@ -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,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jsonBuildObject = exports.jsonObjectFrom = exports.jsonArrayFrom = void 0;
4
+ const sql_js_1 = require("../raw-builder/sql.js");
5
+ /**
6
+ * An MS SQL Server helper for aggregating a subquery into a JSON array.
7
+ *
8
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
9
+ * Otherwise the nested selections will be returned as JSON strings.
10
+ *
11
+ * The plugin can be installed like this:
12
+ *
13
+ * ```ts
14
+ * const db = new Kysely({
15
+ * dialect: new MssqlDialect(config),
16
+ * plugins: [new ParseJSONResultsPlugin()]
17
+ * })
18
+ * ```
19
+ *
20
+ * ### Examples
21
+ *
22
+ * ```ts
23
+ * const result = await db
24
+ * .selectFrom('person')
25
+ * .select((eb) => [
26
+ * 'id',
27
+ * jsonArrayFrom(
28
+ * eb.selectFrom('pet')
29
+ * .select(['pet.id as pet_id', 'pet.name'])
30
+ * .whereRef('pet.owner_id', '=', 'person.id')
31
+ * .orderBy('pet.name')
32
+ * .modifyEnd(sql`offset 0 rows`)
33
+ * ).as('pets')
34
+ * ])
35
+ * .execute()
36
+ *
37
+ * result[0].id
38
+ * result[0].pets[0].pet_id
39
+ * result[0].pets[0].name
40
+ * ```
41
+ *
42
+ * The generated SQL (MS SQL Server):
43
+ *
44
+ * ```sql
45
+ * select "id", (
46
+ * select coalesce((select * from (
47
+ * select "pet"."id" as "pet_id", "pet"."name"
48
+ * from "pet"
49
+ * where "pet"."owner_id" = "person"."id"
50
+ * order by "pet"."name"
51
+ * offset 0 rows
52
+ * ) as "agg" for json path, include_null_values), '[]')
53
+ * ) as "pets"
54
+ * from "person"
55
+ * ```
56
+ */
57
+ function jsonArrayFrom(expr) {
58
+ return (0, sql_js_1.sql) `coalesce((select * from ${expr} as agg for json path, include_null_values), '[]')`;
59
+ }
60
+ exports.jsonArrayFrom = jsonArrayFrom;
61
+ /**
62
+ * An MS SQL Server helper for turning a subquery into a JSON object.
63
+ *
64
+ * The subquery must only return one row.
65
+ *
66
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
67
+ * Otherwise the nested selections will be returned as JSON strings.
68
+ *
69
+ * The plugin can be installed like this:
70
+ *
71
+ * ```ts
72
+ * const db = new Kysely({
73
+ * dialect: new MssqlDialect(config),
74
+ * plugins: [new ParseJSONResultsPlugin()]
75
+ * })
76
+ * ```
77
+ *
78
+ * ### Examples
79
+ *
80
+ * ```ts
81
+ * const result = await db
82
+ * .selectFrom('person')
83
+ * .select((eb) => [
84
+ * 'id',
85
+ * jsonObjectFrom(
86
+ * eb.selectFrom('pet')
87
+ * .select(['pet.id as pet_id', 'pet.name'])
88
+ * .whereRef('pet.owner_id', '=', 'person.id')
89
+ * .where('pet.is_favorite', '=', 1)
90
+ * ).as('favorite_pet')
91
+ * ])
92
+ * .execute()
93
+ *
94
+ * result[0].id
95
+ * result[0].favorite_pet.pet_id
96
+ * result[0].favorite_pet.name
97
+ * ```
98
+ *
99
+ * The generated SQL (MS SQL Server):
100
+ *
101
+ * ```sql
102
+ * select "id", (
103
+ * select * from (
104
+ * select "pet"."id" as "pet_id", "pet"."name"
105
+ * from "pet"
106
+ * where "pet"."owner_id" = "person"."id"
107
+ * and "pet"."is_favorite" = @1
108
+ * ) as "agg" for json path, include_null_values, without_array_wrapper
109
+ * ) as "favorite_pet"
110
+ * from "person"
111
+ * ```
112
+ */
113
+ function jsonObjectFrom(expr) {
114
+ return (0, sql_js_1.sql) `(select * from ${expr} as agg for json path, include_null_values, without_array_wrapper)`;
115
+ }
116
+ exports.jsonObjectFrom = jsonObjectFrom;
117
+ /**
118
+ * The MS SQL Server `json_query` function, single argument variant.
119
+ *
120
+ * NOTE: This helper only works correctly if you've installed the `ParseJSONResultsPlugin`.
121
+ * Otherwise the nested selections will be returned as JSON strings.
122
+ *
123
+ * The plugin can be installed like this:
124
+ *
125
+ * ```ts
126
+ * const db = new Kysely({
127
+ * dialect: new MssqlDialect(config),
128
+ * plugins: [new ParseJSONResultsPlugin()]
129
+ * })
130
+ * ```
131
+ *
132
+ * ### Examples
133
+ *
134
+ * ```ts
135
+ * const result = await db
136
+ * .selectFrom('person')
137
+ * .select((eb) => [
138
+ * 'id',
139
+ * jsonBuildObject({
140
+ * first: eb.ref('first_name'),
141
+ * last: eb.ref('last_name'),
142
+ * full: eb.fn('concat', ['first_name', eb.val(' '), 'last_name'])
143
+ * }).as('name')
144
+ * ])
145
+ * .execute()
146
+ * ```
147
+ *
148
+ * The generated SQL (MS SQL Server):
149
+ *
150
+ * ```sql
151
+ * select "id", json_query(
152
+ * '{"first":"'+"first_name"+',"last":"'+"last_name"+',"full":"'+concat("first_name", ' ', "last_name")+'"}'
153
+ * ) as "name"
154
+ * from "person"
155
+ * ```
156
+ */
157
+ function jsonBuildObject(obj) {
158
+ return (0, sql_js_1.sql) `json_query('{${sql_js_1.sql.join(Object.keys(obj).map((k) => (0, sql_js_1.sql) `"${sql_js_1.sql.raw(k)}":"'+${obj[k]}+'"`), (0, sql_js_1.sql) `,`)}}')`;
159
+ }
160
+ exports.jsonBuildObject = jsonBuildObject;
@@ -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
  *