kysely 0.11.4 → 0.13.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/README.md +35 -11
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +36 -0
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +38 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -1
- package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +16 -0
- package/dist/cjs/dialect/mysql/mysql-driver.d.ts +29 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +3 -0
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +38 -2
- package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +16 -0
- package/dist/cjs/dialect/postgres/postgres-driver.d.ts +29 -0
- package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +3 -0
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +38 -2
- package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +16 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +29 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +3 -0
- package/dist/cjs/driver/default-connection-provider.d.ts +4 -0
- package/dist/cjs/driver/runtime-driver.d.ts +29 -0
- package/dist/cjs/driver/single-connection-provider.d.ts +4 -0
- package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
- package/dist/cjs/dynamic/dynamic.d.ts +6 -7
- package/dist/cjs/dynamic/dynamic.js +6 -7
- package/dist/cjs/index.d.ts +15 -4
- package/dist/cjs/index.js +12 -1
- package/dist/cjs/kysely.d.ts +170 -11
- package/dist/cjs/kysely.js +69 -9
- package/dist/cjs/migration/migration.d.ts +156 -13
- package/dist/cjs/migration/migration.js +256 -135
- package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
- package/dist/cjs/operation-node/column-definition-node.js +0 -4
- package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +15 -0
- package/dist/cjs/operation-node/common-table-expression-name-node.js +23 -0
- package/dist/cjs/operation-node/common-table-expression-node.d.ts +3 -3
- package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
- package/dist/cjs/operation-node/create-table-node.js +6 -6
- package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +22 -2
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +0 -2
- package/dist/cjs/operation-node/query-node.js +0 -10
- package/dist/cjs/operation-node/values-node.d.ts +15 -0
- package/dist/cjs/operation-node/values-node.js +18 -0
- package/dist/cjs/operation-node/with-node.d.ts +3 -1
- package/dist/cjs/operation-node/with-node.js +2 -1
- package/dist/cjs/package.json +1 -3
- package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
- package/dist/cjs/parser/complex-expression-parser.js +25 -0
- package/dist/cjs/parser/filter-parser.d.ts +13 -4
- package/dist/cjs/parser/filter-parser.js +21 -24
- package/dist/cjs/parser/insert-values-parser.d.ts +5 -9
- package/dist/cjs/parser/insert-values-parser.js +27 -41
- package/dist/cjs/parser/order-by-parser.d.ts +1 -1
- package/dist/cjs/parser/parse-context.d.ts +22 -8
- package/dist/cjs/parser/parse-context.js +10 -10
- package/dist/cjs/parser/reference-parser.d.ts +8 -7
- package/dist/cjs/parser/reference-parser.js +8 -17
- package/dist/cjs/parser/returning-parser.d.ts +1 -5
- package/dist/cjs/parser/select-parser.d.ts +12 -14
- package/dist/cjs/parser/select-parser.js +5 -9
- package/dist/cjs/parser/table-parser.d.ts +9 -11
- package/dist/cjs/parser/table-parser.js +2 -8
- package/dist/cjs/parser/union-parser.d.ts +2 -2
- package/dist/cjs/parser/union-parser.js +1 -6
- package/dist/cjs/parser/update-set-parser.d.ts +2 -8
- package/dist/cjs/parser/update-set-parser.js +6 -26
- package/dist/cjs/parser/value-parser.d.ts +9 -6
- package/dist/cjs/parser/value-parser.js +7 -30
- package/dist/cjs/parser/with-parser.d.ts +36 -6
- package/dist/cjs/parser/with-parser.js +13 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +36 -2
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +34 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +8 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +647 -0
- package/dist/cjs/query-builder/delete-query-builder.js +185 -0
- package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/function-builder.d.ts +2 -1
- package/dist/cjs/query-builder/function-builder.js +2 -1
- package/dist/cjs/query-builder/having-interface.d.ts +49 -0
- package/dist/cjs/query-builder/having-interface.js +2 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +504 -0
- package/dist/cjs/query-builder/insert-query-builder.js +256 -0
- package/dist/cjs/query-builder/insert-result.d.ts +3 -2
- package/dist/cjs/query-builder/insert-result.js +3 -2
- package/dist/cjs/query-builder/join-builder.d.ts +19 -20
- package/dist/cjs/query-builder/join-builder.js +12 -12
- package/dist/cjs/query-builder/join-interface.d.ts +130 -0
- package/dist/cjs/query-builder/join-interface.js +2 -0
- package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
- package/dist/cjs/query-builder/no-result-error.js +14 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
- package/dist/cjs/query-builder/returning-interface.js +2 -0
- package/dist/cjs/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -651
- package/dist/cjs/query-builder/select-query-builder.js +571 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +735 -0
- package/dist/cjs/query-builder/update-query-builder.js +279 -0
- package/dist/cjs/query-builder/where-interface.d.ts +378 -0
- package/dist/cjs/query-builder/where-interface.js +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +37 -6
- package/dist/cjs/query-creator.d.ts +69 -43
- package/dist/cjs/query-creator.js +66 -29
- package/dist/cjs/query-executor/default-query-executor.d.ts +19 -0
- package/dist/cjs/query-executor/noop-query-executor.d.ts +19 -0
- package/dist/cjs/query-executor/query-executor.d.ts +1 -1
- package/dist/cjs/query-executor/query-executor.js +1 -1
- package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
- package/dist/cjs/raw-builder/raw-builder.js +7 -1
- package/dist/cjs/schema/alter-table-builder.d.ts +230 -2
- package/dist/cjs/schema/alter-table-builder.js +12 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +147 -20
- package/dist/cjs/schema/column-definition-builder.js +4 -1
- package/dist/cjs/schema/create-index-builder.d.ts +2 -1
- package/dist/cjs/schema/create-index-builder.js +2 -1
- package/dist/cjs/schema/create-table-builder.d.ts +26 -9
- package/dist/cjs/schema/create-table-builder.js +42 -9
- package/dist/cjs/schema/create-view-builder.d.ts +17 -3
- package/dist/cjs/schema/create-view-builder.js +25 -16
- package/dist/cjs/schema/schema.d.ts +18 -11
- package/dist/cjs/schema/schema.js +18 -11
- package/dist/cjs/util/log.d.ts +3 -2
- package/dist/cjs/util/log.js +8 -15
- package/dist/cjs/util/type-utils.d.ts +7 -7
- package/dist/esm/dialect/dialect-adapter-base.d.ts +36 -0
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +38 -2
- package/dist/esm/dialect/mysql/mysql-adapter.js +2 -1
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +16 -0
- package/dist/esm/dialect/mysql/mysql-driver.d.ts +29 -0
- package/dist/esm/dialect/mysql/mysql-introspector.d.ts +3 -0
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +38 -2
- package/dist/esm/dialect/postgres/postgres-adapter.js +2 -1
- package/dist/esm/dialect/postgres/postgres-dialect.d.ts +16 -0
- package/dist/esm/dialect/postgres/postgres-driver.d.ts +29 -0
- package/dist/esm/dialect/postgres/postgres-introspector.d.ts +3 -0
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +38 -2
- package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +16 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +29 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +3 -0
- package/dist/esm/driver/default-connection-provider.d.ts +4 -0
- package/dist/esm/driver/runtime-driver.d.ts +29 -0
- package/dist/esm/driver/single-connection-provider.d.ts +4 -0
- package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
- package/dist/esm/dynamic/dynamic.d.ts +6 -7
- package/dist/esm/dynamic/dynamic.js +6 -7
- package/dist/esm/index.d.ts +15 -4
- package/dist/esm/index.js +12 -1
- package/dist/esm/kysely.d.ts +170 -11
- package/dist/esm/kysely.js +69 -9
- package/dist/esm/migration/migration.d.ts +156 -13
- package/dist/esm/migration/migration.js +255 -134
- package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
- package/dist/esm/operation-node/column-definition-node.js +0 -4
- package/dist/esm/operation-node/common-table-expression-name-node.d.ts +15 -0
- package/dist/esm/operation-node/common-table-expression-name-node.js +20 -0
- package/dist/esm/operation-node/common-table-expression-node.d.ts +3 -3
- package/dist/esm/operation-node/create-table-node.d.ts +6 -2
- package/dist/esm/operation-node/create-table-node.js +6 -6
- package/dist/esm/operation-node/create-view-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
- package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-transformer.js +22 -2
- package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
- package/dist/esm/operation-node/operation-node-visitor.js +2 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/query-node.d.ts +0 -2
- package/dist/esm/operation-node/query-node.js +0 -10
- package/dist/esm/operation-node/values-node.d.ts +15 -0
- package/dist/esm/operation-node/values-node.js +15 -0
- package/dist/esm/operation-node/with-node.d.ts +3 -1
- package/dist/esm/operation-node/with-node.js +2 -1
- package/dist/esm/package.json +1 -3
- package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
- package/dist/esm/parser/complex-expression-parser.js +20 -0
- package/dist/esm/parser/filter-parser.d.ts +13 -4
- package/dist/esm/parser/filter-parser.js +21 -24
- package/dist/esm/parser/insert-values-parser.d.ts +5 -9
- package/dist/esm/parser/insert-values-parser.js +27 -40
- package/dist/esm/parser/order-by-parser.d.ts +1 -1
- package/dist/esm/parser/parse-context.d.ts +22 -8
- package/dist/esm/parser/parse-context.js +10 -10
- package/dist/esm/parser/reference-parser.d.ts +8 -7
- package/dist/esm/parser/reference-parser.js +9 -18
- package/dist/esm/parser/returning-parser.d.ts +1 -5
- package/dist/esm/parser/select-parser.d.ts +12 -14
- package/dist/esm/parser/select-parser.js +6 -10
- package/dist/esm/parser/table-parser.d.ts +9 -11
- package/dist/esm/parser/table-parser.js +3 -9
- package/dist/esm/parser/union-parser.d.ts +2 -2
- package/dist/esm/parser/union-parser.js +1 -6
- package/dist/esm/parser/update-set-parser.d.ts +2 -8
- package/dist/esm/parser/update-set-parser.js +5 -24
- package/dist/esm/parser/value-parser.d.ts +9 -6
- package/dist/esm/parser/value-parser.js +8 -31
- package/dist/esm/parser/with-parser.d.ts +36 -6
- package/dist/esm/parser/with-parser.js +13 -2
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +36 -2
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +34 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +8 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +647 -0
- package/dist/esm/query-builder/delete-query-builder.js +181 -0
- package/dist/esm/query-builder/expression-builder.d.ts +8 -6
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/function-builder.d.ts +2 -1
- package/dist/esm/query-builder/function-builder.js +2 -1
- package/dist/esm/query-builder/having-interface.d.ts +49 -0
- package/dist/esm/query-builder/having-interface.js +1 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +504 -0
- package/dist/esm/query-builder/insert-query-builder.js +252 -0
- package/dist/esm/query-builder/insert-result.d.ts +3 -2
- package/dist/esm/query-builder/insert-result.js +3 -2
- package/dist/esm/query-builder/join-builder.d.ts +19 -20
- package/dist/esm/query-builder/join-builder.js +12 -12
- package/dist/esm/query-builder/join-interface.d.ts +130 -0
- package/dist/esm/query-builder/join-interface.js +1 -0
- package/dist/esm/query-builder/no-result-error.d.ts +9 -0
- package/dist/esm/query-builder/no-result-error.js +10 -0
- package/dist/esm/query-builder/returning-interface.d.ts +73 -0
- package/dist/esm/query-builder/returning-interface.js +1 -0
- package/dist/esm/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -651
- package/dist/esm/query-builder/select-query-builder.js +566 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +735 -0
- package/dist/esm/query-builder/update-query-builder.js +275 -0
- package/dist/esm/query-builder/where-interface.d.ts +378 -0
- package/dist/esm/query-builder/where-interface.js +1 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -0
- package/dist/esm/query-compiler/default-query-compiler.js +37 -6
- package/dist/esm/query-creator.d.ts +69 -43
- package/dist/esm/query-creator.js +66 -29
- package/dist/esm/query-executor/default-query-executor.d.ts +19 -0
- package/dist/esm/query-executor/noop-query-executor.d.ts +19 -0
- package/dist/esm/query-executor/query-executor.d.ts +1 -1
- package/dist/esm/query-executor/query-executor.js +1 -1
- package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
- package/dist/esm/raw-builder/raw-builder.js +7 -1
- package/dist/esm/schema/alter-table-builder.d.ts +230 -2
- package/dist/esm/schema/alter-table-builder.js +12 -0
- package/dist/esm/schema/column-definition-builder.d.ts +147 -20
- package/dist/esm/schema/column-definition-builder.js +4 -1
- package/dist/esm/schema/create-index-builder.d.ts +2 -1
- package/dist/esm/schema/create-index-builder.js +2 -1
- package/dist/esm/schema/create-table-builder.d.ts +26 -9
- package/dist/esm/schema/create-table-builder.js +43 -10
- package/dist/esm/schema/create-view-builder.d.ts +17 -3
- package/dist/esm/schema/create-view-builder.js +25 -16
- package/dist/esm/schema/schema.d.ts +18 -11
- package/dist/esm/schema/schema.js +18 -11
- package/dist/esm/util/log.d.ts +3 -2
- package/dist/esm/util/log.js +7 -14
- package/dist/esm/util/type-utils.d.ts +7 -7
- package/package.json +10 -8
- package/dist/cjs/query-builder/query-builder.js +0 -1067
- package/dist/esm/query-builder/query-builder.js +0 -1061
|
@@ -3,18 +3,19 @@ import { ColumnNode } from '../operation-node/column-node.js';
|
|
|
3
3
|
import { ReferenceExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
4
4
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
5
5
|
import { PrimitiveValue } from '../util/object-utils.js';
|
|
6
|
-
import { AnyColumn, AnyColumnWithTable,
|
|
7
|
-
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
|
+
import { AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
|
|
8
7
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
9
|
-
import {
|
|
8
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
10
9
|
import { ParseContext } from './parse-context.js';
|
|
11
|
-
|
|
10
|
+
import { ComplexExpression } from './complex-expression-parser.js';
|
|
11
|
+
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
12
|
+
export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any> | ComplexExpression<DB, TB>;
|
|
12
13
|
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
|
|
13
14
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
14
|
-
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends
|
|
15
|
-
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB,
|
|
15
|
+
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
|
|
16
|
+
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string, R = RowType<DB, TB>> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends keyof R ? R[RE] : PrimitiveValue;
|
|
16
17
|
export declare function parseReferenceExpressionOrList(ctx: ParseContext, arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
|
|
17
|
-
export declare function parseReferenceExpression(ctx: ParseContext,
|
|
18
|
+
export declare function parseReferenceExpression(ctx: ParseContext, exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
|
|
18
19
|
export declare function parseStringReference(ref: string): ColumnNode | ReferenceNode;
|
|
19
20
|
export declare function parseAliasedStringReference(ref: string): ColumnNode | ReferenceNode | AliasNode;
|
|
20
21
|
export declare function parseColumnName(column: AnyColumn<any, any>): ColumnNode;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
2
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
3
|
-
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
3
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
5
4
|
import { TableNode } from '../operation-node/table-node.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { isReadonlyArray, isString, } from '../util/object-utils.js';
|
|
6
|
+
import { parseComplexExpression, } from './complex-expression-parser.js';
|
|
7
|
+
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
|
|
8
8
|
export function parseReferenceExpressionOrList(ctx, arg) {
|
|
9
9
|
if (isReadonlyArray(arg)) {
|
|
10
10
|
return arg.map((it) => parseReferenceExpression(ctx, it));
|
|
@@ -13,23 +13,14 @@ export function parseReferenceExpressionOrList(ctx, arg) {
|
|
|
13
13
|
return [parseReferenceExpression(ctx, arg)];
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
|
-
export function parseReferenceExpression(ctx,
|
|
17
|
-
if (isString(
|
|
18
|
-
return parseStringReference(
|
|
16
|
+
export function parseReferenceExpression(ctx, exp) {
|
|
17
|
+
if (isString(exp)) {
|
|
18
|
+
return parseStringReference(exp);
|
|
19
19
|
}
|
|
20
|
-
else if (
|
|
21
|
-
|
|
22
|
-
if (!QueryNode.isMutating(node)) {
|
|
23
|
-
return node;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
else if (isFunction(arg)) {
|
|
27
|
-
const node = arg(ctx.createExpressionBuilder()).toOperationNode();
|
|
28
|
-
if (!QueryNode.isMutating(node)) {
|
|
29
|
-
return node;
|
|
30
|
-
}
|
|
20
|
+
else if (isDynamicReferenceBuilder(exp)) {
|
|
21
|
+
return exp.toOperationNode();
|
|
31
22
|
}
|
|
32
|
-
|
|
23
|
+
return parseComplexExpression(ctx, exp);
|
|
33
24
|
}
|
|
34
25
|
export function parseStringReference(ref) {
|
|
35
26
|
const COLUMN_SEPARATOR = '.';
|
|
@@ -1,9 +1,5 @@
|
|
|
1
1
|
import { DeleteResult } from '../query-builder/delete-result.js';
|
|
2
2
|
import { InsertResult } from '../query-builder/insert-result.js';
|
|
3
|
-
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
4
3
|
import { UpdateResult } from '../query-builder/update-result.js';
|
|
5
4
|
import { Selection } from './select-parser.js';
|
|
6
|
-
|
|
7
|
-
* `returning` method output query builder type
|
|
8
|
-
*/
|
|
9
|
-
export declare type QueryBuilderWithReturning<DB, TB extends keyof DB, O, S> = QueryBuilder<DB, TB, O extends InsertResult ? Selection<DB, TB, S> : O extends DeleteResult ? Selection<DB, TB, S> : O extends UpdateResult ? Selection<DB, TB, S> : O & Selection<DB, TB, S>>;
|
|
5
|
+
export declare type ReturningRow<DB, TB extends keyof DB, O, SE> = O extends InsertResult ? Selection<DB, TB, SE> : O extends DeleteResult ? Selection<DB, TB, SE> : O extends UpdateResult ? Selection<DB, TB, SE> : O & Selection<DB, TB, SE>;
|
|
@@ -1,30 +1,28 @@
|
|
|
1
1
|
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
2
|
-
import { AliasedQueryBuilder,
|
|
2
|
+
import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
3
3
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
|
-
import {
|
|
4
|
+
import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, RowType, ValueType } from '../util/type-utils.js';
|
|
5
5
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { ParseContext } from './parse-context.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
|
|
7
|
+
import { AliasedComplexExpression } from './complex-expression-parser.js';
|
|
8
|
+
export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> | AliasedComplexExpression<DB, TB>;
|
|
11
9
|
export declare type SelectExpressionOrList<DB, TB extends keyof DB> = SelectExpression<DB, TB> | ReadonlyArray<SelectExpression<DB, TB>>;
|
|
12
10
|
/**
|
|
13
11
|
* Given a selection expression returns a query builder type that
|
|
14
12
|
* has the selection.
|
|
15
13
|
*/
|
|
16
|
-
export declare type QueryBuilderWithSelection<DB, TB extends keyof DB, O,
|
|
14
|
+
export declare type QueryBuilderWithSelection<DB, TB extends keyof DB, O, SE> = SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
|
|
17
15
|
/**
|
|
18
16
|
* `selectAll` output query builder type.
|
|
19
17
|
*/
|
|
20
|
-
export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends keyof DB> =
|
|
21
|
-
export declare type Selection<DB, TB extends keyof DB,
|
|
22
|
-
[A in ExtractAliasFromSelectExpression<
|
|
18
|
+
export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends keyof DB> = SelectQueryBuilder<DB, TB, O & RowType<DB, S>>;
|
|
19
|
+
export declare type Selection<DB, TB extends keyof DB, SE> = {
|
|
20
|
+
[A in ExtractAliasFromSelectExpression<SE>]: ExtractTypeFromSelectExpression<DB, TB, SE, A>;
|
|
23
21
|
};
|
|
24
|
-
declare type ExtractAliasFromSelectExpression<
|
|
25
|
-
declare type ExtractAliasFromStringSelectExpression<
|
|
26
|
-
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB,
|
|
27
|
-
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB,
|
|
22
|
+
declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedRawBuilder<any, infer RA> ? RA : SE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : SE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
|
|
23
|
+
declare type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
|
|
24
|
+
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
|
|
25
|
+
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any, R = RowType<DB, TB>> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends keyof R ? R[C] : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends keyof R ? R[SE] : never : never;
|
|
28
26
|
export declare function parseSelectExpressionOrList(ctx: ParseContext, selection: SelectExpressionOrList<any, any>): SelectionNode[];
|
|
29
27
|
export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
|
|
30
28
|
export {};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isFunction, isReadonlyArray, isString } from '../util/object-utils.js';
|
|
1
|
+
import { isReadonlyArray, isString } from '../util/object-utils.js';
|
|
3
2
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
3
|
import { parseAliasedStringReference } from './reference-parser.js';
|
|
4
|
+
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
|
|
5
|
+
import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
|
|
5
6
|
export function parseSelectExpressionOrList(ctx, selection) {
|
|
6
7
|
if (isReadonlyArray(selection)) {
|
|
7
8
|
return selection.map((it) => parseSelectExpression(ctx, it));
|
|
@@ -14,14 +15,11 @@ function parseSelectExpression(ctx, selection) {
|
|
|
14
15
|
if (isString(selection)) {
|
|
15
16
|
return SelectionNode.create(parseAliasedStringReference(selection));
|
|
16
17
|
}
|
|
17
|
-
else if (
|
|
18
|
+
else if (isDynamicReferenceBuilder(selection)) {
|
|
18
19
|
return SelectionNode.create(selection.toOperationNode());
|
|
19
20
|
}
|
|
20
|
-
else if (isFunction(selection)) {
|
|
21
|
-
return SelectionNode.create(selection(ctx.createExpressionBuilder()).toOperationNode());
|
|
22
|
-
}
|
|
23
21
|
else {
|
|
24
|
-
|
|
22
|
+
return SelectionNode.create(parseAliasedComplexExpression(ctx, selection));
|
|
25
23
|
}
|
|
26
24
|
}
|
|
27
25
|
export function parseSelectAll(table) {
|
|
@@ -39,7 +37,5 @@ function parseSelectAllArg(table) {
|
|
|
39
37
|
if (isString(table)) {
|
|
40
38
|
return SelectionNode.createSelectAllFromTable(table);
|
|
41
39
|
}
|
|
42
|
-
|
|
43
|
-
throw new Error(`invalid value passed to selectAll method: ${JSON.stringify(table)}`);
|
|
44
|
-
}
|
|
40
|
+
throw new Error(`invalid value selectAll expression: ${JSON.stringify(table)}`);
|
|
45
41
|
}
|
|
@@ -1,32 +1,30 @@
|
|
|
1
|
-
import { AliasedQueryBuilder
|
|
1
|
+
import { AliasedQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
2
2
|
import { TableNode } from '../operation-node/table-node.js';
|
|
3
|
-
import {
|
|
3
|
+
import { AnyAliasedRawBuilder, Nullable } from '../util/type-utils.js';
|
|
4
4
|
import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
|
|
5
5
|
import { TableExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
6
6
|
import { ParseContext } from './parse-context.js';
|
|
7
|
-
|
|
7
|
+
import { AliasedComplexExpression } from './complex-expression-parser.js';
|
|
8
|
+
export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AliasedComplexExpression<DB, TB>;
|
|
8
9
|
export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
|
|
9
|
-
export declare type TableReference<DB> = AnyAliasedTable<DB
|
|
10
|
-
export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
10
|
+
export declare type TableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB> | AnyAliasedRawBuilder;
|
|
11
11
|
export declare type TableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
12
12
|
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
|
|
13
13
|
};
|
|
14
|
-
export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
15
14
|
export declare type LeftJoinTableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
16
15
|
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? DB[C] : never;
|
|
17
16
|
};
|
|
18
|
-
export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
19
17
|
export declare type RightJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
20
18
|
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
21
19
|
};
|
|
22
|
-
export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
23
20
|
export declare type FullJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
24
21
|
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
25
22
|
};
|
|
26
23
|
export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
|
|
27
|
-
declare type
|
|
28
|
-
declare type
|
|
29
|
-
declare type
|
|
24
|
+
export declare type TableExpressionTables<DB, TB extends keyof DB, TE> = TB | ExtractAliasFromTableExpression<DB, TE>;
|
|
25
|
+
declare type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? O : never : TE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : TE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : never;
|
|
26
|
+
declare type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
|
|
27
|
+
declare type AnyTable<DB> = keyof DB & string;
|
|
30
28
|
export declare function parseTableExpressionOrList(ctx: ParseContext, table: TableExpressionOrList<any, any>): TableExpressionNode[];
|
|
31
29
|
export declare function parseTableExpression(ctx: ParseContext, table: TableExpression<any, any>): TableExpressionNode;
|
|
32
30
|
export declare function parseAliasedTable(from: string): TableExpressionNode;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { isReadonlyArray, isString } from '../util/object-utils.js';
|
|
2
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
3
3
|
import { TableNode } from '../operation-node/table-node.js';
|
|
4
|
-
import {
|
|
4
|
+
import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
|
|
5
5
|
export function parseTableExpressionOrList(ctx, table) {
|
|
6
6
|
if (isReadonlyArray(table)) {
|
|
7
7
|
return table.map((it) => parseTableExpression(ctx, it));
|
|
@@ -14,14 +14,8 @@ export function parseTableExpression(ctx, table) {
|
|
|
14
14
|
if (isString(table)) {
|
|
15
15
|
return parseAliasedTable(table);
|
|
16
16
|
}
|
|
17
|
-
else if (isOperationNodeSource(table)) {
|
|
18
|
-
return table.toOperationNode();
|
|
19
|
-
}
|
|
20
|
-
else if (isFunction(table)) {
|
|
21
|
-
return table(ctx.createExpressionBuilder()).toOperationNode();
|
|
22
|
-
}
|
|
23
17
|
else {
|
|
24
|
-
|
|
18
|
+
return parseAliasedComplexExpression(ctx, table);
|
|
25
19
|
}
|
|
26
20
|
}
|
|
27
21
|
export function parseAliasedTable(from) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { UnionNode } from '../operation-node/union-node.js';
|
|
2
|
-
import {
|
|
2
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
3
3
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
|
-
export declare type UnionExpression<DB, O> =
|
|
4
|
+
export declare type UnionExpression<DB, O> = SelectQueryBuilder<DB, any, O> | RawBuilder<O>;
|
|
5
5
|
export declare function parseUnion(union: UnionExpression<any, any>, all: boolean): UnionNode;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import { QueryNode } from '../operation-node/query-node.js';
|
|
2
1
|
import { UnionNode } from '../operation-node/union-node.js';
|
|
3
2
|
export function parseUnion(union, all) {
|
|
4
|
-
|
|
5
|
-
if (QueryNode.isMutating(node)) {
|
|
6
|
-
throw new Error("can't combine insert, update or delete queries using union");
|
|
7
|
-
}
|
|
8
|
-
return UnionNode.create(node, all);
|
|
3
|
+
return UnionNode.create(union.toOperationNode(), all);
|
|
9
4
|
}
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
|
|
2
|
-
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
|
-
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
|
-
import { ValueNode } from '../operation-node/value-node.js';
|
|
5
|
-
import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
6
|
-
import { PrimitiveValue } from '../util/object-utils.js';
|
|
7
2
|
import { ParseContext } from './parse-context.js';
|
|
3
|
+
import { ValueExpression } from './value-parser.js';
|
|
8
4
|
export declare type MutationObject<DB, TB extends keyof DB> = {
|
|
9
|
-
[C in keyof DB[TB]]?:
|
|
5
|
+
[C in keyof DB[TB]]?: ValueExpression<DB, TB, DB[TB][C]>;
|
|
10
6
|
};
|
|
11
|
-
export declare type MutationValueExpression<DB, TB extends keyof DB, T> = T | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
|
|
12
7
|
export declare function parseUpdateObject(ctx: ParseContext, row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
|
|
13
|
-
export declare function parseMutationValueExpression(ctx: ParseContext, value: MutationValueExpression<any, any, PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
|
|
@@ -1,29 +1,10 @@
|
|
|
1
1
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
2
2
|
import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
|
|
3
|
-
import {
|
|
4
|
-
import { QueryNode } from '../operation-node/query-node.js';
|
|
5
|
-
import { ValueNode } from '../operation-node/value-node.js';
|
|
6
|
-
import { isFunction, isPrimitive, } from '../util/object-utils.js';
|
|
3
|
+
import { parseValueExpression } from './value-parser.js';
|
|
7
4
|
export function parseUpdateObject(ctx, row) {
|
|
8
|
-
return Object.entries(row)
|
|
9
|
-
|
|
5
|
+
return Object.entries(row)
|
|
6
|
+
.filter(([_, value]) => value !== undefined)
|
|
7
|
+
.map(([key, value]) => {
|
|
8
|
+
return ColumnUpdateNode.create(ColumnNode.create(key), parseValueExpression(ctx, value));
|
|
10
9
|
});
|
|
11
10
|
}
|
|
12
|
-
export function parseMutationValueExpression(ctx, value) {
|
|
13
|
-
if (isPrimitive(value)) {
|
|
14
|
-
return ValueNode.create(value);
|
|
15
|
-
}
|
|
16
|
-
else if (isOperationNodeSource(value)) {
|
|
17
|
-
const node = value.toOperationNode();
|
|
18
|
-
if (!QueryNode.isMutating(node)) {
|
|
19
|
-
return node;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
else if (isFunction(value)) {
|
|
23
|
-
const node = value(ctx.createExpressionBuilder()).toOperationNode();
|
|
24
|
-
if (!QueryNode.isMutating(node)) {
|
|
25
|
-
return node;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
throw new Error(`unsupported value for mutation object ${JSON.stringify(value)}`);
|
|
29
|
-
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { ValueExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ValueNode } from '../operation-node/value-node.js';
|
|
3
|
+
import { PrimitiveValue } from '../util/object-utils.js';
|
|
4
4
|
import { ParseContext } from './parse-context.js';
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export declare
|
|
5
|
+
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
6
|
+
import { RawNode } from '../operation-node/raw-node.js';
|
|
7
|
+
import { ComplexExpression } from './complex-expression-parser.js';
|
|
8
|
+
export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB>;
|
|
9
|
+
export declare type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
|
|
10
|
+
export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, PrimitiveValue>): ValueExpressionNode;
|
|
11
|
+
export declare function parseValueExpression(ctx: ParseContext, exp: ValueExpression<any, any, PrimitiveValue>): ValueNode | SelectQueryNode | RawNode;
|
|
@@ -1,49 +1,26 @@
|
|
|
1
|
-
import { ColumnNode } from '../operation-node/column-node.js';
|
|
2
|
-
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
1
|
import { PrimitiveValueListNode } from '../operation-node/primitive-value-list-node.js';
|
|
4
2
|
import { ValueListNode } from '../operation-node/value-list-node.js';
|
|
5
3
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
4
|
+
import { isPrimitive, isReadonlyArray, } from '../util/object-utils.js';
|
|
5
|
+
import { parseComplexExpression, } from './complex-expression-parser.js';
|
|
8
6
|
export function parseValueExpressionOrList(ctx, arg) {
|
|
9
|
-
if (
|
|
7
|
+
if (isReadonlyArray(arg)) {
|
|
10
8
|
return parseValueExpressionList(ctx, arg);
|
|
11
9
|
}
|
|
12
10
|
else {
|
|
13
11
|
return parseValueExpression(ctx, arg);
|
|
14
12
|
}
|
|
15
13
|
}
|
|
16
|
-
export function parseValueExpression(ctx,
|
|
17
|
-
if (isPrimitive(
|
|
18
|
-
return ValueNode.create(
|
|
14
|
+
export function parseValueExpression(ctx, exp) {
|
|
15
|
+
if (isPrimitive(exp)) {
|
|
16
|
+
return ValueNode.create(exp);
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
const node = arg.toOperationNode();
|
|
22
|
-
if (!QueryNode.isMutating(node)) {
|
|
23
|
-
return node;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
else if (isFunction(arg)) {
|
|
27
|
-
const node = arg(ctx.createExpressionBuilder()).toOperationNode();
|
|
28
|
-
if (!QueryNode.isMutating(node)) {
|
|
29
|
-
return node;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
throw new Error(`invalid value expression ${JSON.stringify(arg)}`);
|
|
18
|
+
return parseComplexExpression(ctx, exp);
|
|
33
19
|
}
|
|
34
20
|
function parseValueExpressionList(ctx, arg) {
|
|
35
21
|
if (arg.every(isPrimitive)) {
|
|
36
22
|
// Optimization for large lists of primitive values.
|
|
37
23
|
return PrimitiveValueListNode.create(arg);
|
|
38
24
|
}
|
|
39
|
-
return ValueListNode.create(arg.map((it) =>
|
|
40
|
-
const node = parseValueExpression(ctx, it);
|
|
41
|
-
if (ColumnNode.is(node)) {
|
|
42
|
-
throw new Error('value lists cannot have column references');
|
|
43
|
-
}
|
|
44
|
-
if (ValueListNode.is(node) || PrimitiveValueListNode.is(node)) {
|
|
45
|
-
throw new Error('value lists cannot have nested lists');
|
|
46
|
-
}
|
|
47
|
-
return node;
|
|
48
|
-
}));
|
|
25
|
+
return ValueListNode.create(arg.map((it) => parseValueExpression(ctx, it)));
|
|
49
26
|
}
|
|
@@ -1,11 +1,41 @@
|
|
|
1
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
2
|
+
import { UpdateQueryBuilder } from '../query-builder/update-query-builder.js';
|
|
3
|
+
import { DeleteQueryBuilder } from '../query-builder/delete-query-builder.js';
|
|
4
|
+
import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
|
|
1
5
|
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
2
|
-
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
3
6
|
import { QueryCreator } from '../query-creator.js';
|
|
4
7
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
5
|
-
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
6
8
|
import { ParseContext } from './parse-context.js';
|
|
7
|
-
export declare type CommonTableExpression<DB> = (creator: QueryCreator<DB>) =>
|
|
8
|
-
export declare type
|
|
9
|
-
declare type
|
|
10
|
-
|
|
9
|
+
export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
|
|
10
|
+
export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
|
|
11
|
+
export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
|
|
12
|
+
declare type CommonTableExpressionOutput<DB, CN extends string> = SelectQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | InsertQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | UpdateQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | DeleteQueryBuilder<DB, any, ExtractRowFromCommonTableExpressionName<CN>> | RawBuilder<ExtractRowFromCommonTableExpressionName<CN>>;
|
|
13
|
+
/**
|
|
14
|
+
* Given a common CommonTableExpression CTE extracts the row type from it.
|
|
15
|
+
*
|
|
16
|
+
* For example a CTE `(db) => db.selectFrom('person').select(['id', 'first_name'])`
|
|
17
|
+
* would result in `Pick<Person, 'id' | 'first_name'>`.
|
|
18
|
+
*/
|
|
19
|
+
declare type ExtractRowFromCommonTableExpression<CTE> = CTE extends (creator: QueryCreator<any>) => infer Q ? Q extends SelectQueryBuilder<any, any, infer QO> ? QO : Q extends InsertQueryBuilder<any, any, infer QO> ? QO : Q extends UpdateQueryBuilder<any, any, infer QO> ? QO : Q extends DeleteQueryBuilder<any, any, infer QO> ? QO : Q extends RawBuilder<infer RO> ? RO : never : never;
|
|
20
|
+
/**
|
|
21
|
+
* Extracts 'person' from a string like 'person(id, first_name)'.
|
|
22
|
+
*/
|
|
23
|
+
declare type ExtractTableFromCommonTableExpressionName<CN extends string> = CN extends `${infer TB}(${string})` ? TB : CN;
|
|
24
|
+
/**
|
|
25
|
+
* Parses a string like 'person(id, first_name)' into a type:
|
|
26
|
+
*
|
|
27
|
+
* {
|
|
28
|
+
* id: any,
|
|
29
|
+
* first_name: any
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
*/
|
|
33
|
+
declare type ExtractRowFromCommonTableExpressionName<CN extends string> = CN extends `${string}(${infer CL})` ? {
|
|
34
|
+
[C in ExtractColumnNamesFromColumnList<CL>]: any;
|
|
35
|
+
} : Record<string, any>;
|
|
36
|
+
/**
|
|
37
|
+
* Parses a string like 'id, first_name' into a type 'id' | 'first_name'
|
|
38
|
+
*/
|
|
39
|
+
declare type ExtractColumnNamesFromColumnList<R extends string> = R extends `${infer C}, ${infer RS}` ? C | ExtractColumnNamesFromColumnList<RS> : R;
|
|
40
|
+
export declare function parseCommonTableExpression(ctx: ParseContext, name: string, expression: CommonTableExpression<any, any>): CommonTableExpressionNode;
|
|
11
41
|
export {};
|
|
@@ -1,6 +1,17 @@
|
|
|
1
|
-
import { IdentifierNode } from '../operation-node/identifier-node.js';
|
|
2
1
|
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
2
|
+
import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
|
|
3
3
|
export function parseCommonTableExpression(ctx, name, expression) {
|
|
4
4
|
const builder = expression(ctx.createQueryCreator());
|
|
5
|
-
return CommonTableExpressionNode.create(
|
|
5
|
+
return CommonTableExpressionNode.create(parseCommonTableExpressionName(name), builder.toOperationNode());
|
|
6
|
+
}
|
|
7
|
+
function parseCommonTableExpressionName(name) {
|
|
8
|
+
if (name.includes('(')) {
|
|
9
|
+
const parts = name.split(/[\(\)]/);
|
|
10
|
+
const table = parts[0];
|
|
11
|
+
const columns = parts[1].split(',').map((it) => it.trim());
|
|
12
|
+
return CommonTableExpressionNameNode.create(table, columns);
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
return CommonTableExpressionNameNode.create(name);
|
|
16
|
+
}
|
|
6
17
|
}
|
|
@@ -12,8 +12,8 @@ export interface CamelCasePluginOptions {
|
|
|
12
12
|
upperCase?: boolean;
|
|
13
13
|
/**
|
|
14
14
|
* If true, an underscore is added before each digit when converting
|
|
15
|
-
* camelCase to snake_case. For example `
|
|
16
|
-
* `
|
|
15
|
+
* camelCase to snake_case. For example `foo12Bar => foo_12_bar` and
|
|
16
|
+
* `foo_12_bar => foo12Bar`
|
|
17
17
|
*
|
|
18
18
|
* Defaults to false.
|
|
19
19
|
*/
|
|
@@ -94,7 +94,41 @@ export interface CamelCasePluginOptions {
|
|
|
94
94
|
export declare class CamelCasePlugin implements KyselyPlugin {
|
|
95
95
|
#private;
|
|
96
96
|
constructor(opt?: CamelCasePluginOptions);
|
|
97
|
+
/**
|
|
98
|
+
* This is called for each query before it is executed. You can modify the query by
|
|
99
|
+
* transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
|
|
100
|
+
* and returning the transformed tree. You'd usually want to use an {@link OperationNodeTransformer}
|
|
101
|
+
* for this.
|
|
102
|
+
*
|
|
103
|
+
* If you need to pass some query-related data between this method and `transformResult` you
|
|
104
|
+
* can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
|
|
105
|
+
*
|
|
106
|
+
* ```ts
|
|
107
|
+
* const plugin = {
|
|
108
|
+
* data: new WeakMap<QueryId, SomeData>(),
|
|
109
|
+
*
|
|
110
|
+
* transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
|
|
111
|
+
* this.data.set(args.queryId, something)
|
|
112
|
+
* return args.node
|
|
113
|
+
* },
|
|
114
|
+
*
|
|
115
|
+
* transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
|
|
116
|
+
* const data = this.data.get(args.queryId)
|
|
117
|
+
* return args.result
|
|
118
|
+
* }
|
|
119
|
+
* }
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
|
|
123
|
+
* is not always matched by a call to `transformResult` which would leave orphaned items in the map
|
|
124
|
+
* and cause a memory leak.
|
|
125
|
+
*/
|
|
97
126
|
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
127
|
+
/**
|
|
128
|
+
* This method is called for each query after it has been executed. The result
|
|
129
|
+
* of the query can be accessed through {@link PluginTransformResultArgs.result | args.result}.
|
|
130
|
+
* You can modify the result and return the modifier result.
|
|
131
|
+
*/
|
|
98
132
|
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
99
133
|
protected mapRow(row: UnknownRow): UnknownRow;
|
|
100
134
|
protected snakeCase(str: string): string;
|
|
@@ -12,6 +12,40 @@ import { KyselyPlugin, PluginTransformQueryArgs, PluginTransformResultArgs } fro
|
|
|
12
12
|
*/
|
|
13
13
|
export declare class ImmediateValuePlugin implements KyselyPlugin {
|
|
14
14
|
#private;
|
|
15
|
+
/**
|
|
16
|
+
* This is called for each query before it is executed. You can modify the query by
|
|
17
|
+
* transforming its {@link OperationNode} tree provided in {@link PluginTransformQueryArgs.node | args.node}
|
|
18
|
+
* and returning the transformed tree. You'd usually want to use an {@link OperationNodeTransformer}
|
|
19
|
+
* for this.
|
|
20
|
+
*
|
|
21
|
+
* If you need to pass some query-related data between this method and `transformResult` you
|
|
22
|
+
* can use a `WeakMap` with {@link PluginTransformQueryArgs.queryId | args.queryId} as the key:
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* const plugin = {
|
|
26
|
+
* data: new WeakMap<QueryId, SomeData>(),
|
|
27
|
+
*
|
|
28
|
+
* transformQuery(args: PluginTransformQueryArgs): RootOperationNode {
|
|
29
|
+
* this.data.set(args.queryId, something)
|
|
30
|
+
* return args.node
|
|
31
|
+
* },
|
|
32
|
+
*
|
|
33
|
+
* transformResult(args: PluginTransformResultArgs): QueryResult<UnknownRow> {
|
|
34
|
+
* const data = this.data.get(args.queryId)
|
|
35
|
+
* return args.result
|
|
36
|
+
* }
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* You should use a `WeakMap` instead of a `Map` or some other strong references because `transformQuery`
|
|
41
|
+
* is not always matched by a call to `transformResult` which would leave orphaned items in the map
|
|
42
|
+
* and cause a memory leak.
|
|
43
|
+
*/
|
|
15
44
|
transformQuery(args: PluginTransformQueryArgs): RootOperationNode;
|
|
45
|
+
/**
|
|
46
|
+
* This method is called for each query after it has been executed. The result
|
|
47
|
+
* of the query can be accessed through {@link PluginTransformResultArgs.result | args.result}.
|
|
48
|
+
* You can modify the result and return the modifier result.
|
|
49
|
+
*/
|
|
16
50
|
transformResult(args: PluginTransformResultArgs): Promise<QueryResult<UnknownRow>>;
|
|
17
51
|
}
|