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.
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
- package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.js +97 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/driver.js +1 -0
- package/dist/cjs/driver/runtime-driver.js +5 -1
- package/dist/cjs/driver/single-connection-provider.js +7 -8
- package/dist/cjs/expression/expression-builder.d.ts +66 -73
- package/dist/cjs/expression/expression-builder.js +8 -17
- package/dist/cjs/expression/expression-wrapper.d.ts +8 -8
- package/dist/cjs/helpers/mssql.d.ts +152 -0
- package/dist/cjs/helpers/mssql.js +160 -0
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/sqlite.d.ts +3 -3
- package/dist/cjs/index.d.ts +8 -2
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/migration/migrator.js +12 -16
- package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
- package/dist/cjs/operation-node/add-index-node.js +31 -0
- package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
- package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +2 -0
- package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
- package/dist/cjs/parser/binary-operation-parser.js +1 -1
- package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
- package/dist/cjs/parser/expression-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.d.ts +3 -2
- package/dist/cjs/parser/returning-parser.d.ts +2 -1
- package/dist/cjs/parser/select-parser.d.ts +20 -9
- package/dist/cjs/parser/update-set-parser.d.ts +5 -2
- package/dist/cjs/parser/update-set-parser.js +13 -3
- package/dist/cjs/parser/value-parser.d.ts +2 -2
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
- package/dist/cjs/query-builder/case-builder.d.ts +5 -4
- package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -6
- package/dist/cjs/query-builder/function-module.d.ts +98 -27
- package/dist/cjs/query-builder/function-module.js +17 -3
- package/dist/cjs/query-builder/having-interface.d.ts +3 -5
- package/dist/cjs/query-builder/insert-query-builder.d.ts +32 -12
- package/dist/cjs/query-builder/insert-query-builder.js +3 -3
- package/dist/cjs/query-builder/insert-result.d.ts +8 -1
- package/dist/cjs/query-builder/insert-result.js +8 -1
- package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
- package/dist/cjs/query-builder/json-path-builder.js +6 -3
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
- package/dist/cjs/query-builder/over-builder.d.ts +2 -2
- package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +48 -29
- package/dist/cjs/query-builder/select-query-builder.js +5 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +25 -7
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +3 -3
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
- package/dist/cjs/query-creator.d.ts +5 -3
- package/dist/cjs/query-creator.js +0 -47
- package/dist/cjs/raw-builder/raw-builder.d.ts +0 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
- package/dist/cjs/schema/alter-table-builder.js +59 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
- package/dist/cjs/schema/column-definition-builder.js +27 -0
- package/dist/cjs/schema/create-index-builder.d.ts +23 -0
- package/dist/cjs/schema/create-index-builder.js +30 -0
- package/dist/cjs/schema/create-table-builder.d.ts +28 -2
- package/dist/cjs/schema/create-table-builder.js +38 -3
- package/dist/cjs/schema/create-view-builder.d.ts +2 -2
- package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/unique-constraint-builder.js +24 -0
- package/dist/cjs/util/infer-result.d.ts +2 -1
- package/dist/cjs/util/log.js +5 -1
- package/dist/cjs/util/object-utils.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +27 -20
- package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/esm/dialect/dialect-adapter-base.js +3 -0
- package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
- package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/driver.js +1 -0
- package/dist/esm/driver/runtime-driver.js +5 -1
- package/dist/esm/driver/single-connection-provider.js +7 -8
- package/dist/esm/expression/expression-builder.d.ts +66 -73
- package/dist/esm/expression/expression-builder.js +10 -19
- package/dist/esm/expression/expression-wrapper.d.ts +8 -8
- package/dist/esm/helpers/mssql.d.ts +152 -0
- package/dist/esm/helpers/mssql.js +155 -0
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/sqlite.d.ts +3 -3
- package/dist/esm/index.d.ts +8 -2
- package/dist/esm/index.js +6 -0
- package/dist/esm/migration/migrator.js +12 -16
- package/dist/esm/operation-node/add-index-node.d.ts +21 -0
- package/dist/esm/operation-node/add-index-node.js +29 -0
- package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/column-update-node.d.ts +2 -3
- package/dist/esm/operation-node/create-index-node.d.ts +1 -0
- package/dist/esm/operation-node/create-table-node.d.ts +1 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +17 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +2 -0
- package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/esm/operation-node/unique-constraint-node.js +8 -1
- package/dist/esm/parser/binary-operation-parser.js +1 -1
- package/dist/esm/parser/coalesce-parser.d.ts +12 -2
- package/dist/esm/parser/expression-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.d.ts +3 -2
- package/dist/esm/parser/returning-parser.d.ts +2 -1
- package/dist/esm/parser/select-parser.d.ts +20 -9
- package/dist/esm/parser/update-set-parser.d.ts +5 -2
- package/dist/esm/parser/update-set-parser.js +10 -1
- package/dist/esm/parser/value-parser.d.ts +2 -2
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
- package/dist/esm/query-builder/case-builder.d.ts +5 -4
- package/dist/esm/query-builder/delete-query-builder.d.ts +8 -6
- package/dist/esm/query-builder/function-module.d.ts +98 -27
- package/dist/esm/query-builder/function-module.js +17 -3
- package/dist/esm/query-builder/having-interface.d.ts +3 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +32 -12
- package/dist/esm/query-builder/insert-query-builder.js +4 -4
- package/dist/esm/query-builder/insert-result.d.ts +8 -1
- package/dist/esm/query-builder/insert-result.js +8 -1
- package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
- package/dist/esm/query-builder/json-path-builder.js +6 -3
- package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/esm/query-builder/on-conflict-builder.js +2 -7
- package/dist/esm/query-builder/over-builder.d.ts +2 -2
- package/dist/esm/query-builder/returning-interface.d.ts +3 -2
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +48 -29
- package/dist/esm/query-builder/select-query-builder.js +5 -2
- package/dist/esm/query-builder/update-query-builder.d.ts +25 -7
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +3 -3
- package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/esm/query-compiler/default-query-compiler.js +65 -12
- package/dist/esm/query-creator.d.ts +5 -3
- package/dist/esm/query-creator.js +0 -47
- package/dist/esm/raw-builder/raw-builder.d.ts +0 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
- package/dist/esm/schema/alter-table-builder.d.ts +41 -1
- package/dist/esm/schema/alter-table-builder.js +59 -2
- package/dist/esm/schema/column-definition-builder.d.ts +25 -0
- package/dist/esm/schema/column-definition-builder.js +27 -0
- package/dist/esm/schema/create-index-builder.d.ts +23 -0
- package/dist/esm/schema/create-index-builder.js +30 -0
- package/dist/esm/schema/create-table-builder.d.ts +28 -2
- package/dist/esm/schema/create-table-builder.js +38 -3
- package/dist/esm/schema/create-view-builder.d.ts +2 -2
- package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/unique-constraint-builder.js +21 -0
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/log.js +5 -1
- package/dist/esm/util/object-utils.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +27 -20
- package/helpers/mssql.d.ts +1 -0
- package/helpers/mssql.js +1 -0
- 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,
|
|
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
|
|
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<
|
|
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
|
|
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
|
|
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<
|
|
700
|
-
and
|
|
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<
|
|
760
|
-
or
|
|
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
|
|
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.
|
|
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:
|
|
177
|
-
or(expression:
|
|
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:
|
|
239
|
-
and(expression:
|
|
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:
|
|
393
|
-
or(expression:
|
|
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:
|
|
529
|
-
and(expression:
|
|
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 {
|
|
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:
|
|
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:
|
|
100
|
+
export declare function jsonObjectFrom<O>(expr: SelectQueryBuilderExpression<O>): RawBuilder<Simplify<O> | null>;
|
|
101
101
|
/**
|
|
102
102
|
* The MySQL `json_object` function.
|
|
103
103
|
*
|