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.
- package/README.md +2 -2
- 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 +99 -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 -75
- package/dist/cjs/expression/expression-builder.js +8 -17
- package/dist/cjs/expression/expression-wrapper.d.ts +21 -11
- package/dist/cjs/expression/expression-wrapper.js +12 -0
- package/dist/cjs/helpers/mssql.d.ts +152 -0
- package/dist/cjs/helpers/mssql.js +160 -0
- package/dist/cjs/index.d.ts +7 -1
- 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/insert-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/limit-node.d.ts +2 -3
- package/dist/cjs/operation-node/limit-node.js +1 -2
- package/dist/cjs/operation-node/offset-node.d.ts +2 -3
- package/dist/cjs/operation-node/offset-node.js +1 -2
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +19 -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/select-modifier-node.d.ts +2 -1
- package/dist/cjs/operation-node/select-modifier-node.js +2 -1
- 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/reference-parser.d.ts +2 -1
- package/dist/cjs/parser/update-set-parser.d.ts +5 -2
- package/dist/cjs/parser/update-set-parser.js +13 -3
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +21 -4
- package/dist/cjs/query-builder/aggregate-function-builder.js +21 -0
- package/dist/cjs/query-builder/case-builder.d.ts +6 -5
- package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -7
- package/dist/cjs/query-builder/delete-query-builder.js +4 -3
- package/dist/cjs/query-builder/function-module.d.ts +96 -25
- 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 +34 -12
- package/dist/cjs/query-builder/insert-query-builder.js +16 -5
- 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 +5 -3
- package/dist/cjs/query-builder/json-path-builder.js +9 -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/select-query-builder.d.ts +49 -31
- package/dist/cjs/query-builder/select-query-builder.js +12 -10
- package/dist/cjs/query-builder/update-query-builder.d.ts +23 -7
- package/dist/cjs/query-builder/update-query-builder.js +4 -4
- 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 +73 -12
- package/dist/cjs/raw-builder/raw-builder.d.ts +11 -1
- package/dist/cjs/raw-builder/raw-builder.js +3 -0
- package/dist/cjs/raw-builder/sql.js +9 -2
- 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/unique-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/unique-constraint-builder.js +24 -0
- package/dist/cjs/util/log.js +5 -1
- package/dist/cjs/util/object-utils.d.ts +2 -2
- package/dist/cjs/util/object-utils.js +1 -1
- package/dist/cjs/util/type-utils.d.ts +27 -19
- 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 +96 -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 -75
- package/dist/esm/expression/expression-builder.js +10 -19
- package/dist/esm/expression/expression-wrapper.d.ts +21 -11
- package/dist/esm/expression/expression-wrapper.js +12 -0
- package/dist/esm/helpers/mssql.d.ts +152 -0
- package/dist/esm/helpers/mssql.js +155 -0
- package/dist/esm/index.d.ts +7 -1
- 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/insert-query-node.d.ts +1 -0
- package/dist/esm/operation-node/limit-node.d.ts +2 -3
- package/dist/esm/operation-node/limit-node.js +1 -2
- package/dist/esm/operation-node/offset-node.d.ts +2 -3
- package/dist/esm/operation-node/offset-node.js +1 -2
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +19 -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/select-modifier-node.d.ts +2 -1
- package/dist/esm/operation-node/select-modifier-node.js +2 -1
- 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/reference-parser.d.ts +2 -1
- package/dist/esm/parser/update-set-parser.d.ts +5 -2
- package/dist/esm/parser/update-set-parser.js +10 -1
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +21 -4
- package/dist/esm/query-builder/aggregate-function-builder.js +21 -0
- package/dist/esm/query-builder/case-builder.d.ts +6 -5
- package/dist/esm/query-builder/delete-query-builder.d.ts +8 -7
- package/dist/esm/query-builder/delete-query-builder.js +4 -3
- package/dist/esm/query-builder/function-module.d.ts +96 -25
- 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 +34 -12
- package/dist/esm/query-builder/insert-query-builder.js +17 -6
- 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 +5 -3
- package/dist/esm/query-builder/json-path-builder.js +9 -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/select-query-builder.d.ts +49 -31
- package/dist/esm/query-builder/select-query-builder.js +13 -11
- package/dist/esm/query-builder/update-query-builder.d.ts +23 -7
- package/dist/esm/query-builder/update-query-builder.js +5 -5
- 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 +73 -12
- package/dist/esm/raw-builder/raw-builder.d.ts +11 -1
- package/dist/esm/raw-builder/raw-builder.js +3 -0
- package/dist/esm/raw-builder/sql.js +9 -2
- 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/unique-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/unique-constraint-builder.js +21 -0
- package/dist/esm/util/log.js +5 -1
- package/dist/esm/util/object-utils.d.ts +2 -2
- package/dist/esm/util/object-utils.js +1 -1
- package/dist/esm/util/type-utils.d.ts +27 -19
- package/helpers/mssql.d.ts +1 -0
- package/helpers/mssql.js +1 -0
- 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,
|
|
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
|
|
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<
|
|
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
|
|
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
|
|
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<
|
|
702
|
-
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>;
|
|
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<
|
|
762
|
-
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>;
|
|
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
|
|
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.
|
|
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,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:
|
|
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
|
*
|
|
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<
|
|
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:
|
|
393
|
-
or(expression:
|
|
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<
|
|
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:
|
|
529
|
-
and(expression:
|
|
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<
|
|
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
|
+
}>>;
|