kysely 0.26.0 → 0.26.2
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 +6 -6
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/cjs/driver/runtime-driver.js +17 -2
- package/dist/cjs/expression/expression-builder.d.ts +299 -28
- package/dist/cjs/expression/expression-builder.js +36 -26
- package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
- package/dist/cjs/expression/expression-wrapper.js +4 -4
- package/dist/cjs/expression/expression.d.ts +64 -1
- package/dist/cjs/helpers/mysql.d.ts +11 -8
- package/dist/cjs/helpers/mysql.js +21 -32
- package/dist/cjs/helpers/postgres.d.ts +8 -5
- package/dist/cjs/helpers/postgres.js +8 -5
- package/dist/cjs/helpers/sqlite.d.ts +164 -0
- package/dist/cjs/helpers/sqlite.js +180 -0
- package/dist/cjs/index.d.ts +3 -1
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/kysely.d.ts +4 -3
- package/dist/cjs/kysely.js +1 -1
- package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
- package/dist/cjs/operation-node/delete-query-node.js +3 -3
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +8 -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 +3 -0
- package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
- package/dist/cjs/operation-node/order-by-node.js +4 -4
- package/dist/cjs/operation-node/over-node.d.ts +1 -1
- package/dist/cjs/operation-node/over-node.js +3 -3
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
- package/dist/cjs/operation-node/select-query-node.js +13 -7
- package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
- package/dist/cjs/operation-node/tuple-node.js +18 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
- package/dist/cjs/parser/binary-operation-parser.js +35 -46
- package/dist/cjs/parser/expression-parser.d.ts +9 -4
- package/dist/cjs/parser/join-parser.d.ts +2 -2
- package/dist/cjs/parser/join-parser.js +2 -3
- package/dist/cjs/parser/order-by-parser.d.ts +6 -2
- package/dist/cjs/parser/order-by-parser.js +41 -7
- package/dist/cjs/parser/parse-utils.js +2 -2
- package/dist/cjs/parser/reference-parser.js +1 -1
- package/dist/cjs/parser/select-parser.d.ts +5 -5
- package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
- package/dist/cjs/parser/set-operation-parser.js +13 -4
- package/dist/cjs/parser/tuple-parser.d.ts +47 -0
- package/dist/cjs/parser/tuple-parser.js +2 -0
- package/dist/cjs/parser/value-parser.d.ts +4 -2
- package/dist/cjs/parser/value-parser.js +12 -1
- package/dist/cjs/parser/with-parser.d.ts +3 -2
- package/dist/cjs/parser/with-parser.js +16 -4
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
- package/dist/cjs/query-builder/case-builder.js +8 -4
- package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
- package/dist/cjs/query-builder/cte-builder.js +39 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +74 -24
- package/dist/cjs/query-builder/delete-query-builder.js +3 -3
- package/dist/cjs/query-builder/function-module.d.ts +41 -6
- package/dist/cjs/query-builder/function-module.js +3 -0
- package/dist/cjs/query-builder/having-interface.d.ts +2 -5
- package/dist/cjs/query-builder/insert-query-builder.d.ts +1 -1
- package/dist/cjs/query-builder/join-builder.d.ts +2 -6
- package/dist/cjs/query-builder/join-builder.js +2 -2
- package/dist/cjs/query-builder/json-path-builder.d.ts +60 -4
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +143 -44
- package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
- package/dist/cjs/query-builder/over-builder.js +1 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +245 -86
- package/dist/cjs/query-builder/select-query-builder.js +72 -924
- package/dist/cjs/query-builder/update-query-builder.d.ts +106 -25
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +71 -24
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
- package/dist/cjs/query-creator.d.ts +74 -2
- package/dist/cjs/query-creator.js +83 -6
- package/dist/cjs/raw-builder/raw-builder.d.ts +88 -49
- package/dist/cjs/raw-builder/raw-builder.js +18 -45
- package/dist/cjs/raw-builder/sql.js +8 -8
- package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
- package/dist/cjs/schema/alter-table-builder.js +12 -0
- package/dist/cjs/schema/create-index-builder.d.ts +1 -1
- package/dist/cjs/schema/create-index-builder.js +1 -1
- package/dist/cjs/util/column-type.d.ts +7 -6
- package/dist/cjs/util/json-object-args.d.ts +3 -0
- package/dist/cjs/util/json-object-args.js +35 -0
- package/dist/cjs/util/object-utils.d.ts +1 -0
- package/dist/cjs/util/object-utils.js +9 -1
- package/dist/cjs/util/type-utils.d.ts +10 -10
- package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
- package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
- package/dist/esm/driver/runtime-driver.js +17 -2
- package/dist/esm/expression/expression-builder.d.ts +299 -28
- package/dist/esm/expression/expression-builder.js +40 -30
- package/dist/esm/expression/expression-wrapper.d.ts +177 -8
- package/dist/esm/expression/expression-wrapper.js +5 -5
- package/dist/esm/expression/expression.d.ts +64 -1
- package/dist/esm/helpers/mysql.d.ts +11 -8
- package/dist/esm/helpers/mysql.js +21 -32
- package/dist/esm/helpers/postgres.d.ts +8 -5
- package/dist/esm/helpers/postgres.js +8 -5
- package/dist/esm/helpers/sqlite.d.ts +164 -0
- package/dist/esm/helpers/sqlite.js +175 -0
- package/dist/esm/index.d.ts +3 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/kysely.d.ts +4 -3
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
- package/dist/esm/operation-node/common-table-expression-node.js +6 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
- package/dist/esm/operation-node/delete-query-node.js +3 -3
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +8 -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 +3 -0
- package/dist/esm/operation-node/order-by-node.d.ts +2 -2
- package/dist/esm/operation-node/order-by-node.js +4 -4
- package/dist/esm/operation-node/over-node.d.ts +1 -1
- package/dist/esm/operation-node/over-node.js +3 -3
- package/dist/esm/operation-node/select-query-node.d.ts +5 -4
- package/dist/esm/operation-node/select-query-node.js +13 -7
- package/dist/esm/operation-node/tuple-node.d.ts +12 -0
- package/dist/esm/operation-node/tuple-node.js +16 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
- package/dist/esm/parser/binary-operation-parser.js +36 -47
- package/dist/esm/parser/expression-parser.d.ts +9 -4
- package/dist/esm/parser/join-parser.d.ts +2 -2
- package/dist/esm/parser/join-parser.js +3 -4
- package/dist/esm/parser/order-by-parser.d.ts +6 -2
- package/dist/esm/parser/order-by-parser.js +40 -7
- package/dist/esm/parser/parse-utils.js +3 -3
- package/dist/esm/parser/reference-parser.js +1 -1
- package/dist/esm/parser/select-parser.d.ts +5 -5
- package/dist/esm/parser/set-operation-parser.d.ts +3 -1
- package/dist/esm/parser/set-operation-parser.js +11 -2
- package/dist/esm/parser/tuple-parser.d.ts +47 -0
- package/dist/esm/parser/tuple-parser.js +2 -0
- package/dist/esm/parser/value-parser.d.ts +4 -2
- package/dist/esm/parser/value-parser.js +10 -1
- package/dist/esm/parser/with-parser.d.ts +3 -2
- package/dist/esm/parser/with-parser.js +16 -4
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
- package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
- package/dist/esm/query-builder/case-builder.js +10 -6
- package/dist/esm/query-builder/cte-builder.d.ts +20 -0
- package/dist/esm/query-builder/cte-builder.js +36 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +74 -24
- package/dist/esm/query-builder/delete-query-builder.js +4 -4
- package/dist/esm/query-builder/function-module.d.ts +41 -6
- package/dist/esm/query-builder/function-module.js +3 -0
- package/dist/esm/query-builder/having-interface.d.ts +2 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +1 -1
- package/dist/esm/query-builder/join-builder.d.ts +2 -6
- package/dist/esm/query-builder/join-builder.js +3 -3
- package/dist/esm/query-builder/json-path-builder.d.ts +60 -4
- package/dist/esm/query-builder/on-conflict-builder.d.ts +143 -44
- package/dist/esm/query-builder/on-conflict-builder.js +5 -5
- package/dist/esm/query-builder/over-builder.js +1 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +245 -86
- package/dist/esm/query-builder/select-query-builder.js +72 -923
- package/dist/esm/query-builder/update-query-builder.d.ts +106 -25
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +71 -24
- package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
- package/dist/esm/query-compiler/default-query-compiler.js +39 -7
- package/dist/esm/query-creator.d.ts +74 -2
- package/dist/esm/query-creator.js +84 -7
- package/dist/esm/raw-builder/raw-builder.d.ts +88 -49
- package/dist/esm/raw-builder/raw-builder.js +17 -42
- package/dist/esm/raw-builder/sql.js +9 -9
- package/dist/esm/schema/alter-table-builder.d.ts +4 -0
- package/dist/esm/schema/alter-table-builder.js +12 -0
- package/dist/esm/schema/create-index-builder.d.ts +1 -1
- package/dist/esm/schema/create-index-builder.js +2 -2
- package/dist/esm/util/column-type.d.ts +7 -6
- package/dist/esm/util/json-object-args.d.ts +3 -0
- package/dist/esm/util/json-object-args.js +32 -0
- package/dist/esm/util/object-utils.d.ts +1 -0
- package/dist/esm/util/object-utils.js +7 -0
- package/dist/esm/util/type-utils.d.ts +10 -10
- package/helpers/sqlite.d.ts +1 -0
- package/helpers/sqlite.js +1 -0
- package/package.json +7 -4
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
/// <reference types="./with-parser.d.ts" />
|
|
2
|
-
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
3
2
|
import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
|
|
4
3
|
import { createQueryCreator } from './parse-utils.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { isFunction } from '../util/object-utils.js';
|
|
5
|
+
import { CTEBuilder } from '../query-builder/cte-builder.js';
|
|
6
|
+
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
7
|
+
export function parseCommonTableExpression(nameOrBuilderCallback, expression) {
|
|
8
|
+
const expressionNode = expression(createQueryCreator()).toOperationNode();
|
|
9
|
+
if (isFunction(nameOrBuilderCallback)) {
|
|
10
|
+
return nameOrBuilderCallback(cteBuilderFactory(expressionNode)).toOperationNode();
|
|
11
|
+
}
|
|
12
|
+
return CommonTableExpressionNode.create(parseCommonTableExpressionName(nameOrBuilderCallback), expressionNode);
|
|
13
|
+
}
|
|
14
|
+
function cteBuilderFactory(expressionNode) {
|
|
15
|
+
return (name) => {
|
|
16
|
+
return new CTEBuilder({
|
|
17
|
+
node: CommonTableExpressionNode.create(parseCommonTableExpressionName(name), expressionNode),
|
|
18
|
+
});
|
|
19
|
+
};
|
|
8
20
|
}
|
|
9
21
|
function parseCommonTableExpressionName(name) {
|
|
10
22
|
if (name.includes('(')) {
|
|
@@ -75,9 +75,9 @@ export interface CamelCasePluginOptions {
|
|
|
75
75
|
* ```
|
|
76
76
|
*
|
|
77
77
|
* As you can see from the example, __everything__ needs to be defined
|
|
78
|
-
* in camelCase in the typescript code:
|
|
79
|
-
*
|
|
80
|
-
*
|
|
78
|
+
* in camelCase in the typescript code: table names, columns, schemas,
|
|
79
|
+
* __everything__. When using the `CamelCasePlugin` Kysely works as if
|
|
80
|
+
* the database was defined in camelCase.
|
|
81
81
|
*
|
|
82
82
|
* There are various options you can give to the plugin to modify
|
|
83
83
|
* the way identifiers are converted. See {@link CamelCasePluginOptions}.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="./camel-case-plugin.d.ts" />
|
|
2
|
-
import {
|
|
2
|
+
import { isPlainObject } from '../../util/object-utils.js';
|
|
3
3
|
import { SnakeCaseTransformer } from './camel-case-transformer.js';
|
|
4
4
|
import { createCamelCaseMapper, createSnakeCaseMapper, } from './camel-case.js';
|
|
5
5
|
/**
|
|
@@ -44,9 +44,9 @@ import { createCamelCaseMapper, createSnakeCaseMapper, } from './camel-case.js';
|
|
|
44
44
|
* ```
|
|
45
45
|
*
|
|
46
46
|
* As you can see from the example, __everything__ needs to be defined
|
|
47
|
-
* in camelCase in the typescript code:
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* in camelCase in the typescript code: table names, columns, schemas,
|
|
48
|
+
* __everything__. When using the `CamelCasePlugin` Kysely works as if
|
|
49
|
+
* the database was defined in camelCase.
|
|
50
50
|
*
|
|
51
51
|
* There are various options you can give to the plugin to modify
|
|
52
52
|
* the way identifiers are converted. See {@link CamelCasePluginOptions}.
|
|
@@ -110,9 +110,5 @@ export class CamelCasePlugin {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
function canMap(obj, opt) {
|
|
113
|
-
return (
|
|
114
|
-
!isDate(obj) &&
|
|
115
|
-
!isBuffer(obj) &&
|
|
116
|
-
!isArrayBufferOrView(obj) &&
|
|
117
|
-
!opt?.maintainNestedObjectKeys);
|
|
113
|
+
return isPlainObject(obj) && !opt?.maintainNestedObjectKeys;
|
|
118
114
|
}
|
|
@@ -2,6 +2,19 @@ import { QueryResult } from '../../driver/database-connection.js';
|
|
|
2
2
|
import { RootOperationNode } from '../../query-compiler/query-compiler.js';
|
|
3
3
|
import { UnknownRow } from '../../util/type-utils.js';
|
|
4
4
|
import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } from '../kysely-plugin.js';
|
|
5
|
+
/**
|
|
6
|
+
* Parses JSON strings in query results into JSON objects.
|
|
7
|
+
*
|
|
8
|
+
* This plugin can be useful with dialects that don't automatically parse
|
|
9
|
+
* JSON into objects and arrays but return JSON strings instead.
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* const db = new Kysely<DB>({
|
|
13
|
+
* ...
|
|
14
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
15
|
+
* })
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
5
18
|
export declare class ParseJSONResultsPlugin implements KyselyPlugin {
|
|
6
19
|
/**
|
|
7
20
|
* This is called for each query before it is executed. You can modify the query by
|
|
@@ -1,29 +1,65 @@
|
|
|
1
1
|
/// <reference types="./parse-json-results-plugin.d.ts" />
|
|
2
|
-
import { isString } from '../../util/object-utils.js';
|
|
2
|
+
import { isPlainObject, isString } from '../../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parses JSON strings in query results into JSON objects.
|
|
5
|
+
*
|
|
6
|
+
* This plugin can be useful with dialects that don't automatically parse
|
|
7
|
+
* JSON into objects and arrays but return JSON strings instead.
|
|
8
|
+
*
|
|
9
|
+
* ```ts
|
|
10
|
+
* const db = new Kysely<DB>({
|
|
11
|
+
* ...
|
|
12
|
+
* plugins: [new ParseJSONResultsPlugin()]
|
|
13
|
+
* })
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
3
16
|
export class ParseJSONResultsPlugin {
|
|
4
17
|
// noop
|
|
5
18
|
transformQuery(args) {
|
|
6
19
|
return args.node;
|
|
7
20
|
}
|
|
8
21
|
async transformResult(args) {
|
|
9
|
-
const { result } = args;
|
|
10
22
|
return {
|
|
11
23
|
...args.result,
|
|
12
|
-
rows: result.rows
|
|
24
|
+
rows: parseArray(args.result.rows),
|
|
13
25
|
};
|
|
14
26
|
}
|
|
15
27
|
}
|
|
16
|
-
function
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
function parseArray(arr) {
|
|
29
|
+
for (let i = 0; i < arr.length; ++i) {
|
|
30
|
+
arr[i] = parse(arr[i]);
|
|
31
|
+
}
|
|
32
|
+
return arr;
|
|
33
|
+
}
|
|
34
|
+
function parse(obj) {
|
|
35
|
+
if (isString(obj)) {
|
|
36
|
+
return parseString(obj);
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(obj)) {
|
|
39
|
+
return parseArray(obj);
|
|
40
|
+
}
|
|
41
|
+
if (isPlainObject(obj)) {
|
|
42
|
+
return parseObject(obj);
|
|
43
|
+
}
|
|
44
|
+
return obj;
|
|
45
|
+
}
|
|
46
|
+
function parseString(str) {
|
|
47
|
+
if (maybeJson(str)) {
|
|
48
|
+
try {
|
|
49
|
+
return parse(JSON.parse(str));
|
|
25
50
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
51
|
+
catch (err) {
|
|
52
|
+
// this catch block is intentionally empty.
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return str;
|
|
56
|
+
}
|
|
57
|
+
function maybeJson(value) {
|
|
58
|
+
return value.match(/^[\[\{]/) != null;
|
|
59
|
+
}
|
|
60
|
+
function parseObject(obj) {
|
|
61
|
+
for (const key in obj) {
|
|
62
|
+
obj[key] = parse(obj[key]);
|
|
63
|
+
}
|
|
64
|
+
return obj;
|
|
29
65
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
3
|
import { OverBuilder } from './over-builder.js';
|
|
4
|
-
import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
4
|
+
import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
|
|
5
5
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
6
6
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
|
-
import {
|
|
8
|
-
|
|
7
|
+
import { SqlBool } from '../util/type-utils.js';
|
|
8
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
9
|
+
export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements AliasableExpression<O> {
|
|
9
10
|
#private;
|
|
10
11
|
constructor(props: AggregateFunctionBuilderProps);
|
|
11
12
|
/** @private */
|
|
@@ -116,8 +117,7 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
|
|
|
116
117
|
* ```
|
|
117
118
|
*/
|
|
118
119
|
filterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AggregateFunctionBuilder<DB, TB, O>;
|
|
119
|
-
filterWhere(
|
|
120
|
-
filterWhere(expression: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
|
|
120
|
+
filterWhere(expression: ExpressionOrFactory<DB, TB, SqlBool>): 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.
|
|
@@ -5,7 +5,7 @@ import { AliasNode } from '../operation-node/alias-node.js';
|
|
|
5
5
|
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
6
6
|
import { preventAwait } from '../util/prevent-await.js';
|
|
7
7
|
import { createOverBuilder } from '../parser/parse-utils.js';
|
|
8
|
-
import {
|
|
8
|
+
import { parseReferentialBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';
|
|
9
9
|
export class AggregateFunctionBuilder {
|
|
10
10
|
#props;
|
|
11
11
|
constructor(props) {
|
|
@@ -73,7 +73,7 @@ export class AggregateFunctionBuilder {
|
|
|
73
73
|
filterWhere(...args) {
|
|
74
74
|
return new AggregateFunctionBuilder({
|
|
75
75
|
...this.#props,
|
|
76
|
-
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode,
|
|
76
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseValueBinaryOperationOrExpression(args)),
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
@@ -111,7 +111,7 @@ export class AggregateFunctionBuilder {
|
|
|
111
111
|
filterWhereRef(lhs, op, rhs) {
|
|
112
112
|
return new AggregateFunctionBuilder({
|
|
113
113
|
...this.#props,
|
|
114
|
-
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode,
|
|
114
|
+
aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseReferentialBinaryOperation(lhs, op, rhs)),
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
117
|
/**
|
|
@@ -3,8 +3,8 @@ import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
|
3
3
|
import { freeze } from '../util/object-utils.js';
|
|
4
4
|
import { CaseNode } from '../operation-node/case-node.js';
|
|
5
5
|
import { WhenNode } from '../operation-node/when-node.js';
|
|
6
|
-
import {
|
|
7
|
-
import { parseValueExpression } from '../parser/value-parser.js';
|
|
6
|
+
import { parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';
|
|
7
|
+
import { isSafeImmediateValue, parseSafeImmediateValue, parseValueExpression, } from '../parser/value-parser.js';
|
|
8
8
|
export class CaseBuilder {
|
|
9
9
|
#props;
|
|
10
10
|
constructor(props) {
|
|
@@ -13,7 +13,7 @@ export class CaseBuilder {
|
|
|
13
13
|
when(...args) {
|
|
14
14
|
return new CaseThenBuilder({
|
|
15
15
|
...this.#props,
|
|
16
|
-
node: CaseNode.cloneWithWhen(this.#props.node, WhenNode.create(
|
|
16
|
+
node: CaseNode.cloneWithWhen(this.#props.node, WhenNode.create(parseValueBinaryOperationOrExpression(args))),
|
|
17
17
|
});
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -25,7 +25,9 @@ export class CaseThenBuilder {
|
|
|
25
25
|
then(valueExpression) {
|
|
26
26
|
return new CaseWhenBuilder({
|
|
27
27
|
...this.#props,
|
|
28
|
-
node: CaseNode.cloneWithThen(this.#props.node,
|
|
28
|
+
node: CaseNode.cloneWithThen(this.#props.node, isSafeImmediateValue(valueExpression)
|
|
29
|
+
? parseSafeImmediateValue(valueExpression)
|
|
30
|
+
: parseValueExpression(valueExpression)),
|
|
29
31
|
});
|
|
30
32
|
}
|
|
31
33
|
}
|
|
@@ -37,14 +39,16 @@ export class CaseWhenBuilder {
|
|
|
37
39
|
when(...args) {
|
|
38
40
|
return new CaseThenBuilder({
|
|
39
41
|
...this.#props,
|
|
40
|
-
node: CaseNode.cloneWithWhen(this.#props.node, WhenNode.create(
|
|
42
|
+
node: CaseNode.cloneWithWhen(this.#props.node, WhenNode.create(parseValueBinaryOperationOrExpression(args))),
|
|
41
43
|
});
|
|
42
44
|
}
|
|
43
45
|
else(valueExpression) {
|
|
44
46
|
return new CaseEndBuilder({
|
|
45
47
|
...this.#props,
|
|
46
48
|
node: CaseNode.cloneWith(this.#props.node, {
|
|
47
|
-
else:
|
|
49
|
+
else: isSafeImmediateValue(valueExpression)
|
|
50
|
+
? parseSafeImmediateValue(valueExpression)
|
|
51
|
+
: parseValueExpression(valueExpression),
|
|
48
52
|
}),
|
|
49
53
|
});
|
|
50
54
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
|
+
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
3
|
+
export declare class CTEBuilder<N extends string> implements OperationNodeSource {
|
|
4
|
+
#private;
|
|
5
|
+
constructor(props: CTEBuilderProps);
|
|
6
|
+
/**
|
|
7
|
+
* Makes the common table expression materialized.
|
|
8
|
+
*/
|
|
9
|
+
materialized(): CTEBuilder<N>;
|
|
10
|
+
/**
|
|
11
|
+
* Makes the common table expression not materialized.
|
|
12
|
+
*/
|
|
13
|
+
notMaterialized(): CTEBuilder<N>;
|
|
14
|
+
toOperationNode(): CommonTableExpressionNode;
|
|
15
|
+
}
|
|
16
|
+
interface CTEBuilderProps {
|
|
17
|
+
readonly node: CommonTableExpressionNode;
|
|
18
|
+
}
|
|
19
|
+
export type CTEBuilderCallback<N extends string> = (cte: <N2 extends string>(name: N2) => CTEBuilder<N2>) => CTEBuilder<N>;
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="./cte-builder.d.ts" />
|
|
2
|
+
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
3
|
+
import { preventAwait } from '../util/prevent-await.js';
|
|
4
|
+
import { freeze } from '../util/object-utils.js';
|
|
5
|
+
export class CTEBuilder {
|
|
6
|
+
#props;
|
|
7
|
+
constructor(props) {
|
|
8
|
+
this.#props = freeze(props);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Makes the common table expression materialized.
|
|
12
|
+
*/
|
|
13
|
+
materialized() {
|
|
14
|
+
return new CTEBuilder({
|
|
15
|
+
...this.#props,
|
|
16
|
+
node: CommonTableExpressionNode.cloneWith(this.#props.node, {
|
|
17
|
+
materialized: true,
|
|
18
|
+
}),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Makes the common table expression not materialized.
|
|
23
|
+
*/
|
|
24
|
+
notMaterialized() {
|
|
25
|
+
return new CTEBuilder({
|
|
26
|
+
...this.#props,
|
|
27
|
+
node: CommonTableExpressionNode.cloneWith(this.#props.node, {
|
|
28
|
+
materialized: false,
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
toOperationNode() {
|
|
33
|
+
return this.#props.node;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
preventAwait(CTEBuilder, "don't await CTEBuilder instances. They are never executed directly and are always just a part of a query.");
|
|
@@ -6,12 +6,12 @@ import { SelectExpression, SelectArg } from '../parser/select-parser.js';
|
|
|
6
6
|
import { ReturningAllRow, 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
|
-
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
|
|
9
|
+
import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
10
10
|
import { Compilable } from '../util/compilable.js';
|
|
11
11
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
12
12
|
import { QueryId } from '../util/query-id.js';
|
|
13
13
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
14
|
-
import {
|
|
14
|
+
import { WhereInterface } from './where-interface.js';
|
|
15
15
|
import { ReturningInterface } from './returning-interface.js';
|
|
16
16
|
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
17
17
|
import { DeleteResult } from './delete-result.js';
|
|
@@ -22,6 +22,7 @@ import { AliasedExpression, Expression } from '../expression/expression.js';
|
|
|
22
22
|
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
23
23
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
24
24
|
import { Streamable } from '../util/streamable.js';
|
|
25
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
25
26
|
export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
|
|
26
27
|
#private;
|
|
27
28
|
constructor(props: DeleteQueryBuilderProps);
|
|
@@ -78,24 +79,53 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
78
79
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
79
80
|
* ```
|
|
80
81
|
*
|
|
81
|
-
* <!-- siteExample("where", "
|
|
82
|
+
* <!-- siteExample("where", "Object filter", 30) -->
|
|
82
83
|
*
|
|
83
|
-
*
|
|
84
|
+
* You can use the `and` function to create a simple equality
|
|
85
|
+
* filter using an object
|
|
84
86
|
*
|
|
85
87
|
* ```ts
|
|
86
88
|
* const persons = await db
|
|
87
89
|
* .selectFrom('person')
|
|
88
90
|
* .selectAll()
|
|
89
|
-
* .where((
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
91
|
+
* .where((eb) => eb.and({
|
|
92
|
+
* first_name: 'Jennifer',
|
|
93
|
+
* last_name: eb.ref('first_name')
|
|
94
|
+
* }))
|
|
95
|
+
* .execute()
|
|
96
|
+
* ```
|
|
97
|
+
*
|
|
98
|
+
* The generated SQL (PostgreSQL):
|
|
99
|
+
*
|
|
100
|
+
* ```sql
|
|
101
|
+
* select *
|
|
102
|
+
* from "person"
|
|
103
|
+
* where (
|
|
104
|
+
* "first_name" = $1
|
|
105
|
+
* and "last_name" = "first_name"
|
|
106
|
+
* )
|
|
107
|
+
* ```
|
|
108
|
+
*
|
|
109
|
+
* <!-- siteExample("where", "OR where", 40) -->
|
|
110
|
+
*
|
|
111
|
+
* To combine conditions using `OR`, you can use the expression builder.
|
|
112
|
+
* There are two ways to create `OR` expressions. Both are shown in this
|
|
113
|
+
* example:
|
|
114
|
+
*
|
|
115
|
+
* ```ts
|
|
116
|
+
* const persons = await db
|
|
117
|
+
* .selectFrom('person')
|
|
118
|
+
* .selectAll()
|
|
119
|
+
* // 1. Using the `or` method on the expression builder:
|
|
120
|
+
* .where((eb) => eb.or([
|
|
121
|
+
* eb('first_name', '=', 'Jennifer'),
|
|
122
|
+
* eb('first_name', '=', 'Sylvester')
|
|
98
123
|
* ]))
|
|
124
|
+
* // 2. Chaining expressions using the `or` method on the
|
|
125
|
+
* // created expressions:
|
|
126
|
+
* .where((eb) =>
|
|
127
|
+
* eb('last_name', '=', 'Aniston').or('last_name', '=', 'Stallone')
|
|
128
|
+
* )
|
|
99
129
|
* .execute()
|
|
100
130
|
* ```
|
|
101
131
|
*
|
|
@@ -105,19 +135,23 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
105
135
|
* select *
|
|
106
136
|
* from "person"
|
|
107
137
|
* where (
|
|
108
|
-
* ("first_name" = $1
|
|
109
|
-
*
|
|
110
|
-
* ("
|
|
138
|
+
* ("first_name" = $1 or "first_name" = $2)
|
|
139
|
+
* and
|
|
140
|
+
* ("last_name" = $3 or "last_name" = $4)
|
|
111
141
|
* )
|
|
112
142
|
* ```
|
|
113
143
|
*
|
|
114
|
-
* <!-- siteExample("where", "Conditional where calls",
|
|
144
|
+
* <!-- siteExample("where", "Conditional where calls", 50) -->
|
|
115
145
|
*
|
|
116
146
|
* You can add expressions conditionally like this:
|
|
117
147
|
*
|
|
118
148
|
* ```ts
|
|
149
|
+
* import { Expression, SqlBool } from 'kysely'
|
|
150
|
+
*
|
|
119
151
|
* const firstName: string | undefined = 'Jennifer'
|
|
120
152
|
* const lastName: string | undefined = 'Aniston'
|
|
153
|
+
* const under18 = true
|
|
154
|
+
* const over60 = true
|
|
121
155
|
*
|
|
122
156
|
* let query = db
|
|
123
157
|
* .selectFrom('person')
|
|
@@ -133,6 +167,23 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
133
167
|
* query = query.where('last_name', '=', lastName)
|
|
134
168
|
* }
|
|
135
169
|
*
|
|
170
|
+
* if (under18 || over60) {
|
|
171
|
+
* // Conditional OR expressions can be added like this.
|
|
172
|
+
* query = query.where((eb) => {
|
|
173
|
+
* const ors: Expression<SqlBool>[] = []
|
|
174
|
+
*
|
|
175
|
+
* if (under18) {
|
|
176
|
+
* ors.push(eb('age', '<', 18))
|
|
177
|
+
* }
|
|
178
|
+
*
|
|
179
|
+
* if (over60) {
|
|
180
|
+
* ors.push(eb('age', '>', 60))
|
|
181
|
+
* }
|
|
182
|
+
*
|
|
183
|
+
* return eb.or(ors)
|
|
184
|
+
* })
|
|
185
|
+
* }
|
|
186
|
+
*
|
|
136
187
|
* const persons = await query.execute()
|
|
137
188
|
* ```
|
|
138
189
|
*
|
|
@@ -185,7 +236,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
185
236
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
186
237
|
* ```
|
|
187
238
|
*
|
|
188
|
-
* <!-- siteExample("where", "Complex where clause",
|
|
239
|
+
* <!-- siteExample("where", "Complex where clause", 60) -->
|
|
189
240
|
*
|
|
190
241
|
* For complex `where` expressions you can pass in a single callback and
|
|
191
242
|
* use the `ExpressionBuilder` to build your expression:
|
|
@@ -197,10 +248,10 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
197
248
|
* const persons = await db
|
|
198
249
|
* .selectFrom('person')
|
|
199
250
|
* .selectAll('person')
|
|
200
|
-
* .where(({
|
|
251
|
+
* .where(({ eb, or, and, not, exists, selectFrom }) => and([
|
|
201
252
|
* or([
|
|
202
|
-
*
|
|
203
|
-
*
|
|
253
|
+
* eb('first_name', '=', firstName),
|
|
254
|
+
* eb('age', '<', maxAge)
|
|
204
255
|
* ]),
|
|
205
256
|
* not(exists(
|
|
206
257
|
* selectFrom('pet')
|
|
@@ -275,8 +326,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
275
326
|
* ```
|
|
276
327
|
*/
|
|
277
328
|
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
|
|
278
|
-
where(
|
|
279
|
-
where(expression: Expression<any>): DeleteQueryBuilder<DB, TB, O>;
|
|
329
|
+
where(expression: ExpressionOrFactory<DB, TB, SqlBool>): DeleteQueryBuilder<DB, TB, O>;
|
|
280
330
|
/**
|
|
281
331
|
* Adds a `where` clause where both sides of the operator are references
|
|
282
332
|
* to columns.
|
|
@@ -821,7 +871,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
821
871
|
* }
|
|
822
872
|
* ```
|
|
823
873
|
*/
|
|
824
|
-
$if<O2>(condition: boolean, func: (qb: this) => DeleteQueryBuilder<
|
|
874
|
+
$if<O2>(condition: boolean, func: (qb: this) => DeleteQueryBuilder<any, any, O2>): O2 extends DeleteResult ? DeleteQueryBuilder<DB, TB, DeleteResult> : O2 extends O & infer E ? DeleteQueryBuilder<DB, TB, O & Partial<E>> : DeleteQueryBuilder<DB, TB, Partial<O2>>;
|
|
825
875
|
/**
|
|
826
876
|
* Change the output type of the query.
|
|
827
877
|
*
|
|
@@ -10,7 +10,7 @@ import { DeleteResult } from './delete-result.js';
|
|
|
10
10
|
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
11
11
|
import { LimitNode } from '../operation-node/limit-node.js';
|
|
12
12
|
import { parseOrderBy, } from '../parser/order-by-parser.js';
|
|
13
|
-
import {
|
|
13
|
+
import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
|
|
14
14
|
export class DeleteQueryBuilder {
|
|
15
15
|
#props;
|
|
16
16
|
constructor(props) {
|
|
@@ -19,13 +19,13 @@ export class DeleteQueryBuilder {
|
|
|
19
19
|
where(...args) {
|
|
20
20
|
return new DeleteQueryBuilder({
|
|
21
21
|
...this.#props,
|
|
22
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
22
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseValueBinaryOperationOrExpression(args)),
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
whereRef(lhs, op, rhs) {
|
|
26
26
|
return new DeleteQueryBuilder({
|
|
27
27
|
...this.#props,
|
|
28
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
28
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferentialBinaryOperation(lhs, op, rhs)),
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
clearWhere() {
|
|
@@ -113,7 +113,7 @@ export class DeleteQueryBuilder {
|
|
|
113
113
|
orderBy(orderBy, direction) {
|
|
114
114
|
return new DeleteQueryBuilder({
|
|
115
115
|
...this.#props,
|
|
116
|
-
queryNode: DeleteQueryNode.
|
|
116
|
+
queryNode: DeleteQueryNode.cloneWithOrderByItems(this.#props.queryNode, parseOrderBy([orderBy, direction])),
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
119
|
/**
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
2
2
|
import { ExpressionWrapper } from '../expression/expression-wrapper.js';
|
|
3
|
+
import { Expression } from '../expression/expression.js';
|
|
3
4
|
import { CoalesceReferenceExpressionList } from '../parser/coalesce-parser.js';
|
|
4
|
-
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
5
|
+
import { ExtractTypeFromReferenceExpression, ReferenceExpression, StringReference, ExtractTypeFromStringReference } from '../parser/reference-parser.js';
|
|
6
|
+
import { KyselyTypeError } from '../util/type-error.js';
|
|
5
7
|
import { Equals, IsAny } from '../util/type-utils.js';
|
|
6
8
|
import { AggregateFunctionBuilder } from './aggregate-function-builder.js';
|
|
9
|
+
import { SelectQueryBuilder } from './select-query-builder.js';
|
|
7
10
|
/**
|
|
8
11
|
* Helpers for type safe SQL function calls.
|
|
9
12
|
*
|
|
@@ -109,7 +112,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
109
112
|
*/
|
|
110
113
|
agg<O>(name: string, args?: ReadonlyArray<ReferenceExpression<DB, TB>>): AggregateFunctionBuilder<DB, TB, O>;
|
|
111
114
|
/**
|
|
112
|
-
* Calls the `avg` function for the column given as the argument.
|
|
115
|
+
* Calls the `avg` function for the column or expression given as the argument.
|
|
113
116
|
*
|
|
114
117
|
* This sql function calculates the average value for a given column.
|
|
115
118
|
*
|
|
@@ -229,7 +232,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
229
232
|
*/
|
|
230
233
|
coalesce<V extends ReferenceExpression<DB, TB>, OV extends ReferenceExpression<DB, TB>[]>(value: V, ...otherValues: OV): ExpressionWrapper<DB, TB, CoalesceReferenceExpressionList<DB, TB, [V, ...OV]>>;
|
|
231
234
|
/**
|
|
232
|
-
* Calls the `count` function for the column given as the argument.
|
|
235
|
+
* Calls the `count` function for the column or expression given as the argument.
|
|
233
236
|
*
|
|
234
237
|
* When called with a column as argument, this sql function counts the number of rows where there
|
|
235
238
|
* is a non-null value in that column.
|
|
@@ -351,7 +354,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
351
354
|
countAll<O extends number | string | bigint, T extends TB = TB>(table: T): AggregateFunctionBuilder<DB, TB, O>;
|
|
352
355
|
countAll<O extends number | string | bigint>(): AggregateFunctionBuilder<DB, TB, O>;
|
|
353
356
|
/**
|
|
354
|
-
* Calls the `max` function for the column given as the argument.
|
|
357
|
+
* Calls the `max` function for the column or expression given as the argument.
|
|
355
358
|
*
|
|
356
359
|
* This sql function calculates the maximum value for a given column.
|
|
357
360
|
*
|
|
@@ -399,7 +402,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
399
402
|
max<O extends number | string | bigint | null = any, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: OutputBoundStringReference<DB, TB, C, O>): StringReferenceBoundAggregateFunctionBuilder<DB, TB, C, O>;
|
|
400
403
|
max<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
|
|
401
404
|
/**
|
|
402
|
-
* Calls the `min` function for the column given as the argument.
|
|
405
|
+
* Calls the `min` function for the column or expression given as the argument.
|
|
403
406
|
*
|
|
404
407
|
* This sql function calculates the minimum value for a given column.
|
|
405
408
|
*
|
|
@@ -447,7 +450,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
447
450
|
min<O extends number | string | bigint | null = any, C extends StringReference<DB, TB> = StringReference<DB, TB>>(column: OutputBoundStringReference<DB, TB, C, O>): StringReferenceBoundAggregateFunctionBuilder<DB, TB, C, O>;
|
|
448
451
|
min<O extends number | string | bigint | null = number | string | bigint>(column: DynamicReferenceBuilder): AggregateFunctionBuilder<DB, TB, O>;
|
|
449
452
|
/**
|
|
450
|
-
* Calls the `sum` function for the column given as the argument.
|
|
453
|
+
* Calls the `sum` function for the column or expression given as the argument.
|
|
451
454
|
*
|
|
452
455
|
* This sql function sums the values of a given column.
|
|
453
456
|
*
|
|
@@ -505,6 +508,38 @@ export interface FunctionModule<DB, TB extends keyof DB> {
|
|
|
505
508
|
* ```
|
|
506
509
|
*/
|
|
507
510
|
sum<O extends number | string | bigint | null = number | string | bigint, C extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(column: C): AggregateFunctionBuilder<DB, TB, O>;
|
|
511
|
+
/**
|
|
512
|
+
* Calls the `any` function for the column or expression given as the argument.
|
|
513
|
+
*
|
|
514
|
+
* The argument must be a subquery or evaluate to an array.
|
|
515
|
+
*
|
|
516
|
+
* ### Examples
|
|
517
|
+
*
|
|
518
|
+
* In the following example, `nicknames` is assumed to be a column of type `string[]`:
|
|
519
|
+
*
|
|
520
|
+
* ```ts
|
|
521
|
+
* db.selectFrom('person')
|
|
522
|
+
* .selectAll('person')
|
|
523
|
+
* .where((eb) => eb(
|
|
524
|
+
* eb.val('Jen'), '=', eb.fn.any('person.nicknames')
|
|
525
|
+
* ))
|
|
526
|
+
* ```
|
|
527
|
+
*
|
|
528
|
+
*
|
|
529
|
+
* The generated SQL (PostgreSQL):
|
|
530
|
+
*
|
|
531
|
+
* ```sql
|
|
532
|
+
* select
|
|
533
|
+
* "person".*
|
|
534
|
+
* from
|
|
535
|
+
* "person"
|
|
536
|
+
* where
|
|
537
|
+
* $1 = any("person"."nicknames")
|
|
538
|
+
* ```
|
|
539
|
+
*/
|
|
540
|
+
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: SelectQueryBuilder<any, any, Record<string, T>>): ExpressionWrapper<DB, TB, T>;
|
|
542
|
+
any<T>(expr: Expression<ReadonlyArray<T>>): ExpressionWrapper<DB, TB, T>;
|
|
508
543
|
}
|
|
509
544
|
export declare function createFunctionModule<DB, TB extends keyof DB>(): FunctionModule<DB, TB>;
|
|
510
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;
|