kysely 0.27.2 → 0.27.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/dialect/database-introspector.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +30 -4
- package/dist/cjs/expression/expression-builder.js +5 -0
- package/dist/cjs/index.d.ts +7 -1
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/operation-node/add-index-node.js +1 -1
- package/dist/cjs/operation-node/cast-node.d.ts +13 -0
- package/dist/cjs/operation-node/cast-node.js +19 -0
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
- package/dist/cjs/operation-node/data-type-node.js +55 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
- package/dist/cjs/operation-node/delete-query-node.js +12 -0
- package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
- package/dist/cjs/operation-node/fetch-node.js +19 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
- package/dist/cjs/operation-node/insert-query-node.js +5 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -1
- package/dist/cjs/operation-node/matched-node.d.ts +13 -0
- package/dist/cjs/operation-node/matched-node.js +19 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
- package/dist/cjs/operation-node/merge-query-node.js +45 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +10 -3
- package/dist/cjs/operation-node/query-node.js +15 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/top-node.d.ts +14 -0
- package/dist/cjs/operation-node/top-node.js +19 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
- package/dist/cjs/operation-node/update-query-node.js +11 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +2 -2
- package/dist/cjs/parser/data-type-parser.js +7 -3
- package/dist/cjs/parser/fetch-parser.d.ts +2 -0
- package/dist/cjs/parser/fetch-parser.js +18 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
- package/dist/cjs/parser/merge-parser.d.ts +9 -0
- package/dist/cjs/parser/merge-parser.js +32 -0
- package/dist/cjs/parser/table-parser.d.ts +4 -3
- package/dist/cjs/parser/top-parser.d.ts +2 -0
- package/dist/cjs/parser/top-parser.js +20 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
- package/dist/cjs/query-builder/delete-query-builder.js +120 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +71 -0
- package/dist/cjs/query-builder/insert-query-builder.js +82 -0
- package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
- package/dist/cjs/query-builder/merge-query-builder.js +518 -0
- package/dist/cjs/query-builder/merge-result.d.ts +4 -0
- package/dist/cjs/query-builder/merge-result.js +10 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
- package/dist/cjs/query-builder/select-query-builder.js +14 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +80 -0
- package/dist/cjs/query-builder/update-query-builder.js +98 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
- package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
- package/dist/cjs/query-creator.d.ts +40 -2
- package/dist/cjs/query-creator.js +9 -0
- package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
- package/dist/cjs/schema/column-definition-builder.js +15 -1
- package/dist/cjs/util/infer-result.d.ts +2 -1
- package/dist/cjs/util/type-utils.d.ts +3 -2
- package/dist/esm/dialect/database-introspector.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +1 -1
- package/dist/esm/expression/expression-builder.d.ts +30 -4
- package/dist/esm/expression/expression-builder.js +5 -0
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/operation-node/add-index-node.js +1 -1
- package/dist/esm/operation-node/cast-node.d.ts +13 -0
- package/dist/esm/operation-node/cast-node.js +17 -0
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/data-type-node.d.ts +5 -1
- package/dist/esm/operation-node/data-type-node.js +53 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
- package/dist/esm/operation-node/delete-query-node.js +12 -0
- package/dist/esm/operation-node/fetch-node.d.ts +15 -0
- package/dist/esm/operation-node/fetch-node.js +17 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
- package/dist/esm/operation-node/insert-query-node.js +5 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -1
- package/dist/esm/operation-node/matched-node.d.ts +13 -0
- package/dist/esm/operation-node/matched-node.js +17 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
- package/dist/esm/operation-node/merge-query-node.js +43 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
- package/dist/esm/operation-node/operation-node-transformer.js +50 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
- package/dist/esm/operation-node/operation-node-visitor.js +5 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/query-node.d.ts +10 -3
- package/dist/esm/operation-node/query-node.js +15 -1
- package/dist/esm/operation-node/select-query-node.d.ts +5 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/top-node.d.ts +14 -0
- package/dist/esm/operation-node/top-node.js +17 -0
- package/dist/esm/operation-node/update-query-node.d.ts +7 -1
- package/dist/esm/operation-node/update-query-node.js +11 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.js +2 -2
- package/dist/esm/parser/data-type-parser.js +8 -4
- package/dist/esm/parser/fetch-parser.d.ts +2 -0
- package/dist/esm/parser/fetch-parser.js +15 -0
- package/dist/esm/parser/insert-values-parser.d.ts +3 -3
- package/dist/esm/parser/merge-parser.d.ts +9 -0
- package/dist/esm/parser/merge-parser.js +28 -0
- package/dist/esm/parser/table-parser.d.ts +4 -3
- package/dist/esm/parser/top-parser.d.ts +2 -0
- package/dist/esm/parser/top-parser.js +17 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
- package/dist/esm/query-builder/delete-query-builder.js +120 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +71 -0
- package/dist/esm/query-builder/insert-query-builder.js +82 -0
- package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
- package/dist/esm/query-builder/merge-query-builder.js +512 -0
- package/dist/esm/query-builder/merge-result.d.ts +4 -0
- package/dist/esm/query-builder/merge-result.js +7 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
- package/dist/esm/query-builder/select-query-builder.js +14 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +80 -0
- package/dist/esm/query-builder/update-query-builder.js +98 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
- package/dist/esm/query-compiler/default-query-compiler.js +94 -10
- package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
- package/dist/esm/query-creator.d.ts +40 -2
- package/dist/esm/query-creator.js +10 -1
- package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
- package/dist/esm/schema/column-definition-builder.d.ts +13 -1
- package/dist/esm/schema/column-definition-builder.js +15 -1
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/type-utils.d.ts +3 -2
- package/package.json +22 -21
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { DeleteResult } from '../query-builder/delete-result.js';
|
|
2
2
|
import { InsertResult } from '../query-builder/insert-result.js';
|
|
3
|
+
import { MergeResult } from '../query-builder/merge-result.js';
|
|
3
4
|
import { UpdateResult } from '../query-builder/update-result.js';
|
|
4
5
|
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
5
6
|
import { Compilable } from './compilable.js';
|
|
@@ -43,5 +44,5 @@ import { Simplify } from './type-utils.js';
|
|
|
43
44
|
* ```
|
|
44
45
|
*/
|
|
45
46
|
export type InferResult<C extends Compilable<any> | CompiledQuery<any>> = C extends Compilable<infer O> ? ResolveResult<O> : C extends CompiledQuery<infer O> ? ResolveResult<O> : never;
|
|
46
|
-
type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult ? O : Simplify<O>[];
|
|
47
|
+
type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult | MergeResult ? O : Simplify<O>[];
|
|
47
48
|
export {};
|
|
@@ -2,6 +2,7 @@ import { InsertResult } from '../query-builder/insert-result.js';
|
|
|
2
2
|
import { DeleteResult } from '../query-builder/delete-result.js';
|
|
3
3
|
import { UpdateResult } from '../query-builder/update-result.js';
|
|
4
4
|
import { KyselyTypeError } from './type-error.js';
|
|
5
|
+
import { MergeResult } from '../query-builder/merge-result.js';
|
|
5
6
|
/**
|
|
6
7
|
* Given a database type and a union of table names in that db, returns
|
|
7
8
|
* a union type with all possible column names.
|
|
@@ -88,8 +89,8 @@ export type AnyAliasedColumnWithTable<DB, TB extends keyof DB> = `${AnyColumnWit
|
|
|
88
89
|
* Extracts the item type of an array.
|
|
89
90
|
*/
|
|
90
91
|
export type ArrayItemType<T> = T extends ReadonlyArray<infer I> ? I : never;
|
|
91
|
-
export type SimplifySingleResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O> | undefined;
|
|
92
|
-
export type SimplifyResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : Simplify<O>;
|
|
92
|
+
export type SimplifySingleResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O extends MergeResult ? O : Simplify<O> | undefined;
|
|
93
|
+
export type SimplifyResult<O> = O extends InsertResult ? O : O extends DeleteResult ? O : O extends UpdateResult ? O : O extends MergeResult ? O : Simplify<O>;
|
|
93
94
|
export type Simplify<T> = DrainOuterGeneric<{
|
|
94
95
|
[K in keyof T]: T[K];
|
|
95
96
|
} & {}>;
|
|
@@ -14,8 +14,12 @@ export class MssqlIntrospector {
|
|
|
14
14
|
.selectFrom('sys.tables as tables')
|
|
15
15
|
.leftJoin('sys.schemas as table_schemas', 'table_schemas.schema_id', 'tables.schema_id')
|
|
16
16
|
.innerJoin('sys.columns as columns', 'columns.object_id', 'tables.object_id')
|
|
17
|
-
.innerJoin('sys.types as types', 'types.
|
|
17
|
+
.innerJoin('sys.types as types', 'types.user_type_id', 'columns.user_type_id')
|
|
18
18
|
.leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
|
|
19
|
+
.leftJoin('sys.extended_properties as comments', (join) => join
|
|
20
|
+
.onRef('comments.major_id', '=', 'tables.object_id')
|
|
21
|
+
.onRef('comments.minor_id', '=', 'columns.column_id')
|
|
22
|
+
.on('comments.name', '=', 'MS_Description'))
|
|
19
23
|
.$if(!options.withInternalKyselyTables, (qb) => qb
|
|
20
24
|
.where('tables.name', '!=', DEFAULT_MIGRATION_TABLE)
|
|
21
25
|
.where('tables.name', '!=', DEFAULT_MIGRATION_LOCK_TABLE))
|
|
@@ -36,13 +40,18 @@ export class MssqlIntrospector {
|
|
|
36
40
|
'types.is_nullable as type_is_nullable',
|
|
37
41
|
'types.name as type_name',
|
|
38
42
|
'type_schemas.name as type_schema_name',
|
|
43
|
+
'comments.value as column_comment',
|
|
39
44
|
])
|
|
40
45
|
.unionAll(this.#db
|
|
41
46
|
.selectFrom('sys.views as views')
|
|
42
47
|
.leftJoin('sys.schemas as view_schemas', 'view_schemas.schema_id', 'views.schema_id')
|
|
43
48
|
.innerJoin('sys.columns as columns', 'columns.object_id', 'views.object_id')
|
|
44
|
-
.innerJoin('sys.types as types', 'types.
|
|
49
|
+
.innerJoin('sys.types as types', 'types.user_type_id', 'columns.user_type_id')
|
|
45
50
|
.leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
|
|
51
|
+
.leftJoin('sys.extended_properties as comments', (join) => join
|
|
52
|
+
.onRef('comments.major_id', '=', 'views.object_id')
|
|
53
|
+
.onRef('comments.minor_id', '=', 'columns.column_id')
|
|
54
|
+
.on('comments.name', '=', 'MS_Description'))
|
|
46
55
|
.select([
|
|
47
56
|
'views.name as table_name',
|
|
48
57
|
'views.type as table_type',
|
|
@@ -57,6 +66,7 @@ export class MssqlIntrospector {
|
|
|
57
66
|
'types.is_nullable as type_is_nullable',
|
|
58
67
|
'types.name as type_name',
|
|
59
68
|
'type_schemas.name as type_schema_name',
|
|
69
|
+
'comments.value as column_comment',
|
|
60
70
|
]))
|
|
61
71
|
.orderBy('table_schema_name')
|
|
62
72
|
.orderBy('table_name')
|
|
@@ -84,6 +94,7 @@ export class MssqlIntrospector {
|
|
|
84
94
|
isAutoIncrementing: rawColumn.column_is_identity,
|
|
85
95
|
isNullable: rawColumn.column_is_nullable && rawColumn.type_is_nullable,
|
|
86
96
|
name: rawColumn.column_name,
|
|
97
|
+
comment: rawColumn.column_comment ?? undefined,
|
|
87
98
|
}));
|
|
88
99
|
}
|
|
89
100
|
return Object.values(tableDictionary);
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { AddColumnNode } from '../../operation-node/add-column-node.js';
|
|
2
2
|
import { AlterTableColumnAlterationNode } from '../../operation-node/alter-table-node.js';
|
|
3
3
|
import { DropColumnNode } from '../../operation-node/drop-column-node.js';
|
|
4
|
+
import { OffsetNode } from '../../operation-node/offset-node.js';
|
|
5
|
+
import { MergeQueryNode } from '../../operation-node/merge-query-node.js';
|
|
4
6
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
5
7
|
export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
6
8
|
protected getCurrentParameterPlaceholder(): string;
|
|
9
|
+
protected visitOffset(node: OffsetNode): void;
|
|
7
10
|
protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
|
|
8
11
|
protected visitAddColumn(node: AddColumnNode): void;
|
|
9
12
|
protected visitDropColumn(node: DropColumnNode): void;
|
|
13
|
+
protected visitMergeQuery(node: MergeQueryNode): void;
|
|
10
14
|
protected announcesNewColumnDataType(): boolean;
|
|
11
15
|
}
|
|
@@ -4,6 +4,10 @@ export class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
|
4
4
|
getCurrentParameterPlaceholder() {
|
|
5
5
|
return `@${this.numParameters}`;
|
|
6
6
|
}
|
|
7
|
+
visitOffset(node) {
|
|
8
|
+
super.visitOffset(node);
|
|
9
|
+
this.append(' rows');
|
|
10
|
+
}
|
|
7
11
|
// mssql allows multi-column alterations in a single statement,
|
|
8
12
|
// but you can only use the command keyword/s once.
|
|
9
13
|
// it also doesn't support multiple kinds of commands in the same
|
|
@@ -55,6 +59,10 @@ export class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
|
55
59
|
visitDropColumn(node) {
|
|
56
60
|
this.visitNode(node.column);
|
|
57
61
|
}
|
|
62
|
+
visitMergeQuery(node) {
|
|
63
|
+
super.visitMergeQuery(node);
|
|
64
|
+
this.append(';');
|
|
65
|
+
}
|
|
58
66
|
announcesNewColumnDataType() {
|
|
59
67
|
return false;
|
|
60
68
|
}
|
|
@@ -31,6 +31,7 @@ export class MysqlIntrospector {
|
|
|
31
31
|
'columns.IS_NULLABLE',
|
|
32
32
|
'columns.DATA_TYPE',
|
|
33
33
|
'columns.EXTRA',
|
|
34
|
+
'columns.COLUMN_COMMENT',
|
|
34
35
|
])
|
|
35
36
|
.where('columns.TABLE_SCHEMA', '=', sql `database()`)
|
|
36
37
|
.orderBy('columns.TABLE_NAME')
|
|
@@ -67,6 +68,7 @@ export class MysqlIntrospector {
|
|
|
67
68
|
isNullable: it.IS_NULLABLE === 'YES',
|
|
68
69
|
isAutoIncrementing: it.EXTRA.toLowerCase().includes('auto_increment'),
|
|
69
70
|
hasDefaultValue: it.COLUMN_DEFAULT !== null,
|
|
71
|
+
comment: it.COLUMN_COMMENT === '' ? undefined : it.COLUMN_COMMENT,
|
|
70
72
|
}));
|
|
71
73
|
return tables;
|
|
72
74
|
}, []);
|
|
@@ -52,7 +52,7 @@ export interface PostgresCursor<T> {
|
|
|
52
52
|
}
|
|
53
53
|
export type PostgresCursorConstructor = new <T>(sql: string, parameters: unknown[]) => PostgresCursor<T>;
|
|
54
54
|
export interface PostgresQueryResult<R> {
|
|
55
|
-
command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT';
|
|
55
|
+
command: 'UPDATE' | 'DELETE' | 'INSERT' | 'SELECT' | 'MERGE';
|
|
56
56
|
rowCount: number;
|
|
57
57
|
rows: R[];
|
|
58
58
|
}
|
|
@@ -71,7 +71,8 @@ class PostgresConnection {
|
|
|
71
71
|
]);
|
|
72
72
|
if (result.command === 'INSERT' ||
|
|
73
73
|
result.command === 'UPDATE' ||
|
|
74
|
-
result.command === 'DELETE'
|
|
74
|
+
result.command === 'DELETE' ||
|
|
75
|
+
result.command === 'MERGE') {
|
|
75
76
|
const numAffectedRows = BigInt(result.rowCount);
|
|
76
77
|
return {
|
|
77
78
|
// TODO: remove.
|
|
@@ -36,6 +36,7 @@ export class PostgresIntrospector {
|
|
|
36
36
|
'ns.nspname as schema',
|
|
37
37
|
'typ.typname as type',
|
|
38
38
|
'dtns.nspname as type_schema',
|
|
39
|
+
sql `col_description(a.attrelid, a.attnum)`.as('column_description'),
|
|
39
40
|
// Detect if the column is auto incrementing by finding the sequence
|
|
40
41
|
// that is created for `serial` and `bigserial` columns.
|
|
41
42
|
this.#db
|
|
@@ -90,6 +91,7 @@ export class PostgresIntrospector {
|
|
|
90
91
|
isNullable: !it.not_null,
|
|
91
92
|
isAutoIncrementing: !!it.auto_incrementing,
|
|
92
93
|
hasDefaultValue: it.has_default,
|
|
94
|
+
comment: it.column_description ?? undefined,
|
|
93
95
|
}));
|
|
94
96
|
return tables;
|
|
95
97
|
}, []);
|
|
@@ -14,7 +14,7 @@ export interface QueryResult<O> {
|
|
|
14
14
|
*/
|
|
15
15
|
readonly numUpdatedOrDeletedRows?: bigint;
|
|
16
16
|
/**
|
|
17
|
-
* This is defined for insert, update and
|
|
17
|
+
* This is defined for insert, update, delete and merge queries and contains
|
|
18
18
|
* the number of rows the query inserted/updated/deleted.
|
|
19
19
|
*/
|
|
20
20
|
readonly numAffectedRows?: bigint;
|
|
@@ -15,6 +15,7 @@ import { OperandExpression } from '../parser/expression-parser.js';
|
|
|
15
15
|
import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js';
|
|
16
16
|
import { Selectable } from '../util/column-type.js';
|
|
17
17
|
import { KyselyTypeError } from '../util/type-error.js';
|
|
18
|
+
import { DataTypeExpression } from '../parser/data-type-parser.js';
|
|
18
19
|
export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
19
20
|
/**
|
|
20
21
|
* Creates a binary expression.
|
|
@@ -194,7 +195,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
194
195
|
selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
195
196
|
selectFrom<TE extends TableExpression<DB, TB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
196
197
|
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
197
|
-
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
198
|
+
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
|
|
198
199
|
selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
199
200
|
/**
|
|
200
201
|
* Creates a `case` statement/operator.
|
|
@@ -218,7 +219,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
218
219
|
* .when('gender', '=', 'female')
|
|
219
220
|
* .then(
|
|
220
221
|
* eb
|
|
221
|
-
* .case('
|
|
222
|
+
* .case('maritalStatus')
|
|
222
223
|
* .when('single')
|
|
223
224
|
* .then('Ms.')
|
|
224
225
|
* .else('Mrs.')
|
|
@@ -238,7 +239,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
238
239
|
* case
|
|
239
240
|
* when "gender" = $1 then $2
|
|
240
241
|
* when "gender" = $3 then
|
|
241
|
-
* case "
|
|
242
|
+
* case "maritalStatus"
|
|
242
243
|
* when $4 then $5
|
|
243
244
|
* else $6
|
|
244
245
|
* end
|
|
@@ -775,7 +776,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
775
776
|
* ```ts
|
|
776
777
|
* db.selectFrom('person')
|
|
777
778
|
* .selectAll('person')
|
|
778
|
-
* .where((eb) => parens(
|
|
779
|
+
* .where((eb) => eb.parens(
|
|
779
780
|
* eb('age', '=', 1).or('age', '=', 2))
|
|
780
781
|
* ).and(
|
|
781
782
|
* eb('first_name', '=', 'Jennifer').or('first_name', '=', 'Arnold')
|
|
@@ -792,6 +793,31 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
792
793
|
*/
|
|
793
794
|
parens<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression, VE extends OperandValueExpressionOrList<DB, TB, RE>>(lhs: RE, op: OP, rhs: VE): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
794
795
|
parens<T>(expr: Expression<T>): ExpressionWrapper<DB, TB, T>;
|
|
796
|
+
/**
|
|
797
|
+
* Creates a `cast(expr as dataType)` expression.
|
|
798
|
+
*
|
|
799
|
+
* Since Kysely can't know the mapping between javascript and database types,
|
|
800
|
+
* you need to provide both explicitly.
|
|
801
|
+
*
|
|
802
|
+
* ### Examples
|
|
803
|
+
*
|
|
804
|
+
* ```ts
|
|
805
|
+
* db.selectFrom('person')
|
|
806
|
+
* .select((eb) => [
|
|
807
|
+
* 'id',
|
|
808
|
+
* 'first_name',
|
|
809
|
+
* eb.cast<number>('age', 'integer').as('age')
|
|
810
|
+
* ])
|
|
811
|
+
* ```
|
|
812
|
+
*
|
|
813
|
+
* The generated SQL (PostgreSQL):
|
|
814
|
+
*
|
|
815
|
+
* ```sql
|
|
816
|
+
* select cast("age" as integer) as "age"
|
|
817
|
+
* from "person"
|
|
818
|
+
* ```
|
|
819
|
+
*/
|
|
820
|
+
cast<T, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE, dataType: DataTypeExpression): ExpressionWrapper<DB, TB, T>;
|
|
795
821
|
/**
|
|
796
822
|
* See {@link QueryCreator.withSchema}
|
|
797
823
|
*
|
|
@@ -21,6 +21,8 @@ import { BinaryOperationNode } from '../operation-node/binary-operation-node.js'
|
|
|
21
21
|
import { AndNode } from '../operation-node/and-node.js';
|
|
22
22
|
import { TupleNode } from '../operation-node/tuple-node.js';
|
|
23
23
|
import { JSONPathNode } from '../operation-node/json-path-node.js';
|
|
24
|
+
import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
|
|
25
|
+
import { CastNode } from '../operation-node/cast-node.js';
|
|
24
26
|
export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
25
27
|
function binary(lhs, op, rhs) {
|
|
26
28
|
return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
|
|
@@ -107,6 +109,9 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
|
107
109
|
return new ExpressionWrapper(ParensNode.create(node));
|
|
108
110
|
}
|
|
109
111
|
},
|
|
112
|
+
cast(expr, dataType) {
|
|
113
|
+
return new ExpressionWrapper(CastNode.create(parseReferenceExpression(expr), parseDataTypeExpression(dataType)));
|
|
114
|
+
},
|
|
110
115
|
withSchema(schema) {
|
|
111
116
|
return createExpressionBuilder(executor.withPluginAtFront(new WithSchemaPlugin(schema)));
|
|
112
117
|
},
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ export * from './query-builder/on-conflict-builder.js';
|
|
|
20
20
|
export * from './query-builder/aggregate-function-builder.js';
|
|
21
21
|
export * from './query-builder/case-builder.js';
|
|
22
22
|
export * from './query-builder/json-path-builder.js';
|
|
23
|
+
export * from './query-builder/merge-query-builder.js';
|
|
24
|
+
export * from './query-builder/merge-result.js';
|
|
23
25
|
export * from './raw-builder/raw-builder.js';
|
|
24
26
|
export * from './raw-builder/sql.js';
|
|
25
27
|
export * from './query-executor/query-executor.js';
|
|
@@ -177,6 +179,10 @@ export * from './operation-node/json-path-leg-node.js';
|
|
|
177
179
|
export * from './operation-node/json-path-node.js';
|
|
178
180
|
export * from './operation-node/json-operator-chain-node.js';
|
|
179
181
|
export * from './operation-node/tuple-node.js';
|
|
182
|
+
export * from './operation-node/merge-query-node.js';
|
|
183
|
+
export * from './operation-node/matched-node.js';
|
|
184
|
+
export * from './operation-node/fetch-node.js';
|
|
185
|
+
export * from './operation-node/top-node.js';
|
|
180
186
|
export * from './util/column-type.js';
|
|
181
187
|
export * from './util/compilable.js';
|
|
182
188
|
export * from './util/explainable.js';
|
|
@@ -188,7 +194,7 @@ export { logOnce } from './util/log-once.js';
|
|
|
188
194
|
export { SelectExpression, SelectCallback, SelectArg, Selection, CallbackSelection, } from './parser/select-parser.js';
|
|
189
195
|
export { ReferenceExpression, ReferenceExpressionOrList, SimpleReferenceExpression, StringReference, ExtractTypeFromStringReference, ExtractTypeFromReferenceExpression, } from './parser/reference-parser.js';
|
|
190
196
|
export { ValueExpression, ValueExpressionOrList, } from './parser/value-parser.js';
|
|
191
|
-
export { TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
|
|
197
|
+
export { SimpleTableReference, TableExpression, TableExpressionOrList, } from './parser/table-parser.js';
|
|
192
198
|
export { JoinReferenceExpression, JoinCallbackExpression, } from './parser/join-parser.js';
|
|
193
199
|
export { InsertObject } from './parser/insert-values-parser.js';
|
|
194
200
|
export { UpdateObject } from './parser/update-set-parser.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -21,6 +21,8 @@ export * from './query-builder/on-conflict-builder.js';
|
|
|
21
21
|
export * from './query-builder/aggregate-function-builder.js';
|
|
22
22
|
export * from './query-builder/case-builder.js';
|
|
23
23
|
export * from './query-builder/json-path-builder.js';
|
|
24
|
+
export * from './query-builder/merge-query-builder.js';
|
|
25
|
+
export * from './query-builder/merge-result.js';
|
|
24
26
|
export * from './raw-builder/raw-builder.js';
|
|
25
27
|
export * from './raw-builder/sql.js';
|
|
26
28
|
export * from './query-executor/query-executor.js';
|
|
@@ -178,6 +180,10 @@ export * from './operation-node/json-path-leg-node.js';
|
|
|
178
180
|
export * from './operation-node/json-path-node.js';
|
|
179
181
|
export * from './operation-node/json-operator-chain-node.js';
|
|
180
182
|
export * from './operation-node/tuple-node.js';
|
|
183
|
+
export * from './operation-node/merge-query-node.js';
|
|
184
|
+
export * from './operation-node/matched-node.js';
|
|
185
|
+
export * from './operation-node/fetch-node.js';
|
|
186
|
+
export * from './operation-node/top-node.js';
|
|
181
187
|
export * from './util/column-type.js';
|
|
182
188
|
export * from './util/compilable.js';
|
|
183
189
|
export * from './util/explainable.js';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
export interface CastNode extends OperationNode {
|
|
3
|
+
readonly kind: 'CastNode';
|
|
4
|
+
readonly expression: OperationNode;
|
|
5
|
+
readonly dataType: OperationNode;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const CastNode: Readonly<{
|
|
11
|
+
is(node: OperationNode): node is CastNode;
|
|
12
|
+
create(expression: OperationNode, dataType: OperationNode): CastNode;
|
|
13
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="./cast-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const CastNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'CastNode';
|
|
9
|
+
},
|
|
10
|
+
create(expression, dataType) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'CastNode',
|
|
13
|
+
expression,
|
|
14
|
+
dataType,
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -21,6 +21,7 @@ export interface ColumnDefinitionNode extends OperationNode {
|
|
|
21
21
|
readonly frontModifiers?: ReadonlyArray<OperationNode>;
|
|
22
22
|
readonly endModifiers?: ReadonlyArray<OperationNode>;
|
|
23
23
|
readonly nullsNotDistinct?: boolean;
|
|
24
|
+
readonly identity?: boolean;
|
|
24
25
|
}
|
|
25
26
|
/**
|
|
26
27
|
* @internal
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
-
|
|
2
|
+
declare const SIMPLE_COLUMN_DATA_TYPES: readonly ["varchar", "char", "text", "integer", "int2", "int4", "int8", "smallint", "bigint", "boolean", "real", "double precision", "float4", "float8", "decimal", "numeric", "binary", "bytea", "date", "datetime", "time", "timetz", "timestamp", "timestamptz", "serial", "bigserial", "uuid", "json", "jsonb", "blob"];
|
|
3
|
+
type SimpleColumnDataType = (typeof SIMPLE_COLUMN_DATA_TYPES)[number];
|
|
4
|
+
export type ColumnDataType = SimpleColumnDataType | `varchar(${number})` | `char(${number})` | `decimal(${number}, ${number})` | `numeric(${number}, ${number})` | `binary(${number})` | `datetime(${number})` | `time(${number})` | `timetz(${number})` | `timestamp(${number})` | `timestamptz(${number})`;
|
|
3
5
|
export type DataTypeParams = Omit<DataTypeNode, 'kind' | 'dataType'>;
|
|
4
6
|
export interface DataTypeNode extends OperationNode {
|
|
5
7
|
readonly kind: 'DataTypeNode';
|
|
@@ -12,3 +14,5 @@ export declare const DataTypeNode: Readonly<{
|
|
|
12
14
|
is(node: OperationNode): node is DataTypeNode;
|
|
13
15
|
create(dataType: ColumnDataType): DataTypeNode;
|
|
14
16
|
}>;
|
|
17
|
+
export declare function isColumnDataType(dataType: string): dataType is ColumnDataType;
|
|
18
|
+
export {};
|
|
@@ -1,5 +1,49 @@
|
|
|
1
1
|
/// <reference types="./data-type-node.d.ts" />
|
|
2
2
|
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
const SIMPLE_COLUMN_DATA_TYPES = [
|
|
4
|
+
'varchar',
|
|
5
|
+
'char',
|
|
6
|
+
'text',
|
|
7
|
+
'integer',
|
|
8
|
+
'int2',
|
|
9
|
+
'int4',
|
|
10
|
+
'int8',
|
|
11
|
+
'smallint',
|
|
12
|
+
'bigint',
|
|
13
|
+
'boolean',
|
|
14
|
+
'real',
|
|
15
|
+
'double precision',
|
|
16
|
+
'float4',
|
|
17
|
+
'float8',
|
|
18
|
+
'decimal',
|
|
19
|
+
'numeric',
|
|
20
|
+
'binary',
|
|
21
|
+
'bytea',
|
|
22
|
+
'date',
|
|
23
|
+
'datetime',
|
|
24
|
+
'time',
|
|
25
|
+
'timetz',
|
|
26
|
+
'timestamp',
|
|
27
|
+
'timestamptz',
|
|
28
|
+
'serial',
|
|
29
|
+
'bigserial',
|
|
30
|
+
'uuid',
|
|
31
|
+
'json',
|
|
32
|
+
'jsonb',
|
|
33
|
+
'blob',
|
|
34
|
+
];
|
|
35
|
+
const COLUMN_DATA_TYPE_REGEX = [
|
|
36
|
+
/^varchar\(\d+\)$/,
|
|
37
|
+
/^char\(\d+\)$/,
|
|
38
|
+
/^decimal\(\d+, \d+\)$/,
|
|
39
|
+
/^numeric\(\d+, \d+\)$/,
|
|
40
|
+
/^binary\(\d+\)$/,
|
|
41
|
+
/^datetime\(\d+\)$/,
|
|
42
|
+
/^time\(\d+\)$/,
|
|
43
|
+
/^timez\(\d+\)$/,
|
|
44
|
+
/^timestamp\(\d+\)$/,
|
|
45
|
+
/^timestamptz\(\d+\)$/,
|
|
46
|
+
];
|
|
3
47
|
/**
|
|
4
48
|
* @internal
|
|
5
49
|
*/
|
|
@@ -14,3 +58,12 @@ export const DataTypeNode = freeze({
|
|
|
14
58
|
});
|
|
15
59
|
},
|
|
16
60
|
});
|
|
61
|
+
export function isColumnDataType(dataType) {
|
|
62
|
+
if (SIMPLE_COLUMN_DATA_TYPES.includes(dataType)) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
if (COLUMN_DATA_TYPE_REGEX.some((r) => r.test(dataType))) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
@@ -9,6 +9,7 @@ import { OrderByNode } from './order-by-node.js';
|
|
|
9
9
|
import { OrderByItemNode } from './order-by-item-node.js';
|
|
10
10
|
import { ExplainNode } from './explain-node.js';
|
|
11
11
|
import { UsingNode } from './using-node.js';
|
|
12
|
+
import { TopNode } from './top-node.js';
|
|
12
13
|
export interface DeleteQueryNode extends OperationNode {
|
|
13
14
|
readonly kind: 'DeleteQueryNode';
|
|
14
15
|
readonly from: FromNode;
|
|
@@ -20,6 +21,7 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
20
21
|
readonly orderBy?: OrderByNode;
|
|
21
22
|
readonly limit?: LimitNode;
|
|
22
23
|
readonly explain?: ExplainNode;
|
|
24
|
+
readonly top?: TopNode;
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* @internal
|
|
@@ -28,6 +30,8 @@ export declare const DeleteQueryNode: Readonly<{
|
|
|
28
30
|
is(node: OperationNode): node is DeleteQueryNode;
|
|
29
31
|
create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
|
|
30
32
|
cloneWithOrderByItems(deleteNode: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>): DeleteQueryNode;
|
|
33
|
+
cloneWithoutOrderBy(deleteNode: DeleteQueryNode): DeleteQueryNode;
|
|
31
34
|
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
35
|
+
cloneWithoutLimit(deleteNode: DeleteQueryNode): DeleteQueryNode;
|
|
32
36
|
cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;
|
|
33
37
|
}>;
|
|
@@ -25,12 +25,24 @@ export const DeleteQueryNode = freeze({
|
|
|
25
25
|
: OrderByNode.create(items),
|
|
26
26
|
});
|
|
27
27
|
},
|
|
28
|
+
cloneWithoutOrderBy(deleteNode) {
|
|
29
|
+
return freeze({
|
|
30
|
+
...deleteNode,
|
|
31
|
+
orderBy: undefined,
|
|
32
|
+
});
|
|
33
|
+
},
|
|
28
34
|
cloneWithLimit(deleteNode, limit) {
|
|
29
35
|
return freeze({
|
|
30
36
|
...deleteNode,
|
|
31
37
|
limit,
|
|
32
38
|
});
|
|
33
39
|
},
|
|
40
|
+
cloneWithoutLimit(deleteNode) {
|
|
41
|
+
return freeze({
|
|
42
|
+
...deleteNode,
|
|
43
|
+
limit: undefined,
|
|
44
|
+
});
|
|
45
|
+
},
|
|
34
46
|
cloneWithUsing(deleteNode, tables) {
|
|
35
47
|
return freeze({
|
|
36
48
|
...deleteNode,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
import { ValueNode } from './value-node.js';
|
|
3
|
+
export type FetchModifier = 'only' | 'with ties';
|
|
4
|
+
export interface FetchNode extends OperationNode {
|
|
5
|
+
readonly kind: 'FetchNode';
|
|
6
|
+
readonly rowCount: ValueNode;
|
|
7
|
+
readonly modifier: FetchModifier;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare const FetchNode: {
|
|
13
|
+
is(node: OperationNode): node is FetchNode;
|
|
14
|
+
create(rowCount: number | bigint, modifier: FetchModifier): FetchNode;
|
|
15
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="./fetch-node.d.ts" />
|
|
2
|
+
import { ValueNode } from './value-node.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const FetchNode = {
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'FetchNode';
|
|
9
|
+
},
|
|
10
|
+
create(rowCount, modifier) {
|
|
11
|
+
return {
|
|
12
|
+
kind: 'FetchNode',
|
|
13
|
+
rowCount: ValueNode.create(rowCount),
|
|
14
|
+
modifier,
|
|
15
|
+
};
|
|
16
|
+
},
|
|
17
|
+
};
|
|
@@ -5,11 +5,12 @@ import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
|
5
5
|
import { OperationNode } from './operation-node.js';
|
|
6
6
|
import { ReturningNode } from './returning-node.js';
|
|
7
7
|
import { TableNode } from './table-node.js';
|
|
8
|
+
import { TopNode } from './top-node.js';
|
|
8
9
|
import { WithNode } from './with-node.js';
|
|
9
10
|
export type InsertQueryNodeProps = Omit<InsertQueryNode, 'kind' | 'into'>;
|
|
10
11
|
export interface InsertQueryNode extends OperationNode {
|
|
11
12
|
readonly kind: 'InsertQueryNode';
|
|
12
|
-
readonly into
|
|
13
|
+
readonly into?: TableNode;
|
|
13
14
|
readonly columns?: ReadonlyArray<ColumnNode>;
|
|
14
15
|
readonly values?: OperationNode;
|
|
15
16
|
readonly returning?: ReturningNode;
|
|
@@ -20,6 +21,7 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
20
21
|
readonly replace?: boolean;
|
|
21
22
|
readonly explain?: ExplainNode;
|
|
22
23
|
readonly defaultValues?: boolean;
|
|
24
|
+
readonly top?: TopNode;
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
25
27
|
* @internal
|
|
@@ -27,5 +29,6 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
27
29
|
export declare const InsertQueryNode: Readonly<{
|
|
28
30
|
is(node: OperationNode): node is InsertQueryNode;
|
|
29
31
|
create(into: TableNode, withNode?: WithNode, replace?: boolean): InsertQueryNode;
|
|
32
|
+
createWithoutInto(): InsertQueryNode;
|
|
30
33
|
cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
|
|
31
34
|
}>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OnNode } from './on-node.js';
|
|
2
2
|
import { OperationNode } from './operation-node.js';
|
|
3
|
-
export type JoinType = 'InnerJoin' | 'LeftJoin' | 'RightJoin' | 'FullJoin' | 'LateralInnerJoin' | 'LateralLeftJoin';
|
|
3
|
+
export type JoinType = 'InnerJoin' | 'LeftJoin' | 'RightJoin' | 'FullJoin' | 'LateralInnerJoin' | 'LateralLeftJoin' | 'Using';
|
|
4
4
|
export interface JoinNode extends OperationNode {
|
|
5
5
|
readonly kind: 'JoinNode';
|
|
6
6
|
readonly joinType: JoinType;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
export interface MatchedNode extends OperationNode {
|
|
3
|
+
readonly kind: 'MatchedNode';
|
|
4
|
+
readonly not: boolean;
|
|
5
|
+
readonly bySource: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const MatchedNode: Readonly<{
|
|
11
|
+
is(node: OperationNode): node is MatchedNode;
|
|
12
|
+
create(not: boolean, bySource?: boolean): MatchedNode;
|
|
13
|
+
}>;
|