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
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.parseUpdateObjectExpression = exports.parseUpdate = void 0;
|
|
4
4
|
const column_node_js_1 = require("../operation-node/column-node.js");
|
|
5
5
|
const column_update_node_js_1 = require("../operation-node/column-update-node.js");
|
|
6
6
|
const expression_builder_js_1 = require("../expression/expression-builder.js");
|
|
7
7
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
8
8
|
const value_parser_js_1 = require("./value-parser.js");
|
|
9
|
-
|
|
9
|
+
const reference_parser_js_1 = require("./reference-parser.js");
|
|
10
|
+
function parseUpdate(...args) {
|
|
11
|
+
if (args.length === 2) {
|
|
12
|
+
return [
|
|
13
|
+
column_update_node_js_1.ColumnUpdateNode.create((0, reference_parser_js_1.parseReferenceExpression)(args[0]), (0, value_parser_js_1.parseValueExpression)(args[1])),
|
|
14
|
+
];
|
|
15
|
+
}
|
|
16
|
+
return parseUpdateObjectExpression(args[0]);
|
|
17
|
+
}
|
|
18
|
+
exports.parseUpdate = parseUpdate;
|
|
19
|
+
function parseUpdateObjectExpression(update) {
|
|
10
20
|
const updateObj = (0, object_utils_js_1.isFunction)(update) ? update((0, expression_builder_js_1.expressionBuilder)()) : update;
|
|
11
21
|
return Object.entries(updateObj)
|
|
12
22
|
.filter(([_, value]) => value !== undefined)
|
|
@@ -14,4 +24,4 @@ function parseUpdateExpression(update) {
|
|
|
14
24
|
return column_update_node_js_1.ColumnUpdateNode.create(column_node_js_1.ColumnNode.create(key), (0, value_parser_js_1.parseValueExpression)(value));
|
|
15
25
|
});
|
|
16
26
|
}
|
|
17
|
-
exports.
|
|
27
|
+
exports.parseUpdateObjectExpression = parseUpdateObjectExpression;
|
|
@@ -2,11 +2,11 @@ import { ValueNode } from '../operation-node/value-node.js';
|
|
|
2
2
|
import { ExpressionOrFactory } from './expression-parser.js';
|
|
3
3
|
import { OperationNode } from '../operation-node/operation-node.js';
|
|
4
4
|
import { Expression } from '../expression/expression.js';
|
|
5
|
-
import {
|
|
5
|
+
import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
|
|
6
6
|
export type ValueExpression<DB, TB extends keyof DB, V> = V | ExpressionOrFactory<DB, TB, V>;
|
|
7
7
|
export type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
|
|
8
8
|
export type ExtractTypeFromValueExpressionOrList<VE> = VE extends ReadonlyArray<infer AV> ? ExtractTypeFromValueExpression<AV> : ExtractTypeFromValueExpression<VE>;
|
|
9
|
-
export type ExtractTypeFromValueExpression<VE> = VE extends
|
|
9
|
+
export type ExtractTypeFromValueExpression<VE> = VE extends SelectQueryBuilderExpression<Record<string, infer SV>> ? SV : VE extends Expression<infer V> ? V : VE;
|
|
10
10
|
export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): OperationNode;
|
|
11
11
|
export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): OperationNode;
|
|
12
12
|
export declare function isSafeImmediateValue(value: unknown): value is number | boolean | null;
|
|
@@ -116,8 +116,8 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
116
116
|
* from "person"
|
|
117
117
|
* ```
|
|
118
118
|
*/
|
|
119
|
-
filterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs:
|
|
120
|
-
filterWhere
|
|
119
|
+
filterWhere<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): AggregateFunctionBuilder<DB, TB, O>;
|
|
120
|
+
filterWhere<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): AggregateFunctionBuilder<DB, TB, O>;
|
|
121
121
|
/**
|
|
122
122
|
* Adds a `filter` clause with a nested `where` clause after the function, where
|
|
123
123
|
* both sides of the operator are references to columns.
|
|
@@ -150,7 +150,7 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
150
150
|
* from "person"
|
|
151
151
|
* ```
|
|
152
152
|
*/
|
|
153
|
-
filterWhereRef
|
|
153
|
+
filterWhereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): AggregateFunctionBuilder<DB, TB, O>;
|
|
154
154
|
/**
|
|
155
155
|
* Adds an `over` clause (window functions) after the function.
|
|
156
156
|
*
|
|
@@ -239,4 +239,4 @@ export declare class AliasedAggregateFunctionBuilder<DB, TB extends keyof DB, O
|
|
|
239
239
|
export interface AggregateFunctionBuilderProps {
|
|
240
240
|
aggregateFunctionNode: AggregateFunctionNode;
|
|
241
241
|
}
|
|
242
|
-
export type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<
|
|
242
|
+
export type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<any, any>;
|
|
@@ -3,6 +3,7 @@ import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
|
3
3
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
4
4
|
import { CaseNode } from '../operation-node/case-node.js';
|
|
5
5
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
6
|
+
import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
|
|
6
7
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
7
8
|
export declare class CaseBuilder<DB, TB extends keyof DB, W = unknown, O = never> implements Whenable<DB, TB, W, O> {
|
|
8
9
|
#private;
|
|
@@ -12,7 +13,7 @@ export declare class CaseBuilder<DB, TB extends keyof DB, W = unknown, O = never
|
|
|
12
13
|
*
|
|
13
14
|
* A `when` call must be followed by a {@link CaseThenBuilder.then} call.
|
|
14
15
|
*/
|
|
15
|
-
when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs:
|
|
16
|
+
when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
|
|
16
17
|
when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
|
|
17
18
|
when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
|
|
18
19
|
}
|
|
@@ -28,7 +29,7 @@ export declare class CaseThenBuilder<DB, TB extends keyof DB, W, O> {
|
|
|
28
29
|
* A `then` call can be followed by {@link Whenable.when}, {@link CaseWhenBuilder.else},
|
|
29
30
|
* {@link CaseWhenBuilder.end} or {@link CaseWhenBuilder.endCase} call.
|
|
30
31
|
*/
|
|
31
|
-
then<
|
|
32
|
+
then<E extends Expression<any>>(expression: E): CaseWhenBuilder<DB, TB, W, O | ExtractTypeFromValueExpression<E>>;
|
|
32
33
|
then<V>(value: V): CaseWhenBuilder<DB, TB, W, O | V>;
|
|
33
34
|
}
|
|
34
35
|
export declare class CaseWhenBuilder<DB, TB extends keyof DB, W, O> implements Whenable<DB, TB, W, O>, Endable<DB, TB, O | null> {
|
|
@@ -39,7 +40,7 @@ export declare class CaseWhenBuilder<DB, TB extends keyof DB, W, O> implements W
|
|
|
39
40
|
*
|
|
40
41
|
* A `when` call must be followed by a {@link CaseThenBuilder.then} call.
|
|
41
42
|
*/
|
|
42
|
-
when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs:
|
|
43
|
+
when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
|
|
43
44
|
when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
|
|
44
45
|
when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
|
|
45
46
|
/**
|
|
@@ -88,7 +89,7 @@ interface Whenable<DB, TB extends keyof DB, W, O> {
|
|
|
88
89
|
*
|
|
89
90
|
* A `when` call must be followed by a {@link CaseThenBuilder.then} call.
|
|
90
91
|
*/
|
|
91
|
-
when<RE extends ReferenceExpression<DB, TB>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs:
|
|
92
|
+
when<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: unknown extends W ? RE : KyselyTypeError<'when(lhs, op, rhs) is not supported when using case(value)'>, op: ComparisonOperatorExpression, rhs: VE): CaseThenBuilder<DB, TB, W, O>;
|
|
92
93
|
when(expression: Expression<W>): CaseThenBuilder<DB, TB, W, O>;
|
|
93
94
|
when(value: unknown extends W ? KyselyTypeError<'when(value) is only supported when using case(value)'> : W): CaseThenBuilder<DB, TB, W, O>;
|
|
94
95
|
}
|
|
@@ -2,8 +2,8 @@ import { OperationNodeSource } from '../operation-node/operation-node-source.js'
|
|
|
2
2
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
3
|
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
4
4
|
import { From, FromTables, TableExpression } from '../parser/table-parser.js';
|
|
5
|
-
import { SelectExpression,
|
|
6
|
-
import { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
|
|
5
|
+
import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
|
|
6
|
+
import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
7
7
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
8
8
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
9
9
|
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
@@ -325,8 +325,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
325
325
|
* .execute()
|
|
326
326
|
* ```
|
|
327
327
|
*/
|
|
328
|
-
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs:
|
|
329
|
-
where
|
|
328
|
+
where<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): DeleteQueryBuilder<DB, TB, O>;
|
|
329
|
+
where<E extends ExpressionOrFactory<DB, TB, SqlBool>>(expression: E): DeleteQueryBuilder<DB, TB, O>;
|
|
330
330
|
/**
|
|
331
331
|
* Adds a `where` clause where both sides of the operator are references
|
|
332
332
|
* to columns.
|
|
@@ -378,7 +378,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
378
378
|
* ) as "pet_name"
|
|
379
379
|
* from "person"
|
|
380
380
|
*/
|
|
381
|
-
whereRef
|
|
381
|
+
whereRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): DeleteQueryBuilder<DB, TB, O>;
|
|
382
382
|
/**
|
|
383
383
|
* Clears all where expressions from the query.
|
|
384
384
|
*
|
|
@@ -659,7 +659,9 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
659
659
|
* .executeTakeFirst()
|
|
660
660
|
* ```
|
|
661
661
|
*/
|
|
662
|
-
returning<SE extends SelectExpression<DB, TB>>(
|
|
662
|
+
returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
663
|
+
returning<CB extends SelectCallback<DB, TB>>(callback: CB): DeleteQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
|
|
664
|
+
returning<SE extends SelectExpression<DB, TB>>(selection: SE): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
663
665
|
/**
|
|
664
666
|
* Adds `returning *` or `returning table.*` clause to the query.
|
|
665
667
|
*
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
2
1
|
import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
3
2
|
import { Expression } from '../expression/expression.js';
|
|
4
|
-
import {
|
|
3
|
+
import { ExtractTypeFromCoalesce1, ExtractTypeFromCoalesce3, ExtractTypeFromCoalesce2, ExtractTypeFromCoalesce4, ExtractTypeFromCoalesce5 } from '../parser/coalesce-parser.js';
|
|
5
4
|
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference, ExtractTypeFromStringReference } from '../parser/reference-parser.js';
|
|
6
5
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
7
|
-
import {
|
|
6
|
+
import { IsNever } from '../util/type-utils.js';
|
|
8
7
|
import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
|
|
9
|
-
import {
|
|
8
|
+
import { SelectQueryBuilderExpression } from '../query-builder/select-query-builder-expression.js';
|
|
9
|
+
import { Selectable } from '../util/column-type.js';
|
|
10
10
|
/**
|
|
11
11
|
* Helpers for type safe SQL function calls.
|
|
12
12
|
*
|
|
@@ -17,21 +17,47 @@ import { SelectQueryBuilder } from './select-query-builder.js';
|
|
|
17
17
|
*
|
|
18
18
|
* <!-- siteExample("select", "Function calls", 60) -->
|
|
19
19
|
*
|
|
20
|
-
* This example
|
|
20
|
+
* This example shows how to create function calls. These examples also work in any
|
|
21
|
+
* other place (`where` calls, updates, inserts etc.). The only difference is that you
|
|
22
|
+
* leave out the alias (the `as` call) if you use these in any other place than `select`.
|
|
21
23
|
*
|
|
22
24
|
* ```ts
|
|
25
|
+
* import { sql } from 'kysely'
|
|
26
|
+
*
|
|
23
27
|
* const result = await db.selectFrom('person')
|
|
24
28
|
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
25
|
-
* .select(({ fn }) => [
|
|
29
|
+
* .select(({ fn, val, ref }) => [
|
|
26
30
|
* 'person.id',
|
|
27
31
|
*
|
|
28
32
|
* // The `fn` module contains the most common
|
|
29
33
|
* // functions.
|
|
30
34
|
* fn.count<number>('pet.id').as('pet_count'),
|
|
31
35
|
*
|
|
32
|
-
* // You can call any function
|
|
33
|
-
* //
|
|
34
|
-
*
|
|
36
|
+
* // You can call any function by calling `fn`
|
|
37
|
+
* // directly. The arguments are treated as column
|
|
38
|
+
* // references by default. If you want to pass in
|
|
39
|
+
* // values, use the `val` function.
|
|
40
|
+
* fn<string>('concat', [
|
|
41
|
+
* val('Ms. '),
|
|
42
|
+
* 'first_name',
|
|
43
|
+
* val(' '),
|
|
44
|
+
* 'last_name'
|
|
45
|
+
* ]).as('full_name_with_title'),
|
|
46
|
+
*
|
|
47
|
+
* // You can call any aggregate function using the
|
|
48
|
+
* // `fn.agg` function.
|
|
49
|
+
* fn.agg<string[]>('array_agg', ['pet.name']).as('pet_names'),
|
|
50
|
+
*
|
|
51
|
+
* // And once again, you can use the `sql`
|
|
52
|
+
* // template tag. The template tag substitutions
|
|
53
|
+
* // are treated as values by default. If you want
|
|
54
|
+
* // to reference columns, you can use the `ref`
|
|
55
|
+
* // function.
|
|
56
|
+
* sql<string>`concat(
|
|
57
|
+
* ${ref('first_name')},
|
|
58
|
+
* ' ',
|
|
59
|
+
* ${ref('last_name')}
|
|
60
|
+
* )`.as('full_name')
|
|
35
61
|
* ])
|
|
36
62
|
* .groupBy('person.id')
|
|
37
63
|
* .having((eb) => eb.fn.count('pet.id'), '>', 10)
|
|
@@ -44,11 +70,13 @@ import { SelectQueryBuilder } from './select-query-builder.js';
|
|
|
44
70
|
* select
|
|
45
71
|
* "person"."id",
|
|
46
72
|
* count("pet"."id") as "pet_count",
|
|
47
|
-
*
|
|
73
|
+
* concat($1, "first_name", $2, "last_name") as "full_name_with_title",
|
|
74
|
+
* array_agg("pet"."name") as "pet_names",
|
|
75
|
+
* concat("first_name", ' ', "last_name") as "full_name"
|
|
48
76
|
* from "person"
|
|
49
77
|
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
50
78
|
* group by "person"."id"
|
|
51
|
-
* having count("pet"."id") > $
|
|
79
|
+
* having count("pet"."id") > $3
|
|
52
80
|
* ```
|
|
53
81
|
*/
|
|
54
82
|
export interface FunctionModule<DB, TB extends keyof DB> {
|
|
@@ -81,7 +109,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
81
109
|
* .where(sql`upper(first_name)`, '=', 'JENNIFER')
|
|
82
110
|
* ```
|
|
83
111
|
*/
|
|
84
|
-
<
|
|
112
|
+
<O, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): ExpressionWrapper<DB, TB, O>;
|
|
85
113
|
/**
|
|
86
114
|
* Creates an aggregate function call.
|
|
87
115
|
*
|
|
@@ -110,7 +138,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
110
138
|
* from "person"
|
|
111
139
|
* ```
|
|
112
140
|
*/
|
|
113
|
-
agg<O
|
|
141
|
+
agg<O, RE extends ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
114
142
|
/**
|
|
115
143
|
* Calls the `avg` function for the column or expression given as the argument.
|
|
116
144
|
*
|
|
@@ -169,7 +197,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
169
197
|
* .execute()
|
|
170
198
|
* ```
|
|
171
199
|
*/
|
|
172
|
-
avg<O extends number | string | null = number | string,
|
|
200
|
+
avg<O extends number | string | null = number | string, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
|
|
173
201
|
/**
|
|
174
202
|
* Calls the `coalesce` function for given arguments.
|
|
175
203
|
*
|
|
@@ -230,7 +258,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
230
258
|
* select coalesce(avg("age"), 0) as "avg_age" from "person" where "first_name" = $1
|
|
231
259
|
* ```
|
|
232
260
|
*/
|
|
233
|
-
coalesce<
|
|
261
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>>(v1: V1): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce1<DB, TB, V1>>;
|
|
262
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce2<DB, TB, V1, V2>>;
|
|
263
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce3<DB, TB, V1, V2, V3>>;
|
|
264
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>, V4 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3, v4: V4): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce4<DB, TB, V1, V2, V3, V4>>;
|
|
265
|
+
coalesce<V1 extends ReferenceExpression<DB, TB>, V2 extends ReferenceExpression<DB, TB>, V3 extends ReferenceExpression<DB, TB>, V4 extends ReferenceExpression<DB, TB>, V5 extends ReferenceExpression<DB, TB>>(v1: V1, v2: V2, v3: V3, v4: V4, v5: V5): ExpressionWrapper<DB, TB, ExtractTypeFromCoalesce5<DB, TB, V1, V2, V3, V4, V5>>;
|
|
234
266
|
/**
|
|
235
267
|
* Calls the `count` function for the column or expression given as the argument.
|
|
236
268
|
*
|
|
@@ -281,7 +313,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
281
313
|
* .execute()
|
|
282
314
|
* ```
|
|
283
315
|
*/
|
|
284
|
-
count<O extends number | string | bigint,
|
|
316
|
+
count<O extends number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
|
|
285
317
|
/**
|
|
286
318
|
* Calls the `count` function with `*` or `table.*` as argument.
|
|
287
319
|
*
|
|
@@ -395,12 +427,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
395
427
|
*
|
|
396
428
|
* ```ts
|
|
397
429
|
* db.selectFrom('toy')
|
|
398
|
-
* .select((eb) => eb.fn.max<number | null
|
|
430
|
+
* .select((eb) => eb.fn.max<number | null>('price').as('max_price'))
|
|
399
431
|
* .execute()
|
|
400
432
|
* ```
|
|
401
433
|
*/
|
|
402
|
-
max<O extends number | string | bigint | null =
|
|
403
|
-
max<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
|
|
434
|
+
max<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
|
|
404
435
|
/**
|
|
405
436
|
* Calls the `min` function for the column or expression given as the argument.
|
|
406
437
|
*
|
|
@@ -443,12 +474,11 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
443
474
|
*
|
|
444
475
|
* ```ts
|
|
445
476
|
* db.selectFrom('toy')
|
|
446
|
-
* .select((eb) => eb.fn.min<number | null
|
|
477
|
+
* .select((eb) => eb.fn.min<number | null>('price').as('min_price'))
|
|
447
478
|
* .execute()
|
|
448
479
|
* ```
|
|
449
480
|
*/
|
|
450
|
-
min<O extends number | string | bigint | null =
|
|
451
|
-
min<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
|
|
481
|
+
min<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
|
|
452
482
|
/**
|
|
453
483
|
* Calls the `sum` function for the column or expression given as the argument.
|
|
454
484
|
*
|
|
@@ -507,7 +537,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
507
537
|
* .execute()
|
|
508
538
|
* ```
|
|
509
539
|
*/
|
|
510
|
-
sum<O extends number | string | bigint | null = number | string | bigint,
|
|
540
|
+
sum<O extends number | string | bigint | null = number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
|
|
511
541
|
/**
|
|
512
542
|
* Calls the `any` function for the column or expression given as the argument.
|
|
513
543
|
*
|
|
@@ -538,10 +568,51 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
538
568
|
* ```
|
|
539
569
|
*/
|
|
540
570
|
any<RE extends StringReference<DB, TB>>(expr: RE): Exclude<ExtractTypeFromStringReference<DB, TB, RE>, null> extends ReadonlyArray<infer I> ? ExpressionWrapper<DB, TB, I> : KyselyTypeError<'any(expr) call failed: expr must be an array'>;
|
|
541
|
-
any<T>(subquery:
|
|
571
|
+
any<T>(subquery: SelectQueryBuilderExpression<Record<string, T>>): ExpressionWrapper<DB, TB, T>;
|
|
542
572
|
any<T>(expr: Expression<ReadonlyArray<T>>): ExpressionWrapper<DB, TB, T>;
|
|
573
|
+
/**
|
|
574
|
+
* Creates a json_agg function call.
|
|
575
|
+
*
|
|
576
|
+
* This function is only available on PostgreSQL.
|
|
577
|
+
*
|
|
578
|
+
* ```ts
|
|
579
|
+
* db.selectFrom('person')
|
|
580
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
581
|
+
* .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')])
|
|
582
|
+
* .groupBy('person.first_name')
|
|
583
|
+
* .execute()
|
|
584
|
+
* ```
|
|
585
|
+
*
|
|
586
|
+
* The generated SQL (PostgreSQL):
|
|
587
|
+
*
|
|
588
|
+
* ```sql
|
|
589
|
+
* select "first_name", json_agg("pet") as "pets"
|
|
590
|
+
* from "person"
|
|
591
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
592
|
+
* group by "person"."first_name"
|
|
593
|
+
* ```
|
|
594
|
+
*/
|
|
595
|
+
jsonAgg<T extends (TB & string) | Expression<unknown>>(table: T): AggregateFunctionBuilder<DB, TB, T extends TB ? Selectable<DB[T]>[] : T extends Expression<infer O> ? O[] : never>;
|
|
596
|
+
/**
|
|
597
|
+
* Creates a to_json function call.
|
|
598
|
+
*
|
|
599
|
+
* This function is only available on PostgreSQL.
|
|
600
|
+
*
|
|
601
|
+
* ```ts
|
|
602
|
+
* db.selectFrom('person')
|
|
603
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
604
|
+
* .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')])
|
|
605
|
+
* .execute()
|
|
606
|
+
* ```
|
|
607
|
+
*
|
|
608
|
+
* The generated SQL (PostgreSQL):
|
|
609
|
+
*
|
|
610
|
+
* ```sql
|
|
611
|
+
* select "first_name", to_json("pet") as "pet"
|
|
612
|
+
* from "person"
|
|
613
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
614
|
+
* ```
|
|
615
|
+
*/
|
|
616
|
+
toJson<T extends (TB & string) | Expression<unknown>>(table: T): ExpressionWrapper<DB, TB, T extends TB ? Selectable<DB[T]> : T extends Expression<infer O> ? O : never>;
|
|
543
617
|
}
|
|
544
618
|
export declare function createFunctionModule<DB, TB extends keyof DB>(): FunctionModule<DB, TB>;
|
|
545
|
-
type OutputBoundStringReference<DB, TB extends keyof DB, C extends StringReference<DB, TB>, O> = IsAny<O> extends true ? C : Equals<ExtractTypeFromReferenceExpression<DB, TB, C> | null, O | null> extends true ? C : never;
|
|
546
|
-
type StringReferenceBoundAggregateFunctionBuilder<DB, TB extends keyof DB, C extends StringReference<DB, TB>, O> = AggregateFunctionBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C> | (IsAny<O> extends true ? never : null extends O ? null : never)>;
|
|
547
|
-
export {};
|
|
@@ -7,9 +7,11 @@ const function_node_js_1 = require("../operation-node/function-node.js");
|
|
|
7
7
|
const reference_parser_js_1 = require("../parser/reference-parser.js");
|
|
8
8
|
const select_parser_js_1 = require("../parser/select-parser.js");
|
|
9
9
|
const aggregate_function_builder_js_1 = require("./aggregate-function-builder.js");
|
|
10
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
11
|
+
const table_parser_js_1 = require("../parser/table-parser.js");
|
|
10
12
|
function createFunctionModule() {
|
|
11
13
|
const fn = (name, args) => {
|
|
12
|
-
return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args)));
|
|
14
|
+
return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create(name, (0, reference_parser_js_1.parseReferenceExpressionOrList)(args ?? [])));
|
|
13
15
|
};
|
|
14
16
|
const agg = (name, args) => {
|
|
15
17
|
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
@@ -21,8 +23,8 @@ function createFunctionModule() {
|
|
|
21
23
|
avg(column) {
|
|
22
24
|
return agg('avg', [column]);
|
|
23
25
|
},
|
|
24
|
-
coalesce(
|
|
25
|
-
return fn('coalesce',
|
|
26
|
+
coalesce(...values) {
|
|
27
|
+
return fn('coalesce', values);
|
|
26
28
|
},
|
|
27
29
|
count(column) {
|
|
28
30
|
return agg('count', [column]);
|
|
@@ -44,6 +46,18 @@ function createFunctionModule() {
|
|
|
44
46
|
any(column) {
|
|
45
47
|
return fn('any', [column]);
|
|
46
48
|
},
|
|
49
|
+
jsonAgg(table) {
|
|
50
|
+
return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
|
|
51
|
+
aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('json_agg', [
|
|
52
|
+
(0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(),
|
|
53
|
+
]),
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
toJson(table) {
|
|
57
|
+
return new expression_wrapper_js_1.ExpressionWrapper(function_node_js_1.FunctionNode.create('to_json', [
|
|
58
|
+
(0, object_utils_js_1.isString)(table) ? (0, table_parser_js_1.parseTable)(table) : table.toOperationNode(),
|
|
59
|
+
]));
|
|
60
|
+
},
|
|
47
61
|
});
|
|
48
62
|
}
|
|
49
63
|
exports.createFunctionModule = createFunctionModule;
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
2
|
-
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
3
2
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
4
|
-
import { SqlBool } from '../util/type-utils.js';
|
|
5
3
|
export interface HavingInterface<DB, TB extends keyof DB> {
|
|
6
4
|
/**
|
|
7
5
|
* Just like {@link WhereInterface.where | where} but adds a `having` statement
|
|
8
6
|
* instead of a `where` statement.
|
|
9
7
|
*/
|
|
10
|
-
having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs:
|
|
11
|
-
having(expression:
|
|
8
|
+
having<RE extends ReferenceExpression<DB, TB>, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): HavingInterface<DB, TB>;
|
|
9
|
+
having<E>(expression: E): HavingInterface<DB, TB>;
|
|
12
10
|
/**
|
|
13
11
|
* Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
|
|
14
12
|
* instead of a `where` statement.
|
|
15
13
|
*/
|
|
16
|
-
havingRef
|
|
14
|
+
havingRef<LRE extends ReferenceExpression<DB, TB>, RRE extends ReferenceExpression<DB, TB>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): HavingInterface<DB, TB>;
|
|
17
15
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
2
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
|
-
import { SelectExpression,
|
|
3
|
+
import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
|
|
4
4
|
import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
|
|
5
5
|
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
6
6
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
7
7
|
import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
|
|
8
|
-
import {
|
|
8
|
+
import { UpdateObjectExpression } from '../parser/update-set-parser.js';
|
|
9
9
|
import { Compilable } from '../util/compilable.js';
|
|
10
10
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
11
11
|
import { QueryId } from '../util/query-id.js';
|
|
12
12
|
import { InsertResult } from './insert-result.js';
|
|
13
13
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
14
|
-
import { ReturningRow } from '../parser/returning-parser.js';
|
|
14
|
+
import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
|
|
15
15
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
16
16
|
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
17
17
|
import { ReturningInterface } from './returning-interface.js';
|
|
@@ -60,13 +60,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
60
60
|
* })
|
|
61
61
|
* .executeTakeFirst()
|
|
62
62
|
*
|
|
63
|
+
* // `insertId` is only available on dialects that
|
|
64
|
+
* // automatically return the id of the inserted row
|
|
65
|
+
* // such as MySQL and SQLite. On PostgreSQL, for example,
|
|
66
|
+
* // you need to add a `returning` clause to the query to
|
|
67
|
+
* // get anything out. See the "returning data" example.
|
|
63
68
|
* console.log(result.insertId)
|
|
64
69
|
* ```
|
|
65
70
|
*
|
|
66
|
-
* The generated SQL (
|
|
71
|
+
* The generated SQL (MySQL):
|
|
67
72
|
*
|
|
68
73
|
* ```sql
|
|
69
|
-
* insert into
|
|
74
|
+
* insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?)
|
|
70
75
|
* ```
|
|
71
76
|
*
|
|
72
77
|
* <!-- siteExample("insert", "Multiple rows", 20) -->
|
|
@@ -131,11 +136,14 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
131
136
|
* ```ts
|
|
132
137
|
* import { sql } from 'kysely'
|
|
133
138
|
*
|
|
139
|
+
* const ani = "Ani"
|
|
140
|
+
* const ston = "ston"
|
|
141
|
+
*
|
|
134
142
|
* const result = await db
|
|
135
143
|
* .insertInto('person')
|
|
136
144
|
* .values(({ ref, selectFrom, fn }) => ({
|
|
137
145
|
* first_name: 'Jennifer',
|
|
138
|
-
* last_name: sql
|
|
146
|
+
* last_name: sql`concat(${ani}, ${ston})`,
|
|
139
147
|
* middle_name: ref('first_name'),
|
|
140
148
|
* age: selectFrom('person')
|
|
141
149
|
* .select(fn.avg<number>('age')
|
|
@@ -147,8 +155,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
147
155
|
* The generated SQL (PostgreSQL):
|
|
148
156
|
*
|
|
149
157
|
* ```sql
|
|
150
|
-
* insert into "person" (
|
|
151
|
-
*
|
|
158
|
+
* insert into "person" (
|
|
159
|
+
* "first_name",
|
|
160
|
+
* "last_name",
|
|
161
|
+
* "middle_name",
|
|
162
|
+
* "age"
|
|
163
|
+
* )
|
|
164
|
+
* values (
|
|
165
|
+
* $1,
|
|
166
|
+
* concat($2, $3),
|
|
167
|
+
* "first_name",
|
|
168
|
+
* (select avg("age") as "avg_age" from "person")
|
|
169
|
+
* )
|
|
152
170
|
* ```
|
|
153
171
|
*
|
|
154
172
|
* You can also use the callback version of subqueries or raw expressions:
|
|
@@ -208,7 +226,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
208
226
|
* .select((eb) => [
|
|
209
227
|
* 'pet.name',
|
|
210
228
|
* eb.val('Petson').as('last_name'),
|
|
211
|
-
* eb.
|
|
229
|
+
* eb.lit(7).as('age'),
|
|
212
230
|
* ])
|
|
213
231
|
* )
|
|
214
232
|
* .execute()
|
|
@@ -218,7 +236,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
218
236
|
*
|
|
219
237
|
* ```sql
|
|
220
238
|
* insert into "person" ("first_name", "last_name", "age")
|
|
221
|
-
* select "pet"."name", $1 as "
|
|
239
|
+
* select "pet"."name", $1 as "last_name", 7 as "age from "pet"
|
|
222
240
|
* ```
|
|
223
241
|
*/
|
|
224
242
|
expression(expression: ExpressionOrFactory<DB, TB, any>): InsertQueryBuilder<DB, TB, O>;
|
|
@@ -414,7 +432,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
414
432
|
* .onDuplicateKeyUpdate({ species: 'hamster' })
|
|
415
433
|
* ```
|
|
416
434
|
*/
|
|
417
|
-
onDuplicateKeyUpdate(update:
|
|
435
|
+
onDuplicateKeyUpdate(update: UpdateObjectExpression<DB, TB, TB>): InsertQueryBuilder<DB, TB, O>;
|
|
418
436
|
/**
|
|
419
437
|
* Allows you to return data from modified rows.
|
|
420
438
|
*
|
|
@@ -474,7 +492,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
474
492
|
* .executeTakeFirst()
|
|
475
493
|
* ```
|
|
476
494
|
*/
|
|
477
|
-
returning<SE extends SelectExpression<DB, TB>>(
|
|
495
|
+
returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
496
|
+
returning<CB extends SelectCallback<DB, TB>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
|
|
497
|
+
returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
478
498
|
/**
|
|
479
499
|
* Adds a `returning *` to an insert/update/delete query on databases
|
|
480
500
|
* that support `returning` such as PostgreSQL.
|
|
@@ -77,7 +77,7 @@ class InsertQueryBuilder {
|
|
|
77
77
|
* .select((eb) => [
|
|
78
78
|
* 'pet.name',
|
|
79
79
|
* eb.val('Petson').as('last_name'),
|
|
80
|
-
* eb.
|
|
80
|
+
* eb.lit(7).as('age'),
|
|
81
81
|
* ])
|
|
82
82
|
* )
|
|
83
83
|
* .execute()
|
|
@@ -87,7 +87,7 @@ class InsertQueryBuilder {
|
|
|
87
87
|
*
|
|
88
88
|
* ```sql
|
|
89
89
|
* insert into "person" ("first_name", "last_name", "age")
|
|
90
|
-
* select "pet"."name", $1 as "
|
|
90
|
+
* select "pet"."name", $1 as "last_name", 7 as "age from "pet"
|
|
91
91
|
* ```
|
|
92
92
|
*/
|
|
93
93
|
expression(expression) {
|
|
@@ -310,7 +310,7 @@ class InsertQueryBuilder {
|
|
|
310
310
|
return new InsertQueryBuilder({
|
|
311
311
|
...this.#props,
|
|
312
312
|
queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
313
|
-
onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.
|
|
313
|
+
onDuplicateKey: on_duplicate_key_node_js_1.OnDuplicateKeyNode.create((0, update_set_parser_js_1.parseUpdateObjectExpression)(update)),
|
|
314
314
|
}),
|
|
315
315
|
});
|
|
316
316
|
}
|
|
@@ -23,7 +23,14 @@
|
|
|
23
23
|
*/
|
|
24
24
|
export declare class InsertResult {
|
|
25
25
|
/**
|
|
26
|
-
* The auto incrementing primary key
|
|
26
|
+
* The auto incrementing primary key of the inserted row.
|
|
27
|
+
*
|
|
28
|
+
* This property can be undefined when the query contains an `on conflict`
|
|
29
|
+
* clause that makes the query succeed even when nothing gets inserted.
|
|
30
|
+
*
|
|
31
|
+
* This property is always undefined on dialects like PostgreSQL that
|
|
32
|
+
* don't return the inserted id by default. On those dialects you need
|
|
33
|
+
* to use the {@link ReturningInterface.returning | returning} method.
|
|
27
34
|
*/
|
|
28
35
|
readonly insertId: bigint | undefined;
|
|
29
36
|
/**
|
|
@@ -26,7 +26,14 @@ exports.InsertResult = void 0;
|
|
|
26
26
|
*/
|
|
27
27
|
class InsertResult {
|
|
28
28
|
/**
|
|
29
|
-
* The auto incrementing primary key
|
|
29
|
+
* The auto incrementing primary key of the inserted row.
|
|
30
|
+
*
|
|
31
|
+
* This property can be undefined when the query contains an `on conflict`
|
|
32
|
+
* clause that makes the query succeed even when nothing gets inserted.
|
|
33
|
+
*
|
|
34
|
+
* This property is always undefined on dialects like PostgreSQL that
|
|
35
|
+
* don't return the inserted id by default. On those dialects you need
|
|
36
|
+
* to use the {@link ReturningInterface.returning | returning} method.
|
|
30
37
|
*/
|
|
31
38
|
insertId;
|
|
32
39
|
/**
|