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
@@ -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 { CallbackSelection, SelectCallback, 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,18 +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>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
208
- selectNoFrom<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, CallbackSelection<DB, TB, CB>>;
209
- selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
210
199
  /**
211
200
  * Creates a `case` statement/operator.
212
201
  *
@@ -260,13 +249,14 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
260
249
  */
261
250
  case(): CaseBuilder<DB, TB>;
262
251
  case<C extends SimpleReferenceExpression<DB, TB>>(column: C): CaseBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C>>;
263
- case<O>(expression: Expression<O>): CaseBuilder<DB, TB, O>;
252
+ case<E extends Expression<any>>(expression: E): CaseBuilder<DB, TB, ExtractTypeFromValueExpression<E>>;
264
253
  /**
265
254
  * This method can be used to reference columns within the query's context. For
266
255
  * a non-type-safe version of this method see {@link sql}'s version.
267
256
  *
268
257
  * Additionally, this method can be used to reference nested JSON properties or
269
- * 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}.
270
260
  *
271
261
  * ### Examples
272
262
  *
@@ -344,6 +334,57 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
344
334
  */
345
335
  ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
346
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]>>;
347
388
  /**
348
389
  * Returns a value expression.
349
390
  *
@@ -504,56 +545,6 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
504
545
  * ```
505
546
  */
506
547
  lit<VE extends number | boolean | null>(literal: VE): ExpressionWrapper<DB, TB, VE>;
507
- /**
508
- * @deprecated Use the expression builder as a function instead.
509
- *
510
- * Before:
511
- *
512
- * ```ts
513
- * where((eb) => eb.cmpr('first_name', '=', 'Jennifer'))
514
- * ```
515
- *
516
- * After:
517
- *
518
- * ```ts
519
- * where((eb) => eb('first_name', '=', 'Jennifer'))
520
- * ```
521
- *
522
- * or
523
- *
524
- * ```ts
525
- * where(({ eb }) => eb('first_name', '=', 'Jennifer'))
526
- * ```
527
- */
528
- 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>;
529
- /**
530
- * @deprecated Use the expression builder as a function instead.
531
- *
532
- * Before:
533
- *
534
- * ```ts
535
- * set((eb) => ({
536
- * age: eb.bxp('age', '+', 10)
537
- * }))
538
- * ```
539
- *
540
- * After:
541
- *
542
- * ```ts
543
- * set((eb) => ({
544
- * age: eb('age', '+', 10)
545
- * }))
546
- * ```
547
- *
548
- * or
549
- *
550
- * ```ts
551
- * set(({ eb }) => ({
552
- * age: eb('age', '+', 10)
553
- * }))
554
- * ```
555
- */
556
- 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>>;
557
548
  /**
558
549
  * Creates an unary expression.
559
550
  *
@@ -621,7 +612,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
621
612
  * select * from "person" where "age" between $1 and $2
622
613
  * ```
623
614
  */
624
- 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>;
625
616
  /**
626
617
  * Creates a `between symmetric` expression.
627
618
  *
@@ -639,7 +630,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
639
630
  * select * from "person" where "age" between symmetric $1 and $2
640
631
  * ```
641
632
  */
642
- 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>;
643
634
  /**
644
635
  * Combines two or more expressions using the logical `and` operator.
645
636
  *
@@ -698,8 +689,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
698
689
  * )
699
690
  * ```
700
691
  */
