kysely 0.16.11 → 0.17.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 +2 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +19 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/cjs/driver/connection-provider.d.ts +1 -1
- package/dist/cjs/driver/default-connection-provider.d.ts +1 -1
- package/dist/cjs/driver/default-connection-provider.js +2 -2
- package/dist/cjs/driver/dummy-driver.d.ts +8 -0
- package/dist/cjs/driver/dummy-driver.js +8 -0
- package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
- package/dist/cjs/driver/single-connection-provider.js +2 -2
- package/dist/cjs/index-nodeless.d.ts +2 -0
- package/dist/cjs/index-nodeless.js +2 -0
- package/dist/cjs/kysely.d.ts +3 -6
- package/dist/cjs/kysely.js +30 -41
- package/dist/cjs/migration/migrator.js +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
- package/dist/cjs/operation-node/raw-node.d.ts +4 -2
- package/dist/cjs/operation-node/raw-node.js +8 -2
- package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
- package/dist/cjs/parser/complex-expression-parser.js +5 -4
- package/dist/cjs/parser/filter-parser.d.ts +9 -9
- package/dist/cjs/parser/filter-parser.js +31 -30
- package/dist/cjs/parser/group-by-parser.d.ts +1 -2
- package/dist/cjs/parser/group-by-parser.js +2 -2
- package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
- package/dist/cjs/parser/insert-values-parser.js +6 -6
- package/dist/cjs/parser/join-parser.d.ts +1 -2
- package/dist/cjs/parser/join-parser.js +8 -7
- package/dist/cjs/parser/order-by-parser.d.ts +1 -2
- package/dist/cjs/parser/order-by-parser.js +4 -4
- package/dist/cjs/parser/parse-utils.d.ts +10 -0
- package/dist/cjs/parser/parse-utils.js +38 -0
- package/dist/cjs/parser/reference-parser.d.ts +2 -3
- package/dist/cjs/parser/reference-parser.js +5 -5
- package/dist/cjs/parser/select-parser.d.ts +1 -2
- package/dist/cjs/parser/select-parser.js +5 -5
- package/dist/cjs/parser/table-parser.d.ts +2 -3
- package/dist/cjs/parser/table-parser.js +5 -5
- package/dist/cjs/parser/update-set-parser.d.ts +1 -2
- package/dist/cjs/parser/update-set-parser.js +2 -2
- package/dist/cjs/parser/value-parser.d.ts +3 -4
- package/dist/cjs/parser/value-parser.js +7 -7
- package/dist/cjs/parser/with-parser.d.ts +1 -2
- package/dist/cjs/parser/with-parser.js +3 -2
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
- package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -23
- package/dist/cjs/query-builder/delete-query-builder.js +15 -15
- package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
- package/dist/cjs/query-builder/expression-builder.js +12 -21
- package/dist/cjs/query-builder/function-builder.d.ts +2 -6
- package/dist/cjs/query-builder/function-builder.js +5 -8
- package/dist/cjs/query-builder/insert-query-builder.d.ts +12 -8
- package/dist/cjs/query-builder/insert-query-builder.js +8 -7
- package/dist/cjs/query-builder/join-builder.d.ts +0 -2
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +46 -28
- package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
- package/dist/cjs/query-builder/returning-interface.d.ts +3 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +52 -33
- package/dist/cjs/query-builder/select-query-builder.js +28 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +41 -28
- package/dist/cjs/query-builder/update-query-builder.js +22 -20
- package/dist/cjs/query-builder/where-interface.d.ts +31 -20
- package/dist/cjs/query-compiler/default-query-compiler.js +1 -1
- package/dist/cjs/query-creator.d.ts +10 -129
- package/dist/cjs/query-creator.js +5 -136
- package/dist/cjs/query-executor/default-query-executor.d.ts +21 -7
- package/dist/cjs/query-executor/default-query-executor.js +17 -19
- package/dist/cjs/query-executor/noop-query-executor.d.ts +20 -6
- package/dist/cjs/query-executor/noop-query-executor.js +11 -4
- package/dist/cjs/query-executor/query-executor-base.d.ts +62 -0
- package/dist/cjs/query-executor/query-executor-base.js +46 -0
- package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/cjs/query-executor/query-executor-provider.js +2 -0
- package/dist/cjs/query-executor/query-executor.d.ts +20 -13
- package/dist/cjs/query-executor/query-executor.js +0 -57
- package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
- package/dist/cjs/raw-builder/raw-builder.js +55 -56
- package/dist/cjs/raw-builder/sql.d.ts +331 -0
- package/dist/cjs/raw-builder/sql.js +161 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +42 -8
- package/dist/cjs/schema/alter-table-builder.js +20 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +22 -8
- package/dist/cjs/schema/create-index-builder.d.ts +3 -1
- package/dist/cjs/schema/create-index-builder.js +3 -1
- package/dist/cjs/schema/create-table-builder.d.ts +7 -3
- package/dist/cjs/schema/create-table-builder.js +7 -3
- package/dist/cjs/schema/create-view-builder.d.ts +3 -3
- package/dist/cjs/schema/create-view-builder.js +3 -3
- package/dist/cjs/util/query-id.js +10 -4
- package/dist/cjs/util/random-string.js +65 -2
- package/dist/cjs/util/type-utils.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +19 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/esm/driver/connection-provider.d.ts +1 -1
- package/dist/esm/driver/default-connection-provider.d.ts +1 -1
- package/dist/esm/driver/default-connection-provider.js +2 -2
- package/dist/esm/driver/dummy-driver.d.ts +8 -0
- package/dist/esm/driver/dummy-driver.js +8 -0
- package/dist/esm/driver/single-connection-provider.d.ts +1 -1
- package/dist/esm/driver/single-connection-provider.js +2 -2
- package/dist/esm/index-nodeless.d.ts +2 -0
- package/dist/esm/index-nodeless.js +2 -0
- package/dist/esm/kysely.d.ts +3 -6
- package/dist/esm/kysely.js +30 -41
- package/dist/esm/migration/migrator.js +4 -4
- package/dist/esm/operation-node/operation-node-transformer.js +1 -1
- package/dist/esm/operation-node/raw-node.d.ts +4 -2
- package/dist/esm/operation-node/raw-node.js +8 -2
- package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
- package/dist/esm/parser/complex-expression-parser.js +5 -4
- package/dist/esm/parser/filter-parser.d.ts +9 -9
- package/dist/esm/parser/filter-parser.js +31 -30
- package/dist/esm/parser/group-by-parser.d.ts +1 -2
- package/dist/esm/parser/group-by-parser.js +2 -2
- package/dist/esm/parser/insert-values-parser.d.ts +1 -2
- package/dist/esm/parser/insert-values-parser.js +6 -6
- package/dist/esm/parser/join-parser.d.ts +1 -2
- package/dist/esm/parser/join-parser.js +8 -7
- package/dist/esm/parser/order-by-parser.d.ts +1 -2
- package/dist/esm/parser/order-by-parser.js +4 -4
- package/dist/esm/parser/parse-utils.d.ts +10 -0
- package/dist/esm/parser/parse-utils.js +32 -0
- package/dist/esm/parser/reference-parser.d.ts +2 -3
- package/dist/esm/parser/reference-parser.js +5 -5
- package/dist/esm/parser/select-parser.d.ts +1 -2
- package/dist/esm/parser/select-parser.js +5 -5
- package/dist/esm/parser/table-parser.d.ts +2 -3
- package/dist/esm/parser/table-parser.js +5 -5
- package/dist/esm/parser/update-set-parser.d.ts +1 -2
- package/dist/esm/parser/update-set-parser.js +2 -2
- package/dist/esm/parser/value-parser.d.ts +3 -4
- package/dist/esm/parser/value-parser.js +7 -7
- package/dist/esm/parser/with-parser.d.ts +1 -2
- package/dist/esm/parser/with-parser.js +3 -2
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
- package/dist/esm/query-builder/delete-query-builder.d.ts +34 -23
- package/dist/esm/query-builder/delete-query-builder.js +15 -15
- package/dist/esm/query-builder/expression-builder.d.ts +4 -13
- package/dist/esm/query-builder/expression-builder.js +12 -21
- package/dist/esm/query-builder/function-builder.d.ts +2 -6
- package/dist/esm/query-builder/function-builder.js +5 -8
- package/dist/esm/query-builder/insert-query-builder.d.ts +12 -8
- package/dist/esm/query-builder/insert-query-builder.js +8 -7
- package/dist/esm/query-builder/join-builder.d.ts +0 -2
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/on-conflict-builder.d.ts +46 -28
- package/dist/esm/query-builder/on-conflict-builder.js +17 -17
- package/dist/esm/query-builder/returning-interface.d.ts +3 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +52 -33
- package/dist/esm/query-builder/select-query-builder.js +28 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +41 -28
- package/dist/esm/query-builder/update-query-builder.js +22 -20
- package/dist/esm/query-builder/where-interface.d.ts +31 -20
- package/dist/esm/query-compiler/default-query-compiler.js +1 -1
- package/dist/esm/query-creator.d.ts +10 -129
- package/dist/esm/query-creator.js +5 -136
- package/dist/esm/query-executor/default-query-executor.d.ts +21 -7
- package/dist/esm/query-executor/default-query-executor.js +17 -19
- package/dist/esm/query-executor/noop-query-executor.d.ts +20 -6
- package/dist/esm/query-executor/noop-query-executor.js +10 -3
- package/dist/esm/query-executor/query-executor-base.d.ts +62 -0
- package/dist/esm/query-executor/query-executor-base.js +43 -0
- package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/esm/query-executor/query-executor-provider.js +2 -0
- package/dist/esm/query-executor/query-executor.d.ts +20 -13
- package/dist/esm/query-executor/query-executor.js +1 -55
- package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
- package/dist/esm/raw-builder/raw-builder.js +56 -57
- package/dist/esm/raw-builder/sql.d.ts +331 -0
- package/dist/esm/raw-builder/sql.js +159 -0
- package/dist/esm/schema/alter-table-builder.d.ts +42 -8
- package/dist/esm/schema/alter-table-builder.js +20 -0
- package/dist/esm/schema/column-definition-builder.d.ts +22 -8
- package/dist/esm/schema/create-index-builder.d.ts +3 -1
- package/dist/esm/schema/create-index-builder.js +3 -1
- package/dist/esm/schema/create-table-builder.d.ts +7 -3
- package/dist/esm/schema/create-table-builder.js +7 -3
- package/dist/esm/schema/create-view-builder.d.ts +3 -3
- package/dist/esm/schema/create-view-builder.js +3 -3
- package/dist/esm/util/query-id.js +10 -4
- package/dist/esm/util/random-string.js +65 -2
- package/dist/esm/util/type-utils.d.ts +1 -1
- package/package.json +14 -14
- package/dist/cjs/parser/parse-context.d.ts +0 -55
- package/dist/cjs/parser/parse-context.js +0 -50
- package/dist/cjs/util/private-symbols.d.ts +0 -5
- package/dist/cjs/util/private-symbols.js +0 -8
- package/dist/esm/parser/parse-context.d.ts +0 -55
- package/dist/esm/parser/parse-context.js +0 -47
- package/dist/esm/util/private-symbols.d.ts +0 -5
- package/dist/esm/util/private-symbols.js +0 -6
|
@@ -6,22 +6,22 @@ import { TableNode } from '../operation-node/table-node.js';
|
|
|
6
6
|
import { isReadonlyArray, isString } from '../util/object-utils.js';
|
|
7
7
|
import { parseComplexExpression, } from './complex-expression-parser.js';
|
|
8
8
|
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
|
|
9
|
-
export function parseReferenceExpressionOrList(
|
|
9
|
+
export function parseReferenceExpressionOrList(arg) {
|
|
10
10
|
if (isReadonlyArray(arg)) {
|
|
11
|
-
return arg.map((it) => parseReferenceExpression(
|
|
11
|
+
return arg.map((it) => parseReferenceExpression(it));
|
|
12
12
|
}
|
|
13
13
|
else {
|
|
14
|
-
return [parseReferenceExpression(
|
|
14
|
+
return [parseReferenceExpression(arg)];
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
export function parseReferenceExpression(
|
|
17
|
+
export function parseReferenceExpression(exp) {
|
|
18
18
|
if (isString(exp)) {
|
|
19
19
|
return parseStringReference(exp);
|
|
20
20
|
}
|
|
21
21
|
else if (isDynamicReferenceBuilder(exp)) {
|
|
22
22
|
return exp.toOperationNode();
|
|
23
23
|
}
|
|
24
|
-
return parseComplexExpression(
|
|
24
|
+
return parseComplexExpression(exp);
|
|
25
25
|
}
|
|
26
26
|
export function parseStringReference(ref) {
|
|
27
27
|
const COLUMN_SEPARATOR = '.';
|
|
@@ -3,7 +3,6 @@ import { AliasedQueryBuilder, SelectQueryBuilder } from '../query-builder/select
|
|
|
3
3
|
import { SelectionNode } from '../operation-node/selection-node.js';
|
|
4
4
|
import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTable, ExtractColumnType, ValueType } from '../util/type-utils.js';
|
|
5
5
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
|
-
import { ParseContext } from './parse-context.js';
|
|
7
6
|
import { AliasedComplexExpression } from './complex-expression-parser.js';
|
|
8
7
|
import { Selectable, SelectType } from '../util/column-type.js';
|
|
9
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>;
|
|
@@ -29,6 +28,6 @@ declare type AllSelection<DB, TB extends keyof DB> = Selectable<{
|
|
|
29
28
|
[T in TB]: C extends keyof DB[T] ? DB[T][C] : never;
|
|
30
29
|
}[TB];
|
|
31
30
|
}>;
|
|
32
|
-
export declare function parseSelectExpressionOrList(
|
|
31
|
+
export declare function parseSelectExpressionOrList(selection: SelectExpressionOrList<any, any>): SelectionNode[];
|
|
33
32
|
export declare function parseSelectAll(table?: string | string[]): SelectionNode[];
|
|
34
33
|
export {};
|
|
@@ -4,15 +4,15 @@ import { SelectionNode } from '../operation-node/selection-node.js';
|
|
|
4
4
|
import { parseAliasedStringReference } from './reference-parser.js';
|
|
5
5
|
import { isDynamicReferenceBuilder, } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
|
|
7
|
-
export function parseSelectExpressionOrList(
|
|
7
|
+
export function parseSelectExpressionOrList(selection) {
|
|
8
8
|
if (isReadonlyArray(selection)) {
|
|
9
|
-
return selection.map((it) => parseSelectExpression(
|
|
9
|
+
return selection.map((it) => parseSelectExpression(it));
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
|
-
return [parseSelectExpression(
|
|
12
|
+
return [parseSelectExpression(selection)];
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
function parseSelectExpression(
|
|
15
|
+
function parseSelectExpression(selection) {
|
|
16
16
|
if (isString(selection)) {
|
|
17
17
|
return SelectionNode.create(parseAliasedStringReference(selection));
|
|
18
18
|
}
|
|
@@ -20,7 +20,7 @@ function parseSelectExpression(ctx, selection) {
|
|
|
20
20
|
return SelectionNode.create(selection.toOperationNode());
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
|
-
return SelectionNode.create(parseAliasedComplexExpression(
|
|
23
|
+
return SelectionNode.create(parseAliasedComplexExpression(selection));
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
export function parseSelectAll(table) {
|
|
@@ -3,7 +3,6 @@ import { TableNode } from '../operation-node/table-node.js';
|
|
|
3
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
|
-
import { ParseContext } from './parse-context.js';
|
|
7
6
|
import { AliasedComplexExpression } from './complex-expression-parser.js';
|
|
8
7
|
export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AliasedComplexExpression<DB, TB>;
|
|
9
8
|
export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
|
|
@@ -25,8 +24,8 @@ export declare type TableExpressionTables<DB, TB extends keyof DB, TE> = TB | Ex
|
|
|
25
24
|
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
25
|
declare type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
|
|
27
26
|
declare type AnyTable<DB> = keyof DB & string;
|
|
28
|
-
export declare function parseTableExpressionOrList(
|
|
29
|
-
export declare function parseTableExpression(
|
|
27
|
+
export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>): TableExpressionNode[];
|
|
28
|
+
export declare function parseTableExpression(table: TableExpression<any, any>): TableExpressionNode;
|
|
30
29
|
export declare function parseAliasedTable(from: string): TableExpressionNode;
|
|
31
30
|
export declare function parseTable(from: string): TableNode;
|
|
32
31
|
export {};
|
|
@@ -3,20 +3,20 @@ import { isReadonlyArray, isString } from '../util/object-utils.js';
|
|
|
3
3
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
4
4
|
import { TableNode } from '../operation-node/table-node.js';
|
|
5
5
|
import { parseAliasedComplexExpression, } from './complex-expression-parser.js';
|
|
6
|
-
export function parseTableExpressionOrList(
|
|
6
|
+
export function parseTableExpressionOrList(table) {
|
|
7
7
|
if (isReadonlyArray(table)) {
|
|
8
|
-
return table.map((it) => parseTableExpression(
|
|
8
|
+
return table.map((it) => parseTableExpression(it));
|
|
9
9
|
}
|
|
10
10
|
else {
|
|
11
|
-
return [parseTableExpression(
|
|
11
|
+
return [parseTableExpression(table)];
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
-
export function parseTableExpression(
|
|
14
|
+
export function parseTableExpression(table) {
|
|
15
15
|
if (isString(table)) {
|
|
16
16
|
return parseAliasedTable(table);
|
|
17
17
|
}
|
|
18
18
|
else {
|
|
19
|
-
return parseAliasedComplexExpression(
|
|
19
|
+
return parseAliasedComplexExpression(table);
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
export function parseAliasedTable(from) {
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
|
|
2
2
|
import { UpdateKeys, UpdateType } from '../util/column-type.js';
|
|
3
|
-
import { ParseContext } from './parse-context.js';
|
|
4
3
|
import { ValueExpression } from './value-parser.js';
|
|
5
4
|
export declare type MutationObject<DB, TB extends keyof DB> = {
|
|
6
5
|
[C in UpdateKeys<DB[TB]>]?: ValueExpression<DB, TB, UpdateType<DB[TB][C]>>;
|
|
7
6
|
};
|
|
8
|
-
export declare function parseUpdateObject(
|
|
7
|
+
export declare function parseUpdateObject(row: MutationObject<any, any>): ReadonlyArray<ColumnUpdateNode>;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import { ColumnNode } from '../operation-node/column-node.js';
|
|
3
3
|
import { ColumnUpdateNode } from '../operation-node/column-update-node.js';
|
|
4
4
|
import { parseValueExpression } from './value-parser.js';
|
|
5
|
-
export function parseUpdateObject(
|
|
5
|
+
export function parseUpdateObject(row) {
|
|
6
6
|
return Object.entries(row)
|
|
7
7
|
.filter(([_, value]) => value !== undefined)
|
|
8
8
|
.map(([key, value]) => {
|
|
9
|
-
return ColumnUpdateNode.create(ColumnNode.create(key), parseValueExpression(
|
|
9
|
+
return ColumnUpdateNode.create(ColumnNode.create(key), parseValueExpression(value));
|
|
10
10
|
});
|
|
11
11
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { ValueExpressionNode } from '../operation-node/operation-node-utils.js';
|
|
2
2
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
3
|
-
import { ParseContext } from './parse-context.js';
|
|
4
3
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
5
4
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
6
5
|
import { ComplexExpression } from './complex-expression-parser.js';
|
|
7
|
-
export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB>;
|
|
6
|
+
export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB, V>;
|
|
8
7
|
export declare type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
|
|
9
|
-
export declare function parseValueExpressionOrList(
|
|
10
|
-
export declare function parseValueExpression(
|
|
8
|
+
export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): ValueExpressionNode;
|
|
9
|
+
export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): ValueNode | SelectQueryNode | RawNode;
|
|
@@ -4,23 +4,23 @@ import { ValueListNode } from '../operation-node/value-list-node.js';
|
|
|
4
4
|
import { ValueNode } from '../operation-node/value-node.js';
|
|
5
5
|
import { isReadonlyArray } from '../util/object-utils.js';
|
|
6
6
|
import { parseComplexExpression, isComplexExpression, } from './complex-expression-parser.js';
|
|
7
|
-
export function parseValueExpressionOrList(
|
|
7
|
+
export function parseValueExpressionOrList(arg) {
|
|
8
8
|
if (isReadonlyArray(arg)) {
|
|
9
|
-
return parseValueExpressionList(
|
|
9
|
+
return parseValueExpressionList(arg);
|
|
10
10
|
}
|
|
11
11
|
else {
|
|
12
|
-
return parseValueExpression(
|
|
12
|
+
return parseValueExpression(arg);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
export function parseValueExpression(
|
|
15
|
+
export function parseValueExpression(exp) {
|
|
16
16
|
if (isComplexExpression(exp)) {
|
|
17
|
-
return parseComplexExpression(
|
|
17
|
+
return parseComplexExpression(exp);
|
|
18
18
|
}
|
|
19
19
|
return ValueNode.create(exp);
|
|
20
20
|
}
|
|
21
|
-
function parseValueExpressionList(
|
|
21
|
+
function parseValueExpressionList(arg) {
|
|
22
22
|
if (arg.some(isComplexExpression)) {
|
|
23
|
-
return ValueListNode.create(arg.map((it) => parseValueExpression(
|
|
23
|
+
return ValueListNode.create(arg.map((it) => parseValueExpression(it)));
|
|
24
24
|
}
|
|
25
25
|
return PrimitiveValueListNode.create(arg);
|
|
26
26
|
}
|
|
@@ -5,7 +5,6 @@ import { InsertQueryBuilder } from '../query-builder/insert-query-builder.js';
|
|
|
5
5
|
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
6
6
|
import { QueryCreator } from '../query-creator.js';
|
|
7
7
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
8
|
-
import { ParseContext } from './parse-context.js';
|
|
9
8
|
export declare type CommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB>) => CommonTableExpressionOutput<DB, CN>;
|
|
10
9
|
export declare type RecursiveCommonTableExpression<DB, CN extends string> = (creator: QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpressionName<CN>>>) => CommonTableExpressionOutput<DB, CN>;
|
|
11
10
|
export declare type QueryCreatorWithCommonTableExpression<DB, CN extends string, CTE> = QueryCreator<DB & Record<ExtractTableFromCommonTableExpressionName<CN>, ExtractRowFromCommonTableExpression<CTE>>>;
|
|
@@ -37,5 +36,5 @@ declare type ExtractRowFromCommonTableExpressionName<CN extends string> = CN ext
|
|
|
37
36
|
* Parses a string like 'id, first_name' into a type 'id' | 'first_name'
|
|
38
37
|
*/
|
|
39
38
|
declare type ExtractColumnNamesFromColumnList<R extends string> = R extends `${infer C}, ${infer RS}` ? C | ExtractColumnNamesFromColumnList<RS> : R;
|
|
40
|
-
export declare function parseCommonTableExpression(
|
|
39
|
+
export declare function parseCommonTableExpression(name: string, expression: CommonTableExpression<any, any>): CommonTableExpressionNode;
|
|
41
40
|
export {};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/// <reference types="./with-parser.d.ts" />
|
|
2
2
|
import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
|
|
3
3
|
import { CommonTableExpressionNameNode } from '../operation-node/common-table-expression-name-node.js';
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
import { createQueryCreator } from './parse-utils.js';
|
|
5
|
+
export function parseCommonTableExpression(name, expression) {
|
|
6
|
+
const builder = expression(createQueryCreator());
|
|
6
7
|
return CommonTableExpressionNode.create(parseCommonTableExpressionName(name), builder.toOperationNode());
|
|
7
8
|
}
|
|
8
9
|
function parseCommonTableExpressionName(name) {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { DeleteQueryNode
|
|
1
|
+
import { DeleteQueryNode } from '../../operation-node/delete-query-node.js';
|
|
2
2
|
import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
|
|
3
3
|
import { SelectQueryNode } from '../../operation-node/select-query-node.js';
|
|
4
|
+
import { UpdateQueryNode } from '../../operation-node/update-query-node.js';
|
|
4
5
|
export declare class DeduplicateJoinsTransformer extends OperationNodeTransformer {
|
|
5
6
|
#private;
|
|
6
7
|
protected transformSelectQuery(node: SelectQueryNode): SelectQueryNode;
|
|
@@ -10,7 +10,6 @@ import { AnyRawBuilder, MergePartial, SingleResultType } from '../util/type-util
|
|
|
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
|
-
import { ParseContext } from '../parser/parse-context.js';
|
|
14
13
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
15
14
|
import { WhereInterface } from './where-interface.js';
|
|
16
15
|
import { JoinInterface } from './join-interface.js';
|
|
@@ -47,7 +46,13 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
47
46
|
* ```
|
|
48
47
|
*
|
|
49
48
|
* Operator can be any supported operator or if the typings don't support it
|
|
50
|
-
* you can always use
|
|
49
|
+
* you can always use
|
|
50
|
+
*
|
|
51
|
+
* ```ts
|
|
52
|
+
* sql`your operator`
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* The next example uses the `>` operator:
|
|
51
56
|
*
|
|
52
57
|
* ```ts
|
|
53
58
|
* const persons = await db
|
|
@@ -63,8 +68,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
63
68
|
* select * from "person" where "id" > $1
|
|
64
69
|
* ```
|
|
65
70
|
*
|
|
66
|
-
*
|
|
67
|
-
* conditional
|
|
71
|
+
* `where` methods don't change the type of the query. You can add
|
|
72
|
+
* conditional statements easily by doing something like this:
|
|
68
73
|
*
|
|
69
74
|
* ```ts
|
|
70
75
|
* let query = db
|
|
@@ -72,6 +77,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
72
77
|
* .selectAll()
|
|
73
78
|
*
|
|
74
79
|
* if (firstName) {
|
|
80
|
+
* // The query builder is immutable. Remember to reassign
|
|
81
|
+
* // the result back to the query variable.
|
|
75
82
|
* query = query.where('first_name', '=', firstName)
|
|
76
83
|
* }
|
|
77
84
|
*
|
|
@@ -79,8 +86,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
79
86
|
* ```
|
|
80
87
|
*
|
|
81
88
|
* This is true for basically all methods execpt the `select` and
|
|
82
|
-
* `returning
|
|
83
|
-
* query.
|
|
89
|
+
* `returning`, that __do__ change the return type of the query.
|
|
84
90
|
*
|
|
85
91
|
* Both the first and third argument can also be subqueries.
|
|
86
92
|
* A subquery is defined by passing a function and calling
|
|
@@ -117,7 +123,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
117
123
|
*
|
|
118
124
|
* A `where in` query can be built by using the `in` operator and an array
|
|
119
125
|
* of values. The values in the array can also be subqueries or raw
|
|
120
|
-
*
|
|
126
|
+
* {@link sql} expressions.
|
|
121
127
|
*
|
|
122
128
|
* ```ts
|
|
123
129
|
* const persons = await db
|
|
@@ -133,15 +139,17 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
133
139
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
134
140
|
* ```
|
|
135
141
|
*
|
|
136
|
-
* If everything else fails, you can always
|
|
142
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
137
143
|
* as any of the arguments, including the operator:
|
|
138
144
|
*
|
|
139
145
|
* ```ts
|
|
146
|
+
* import { sql } from 'kysely'
|
|
147
|
+
*
|
|
140
148
|
* const persons = await db
|
|
141
149
|
* .selectFrom('person')
|
|
142
150
|
* .selectAll()
|
|
143
151
|
* .where(
|
|
144
|
-
*
|
|
152
|
+
* sql`coalesce(first_name, last_name)`,
|
|
145
153
|
* 'like',
|
|
146
154
|
* '%' + name + '%',
|
|
147
155
|
* )
|
|
@@ -176,24 +184,25 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
176
184
|
* ```
|
|
177
185
|
*
|
|
178
186
|
* In all examples above the columns were known at compile time
|
|
179
|
-
* (except for the
|
|
180
|
-
* you to refer to columns that exist in the database **and**
|
|
181
|
-
* referred to in the current query and context.
|
|
187
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
188
|
+
* allows you to refer to columns that exist in the database **and**
|
|
189
|
+
* can be referred to in the current query and context.
|
|
182
190
|
*
|
|
183
191
|
* Sometimes you may want to refer to columns that come from the user
|
|
184
192
|
* input and thus are not available at compile time.
|
|
185
193
|
*
|
|
186
|
-
* You have two options,
|
|
194
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
187
195
|
* uses both:
|
|
188
196
|
*
|
|
189
197
|
* ```ts
|
|
198
|
+
* import { sql } from 'kysely'
|
|
190
199
|
* const { ref } = db.dynamic
|
|
191
200
|
*
|
|
192
201
|
* const persons = await db
|
|
193
202
|
* .selectFrom('person')
|
|
194
203
|
* .selectAll()
|
|
195
204
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
196
|
-
* .orWhere(
|
|
205
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
197
206
|
* .execute()
|
|
198
207
|
* ```
|
|
199
208
|
*/
|
|
@@ -327,13 +336,14 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
327
336
|
/**
|
|
328
337
|
* Adds a `where exists` clause to the query.
|
|
329
338
|
*
|
|
330
|
-
* You can either use a subquery or a raw
|
|
339
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
331
340
|
*
|
|
332
341
|
* ### Examples
|
|
333
342
|
*
|
|
334
343
|
* The query below selets all persons that own a pet named Catto:
|
|
335
344
|
*
|
|
336
345
|
* ```ts
|
|
346
|
+
* const petName = 'Catto'
|
|
337
347
|
* const persons = await db
|
|
338
348
|
* .selectFrom('person')
|
|
339
349
|
* .selectAll()
|
|
@@ -341,7 +351,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
341
351
|
* .selectFrom('pet')
|
|
342
352
|
* .select('pet.id')
|
|
343
353
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
344
|
-
* .where('pet.name', '=',
|
|
354
|
+
* .where('pet.name', '=', petName)
|
|
345
355
|
* )
|
|
346
356
|
* .execute()
|
|
347
357
|
* ```
|
|
@@ -358,16 +368,16 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
358
368
|
* )
|
|
359
369
|
* ```
|
|
360
370
|
*
|
|
361
|
-
* The same query as in the previous example but with using raw:
|
|
371
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
362
372
|
*
|
|
363
373
|
* ```ts
|
|
374
|
+
* import { sql } from 'kysely'
|
|
375
|
+
*
|
|
376
|
+
* const petName = 'Catto'
|
|
364
377
|
* db.selectFrom('person')
|
|
365
378
|
* .selectAll()
|
|
366
379
|
* .whereExists(
|
|
367
|
-
*
|
|
368
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
369
|
-
* ['Catto']
|
|
370
|
-
* )
|
|
380
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
371
381
|
* )
|
|
372
382
|
* ```
|
|
373
383
|
*
|
|
@@ -565,6 +575,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
565
575
|
* Return arbitrary expressions:
|
|
566
576
|
*
|
|
567
577
|
* ```ts
|
|
578
|
+
* import { sql } from 'kysely'
|
|
579
|
+
*
|
|
568
580
|
* const { id, full_name, first_pet_id } = await db
|
|
569
581
|
* .insertInto('person')
|
|
570
582
|
* .values({
|
|
@@ -573,7 +585,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
573
585
|
* })
|
|
574
586
|
* .returning([
|
|
575
587
|
* 'id as id',
|
|
576
|
-
*
|
|
588
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
577
589
|
* (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
|
|
578
590
|
* ])
|
|
579
591
|
* .executeTakeFirst()
|
|
@@ -736,5 +748,4 @@ export interface DeleteQueryBuilderProps {
|
|
|
736
748
|
readonly queryId: QueryId;
|
|
737
749
|
readonly queryNode: DeleteQueryNode;
|
|
738
750
|
readonly executor: QueryExecutor;
|
|
739
|
-
readonly parseContext: ParseContext;
|
|
740
751
|
}
|
|
@@ -18,79 +18,79 @@ export class DeleteQueryBuilder {
|
|
|
18
18
|
where(...args) {
|
|
19
19
|
return new DeleteQueryBuilder({
|
|
20
20
|
...this.#props,
|
|
21
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(
|
|
21
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
whereRef(lhs, op, rhs) {
|
|
25
25
|
return new DeleteQueryBuilder({
|
|
26
26
|
...this.#props,
|
|
27
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(
|
|
27
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
orWhere(...args) {
|
|
31
31
|
return new DeleteQueryBuilder({
|
|
32
32
|
...this.#props,
|
|
33
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(
|
|
33
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
orWhereRef(lhs, op, rhs) {
|
|
37
37
|
return new DeleteQueryBuilder({
|
|
38
38
|
...this.#props,
|
|
39
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(
|
|
39
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
whereExists(arg) {
|
|
43
43
|
return new DeleteQueryBuilder({
|
|
44
44
|
...this.#props,
|
|
45
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(
|
|
45
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
whereNotExists(arg) {
|
|
49
49
|
return new DeleteQueryBuilder({
|
|
50
50
|
...this.#props,
|
|
51
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(
|
|
51
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
orWhereExists(arg) {
|
|
55
55
|
return new DeleteQueryBuilder({
|
|
56
56
|
...this.#props,
|
|
57
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(
|
|
57
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
orWhereNotExists(arg) {
|
|
61
61
|
return new DeleteQueryBuilder({
|
|
62
62
|
...this.#props,
|
|
63
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(
|
|
63
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
innerJoin(...args) {
|
|
67
67
|
return new DeleteQueryBuilder({
|
|
68
68
|
...this.#props,
|
|
69
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
69
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
|
|
70
70
|
});
|
|
71
71
|
}
|
|
72
72
|
leftJoin(...args) {
|
|
73
73
|
return new DeleteQueryBuilder({
|
|
74
74
|
...this.#props,
|
|
75
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
75
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
78
|
rightJoin(...args) {
|
|
79
79
|
return new DeleteQueryBuilder({
|
|
80
80
|
...this.#props,
|
|
81
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
81
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
fullJoin(...args) {
|
|
85
85
|
return new DeleteQueryBuilder({
|
|
86
86
|
...this.#props,
|
|
87
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
87
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
returning(selection) {
|
|
91
91
|
return new DeleteQueryBuilder({
|
|
92
92
|
...this.#props,
|
|
93
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(
|
|
93
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
returningAll() {
|
|
@@ -136,7 +136,7 @@ export class DeleteQueryBuilder {
|
|
|
136
136
|
orderBy(orderBy, direction) {
|
|
137
137
|
return new DeleteQueryBuilder({
|
|
138
138
|
...this.#props,
|
|
139
|
-
queryNode: DeleteQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(
|
|
139
|
+
queryNode: DeleteQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(orderBy, direction)),
|
|
140
140
|
});
|
|
141
141
|
}
|
|
142
142
|
/**
|
|
@@ -263,7 +263,7 @@ export class DeleteQueryBuilder {
|
|
|
263
263
|
const compildQuery = this.compile();
|
|
264
264
|
const query = compildQuery.query;
|
|
265
265
|
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
266
|
-
if (this.#props.
|
|
266
|
+
if (this.#props.executor.adapter.supportsReturning && query.returning) {
|
|
267
267
|
return result.rows;
|
|
268
268
|
}
|
|
269
269
|
else {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { SelectQueryBuilder } from './select-query-builder.js';
|
|
2
2
|
import { TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
|
|
3
|
-
import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js';
|
|
4
|
-
import { ParseContext } from '../parser/parse-context.js';
|
|
5
3
|
import { FunctionBuilder } from './function-builder.js';
|
|
6
4
|
import { ExtractTypeFromReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
7
5
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
6
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
8
7
|
export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
9
8
|
#private;
|
|
10
9
|
constructor(props: ExpressionBuilderProps);
|
|
@@ -90,10 +89,6 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
90
89
|
* See {@link QueryCreator.withSchema}
|
|
91
90
|
*/
|
|
92
91
|
withSchema(schema: string): ExpressionBuilder<DB, TB>;
|
|
93
|
-
/**
|
|
94
|
-
* See {@link QueryCreator.raw}.
|
|
95
|
-
*/
|
|
96
|
-
raw<T = unknown>(sql: string, parameters?: unknown[]): RawBuilder<T>;
|
|
97
92
|
/**
|
|
98
93
|
* This can be used to reference columns.
|
|
99
94
|
*
|
|
@@ -115,21 +110,17 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
115
110
|
* )
|
|
116
111
|
* ```
|
|
117
112
|
*
|
|
118
|
-
* In the next example we use `ref` in a raw expression. Unless you
|
|
113
|
+
* In the next example we use `ref` in a raw sql expression. Unless you
|
|
119
114
|
* want to be as type-safe as possible, this is probably overkill:
|
|
120
115
|
*
|
|
121
116
|
* ```ts
|
|
122
117
|
* db.update('pet').set({
|
|
123
|
-
* name: (eb) => eb.
|
|
124
|
-
* eb.ref('pet.name'),
|
|
125
|
-
* suffix,
|
|
126
|
-
* ])
|
|
118
|
+
* name: (eb) => sql`concat(${eb.ref('pet.name')}, ${suffix})`
|
|
127
119
|
* })
|
|
128
120
|
* ```
|
|
129
121
|
*/
|
|
130
122
|
ref<RE extends StringReference<DB, TB>>(reference: RE): RawBuilder<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
131
123
|
}
|
|
132
124
|
export interface ExpressionBuilderProps {
|
|
133
|
-
readonly executor:
|
|
134
|
-
readonly parseContext: ParseContext;
|
|
125
|
+
readonly executor: QueryExecutor;
|
|
135
126
|
}
|
|
@@ -4,9 +4,11 @@ import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
|
4
4
|
import { parseTableExpressionOrList, } from '../parser/table-parser.js';
|
|
5
5
|
import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
|
|
6
6
|
import { createQueryId } from '../util/query-id.js';
|
|
7
|
-
import { freeze } from '../util/object-utils.js';
|
|
8
7
|
import { FunctionBuilder } from './function-builder.js';
|
|
8
|
+
import { parseStringReference, } from '../parser/reference-parser.js';
|
|
9
9
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
10
|
+
import { freeze } from '../util/object-utils.js';
|
|
11
|
+
import { RawNode } from '../operation-node/raw-node.js';
|
|
10
12
|
export class ExpressionBuilder {
|
|
11
13
|
#props;
|
|
12
14
|
constructor(props) {
|
|
@@ -44,14 +46,13 @@ export class ExpressionBuilder {
|
|
|
44
46
|
* ```
|
|
45
47
|
*/
|
|
46
48
|
get fn() {
|
|
47
|
-
return new FunctionBuilder(
|
|
49
|
+
return new FunctionBuilder();
|
|
48
50
|
}
|
|
49
51
|
selectFrom(table) {
|
|
50
52
|
return new SelectQueryBuilder({
|
|
51
53
|
queryId: createQueryId(),
|
|
52
54
|
executor: this.#props.executor,
|
|
53
|
-
|
|
54
|
-
queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#props.parseContext, table)),
|
|
55
|
+
queryNode: SelectQueryNode.create(parseTableExpressionOrList(table)),
|
|
55
56
|
});
|
|
56
57
|
}
|
|
57
58
|
/**
|
|
@@ -63,17 +64,6 @@ export class ExpressionBuilder {
|
|
|
63
64
|
executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
|
|
64
65
|
});
|
|
65
66
|
}
|
|
66
|
-
/**
|
|
67
|
-
* See {@link QueryCreator.raw}.
|
|
68
|
-
*/
|
|
69
|
-
raw(sql, parameters) {
|
|
70
|
-
return new RawBuilder({
|
|
71
|
-
queryId: createQueryId(),
|
|
72
|
-
executor: this.#props.executor,
|
|
73
|
-
sql,
|
|
74
|
-
parameters,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
67
|
/**
|
|
78
68
|
* This can be used to reference columns.
|
|
79
69
|
*
|
|
@@ -95,19 +85,20 @@ export class ExpressionBuilder {
|
|
|
95
85
|
* )
|
|
96
86
|
* ```
|
|
97
87
|
*
|
|
98
|
-
* In the next example we use `ref` in a raw expression. Unless you
|
|
88
|
+
* In the next example we use `ref` in a raw sql expression. Unless you
|
|
99
89
|
* want to be as type-safe as possible, this is probably overkill:
|
|
100
90
|
*
|
|
101
91
|
* ```ts
|
|
102
92
|
* db.update('pet').set({
|
|
103
|
-
* name: (eb) => eb.
|
|
104
|
-
* eb.ref('pet.name'),
|
|
105
|
-
* suffix,
|
|
106
|
-
* ])
|
|
93
|
+
* name: (eb) => sql`concat(${eb.ref('pet.name')}, ${suffix})`
|
|
107
94
|
* })
|
|
108
95
|
* ```
|
|
109
96
|
*/
|
|
110
97
|
ref(reference) {
|
|
111
|
-
return
|
|
98
|
+
return new RawBuilder({
|
|
99
|
+
queryId: createQueryId(),
|
|
100
|
+
plugins: this.#props.executor.plugins,
|
|
101
|
+
rawNode: RawNode.createWithChild(parseStringReference(reference)),
|
|
102
|
+
});
|
|
112
103
|
}
|
|
113
104
|
}
|