kysely 0.26.2 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/cjs/dialect/dialect-adapter-base.js +3 -0
- package/dist/cjs/dialect/dialect-adapter.d.ts +8 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.js +30 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/cjs/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/cjs/dialect/mssql/mssql-dialect.js +65 -0
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +268 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.js +97 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +64 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/cjs/dialect/postgres/postgres-driver.js +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/cjs/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/driver.js +1 -0
- package/dist/cjs/driver/runtime-driver.js +5 -1
- package/dist/cjs/driver/single-connection-provider.js +7 -8
- package/dist/cjs/expression/expression-builder.d.ts +66 -73
- package/dist/cjs/expression/expression-builder.js +8 -17
- package/dist/cjs/expression/expression-wrapper.d.ts +8 -8
- package/dist/cjs/helpers/mssql.d.ts +152 -0
- package/dist/cjs/helpers/mssql.js +160 -0
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/sqlite.d.ts +3 -3
- package/dist/cjs/index.d.ts +8 -2
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/migration/migrator.js +12 -16
- package/dist/cjs/operation-node/add-index-node.d.ts +21 -0
- package/dist/cjs/operation-node/add-index-node.js +31 -0
- package/dist/cjs/operation-node/alter-table-node.d.ts +5 -1
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
- package/dist/cjs/operation-node/create-index-node.d.ts +1 -0
- package/dist/cjs/operation-node/create-table-node.d.ts +1 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +17 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/operator-node.d.ts +3 -3
- package/dist/cjs/operation-node/operator-node.js +2 -0
- package/dist/cjs/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/cjs/operation-node/unique-constraint-node.js +8 -1
- package/dist/cjs/parser/binary-operation-parser.js +1 -1
- package/dist/cjs/parser/coalesce-parser.d.ts +12 -2
- package/dist/cjs/parser/expression-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.d.ts +3 -2
- package/dist/cjs/parser/returning-parser.d.ts +2 -1
- package/dist/cjs/parser/select-parser.d.ts +20 -9
- package/dist/cjs/parser/update-set-parser.d.ts +5 -2
- package/dist/cjs/parser/update-set-parser.js +13 -3
- package/dist/cjs/parser/value-parser.d.ts +2 -2
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +4 -4
- package/dist/cjs/query-builder/case-builder.d.ts +5 -4
- package/dist/cjs/query-builder/delete-query-builder.d.ts +8 -6
- package/dist/cjs/query-builder/function-module.d.ts +98 -27
- package/dist/cjs/query-builder/function-module.js +17 -3
- package/dist/cjs/query-builder/having-interface.d.ts +3 -5
- package/dist/cjs/query-builder/insert-query-builder.d.ts +32 -12
- package/dist/cjs/query-builder/insert-query-builder.js +3 -3
- package/dist/cjs/query-builder/insert-result.d.ts +8 -1
- package/dist/cjs/query-builder/insert-result.js +8 -1
- package/dist/cjs/query-builder/json-path-builder.d.ts +3 -2
- package/dist/cjs/query-builder/json-path-builder.js +6 -3
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/cjs/query-builder/on-conflict-builder.js +1 -6
- package/dist/cjs/query-builder/over-builder.d.ts +2 -2
- package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +48 -29
- package/dist/cjs/query-builder/select-query-builder.js +5 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +25 -7
- package/dist/cjs/query-builder/update-query-builder.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +3 -3
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +65 -12
- package/dist/cjs/query-creator.d.ts +5 -3
- package/dist/cjs/query-creator.js +0 -47
- package/dist/cjs/raw-builder/raw-builder.d.ts +0 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/cjs/schema/alter-table-add-index-builder.js +146 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +41 -1
- package/dist/cjs/schema/alter-table-builder.js +59 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +25 -0
- package/dist/cjs/schema/column-definition-builder.js +27 -0
- package/dist/cjs/schema/create-index-builder.d.ts +23 -0
- package/dist/cjs/schema/create-index-builder.js +30 -0
- package/dist/cjs/schema/create-table-builder.d.ts +28 -2
- package/dist/cjs/schema/create-table-builder.js +38 -3
- package/dist/cjs/schema/create-view-builder.d.ts +2 -2
- package/dist/cjs/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/unique-constraint-builder.js +24 -0
- package/dist/cjs/util/infer-result.d.ts +2 -1
- package/dist/cjs/util/log.js +5 -1
- package/dist/cjs/util/object-utils.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +27 -20
- package/dist/esm/dialect/dialect-adapter-base.d.ts +8 -0
- package/dist/esm/dialect/dialect-adapter-base.js +3 -0
- package/dist/esm/dialect/dialect-adapter.d.ts +8 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +78 -0
- package/dist/esm/dialect/mssql/mssql-adapter.js +27 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +143 -0
- package/dist/esm/dialect/mssql/mssql-dialect-config.js +2 -0
- package/dist/esm/dialect/mssql/mssql-dialect.d.ts +70 -0
- package/dist/esm/dialect/mssql/mssql-dialect.js +62 -0
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +54 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +265 -0
- package/dist/esm/dialect/mssql/mssql-introspector.d.ts +20 -0
- package/dist/esm/dialect/mssql/mssql-introspector.js +94 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +11 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +61 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +2 -0
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +28 -0
- package/dist/esm/dialect/postgres/postgres-driver.js +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +1 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -1
- package/dist/esm/dialect/sqlite/sqlite-dialect-config.d.ts +1 -0
- package/dist/esm/dialect/sqlite/sqlite-driver.js +15 -2
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/driver.js +1 -0
- package/dist/esm/driver/runtime-driver.js +5 -1
- package/dist/esm/driver/single-connection-provider.js +7 -8
- package/dist/esm/expression/expression-builder.d.ts +66 -73
- package/dist/esm/expression/expression-builder.js +10 -19
- package/dist/esm/expression/expression-wrapper.d.ts +8 -8
- package/dist/esm/helpers/mssql.d.ts +152 -0
- package/dist/esm/helpers/mssql.js +155 -0
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/sqlite.d.ts +3 -3
- package/dist/esm/index.d.ts +8 -2
- package/dist/esm/index.js +6 -0
- package/dist/esm/migration/migrator.js +12 -16
- package/dist/esm/operation-node/add-index-node.d.ts +21 -0
- package/dist/esm/operation-node/add-index-node.js +29 -0
- package/dist/esm/operation-node/alter-table-node.d.ts +5 -1
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/column-update-node.d.ts +2 -3
- package/dist/esm/operation-node/create-index-node.d.ts +1 -0
- package/dist/esm/operation-node/create-table-node.d.ts +1 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +17 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/operator-node.d.ts +3 -3
- package/dist/esm/operation-node/operator-node.js +2 -0
- package/dist/esm/operation-node/unique-constraint-node.d.ts +4 -1
- package/dist/esm/operation-node/unique-constraint-node.js +8 -1
- package/dist/esm/parser/binary-operation-parser.js +1 -1
- package/dist/esm/parser/coalesce-parser.d.ts +12 -2
- package/dist/esm/parser/expression-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.d.ts +3 -2
- package/dist/esm/parser/returning-parser.d.ts +2 -1
- package/dist/esm/parser/select-parser.d.ts +20 -9
- package/dist/esm/parser/update-set-parser.d.ts +5 -2
- package/dist/esm/parser/update-set-parser.js +10 -1
- package/dist/esm/parser/value-parser.d.ts +2 -2
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +4 -4
- package/dist/esm/query-builder/case-builder.d.ts +5 -4
- package/dist/esm/query-builder/delete-query-builder.d.ts +8 -6
- package/dist/esm/query-builder/function-module.d.ts +98 -27
- package/dist/esm/query-builder/function-module.js +17 -3
- package/dist/esm/query-builder/having-interface.d.ts +3 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +32 -12
- package/dist/esm/query-builder/insert-query-builder.js +4 -4
- package/dist/esm/query-builder/insert-result.d.ts +8 -1
- package/dist/esm/query-builder/insert-result.js +8 -1
- package/dist/esm/query-builder/json-path-builder.d.ts +3 -2
- package/dist/esm/query-builder/json-path-builder.js +6 -3
- package/dist/esm/query-builder/on-conflict-builder.d.ts +58 -16
- package/dist/esm/query-builder/on-conflict-builder.js +2 -7
- package/dist/esm/query-builder/over-builder.d.ts +2 -2
- package/dist/esm/query-builder/returning-interface.d.ts +3 -2
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
- package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +48 -29
- package/dist/esm/query-builder/select-query-builder.js +5 -2
- package/dist/esm/query-builder/update-query-builder.d.ts +25 -7
- package/dist/esm/query-builder/update-query-builder.js +3 -3
- package/dist/esm/query-builder/where-interface.d.ts +3 -3
- package/dist/esm/query-compiler/default-query-compiler.d.ts +9 -1
- package/dist/esm/query-compiler/default-query-compiler.js +65 -12
- package/dist/esm/query-creator.d.ts +5 -3
- package/dist/esm/query-creator.js +0 -47
- package/dist/esm/raw-builder/raw-builder.d.ts +0 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +104 -0
- package/dist/esm/schema/alter-table-add-index-builder.js +143 -0
- package/dist/esm/schema/alter-table-builder.d.ts +41 -1
- package/dist/esm/schema/alter-table-builder.js +59 -2
- package/dist/esm/schema/column-definition-builder.d.ts +25 -0
- package/dist/esm/schema/column-definition-builder.js +27 -0
- package/dist/esm/schema/create-index-builder.d.ts +23 -0
- package/dist/esm/schema/create-index-builder.js +30 -0
- package/dist/esm/schema/create-table-builder.d.ts +28 -2
- package/dist/esm/schema/create-table-builder.js +38 -3
- package/dist/esm/schema/create-view-builder.d.ts +2 -2
- package/dist/esm/schema/unique-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/unique-constraint-builder.js +21 -0
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/log.js +5 -1
- package/dist/esm/util/object-utils.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +27 -20
- package/helpers/mssql.d.ts +1 -0
- package/helpers/mssql.js +1 -0
- package/package.json +17 -6
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/// <reference types="./mssql-introspector.d.ts" />
|
|
2
|
+
import { DEFAULT_MIGRATION_LOCK_TABLE, DEFAULT_MIGRATION_TABLE, } from '../../migration/migrator.js';
|
|
3
|
+
import { freeze } from '../../util/object-utils.js';
|
|
4
|
+
export class MssqlIntrospector {
|
|
5
|
+
#db;
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.#db = db;
|
|
8
|
+
}
|
|
9
|
+
async getSchemas() {
|
|
10
|
+
return await this.#db.selectFrom('sys.schemas').select('name').execute();
|
|
11
|
+
}
|
|
12
|
+
async getTables(options = { withInternalKyselyTables: false }) {
|
|
13
|
+
const rawColumns = await this.#db
|
|
14
|
+
.selectFrom('sys.tables as tables')
|
|
15
|
+
.leftJoin('sys.schemas as table_schemas', 'table_schemas.schema_id', 'tables.schema_id')
|
|
16
|
+
.innerJoin('sys.columns as columns', 'columns.object_id', 'tables.object_id')
|
|
17
|
+
.innerJoin('sys.types as types', 'types.system_type_id', 'columns.system_type_id')
|
|
18
|
+
.leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
|
|
19
|
+
.$if(!options.withInternalKyselyTables, (qb) => qb
|
|
20
|
+
.where('tables.name', '!=', DEFAULT_MIGRATION_TABLE)
|
|
21
|
+
.where('tables.name', '!=', DEFAULT_MIGRATION_LOCK_TABLE))
|
|
22
|
+
.select([
|
|
23
|
+
'tables.name as table_name',
|
|
24
|
+
(eb) => eb
|
|
25
|
+
.ref('tables.type')
|
|
26
|
+
.$castTo()
|
|
27
|
+
.as('table_type'),
|
|
28
|
+
'table_schemas.name as table_schema_name',
|
|
29
|
+
'columns.default_object_id as column_default_object_id',
|
|
30
|
+
'columns.generated_always_type_desc as column_generated_always_type',
|
|
31
|
+
'columns.is_computed as column_is_computed',
|
|
32
|
+
'columns.is_identity as column_is_identity',
|
|
33
|
+
'columns.is_nullable as column_is_nullable',
|
|
34
|
+
'columns.is_rowguidcol as column_is_rowguidcol',
|
|
35
|
+
'columns.name as column_name',
|
|
36
|
+
'types.is_nullable as type_is_nullable',
|
|
37
|
+
'types.name as type_name',
|
|
38
|
+
'type_schemas.name as type_schema_name',
|
|
39
|
+
])
|
|
40
|
+
.unionAll(this.#db
|
|
41
|
+
.selectFrom('sys.views as views')
|
|
42
|
+
.leftJoin('sys.schemas as view_schemas', 'view_schemas.schema_id', 'views.schema_id')
|
|
43
|
+
.innerJoin('sys.columns as columns', 'columns.object_id', 'views.object_id')
|
|
44
|
+
.innerJoin('sys.types as types', 'types.system_type_id', 'columns.system_type_id')
|
|
45
|
+
.leftJoin('sys.schemas as type_schemas', 'type_schemas.schema_id', 'types.schema_id')
|
|
46
|
+
.select([
|
|
47
|
+
'views.name as table_name',
|
|
48
|
+
'views.type as table_type',
|
|
49
|
+
'view_schemas.name as table_schema_name',
|
|
50
|
+
'columns.default_object_id as column_default_object_id',
|
|
51
|
+
'columns.generated_always_type_desc as column_generated_always_type',
|
|
52
|
+
'columns.is_computed as column_is_computed',
|
|
53
|
+
'columns.is_identity as column_is_identity',
|
|
54
|
+
'columns.is_nullable as column_is_nullable',
|
|
55
|
+
'columns.is_rowguidcol as column_is_rowguidcol',
|
|
56
|
+
'columns.name as column_name',
|
|
57
|
+
'types.is_nullable as type_is_nullable',
|
|
58
|
+
'types.name as type_name',
|
|
59
|
+
'type_schemas.name as type_schema_name',
|
|
60
|
+
]))
|
|
61
|
+
.orderBy('table_schema_name')
|
|
62
|
+
.orderBy('table_name')
|
|
63
|
+
.orderBy('column_name')
|
|
64
|
+
.execute();
|
|
65
|
+
const tableDictionary = {};
|
|
66
|
+
for (const rawColumn of rawColumns) {
|
|
67
|
+
const key = `${rawColumn.table_schema_name}.${rawColumn.table_name}`;
|
|
68
|
+
const table = (tableDictionary[key] ||= freeze({
|
|
69
|
+
columns: [],
|
|
70
|
+
isView: rawColumn.table_type === 'V ',
|
|
71
|
+
name: rawColumn.table_name,
|
|
72
|
+
schema: rawColumn.table_schema_name ?? undefined,
|
|
73
|
+
}));
|
|
74
|
+
table.columns.push(freeze({
|
|
75
|
+
dataType: rawColumn.type_name,
|
|
76
|
+
dataTypeSchema: rawColumn.type_schema_name ?? undefined,
|
|
77
|
+
hasDefaultValue: rawColumn.column_default_object_id > 0 ||
|
|
78
|
+
rawColumn.column_generated_always_type !== 'NOT_APPLICABLE' ||
|
|
79
|
+
rawColumn.column_is_identity ||
|
|
80
|
+
rawColumn.column_is_computed ||
|
|
81
|
+
rawColumn.column_is_rowguidcol,
|
|
82
|
+
isAutoIncrementing: rawColumn.column_is_identity,
|
|
83
|
+
isNullable: rawColumn.column_is_nullable && rawColumn.type_is_nullable,
|
|
84
|
+
name: rawColumn.column_name,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
return Object.values(tableDictionary);
|
|
88
|
+
}
|
|
89
|
+
async getMetadata(options) {
|
|
90
|
+
return {
|
|
91
|
+
tables: await this.getTables(options),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AddColumnNode } from '../../operation-node/add-column-node.js';
|
|
2
|
+
import { AlterTableColumnAlterationNode } from '../../operation-node/alter-table-node.js';
|
|
3
|
+
import { DropColumnNode } from '../../operation-node/drop-column-node.js';
|
|
4
|
+
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
5
|
+
export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
6
|
+
protected getCurrentParameterPlaceholder(): string;
|
|
7
|
+
protected compileColumnAlterations(columnAlterations: readonly AlterTableColumnAlterationNode[]): void;
|
|
8
|
+
protected visitAddColumn(node: AddColumnNode): void;
|
|
9
|
+
protected visitDropColumn(node: DropColumnNode): void;
|
|
10
|
+
protected announcesNewColumnDataType(): boolean;
|
|
11
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/// <reference types="./mssql-query-compiler.d.ts" />
|
|
2
|
+
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
3
|
+
export class MssqlQueryCompiler extends DefaultQueryCompiler {
|
|
4
|
+
getCurrentParameterPlaceholder() {
|
|
5
|
+
return `@${this.numParameters}`;
|
|
6
|
+
}
|
|
7
|
+
// mssql allows multi-column alterations in a single statement,
|
|
8
|
+
// but you can only use the command keyword/s once.
|
|
9
|
+
// it also doesn't support multiple kinds of commands in the same
|
|
10
|
+
// alter table statement, but we compile that anyway for the sake
|
|
11
|
+
// of WYSIWYG.
|
|
12
|
+
compileColumnAlterations(columnAlterations) {
|
|
13
|
+
const nodesByKind = {};
|
|
14
|
+
for (const columnAlteration of columnAlterations) {
|
|
15
|
+
if (!nodesByKind[columnAlteration.kind]) {
|
|
16
|
+
nodesByKind[columnAlteration.kind] = [];
|
|
17
|
+
}
|
|
18
|
+
nodesByKind[columnAlteration.kind].push(columnAlteration);
|
|
19
|
+
}
|
|
20
|
+
let first = true;
|
|
21
|
+
if (nodesByKind.AddColumnNode) {
|
|
22
|
+
this.append('add ');
|
|
23
|
+
this.compileList(nodesByKind.AddColumnNode);
|
|
24
|
+
first = false;
|
|
25
|
+
}
|
|
26
|
+
// multiple of these are not really supported by mssql,
|
|
27
|
+
// but for the sake of WYSIWYG.
|
|
28
|
+
if (nodesByKind.AlterColumnNode) {
|
|
29
|
+
if (!first)
|
|
30
|
+
this.append(', ');
|
|
31
|
+
this.compileList(nodesByKind.AlterColumnNode);
|
|
32
|
+
}
|
|
33
|
+
if (nodesByKind.DropColumnNode) {
|
|
34
|
+
if (!first)
|
|
35
|
+
this.append(', ');
|
|
36
|
+
this.append('drop column ');
|
|
37
|
+
this.compileList(nodesByKind.DropColumnNode);
|
|
38
|
+
}
|
|
39
|
+
// not really supported by mssql, but for the sake of WYSIWYG.
|
|
40
|
+
if (nodesByKind.ModifyColumnNode) {
|
|
41
|
+
if (!first)
|
|
42
|
+
this.append(', ');
|
|
43
|
+
this.compileList(nodesByKind.ModifyColumnNode);
|
|
44
|
+
}
|
|
45
|
+
// not really supported by mssql, but for the sake of WYSIWYG.
|
|
46
|
+
if (nodesByKind.RenameColumnNode) {
|
|
47
|
+
if (!first)
|
|
48
|
+
this.append(', ');
|
|
49
|
+
this.compileList(nodesByKind.RenameColumnNode);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
visitAddColumn(node) {
|
|
53
|
+
this.visitNode(node.column);
|
|
54
|
+
}
|
|
55
|
+
visitDropColumn(node) {
|
|
56
|
+
this.visitNode(node.column);
|
|
57
|
+
}
|
|
58
|
+
announcesNewColumnDataType() {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CreateIndexNode } from '../../operation-node/create-index-node.js';
|
|
1
2
|
import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
|
|
2
3
|
export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
|
|
3
4
|
protected getCurrentParameterPlaceholder(): string;
|
|
@@ -8,4 +9,5 @@ export declare class MysqlQueryCompiler extends DefaultQueryCompiler {
|
|
|
8
9
|
protected getLeftIdentifierWrapper(): string;
|
|
9
10
|
protected getRightIdentifierWrapper(): string;
|
|
10
11
|
protected sanitizeIdentifier(identifier: string): string;
|
|
12
|
+
protected visitCreateIndex(node: CreateIndexNode): void;
|
|
11
13
|
}
|
|
@@ -26,4 +26,32 @@ export class MysqlQueryCompiler extends DefaultQueryCompiler {
|
|
|
26
26
|
sanitizeIdentifier(identifier) {
|
|
27
27
|
return identifier.replace(ID_WRAP_REGEX, '``');
|
|
28
28
|
}
|
|
29
|
+
visitCreateIndex(node) {
|
|
30
|
+
this.append('create ');
|
|
31
|
+
if (node.unique) {
|
|
32
|
+
this.append('unique ');
|
|
33
|
+
}
|
|
34
|
+
this.append('index ');
|
|
35
|
+
if (node.ifNotExists) {
|
|
36
|
+
this.append('if not exists ');
|
|
37
|
+
}
|
|
38
|
+
this.visitNode(node.name);
|
|
39
|
+
if (node.using) {
|
|
40
|
+
this.append(' using ');
|
|
41
|
+
this.visitNode(node.using);
|
|
42
|
+
}
|
|
43
|
+
if (node.table) {
|
|
44
|
+
this.append(' on ');
|
|
45
|
+
this.visitNode(node.table);
|
|
46
|
+
}
|
|
47
|
+
if (node.columns) {
|
|
48
|
+
this.append(' (');
|
|
49
|
+
this.compileList(node.columns);
|
|
50
|
+
this.append(')');
|
|
51
|
+
}
|
|
52
|
+
if (node.where) {
|
|
53
|
+
this.append(' ');
|
|
54
|
+
this.visitNode(node.where);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
29
57
|
}
|
|
@@ -26,7 +26,7 @@ export class PostgresDriver {
|
|
|
26
26
|
// The driver must take care of calling `onCreateConnection` when a new
|
|
27
27
|
// connection is created. The `pg` module doesn't provide an async hook
|
|
28
28
|
// for the connection creation. We need to call the method explicitly.
|
|
29
|
-
if (this.#config
|
|
29
|
+
if (this.#config.onCreateConnection) {
|
|
30
30
|
await this.#config.onCreateConnection(connection);
|
|
31
31
|
}
|
|
32
32
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Kysely } from '../../kysely.js';
|
|
2
2
|
import { DialectAdapterBase } from '../dialect-adapter-base.js';
|
|
3
3
|
import { MigrationLockOptions } from '../dialect-adapter.js';
|
|
4
|
-
export declare class SqliteAdapter
|
|
4
|
+
export declare class SqliteAdapter extends DialectAdapterBase {
|
|
5
5
|
/**
|
|
6
6
|
* Whether or not this dialect supports transactional DDL.
|
|
7
7
|
*
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="./sqlite-driver.d.ts" />
|
|
2
|
+
import { SelectQueryNode } from '../../operation-node/select-query-node.js';
|
|
2
3
|
import { CompiledQuery } from '../../query-compiler/compiled-query.js';
|
|
3
4
|
import { freeze, isFunction } from '../../util/object-utils.js';
|
|
4
5
|
export class SqliteDriver {
|
|
@@ -67,8 +68,20 @@ class SqliteConnection {
|
|
|
67
68
|
});
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
|
-
async *streamQuery() {
|
|
71
|
-
|
|
71
|
+
async *streamQuery(compiledQuery, _chunkSize) {
|
|
72
|
+
const { sql, parameters, query } = compiledQuery;
|
|
73
|
+
const stmt = this.#db.prepare(sql);
|
|
74
|
+
if (SelectQueryNode.is(query)) {
|
|
75
|
+
const iter = stmt.iterate(parameters);
|
|
76
|
+
for (const row of iter) {
|
|
77
|
+
yield {
|
|
78
|
+
rows: [row],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
throw new Error('Sqlite driver only supports streaming of select queries');
|
|
84
|
+
}
|
|
72
85
|
}
|
|
73
86
|
}
|
|
74
87
|
class ConnectionMutex {
|
|
@@ -40,5 +40,5 @@ export interface Driver {
|
|
|
40
40
|
export interface TransactionSettings {
|
|
41
41
|
readonly isolationLevel?: IsolationLevel;
|
|
42
42
|
}
|
|
43
|
-
export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable"];
|
|
43
|
+
export declare const TRANSACTION_ISOLATION_LEVELS: readonly ["read uncommitted", "read committed", "repeatable read", "serializable", "snapshot"];
|
|
44
44
|
export type IsolationLevel = ArrayItemType<typeof TRANSACTION_ISOLATION_LEVELS>;
|
|
@@ -84,16 +84,20 @@ export class RuntimeDriver {
|
|
|
84
84
|
#addLogging(connection) {
|
|
85
85
|
const executeQuery = connection.executeQuery;
|
|
86
86
|
connection.executeQuery = async (compiledQuery) => {
|
|
87
|
+
let caughtError;
|
|
87
88
|
const startTime = performanceNow();
|
|
88
89
|
try {
|
|
89
90
|
return await executeQuery.call(connection, compiledQuery);
|
|
90
91
|
}
|
|
91
92
|
catch (error) {
|
|
93
|
+
caughtError = error;
|
|
92
94
|
await this.#logError(error, compiledQuery, startTime);
|
|
93
95
|
throw error;
|
|
94
96
|
}
|
|
95
97
|
finally {
|
|
96
|
-
|
|
98
|
+
if (!caughtError) {
|
|
99
|
+
await this.#logQuery(compiledQuery, startTime);
|
|
100
|
+
}
|
|
97
101
|
}
|
|
98
102
|
};
|
|
99
103
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="./single-connection-provider.d.ts" />
|
|
2
|
+
const ignoreError = () => { };
|
|
2
3
|
export class SingleConnectionProvider {
|
|
3
4
|
#connection;
|
|
4
5
|
#runningPromise;
|
|
@@ -7,17 +8,15 @@ export class SingleConnectionProvider {
|
|
|
7
8
|
}
|
|
8
9
|
async provideConnection(consumer) {
|
|
9
10
|
while (this.#runningPromise) {
|
|
10
|
-
await this.#runningPromise;
|
|
11
|
+
await this.#runningPromise.catch(ignoreError);
|
|
11
12
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
})
|
|
17
|
-
.catch(() => {
|
|
13
|
+
// `#runningPromise` must be set to undefined before it's
|
|
14
|
+
// resolved or rejected. Otherwise the while loop above
|
|
15
|
+
// will misbehave.
|
|
16
|
+
this.#runningPromise = this.#run(consumer).finally(() => {
|
|
18
17
|
this.#runningPromise = undefined;
|
|
19
18
|
});
|
|
20
|
-
return
|
|
19
|
+
return this.#runningPromise;
|
|
21
20
|
}
|
|
22
21
|
// Run the runner in an async function to make sure it doesn't
|
|
23
22
|
// throw synchronous errors.
|
|
@@ -3,17 +3,18 @@ import { TableExpression, From, FromTables, ExtractTableAlias, AnyAliasedTable,
|
|
|
3
3
|
import { FunctionModule } from '../query-builder/function-module.js';
|
|
4
4
|
import { ExtractTypeFromReferenceExpression, ReferenceExpression, SimpleReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
5
5
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
6
|
-
import { BinaryOperatorExpression,
|
|
6
|
+
import { BinaryOperatorExpression, FilterObject, OperandValueExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
7
7
|
import { Expression } from './expression.js';
|
|
8
8
|
import { ExpressionWrapper } from './expression-wrapper.js';
|
|
9
9
|
import { ComparisonOperator, JSONOperatorWith$, UnaryOperator } from '../operation-node/operator-node.js';
|
|
10
|
-
import { SqlBool } from '../util/type-utils.js';
|
|
10
|
+
import { IsNever, SqlBool } from '../util/type-utils.js';
|
|
11
11
|
import { ExtractTypeFromValueExpression } from '../parser/value-parser.js';
|
|
12
12
|
import { CaseBuilder } from '../query-builder/case-builder.js';
|
|
13
13
|
import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
|
|
14
14
|
import { OperandExpression } from '../parser/expression-parser.js';
|
|
15
|
-
import { SelectArg, SelectExpression, Selection } from '../parser/select-parser.js';
|
|
16
15
|
import { RefTuple2, RefTuple3, RefTuple4, RefTuple5, ValTuple2, ValTuple3, ValTuple4, ValTuple5 } from '../parser/tuple-parser.js';
|
|
16
|
+
import { Selectable } from '../util/column-type.js';
|
|
17
|
+
import { KyselyTypeError } from '../util/type-error.js';
|
|
17
18
|
export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
18
19
|
/**
|
|
19
20
|
* Creates a binary expression.
|
|
@@ -89,7 +90,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
89
90
|
* ))
|
|
90
91
|
* ```
|
|
91
92
|
*/
|
|
92
|
-
<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression
|
|
93
|
+
<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>>;
|
|
93
94
|
/**
|
|
94
95
|
* Returns a copy of `this` expression builder, for destructuring purposes.
|
|
95
96
|
*
|
|
@@ -195,16 +196,6 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
195
196
|
selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
196
197
|
selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, TB | ExtractTableAlias<DB, TE>, {}>;
|
|
197
198
|
selectFrom<TE extends TableExpression<DB, TB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, TB, TE>, {}>;
|
|
198
|
-
/**
|
|
199
|
-
* Creates a `select` expression without a `from` clause.
|
|
200
|
-
*
|
|
201
|
-
* If you want to create a `select from` query, use the `selectFrom` method instead.
|
|
202
|
-
* This one can be used to create a plain `select` statement without a `from` clause.
|
|
203
|
-
*
|
|
204
|
-
* This method accepts the same inputs as {@link SelectQueryBuilder.select}. See its
|
|
205
|
-
* documentation for examples.
|
|
206
|
-
*/
|
|
207
|
-
selectNoFrom<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, Selection<DB, TB, SE>>;
|
|
208
199
|
/**
|
|
209
200
|
* Creates a `case` statement/operator.
|
|
210
201
|
*
|
|
@@ -258,13 +249,14 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
258
249
|
*/
|
|
259
250
|
case(): CaseBuilder<DB, TB>;
|
|
260
251
|
case<C extends SimpleReferenceExpression<DB, TB>>(column: C): CaseBuilder<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, C>>;
|
|
261
|
-
case<
|
|
252
|
+
case<E extends Expression<any>>(expression: E): CaseBuilder<DB, TB, ExtractTypeFromValueExpression<E>>;
|
|
262
253
|
/**
|
|
263
254
|
* This method can be used to reference columns within the query's context. For
|
|
264
255
|
* a non-type-safe version of this method see {@link sql}'s version.
|
|
265
256
|
*
|
|
266
257
|
* Additionally, this method can be used to reference nested JSON properties or
|
|
267
|
-
* array elements. See {@link JSONPathBuilder} for more information.
|
|
258
|
+
* array elements. See {@link JSONPathBuilder} for more information. For regular
|
|
259
|
+
* JSON path expressions you can use {@link jsonPath}.
|
|
268
260
|
*
|
|
269
261
|
* ### Examples
|
|
270
262
|
*
|
|
@@ -342,6 +334,57 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
342
334
|
*/
|
|
343
335
|
ref<RE extends StringReference<DB, TB>>(reference: RE): ExpressionWrapper<DB, TB, ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
344
336
|
ref<RE extends StringReference<DB, TB>>(reference: RE, op: JSONOperatorWith$): JSONPathBuilder<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
337
|
+
/**
|
|
338
|
+
* Creates a JSON path expression with provided column as root document (the $).
|
|
339
|
+
*
|
|
340
|
+
* For a JSON reference expression, see {@link ref}.
|
|
341
|
+
*
|
|
342
|
+
* ### Examples
|
|
343
|
+
*
|
|
344
|
+
* ```ts
|
|
345
|
+
* db.updateTable('person')
|
|
346
|
+
* .set('experience', (eb) => eb.fn('json_set', [
|
|
347
|
+
* 'experience',
|
|
348
|
+
* eb.jsonPath<'experience'>().at('last').key('title'),
|
|
349
|
+
* eb.val('CEO')
|
|
350
|
+
* ]))
|
|
351
|
+
* .where('id', '=', id)
|
|
352
|
+
* .execute()
|
|
353
|
+
* ```
|
|
354
|
+
*
|
|
355
|
+
* The generated SQL (MySQL):
|
|
356
|
+
*
|
|
357
|
+
* ```sql
|
|
358
|
+
* update `person`
|
|
359
|
+
* set `experience` = json_set(`experience`, '$[last].title', ?)
|
|
360
|
+
* where `id` = ?
|
|
361
|
+
* ```
|
|
362
|
+
*/
|
|
363
|
+
jsonPath<$ extends StringReference<DB, TB> = never>(): IsNever<$> extends true ? KyselyTypeError<"You must provide a column reference as this method's $ generic"> : JSONPathBuilder<ExtractTypeFromReferenceExpression<DB, TB, $>>;
|
|
364
|
+
/**
|
|
365
|
+
* Creates a table reference.
|
|
366
|
+
*
|
|
367
|
+
* ```ts
|
|
368
|
+
* db.selectFrom('person')
|
|
369
|
+
* .innerJoin('pet', 'pet.owner_id', 'person.id')
|
|
370
|
+
* .select(eb => [
|
|
371
|
+
* 'person.id',
|
|
372
|
+
* sql<Pet[]>`jsonb_agg(${eb.table('pet')})`.as('pets')
|
|
373
|
+
* ])
|
|
374
|
+
* .groupBy('person.id')
|
|
375
|
+
* .execute()
|
|
376
|
+
* ```
|
|
377
|
+
*
|
|
378
|
+
* The generated SQL (PostgreSQL):
|
|
379
|
+
*
|
|
380
|
+
* ```sql
|
|
381
|
+
* select "person"."id", jsonb_agg("pet") as "pets"
|
|
382
|
+
* from "person"
|
|
383
|
+
* inner join "pet" on "pet"."owner_id" = "person"."id"
|
|
384
|
+
* group by "person"."id"
|
|
385
|
+
* ```
|
|
386
|
+
*/
|
|
387
|
+
table<T extends TB & string>(table: T): ExpressionWrapper<DB, TB, Selectable<DB[T]>>;
|
|
345
388
|
/**
|
|
346
389
|
* Returns a value expression.
|
|
347
390
|
*
|
|
@@ -502,56 +545,6 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
502
545
|
* ```
|
|
503
546
|
*/
|
|
504
547
|
lit<VE extends number | boolean | null>(literal: VE): ExpressionWrapper<DB, TB, VE>;
|
|
505
|
-
/**
|
|
506
|
-
* @deprecated Use the expression builder as a function instead.
|
|
507
|
-
*
|
|
508
|
-
* Before:
|
|
509
|
-
*
|
|
510
|
-
* ```ts
|
|
511
|
-
* where((eb) => eb.cmpr('first_name', '=', 'Jennifer'))
|
|
512
|
-
* ```
|
|
513
|
-
*
|
|
514
|
-
* After:
|
|
515
|
-
*
|
|
516
|
-
* ```ts
|
|
517
|
-
* where((eb) => eb('first_name', '=', 'Jennifer'))
|
|
518
|
-
* ```
|
|
519
|
-
*
|
|
520
|
-
* or
|
|
521
|
-
*
|
|
522
|
-
* ```ts
|
|
523
|
-
* where(({ eb }) => eb('first_name', '=', 'Jennifer'))
|
|
524
|
-
* ```
|
|
525
|
-
*/
|
|
526
|
-
cmpr<O extends SqlBool = SqlBool, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): ExpressionWrapper<DB, TB, O>;
|
|
527
|
-
/**
|
|
528
|
-
* @deprecated Use the expression builder as a function instead.
|
|
529
|
-
*
|
|
530
|
-
* Before:
|
|
531
|
-
*
|
|
532
|
-
* ```ts
|
|
533
|
-
* set((eb) => ({
|
|
534
|
-
* age: eb.bxp('age', '+', 10)
|
|
535
|
-
* }))
|
|
536
|
-
* ```
|
|
537
|
-
*
|
|
538
|
-
* After:
|
|
539
|
-
*
|
|
540
|
-
* ```ts
|
|
541
|
-
* set((eb) => ({
|
|
542
|
-
* age: eb('age', '+', 10)
|
|
543
|
-
* }))
|
|
544
|
-
* ```
|
|
545
|
-
*
|
|
546
|
-
* or
|
|
547
|
-
*
|
|
548
|
-
* ```ts
|
|
549
|
-
* set(({ eb }) => ({
|
|
550
|
-
* age: eb('age', '+', 10)
|
|
551
|
-
* }))
|
|
552
|
-
* ```
|
|
553
|
-
*/
|
|
554
|
-
bxp<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression>(lhs: RE, op: OP, rhs: OperandValueExpression<DB, TB, RE>): ExpressionWrapper<DB, TB, OP extends ComparisonOperator ? SqlBool : ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
555
548
|
/**
|
|
556
549
|
* Creates an unary expression.
|
|
557
550
|
*
|
|
@@ -619,7 +612,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
619
612
|
* select * from "person" where "age" between $1 and $2
|
|
620
613
|
* ```
|
|
621
614
|
*/
|
|
622
|
-
between<RE extends ReferenceExpression<DB, TB
|
|
615
|
+
between<RE extends ReferenceExpression<DB, TB>, SE extends OperandValueExpression<DB, TB, RE>, EE extends OperandValueExpression<DB, TB, RE>>(expr: RE, start: SE, end: EE): ExpressionWrapper<DB, TB, SqlBool>;
|
|
623
616
|
/**
|
|
624
617
|
* Creates a `between symmetric` expression.
|
|
625
618
|
*
|
|
@@ -637,7 +630,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
637
630
|
* select * from "person" where "age" between symmetric $1 and $2
|
|
638
631
|
* ```
|
|
639
632
|
*/
|
|
640
|
-
betweenSymmetric<RE extends ReferenceExpression<DB, TB
|
|
633
|
+
betweenSymmetric<RE extends ReferenceExpression<DB, TB>, SE extends OperandValueExpression<DB, TB, RE>, EE extends OperandValueExpression<DB, TB, RE>>(expr: RE, start: SE, end: EE): ExpressionWrapper<DB, TB, SqlBool>;
|
|
641
634
|
/**
|
|
642
635
|
* Combines two or more expressions using the logical `and` operator.
|
|
643
636
|
*
|
|
@@ -696,8 +689,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
696
689
|
* )
|
|
697
690
|
* ```
|
|
698
691
|
*/
|
|
699
|
-
and(exprs: ReadonlyArray<
|
|
700
|
-
and
|
|
692
|
+
and<E extends OperandExpression<SqlBool>>(exprs: ReadonlyArray<E>): ExpressionWrapper<DB, TB, SqlBool>;
|
|
693
|
+
and<E extends Readonly<FilterObject<DB, TB>>>(exprs: E): ExpressionWrapper<DB, TB, SqlBool>;
|
|
701
694
|
/**
|
|
702
695
|
* Combines two or more expressions using the logical `or` operator.
|
|
703
696
|
*
|
|
@@ -756,8 +749,8 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
756
749
|
* )
|
|
757
750
|
* ```
|
|
758
751
|
*/
|
|
759
|
-
or(exprs: ReadonlyArray<
|
|
760
|
-
or
|
|
752
|
+
or<E extends OperandExpression<SqlBool>>(exprs: ReadonlyArray<E>): ExpressionWrapper<DB, TB, SqlBool>;
|
|
753
|
+
or<E extends Readonly<FilterObject<DB, TB>>>(exprs: E): ExpressionWrapper<DB, TB, SqlBool>;
|
|
761
754
|
/**
|
|
762
755
|
* Wraps the expression in parentheses.
|
|
763
756
|
*
|
|
@@ -797,7 +790,7 @@ export interface ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
797
790
|
* where ("age" = $1 or "age" = $2) and ("first_name" = $3 or "first_name" = $4)
|
|
798
791
|
* ```
|
|
799
792
|
*/
|
|
800
|
-
parens<RE extends ReferenceExpression<DB, TB>, OP extends BinaryOperatorExpression
|
|
793
|
+
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>>;
|
|
801
794
|
parens<T>(expr: Expression<T>): ExpressionWrapper<DB, TB, T>;
|
|
802
795
|
/**
|
|
803
796
|
* See {@link QueryCreator.withSchema}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="./expression-builder.d.ts" />
|
|
2
2
|
import { createSelectQueryBuilder, } from '../query-builder/select-query-builder.js';
|
|
3
3
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
|
-
import { parseTableExpressionOrList, } from '../parser/table-parser.js';
|
|
4
|
+
import { parseTableExpressionOrList, parseTable, } 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
7
|
import { createFunctionModule, } from '../query-builder/function-module.js';
|
|
@@ -11,7 +11,7 @@ import { ParensNode } from '../operation-node/parens-node.js';
|
|
|
11
11
|
import { ExpressionWrapper } from './expression-wrapper.js';
|
|
12
12
|
import { OperatorNode, } from '../operation-node/operator-node.js';
|
|
13
13
|
import { parseUnaryOperation } from '../parser/unary-operation-parser.js';
|
|
14
|
-
import { parseSafeImmediateValue, parseValueExpression,
|
|
14
|
+
import { parseSafeImmediateValue, parseValueExpression, } from '../parser/value-parser.js';
|
|
15
15
|
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
|
|
16
16
|
import { CaseBuilder } from '../query-builder/case-builder.js';
|
|
17
17
|
import { CaseNode } from '../operation-node/case-node.js';
|
|
@@ -19,8 +19,8 @@ import { isReadonlyArray, isUndefined } from '../util/object-utils.js';
|
|
|
19
19
|
import { JSONPathBuilder } from '../query-builder/json-path-builder.js';
|
|
20
20
|
import { BinaryOperationNode } from '../operation-node/binary-operation-node.js';
|
|
21
21
|
import { AndNode } from '../operation-node/and-node.js';
|
|
22
|
-
import { parseSelectArg, } from '../parser/select-parser.js';
|
|
23
22
|
import { TupleNode } from '../operation-node/tuple-node.js';
|
|
23
|
+
import { JSONPathNode } from '../operation-node/json-path-node.js';
|
|
24
24
|
export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
25
25
|
function binary(lhs, op, rhs) {
|
|
26
26
|
return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
|
|
@@ -38,13 +38,6 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
|
38
38
|
queryNode: SelectQueryNode.createFrom(parseTableExpressionOrList(table)),
|
|
39
39
|
});
|
|
40
40
|
},
|
|
41
|
-
selectNoFrom(selection) {
|
|
42
|
-
return createSelectQueryBuilder({
|
|
43
|
-
queryId: createQueryId(),
|
|
44
|
-
executor,
|
|
45
|
-
queryNode: SelectQueryNode.cloneWithSelections(SelectQueryNode.create(), parseSelectArg(selection)),
|
|
46
|
-
});
|
|
47
|
-
},
|
|
48
41
|
case(reference) {
|
|
49
42
|
return new CaseBuilder({
|
|
50
43
|
node: CaseNode.create(isUndefined(reference)
|
|
@@ -58,8 +51,14 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
|
58
51
|
}
|
|
59
52
|
return new JSONPathBuilder(parseJSONReference(reference, op));
|
|
60
53
|
},
|
|
54
|
+
jsonPath() {
|
|
55
|
+
return new JSONPathBuilder(JSONPathNode.create());
|
|
56
|
+
},
|
|
57
|
+
table(table) {
|
|
58
|
+
return new ExpressionWrapper(parseTable(table));
|
|
59
|
+
},
|
|
61
60
|
val(value) {
|
|
62
|
-
return new ExpressionWrapper(
|
|
61
|
+
return new ExpressionWrapper(parseValueExpression(value));
|
|
63
62
|
},
|
|
64
63
|
refTuple(...values) {
|
|
65
64
|
return new ExpressionWrapper(TupleNode.create(values.map(parseReferenceExpression)));
|
|
@@ -70,14 +69,6 @@ export function createExpressionBuilder(executor = NOOP_QUERY_EXECUTOR) {
|
|
|
70
69
|
lit(value) {
|
|
71
70
|
return new ExpressionWrapper(parseSafeImmediateValue(value));
|
|
72
71
|
},
|
|
73
|
-
// @deprecated
|
|
74
|
-
cmpr(lhs, op, rhs) {
|
|
75
|
-
return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
|
|
76
|
-
},
|
|
77
|
-
// @deprecated
|
|
78
|
-
bxp(lhs, op, rhs) {
|
|
79
|
-
return new ExpressionWrapper(parseValueBinaryOperation(lhs, op, rhs));
|
|
80
|
-
},
|
|
81
72
|
unary,
|
|
82
73
|
not(expr) {
|
|
83
74
|
return unary('not', expr);
|