701
- and(exprs: ReadonlyArray<OperandExpression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
702
- 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>;
703
694
  /**
704
695
  * Combines two or more expressions using the logical `or` operator.
705
696
  *
@@ -758,8 +749,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
758
749
  * )
759
750
  * ```
760
751
  */
761
- or(exprs: ReadonlyArray<OperandExpression<SqlBool>>): ExpressionWrapper<DB, TB, SqlBool>;
762
- 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>;
763
754
  /**
764
755
  * Wraps the expression in parentheses.
765
756
  *
@@ -799,7 +790,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
799
790
  * where ("age" = $1 or "age" = $2) and ("first_name" = $3 or "first_name" = $4)
800
791
  * ```
801
792
  */
802
- 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>>;
803
794
  parens<T>(expr: Expression<T>): ExpressionWrapper<DB, TB, T>;
804
795
  /**
805
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,15 +235,25 @@ 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
  *
243
243
  * This method call doesn't change the SQL in any way. This methods simply
244
244
  * returns a copy of this `ExpressionWrapper` with a new output type.
245
245
  */
246
- $castTo<T>(): ExpressionWrapper<DB, TB, T>;
246
+ $castTo<C>(): ExpressionWrapper<DB, TB, C>;
247
+ /**
248
+ * Omit null from the expression's type.
249
+ *
250
+ * This function can be useful in cases where you know an expression can't be
251
+ * null, but Kysely is unable to infer it.
252
+ *
253
+ * This method call doesn't change the SQL in any way. This methods simply
254
+ * returns a copy of `this` with a new output type.
255
+ */
256
+ $notNull(): ExpressionWrapper<DB, TB, Exclude<T, null>>;
247
257
  /**
248
258
  * Creates the OperationNode that describes how to compile this expression into SQL.
249
259
  *
@@ -389,15 +399,15 @@ export declare class OrWrapper<DB, TB extends keyof DB, T extends SqlBool> imple
389
399
  *
390
400
  * See {@link ExpressionWrapper.or} for examples.
391
401
  */
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>;
402
+ or<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): OrWrapper<DB, TB, T>;
403
+ or<E extends OperandExpression<SqlBool>>(expression: E): OrWrapper<DB, TB, T>;
394
404
  /**
395
405
  * Change the output type of the expression.
396
406
  *
397
407
  * This method call doesn't change the SQL in any way. This methods simply
398
408
  * returns a copy of this `OrWrapper` with a new output type.
399
409
  */
400
- $castTo<T extends SqlBool>(): OrWrapper<DB, TB, T>;
410
+ $castTo<C extends SqlBool>(): OrWrapper<DB, TB, C>;
401
411
  /**
402
412
  * Creates the OperationNode that describes how to compile this expression into SQL.
403
413
  *
@@ -525,15 +535,15 @@ export declare class AndWrapper<DB, TB extends keyof DB, T extends SqlBool> impl
525
535
  *
526
536
  * See {@link ExpressionWrapper.and} for examples.
527
537
  */
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>;
538
+ and<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): AndWrapper<DB, TB, T>;
539
+ and<E extends OperandExpression<SqlBool>>(expression: E): AndWrapper<DB, TB, T>;
530
540
  /**
531
541
  * Change the output type of the expression.
532
542
  *
533
543
  * This method call doesn't change the SQL in any way. This methods simply
534
544
  * returns a copy of this `AndWrapper` with a new output type.
535
545
  */
536
- $castTo<T extends SqlBool>(): AndWrapper<DB, TB, T>;
546
+ $castTo<C extends SqlBool>(): AndWrapper<DB, TB, C>;
537
547
  /**
538
548
  * Creates the OperationNode that describes how to compile this expression into SQL.
539
549
  *
@@ -35,6 +35,18 @@ class ExpressionWrapper {
35
35
  $castTo() {
36
36
  return new ExpressionWrapper(this.#node);
37
37
  }
38
+ /**
39
+ * Omit null from the expression's type.
40
+ *
41
+ * This function can be useful in cases where you know an expression can't be
42
+ * null, but Kysely is unable to infer it.
43
+ *
44
+ * This method call doesn't change the SQL in any way. This methods simply
45
+ * returns a copy of `this` with a new output type.
46
+ */
47
+ $notNull() {
48
+ return new ExpressionWrapper(this.#node);
49
+ }
38
50
  toOperationNode() {
39
51
  return this.#node;
40
52
  }
@@ -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
+ }>>;