kysely 0.27.2 → 0.27.4
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/CONTRIBUTING.md +1 -1
- package/README.md +7 -7
- package/dist/cjs/dialect/database-introspector.d.ts +1 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
- package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
- 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 +3 -1
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +4 -2
- package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
- package/dist/cjs/dynamic/dynamic.d.ts +1 -1
- package/dist/cjs/dynamic/dynamic.js +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +31 -5
- package/dist/cjs/expression/expression-builder.js +7 -3
- package/dist/cjs/expression/expression.js +2 -3
- package/dist/cjs/helpers/mssql.js +3 -4
- package/dist/cjs/helpers/mysql.d.ts +3 -3
- package/dist/cjs/helpers/mysql.js +6 -7
- package/dist/cjs/helpers/postgres.d.ts +4 -4
- package/dist/cjs/helpers/postgres.js +7 -8
- package/dist/cjs/helpers/sqlite.js +3 -4
- package/dist/cjs/index.d.ts +31 -18
- package/dist/cjs/index.js +30 -17
- package/dist/cjs/kysely.d.ts +1 -1
- package/dist/cjs/kysely.js +3 -3
- package/dist/cjs/operation-node/add-index-node.js +1 -1
- package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
- package/dist/cjs/operation-node/case-node.d.ts +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 +2 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
- package/dist/cjs/operation-node/data-type-node.js +56 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +6 -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/foreign-key-constraint-node.d.ts +4 -4
- package/dist/cjs/operation-node/having-node.d.ts +1 -1
- package/dist/cjs/operation-node/insert-query-node.d.ts +6 -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 +27 -0
- package/dist/cjs/operation-node/merge-query-node.js +45 -0
- package/dist/cjs/operation-node/on-node.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-source.js +1 -2
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +62 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +6 -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 +8 -6
- package/dist/cjs/operation-node/output-node.d.ts +13 -0
- package/dist/cjs/operation-node/output-node.js +26 -0
- package/dist/cjs/operation-node/query-node.d.ts +17 -5
- package/dist/cjs/operation-node/query-node.js +24 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +6 -0
- package/dist/cjs/operation-node/select-query-node.js +12 -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 +9 -1
- package/dist/cjs/operation-node/update-query-node.js +11 -0
- package/dist/cjs/operation-node/where-node.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +7 -8
- package/dist/cjs/parser/data-type-parser.js +8 -5
- package/dist/cjs/parser/default-value-parser.js +1 -2
- package/dist/cjs/parser/expression-parser.js +3 -4
- package/dist/cjs/parser/fetch-parser.d.ts +2 -0
- package/dist/cjs/parser/fetch-parser.js +17 -0
- package/dist/cjs/parser/group-by-parser.js +1 -2
- package/dist/cjs/parser/identifier-parser.js +1 -2
- package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
- package/dist/cjs/parser/insert-values-parser.js +1 -2
- package/dist/cjs/parser/join-parser.js +1 -2
- package/dist/cjs/parser/merge-parser.d.ts +9 -0
- package/dist/cjs/parser/merge-parser.js +31 -0
- package/dist/cjs/parser/on-commit-action-parse.js +1 -2
- package/dist/cjs/parser/on-modify-action-parser.js +1 -2
- package/dist/cjs/parser/order-by-parser.js +3 -4
- package/dist/cjs/parser/parse-utils.js +4 -5
- package/dist/cjs/parser/partition-by-parser.js +1 -2
- package/dist/cjs/parser/reference-parser.js +8 -9
- package/dist/cjs/parser/returning-parser.d.ts +4 -3
- package/dist/cjs/parser/select-parser.js +2 -3
- package/dist/cjs/parser/set-operation-parser.js +1 -2
- package/dist/cjs/parser/table-parser.d.ts +4 -3
- package/dist/cjs/parser/table-parser.js +4 -5
- package/dist/cjs/parser/top-parser.d.ts +2 -0
- package/dist/cjs/parser/top-parser.js +19 -0
- package/dist/cjs/parser/unary-operation-parser.js +3 -4
- package/dist/cjs/parser/update-set-parser.js +2 -3
- package/dist/cjs/parser/value-parser.js +4 -5
- package/dist/cjs/parser/with-parser.js +1 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +188 -5
- package/dist/cjs/query-builder/delete-query-builder.js +139 -5
- package/dist/cjs/query-builder/function-module.d.ts +5 -5
- package/dist/cjs/query-builder/function-module.js +1 -2
- package/dist/cjs/query-builder/insert-query-builder.d.ts +166 -10
- package/dist/cjs/query-builder/insert-query-builder.js +107 -10
- package/dist/cjs/query-builder/merge-query-builder.d.ts +721 -0
- package/dist/cjs/query-builder/merge-query-builder.js +547 -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/no-result-error.js +2 -2
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
- package/dist/cjs/query-builder/output-interface.d.ts +95 -0
- package/dist/cjs/query-builder/output-interface.js +2 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +177 -17
- package/dist/cjs/query-builder/select-query-builder.js +21 -2
- package/dist/cjs/query-builder/update-query-builder.d.ts +175 -10
- package/dist/cjs/query-builder/update-query-builder.js +119 -7
- package/dist/cjs/query-builder/update-result.d.ts +9 -0
- package/dist/cjs/query-builder/update-result.js +9 -0
- package/dist/cjs/query-builder/where-interface.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +118 -10
- package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
- package/dist/cjs/query-creator.d.ts +96 -5
- package/dist/cjs/query-creator.js +63 -1
- package/dist/cjs/raw-builder/raw-builder.js +1 -2
- package/dist/cjs/raw-builder/sql.d.ts +5 -5
- package/dist/cjs/schema/alter-column-builder.js +3 -0
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/cjs/schema/alter-table-add-index-builder.js +7 -3
- package/dist/cjs/schema/alter-table-builder.js +1 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +18 -1
- package/dist/cjs/schema/column-definition-builder.js +22 -1
- package/dist/cjs/util/assert.js +2 -3
- package/dist/cjs/util/compilable.js +1 -2
- package/dist/cjs/util/infer-result.d.ts +2 -1
- package/dist/cjs/util/json-object-args.js +1 -2
- package/dist/cjs/util/log-once.js +1 -2
- package/dist/cjs/util/object-utils.js +38 -26
- package/dist/cjs/util/performance-now.js +1 -2
- package/dist/cjs/util/prevent-await.js +1 -2
- package/dist/cjs/util/query-id.js +1 -2
- package/dist/cjs/util/random-string.js +1 -2
- package/dist/cjs/util/require-all-props.js +1 -2
- package/dist/cjs/util/stack-trace-utils.js +1 -2
- package/dist/cjs/util/type-utils.d.ts +3 -2
- package/dist/esm/dialect/database-introspector.d.ts +1 -0
- package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
- package/dist/esm/dialect/dialect-adapter-base.js +4 -1
- package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
- package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
- package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
- 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 +3 -1
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +4 -2
- package/dist/esm/dynamic/dynamic.d.ts +1 -1
- package/dist/esm/dynamic/dynamic.js +1 -1
- package/dist/esm/expression/expression-builder.d.ts +31 -5
- package/dist/esm/expression/expression-builder.js +5 -0
- package/dist/esm/helpers/mysql.d.ts +3 -3
- package/dist/esm/helpers/mysql.js +3 -3
- package/dist/esm/helpers/postgres.d.ts +4 -4
- package/dist/esm/helpers/postgres.js +4 -4
- package/dist/esm/index.d.ts +31 -18
- package/dist/esm/index.js +30 -17
- package/dist/esm/kysely.d.ts +1 -1
- package/dist/esm/kysely.js +1 -1
- package/dist/esm/operation-node/add-index-node.js +1 -1
- package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
- package/dist/esm/operation-node/case-node.d.ts +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 +2 -0
- package/dist/esm/operation-node/data-type-node.d.ts +5 -1
- package/dist/esm/operation-node/data-type-node.js +55 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +6 -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/foreign-key-constraint-node.d.ts +4 -4
- package/dist/esm/operation-node/having-node.d.ts +1 -1
- package/dist/esm/operation-node/insert-query-node.d.ts +6 -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 +27 -0
- package/dist/esm/operation-node/merge-query-node.js +43 -0
- package/dist/esm/operation-node/on-node.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-transformer.js +62 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
- package/dist/esm/operation-node/operation-node-visitor.js +6 -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/output-node.d.ts +13 -0
- package/dist/esm/operation-node/output-node.js +24 -0
- package/dist/esm/operation-node/query-node.d.ts +17 -5
- package/dist/esm/operation-node/query-node.js +24 -1
- package/dist/esm/operation-node/select-query-node.d.ts +6 -0
- package/dist/esm/operation-node/select-query-node.js +12 -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 +9 -1
- package/dist/esm/operation-node/update-query-node.js +11 -0
- package/dist/esm/operation-node/where-node.d.ts +1 -1
- 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/returning-parser.d.ts +4 -3
- 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/camel-case/camel-case-plugin.d.ts +2 -2
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +188 -5
- package/dist/esm/query-builder/delete-query-builder.js +139 -5
- package/dist/esm/query-builder/function-module.d.ts +5 -5
- package/dist/esm/query-builder/insert-query-builder.d.ts +166 -10
- package/dist/esm/query-builder/insert-query-builder.js +107 -10
- package/dist/esm/query-builder/merge-query-builder.d.ts +721 -0
- package/dist/esm/query-builder/merge-query-builder.js +541 -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/on-conflict-builder.d.ts +2 -2
- package/dist/esm/query-builder/output-interface.d.ts +95 -0
- package/dist/esm/query-builder/output-interface.js +2 -0
- package/dist/esm/query-builder/returning-interface.d.ts +2 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +177 -17
- package/dist/esm/query-builder/select-query-builder.js +20 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +175 -10
- package/dist/esm/query-builder/update-query-builder.js +119 -7
- package/dist/esm/query-builder/update-result.d.ts +9 -0
- package/dist/esm/query-builder/update-result.js +9 -0
- package/dist/esm/query-builder/where-interface.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
- package/dist/esm/query-compiler/default-query-compiler.js +118 -10
- package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
- package/dist/esm/query-creator.d.ts +96 -5
- package/dist/esm/query-creator.js +64 -2
- package/dist/esm/raw-builder/sql.d.ts +5 -5
- package/dist/esm/schema/alter-column-builder.js +3 -0
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
- package/dist/esm/schema/alter-table-add-index-builder.js +8 -4
- package/dist/esm/schema/alter-table-builder.js +1 -2
- package/dist/esm/schema/column-definition-builder.d.ts +18 -1
- package/dist/esm/schema/column-definition-builder.js +22 -1
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/object-utils.js +18 -5
- package/dist/esm/util/type-utils.d.ts +3 -2
- package/package.json +26 -24
|
@@ -1,5 +1,51 @@
|
|
|
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
|
+
'varbinary',
|
|
35
|
+
];
|
|
36
|
+
const COLUMN_DATA_TYPE_REGEX = [
|
|
37
|
+
/^varchar\(\d+\)$/,
|
|
38
|
+
/^char\(\d+\)$/,
|
|
39
|
+
/^decimal\(\d+, \d+\)$/,
|
|
40
|
+
/^numeric\(\d+, \d+\)$/,
|
|
41
|
+
/^binary\(\d+\)$/,
|
|
42
|
+
/^datetime\(\d+\)$/,
|
|
43
|
+
/^time\(\d+\)$/,
|
|
44
|
+
/^timetz\(\d+\)$/,
|
|
45
|
+
/^timestamp\(\d+\)$/,
|
|
46
|
+
/^timestamptz\(\d+\)$/,
|
|
47
|
+
/^varbinary\(\d+\)$/,
|
|
48
|
+
];
|
|
3
49
|
/**
|
|
4
50
|
* @internal
|
|
5
51
|
*/
|
|
@@ -14,3 +60,12 @@ export const DataTypeNode = freeze({
|
|
|
14
60
|
});
|
|
15
61
|
},
|
|
16
62
|
});
|
|
63
|
+
export function isColumnDataType(dataType) {
|
|
64
|
+
if (SIMPLE_COLUMN_DATA_TYPES.includes(dataType)) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
if (COLUMN_DATA_TYPE_REGEX.some((r) => r.test(dataType))) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
@@ -9,6 +9,8 @@ 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';
|
|
13
|
+
import { OutputNode } from './output-node.js';
|
|
12
14
|
export interface DeleteQueryNode extends OperationNode {
|
|
13
15
|
readonly kind: 'DeleteQueryNode';
|
|
14
16
|
readonly from: FromNode;
|
|
@@ -20,6 +22,8 @@ export interface DeleteQueryNode extends OperationNode {
|
|
|
20
22
|
readonly orderBy?: OrderByNode;
|
|
21
23
|
readonly limit?: LimitNode;
|
|
22
24
|
readonly explain?: ExplainNode;
|
|
25
|
+
readonly top?: TopNode;
|
|
26
|
+
readonly output?: OutputNode;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
25
29
|
* @internal
|
|
@@ -28,6 +32,8 @@ export declare const DeleteQueryNode: Readonly<{
|
|
|
28
32
|
is(node: OperationNode): node is DeleteQueryNode;
|
|
29
33
|
create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
|
|
30
34
|
cloneWithOrderByItems(deleteNode: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>): DeleteQueryNode;
|
|
35
|
+
cloneWithoutOrderBy(deleteNode: DeleteQueryNode): DeleteQueryNode;
|
|
31
36
|
cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
|
|
37
|
+
cloneWithoutLimit(deleteNode: DeleteQueryNode): DeleteQueryNode;
|
|
32
38
|
cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;
|
|
33
39
|
}>;
|
|
@@ -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
|
+
};
|
|
@@ -19,10 +19,10 @@ export declare const ForeignKeyConstraintNode: Readonly<{
|
|
|
19
19
|
is(node: OperationNode): node is ForeignKeyConstraintNode;
|
|
20
20
|
create(sourceColumns: ReadonlyArray<ColumnNode>, targetTable: TableNode, targetColumns: ReadonlyArray<ColumnNode>, constraintName?: string): ForeignKeyConstraintNode;
|
|
21
21
|
cloneWith(node: ForeignKeyConstraintNode, props: ForeignKeyConstraintNodeProps): Readonly<{
|
|
22
|
-
name?: IdentifierNode
|
|
23
|
-
onDelete?:
|
|
24
|
-
onUpdate?:
|
|
25
|
-
kind:
|
|
22
|
+
name?: IdentifierNode;
|
|
23
|
+
onDelete?: OnModifyForeignAction;
|
|
24
|
+
onUpdate?: OnModifyForeignAction;
|
|
25
|
+
kind: "ForeignKeyConstraintNode";
|
|
26
26
|
columns: ReadonlyArray<ColumnNode>;
|
|
27
27
|
references: ReferencesNode;
|
|
28
28
|
}>;
|
|
@@ -9,5 +9,5 @@ export interface HavingNode extends OperationNode {
|
|
|
9
9
|
export declare const HavingNode: Readonly<{
|
|
10
10
|
is(node: OperationNode): node is HavingNode;
|
|
11
11
|
create(filter: OperationNode): HavingNode;
|
|
12
|
-
cloneWithOperation(havingNode: HavingNode, operator:
|
|
12
|
+
cloneWithOperation(havingNode: HavingNode, operator: "And" | "Or", operation: OperationNode): HavingNode;
|
|
13
13
|
}>;
|
|
@@ -3,13 +3,15 @@ import { ExplainNode } from './explain-node.js';
|
|
|
3
3
|
import { OnConflictNode } from './on-conflict-node.js';
|
|
4
4
|
import { OnDuplicateKeyNode } from './on-duplicate-key-node.js';
|
|
5
5
|
import { OperationNode } from './operation-node.js';
|
|
6
|
+
import { OutputNode } from './output-node.js';
|
|
6
7
|
import { ReturningNode } from './returning-node.js';
|
|
7
8
|
import { TableNode } from './table-node.js';
|
|
9
|
+
import { TopNode } from './top-node.js';
|
|
8
10
|
import { WithNode } from './with-node.js';
|
|
9
11
|
export type InsertQueryNodeProps = Omit<InsertQueryNode, 'kind' | 'into'>;
|
|
10
12
|
export interface InsertQueryNode extends OperationNode {
|
|
11
13
|
readonly kind: 'InsertQueryNode';
|
|
12
|
-
readonly into
|
|
14
|
+
readonly into?: TableNode;
|
|
13
15
|
readonly columns?: ReadonlyArray<ColumnNode>;
|
|
14
16
|
readonly values?: OperationNode;
|
|
15
17
|
readonly returning?: ReturningNode;
|
|
@@ -20,6 +22,8 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
20
22
|
readonly replace?: boolean;
|
|
21
23
|
readonly explain?: ExplainNode;
|
|
22
24
|
readonly defaultValues?: boolean;
|
|
25
|
+
readonly top?: TopNode;
|
|
26
|
+
readonly output?: OutputNode;
|
|
23
27
|
}
|
|
24
28
|
/**
|
|
25
29
|
* @internal
|
|
@@ -27,5 +31,6 @@ export interface InsertQueryNode extends OperationNode {
|
|
|
27
31
|
export declare const InsertQueryNode: Readonly<{
|
|
28
32
|
is(node: OperationNode): node is InsertQueryNode;
|
|
29
33
|
create(into: TableNode, withNode?: WithNode, replace?: boolean): InsertQueryNode;
|
|
34
|
+
createWithoutInto(): InsertQueryNode;
|
|
30
35
|
cloneWith(insertQuery: InsertQueryNode, props: InsertQueryNodeProps): InsertQueryNode;
|
|
31
36
|
}>;
|
|
@@ -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
|
+
}>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/// <reference types="./matched-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const MatchedNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'MatchedNode';
|
|
9
|
+
},
|
|
10
|
+
create(not, bySource = false) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'MatchedNode',
|
|
13
|
+
not,
|
|
14
|
+
bySource,
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
});
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AliasNode } from './alias-node.js';
|
|
2
|
+
import { JoinNode } from './join-node.js';
|
|
3
|
+
import { OperationNode } from './operation-node.js';
|
|
4
|
+
import { OutputNode } from './output-node.js';
|
|
5
|
+
import { TableNode } from './table-node.js';
|
|
6
|
+
import { TopNode } from './top-node.js';
|
|
7
|
+
import { WhenNode } from './when-node.js';
|
|
8
|
+
import { WithNode } from './with-node.js';
|
|
9
|
+
export interface MergeQueryNode extends OperationNode {
|
|
10
|
+
readonly kind: 'MergeQueryNode';
|
|
11
|
+
readonly into: TableNode | AliasNode;
|
|
12
|
+
readonly using?: JoinNode;
|
|
13
|
+
readonly whens?: ReadonlyArray<WhenNode>;
|
|
14
|
+
readonly with?: WithNode;
|
|
15
|
+
readonly top?: TopNode;
|
|
16
|
+
readonly output?: OutputNode;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare const MergeQueryNode: Readonly<{
|
|
22
|
+
is(node: OperationNode): node is MergeQueryNode;
|
|
23
|
+
create(into: TableNode | AliasNode, withNode?: WithNode): MergeQueryNode;
|
|
24
|
+
cloneWithUsing(mergeNode: MergeQueryNode, using: JoinNode): MergeQueryNode;
|
|
25
|
+
cloneWithWhen(mergeNode: MergeQueryNode, when: WhenNode): MergeQueryNode;
|
|
26
|
+
cloneWithThen(mergeNode: MergeQueryNode, then: OperationNode): MergeQueryNode;
|
|
27
|
+
}>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/// <reference types="./merge-query-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { WhenNode } from './when-node.js';
|
|
4
|
+
/**
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export const MergeQueryNode = freeze({
|
|
8
|
+
is(node) {
|
|
9
|
+
return node.kind === 'MergeQueryNode';
|
|
10
|
+
},
|
|
11
|
+
create(into, withNode) {
|
|
12
|
+
return freeze({
|
|
13
|
+
kind: 'MergeQueryNode',
|
|
14
|
+
into,
|
|
15
|
+
...(withNode && { with: withNode }),
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
cloneWithUsing(mergeNode, using) {
|
|
19
|
+
return freeze({
|
|
20
|
+
...mergeNode,
|
|
21
|
+
using,
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
cloneWithWhen(mergeNode, when) {
|
|
25
|
+
return freeze({
|
|
26
|
+
...mergeNode,
|
|
27
|
+
whens: mergeNode.whens
|
|
28
|
+
? freeze([...mergeNode.whens, when])
|
|
29
|
+
: freeze([when]),
|
|
30
|
+
});
|
|
31
|
+
},
|
|
32
|
+
cloneWithThen(mergeNode, then) {
|
|
33
|
+
return freeze({
|
|
34
|
+
...mergeNode,
|
|
35
|
+
whens: mergeNode.whens
|
|
36
|
+
? freeze([
|
|
37
|
+
...mergeNode.whens.slice(0, -1),
|
|
38
|
+
WhenNode.cloneWithResult(mergeNode.whens[mergeNode.whens.length - 1], then),
|
|
39
|
+
])
|
|
40
|
+
: undefined,
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
});
|
|
@@ -9,5 +9,5 @@ export interface OnNode extends OperationNode {
|
|
|
9
9
|
export declare const OnNode: Readonly<{
|
|
10
10
|
is(node: OperationNode): node is OnNode;
|
|
11
11
|
create(filter: OperationNode): OnNode;
|
|
12
|
-
cloneWithOperation(onNode: OnNode, operator:
|
|
12
|
+
cloneWithOperation(onNode: OnNode, operator: "And" | "Or", operation: OperationNode): OnNode;
|
|
13
13
|
}>;
|
|
@@ -85,7 +85,13 @@ import { JSONPathNode } from './json-path-node.js';
|
|
|
85
85
|
import { JSONPathLegNode } from './json-path-leg-node.js';
|
|
86
86
|
import { JSONOperatorChainNode } from './json-operator-chain-node.js';
|
|
87
87
|
import { TupleNode } from './tuple-node.js';
|
|
88
|
+
import { MergeQueryNode } from './merge-query-node.js';
|
|
89
|
+
import { MatchedNode } from './matched-node.js';
|
|
88
90
|
import { AddIndexNode } from './add-index-node.js';
|
|
91
|
+
import { CastNode } from './cast-node.js';
|
|
92
|
+
import { FetchNode } from './fetch-node.js';
|
|
93
|
+
import { TopNode } from './top-node.js';
|
|
94
|
+
import { OutputNode } from './output-node.js';
|
|
89
95
|
/**
|
|
90
96
|
* Transforms an operation node tree into another one.
|
|
91
97
|
*
|
|
@@ -200,7 +206,13 @@ export declare class OperationNodeTransformer {
|
|
|
200
206
|
protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
|
|
201
207
|
protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
|
|
202
208
|
protected transformTuple(node: TupleNode): TupleNode;
|
|
209
|
+
protected transformMergeQuery(node: MergeQueryNode): MergeQueryNode;
|
|
210
|
+
protected transformMatched(node: MatchedNode): MatchedNode;
|
|
203
211
|
protected transformAddIndex(node: AddIndexNode): AddIndexNode;
|
|
212
|
+
protected transformCast(node: CastNode): CastNode;
|
|
213
|
+
protected transformFetch(node: FetchNode): FetchNode;
|
|
214
|
+
protected transformTop(node: TopNode): TopNode;
|
|
215
|
+
protected transformOutput(node: OutputNode): OutputNode;
|
|
204
216
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
205
217
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
206
218
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -119,7 +119,13 @@ export class OperationNodeTransformer {
|
|
|
119
119
|
JSONPathLegNode: this.transformJSONPathLeg.bind(this),
|
|
120
120
|
JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
|
|
121
121
|
TupleNode: this.transformTuple.bind(this),
|
|
122
|
+
MergeQueryNode: this.transformMergeQuery.bind(this),
|
|
123
|
+
MatchedNode: this.transformMatched.bind(this),
|
|
122
124
|
AddIndexNode: this.transformAddIndex.bind(this),
|
|
125
|
+
CastNode: this.transformCast.bind(this),
|
|
126
|
+
FetchNode: this.transformFetch.bind(this),
|
|
127
|
+
TopNode: this.transformTop.bind(this),
|
|
128
|
+
OutputNode: this.transformOutput.bind(this),
|
|
123
129
|
});
|
|
124
130
|
transformNode(node) {
|
|
125
131
|
if (!node) {
|
|
@@ -157,6 +163,8 @@ export class OperationNodeTransformer {
|
|
|
157
163
|
having: this.transformNode(node.having),
|
|
158
164
|
explain: this.transformNode(node.explain),
|
|
159
165
|
setOperations: this.transformNodeList(node.setOperations),
|
|
166
|
+
fetch: this.transformNode(node.fetch),
|
|
167
|
+
top: this.transformNode(node.top),
|
|
160
168
|
});
|
|
161
169
|
}
|
|
162
170
|
transformSelection(node) {
|
|
@@ -258,6 +266,8 @@ export class OperationNodeTransformer {
|
|
|
258
266
|
replace: node.replace,
|
|
259
267
|
explain: this.transformNode(node.explain),
|
|
260
268
|
defaultValues: node.defaultValues,
|
|
269
|
+
top: this.transformNode(node.top),
|
|
270
|
+
output: this.transformNode(node.output),
|
|
261
271
|
});
|
|
262
272
|
}
|
|
263
273
|
transformValues(node) {
|
|
@@ -278,6 +288,8 @@ export class OperationNodeTransformer {
|
|
|
278
288
|
orderBy: this.transformNode(node.orderBy),
|
|
279
289
|
limit: this.transformNode(node.limit),
|
|
280
290
|
explain: this.transformNode(node.explain),
|
|
291
|
+
top: this.transformNode(node.top),
|
|
292
|
+
output: this.transformNode(node.output),
|
|
281
293
|
});
|
|
282
294
|
}
|
|
283
295
|
transformReturning(node) {
|
|
@@ -317,6 +329,8 @@ export class OperationNodeTransformer {
|
|
|
317
329
|
frontModifiers: this.transformNodeList(node.frontModifiers),
|
|
318
330
|
endModifiers: this.transformNodeList(node.endModifiers),
|
|
319
331
|
nullsNotDistinct: node.nullsNotDistinct,
|
|
332
|
+
identity: node.identity,
|
|
333
|
+
ifNotExists: node.ifNotExists,
|
|
320
334
|
});
|
|
321
335
|
}
|
|
322
336
|
transformAddColumn(node) {
|
|
@@ -369,6 +383,9 @@ export class OperationNodeTransformer {
|
|
|
369
383
|
returning: this.transformNode(node.returning),
|
|
370
384
|
with: this.transformNode(node.with),
|
|
371
385
|
explain: this.transformNode(node.explain),
|
|
386
|
+
limit: this.transformNode(node.limit),
|
|
387
|
+
top: this.transformNode(node.top),
|
|
388
|
+
output: this.transformNode(node.output),
|
|
372
389
|
});
|
|
373
390
|
}
|
|
374
391
|
transformColumnUpdate(node) {
|
|
@@ -772,6 +789,24 @@ export class OperationNodeTransformer {
|
|
|
772
789
|
values: this.transformNodeList(node.values),
|
|
773
790
|
});
|
|
774
791
|
}
|
|
792
|
+
transformMergeQuery(node) {
|
|
793
|
+
return requireAllProps({
|
|
794
|
+
kind: 'MergeQueryNode',
|
|
795
|
+
into: this.transformNode(node.into),
|
|
796
|
+
using: this.transformNode(node.using),
|
|
797
|
+
whens: this.transformNodeList(node.whens),
|
|
798
|
+
with: this.transformNode(node.with),
|
|
799
|
+
top: this.transformNode(node.top),
|
|
800
|
+
output: this.transformNode(node.output),
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
transformMatched(node) {
|
|
804
|
+
return requireAllProps({
|
|
805
|
+
kind: 'MatchedNode',
|
|
806
|
+
not: node.not,
|
|
807
|
+
bySource: node.bySource,
|
|
808
|
+
});
|
|
809
|
+
}
|
|
775
810
|
transformAddIndex(node) {
|
|
776
811
|
return requireAllProps({
|
|
777
812
|
kind: 'AddIndexNode',
|
|
@@ -782,6 +817,33 @@ export class OperationNodeTransformer {
|
|
|
782
817
|
ifNotExists: node.ifNotExists,
|
|
783
818
|
});
|
|
784
819
|
}
|
|
820
|
+
transformCast(node) {
|
|
821
|
+
return requireAllProps({
|
|
822
|
+
kind: 'CastNode',
|
|
823
|
+
expression: this.transformNode(node.expression),
|
|
824
|
+
dataType: this.transformNode(node.dataType),
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
transformFetch(node) {
|
|
828
|
+
return requireAllProps({
|
|
829
|
+
kind: 'FetchNode',
|
|
830
|
+
rowCount: this.transformNode(node.rowCount),
|
|
831
|
+
modifier: node.modifier,
|
|
832
|
+
});
|
|
833
|
+
}
|
|
834
|
+
transformTop(node) {
|
|
835
|
+
return requireAllProps({
|
|
836
|
+
kind: 'TopNode',
|
|
837
|
+
expression: node.expression,
|
|
838
|
+
modifiers: node.modifiers,
|
|
839
|
+
});
|
|
840
|
+
}
|
|
841
|
+
transformOutput(node) {
|
|
842
|
+
return requireAllProps({
|
|
843
|
+
kind: 'OutputNode',
|
|
844
|
+
selections: this.transformNodeList(node.selections),
|
|
845
|
+
});
|
|
846
|
+
}
|
|
785
847
|
transformDataType(node) {
|
|
786
848
|
// An Object.freezed leaf node. No need to clone.
|
|
787
849
|
return node;
|
|
@@ -85,7 +85,13 @@ import { JSONPathNode } from './json-path-node.js';
|
|
|
85
85
|
import { JSONPathLegNode } from './json-path-leg-node.js';
|
|
86
86
|
import { JSONOperatorChainNode } from './json-operator-chain-node.js';
|
|
87
87
|
import { TupleNode } from './tuple-node.js';
|
|
88
|
+
import { MergeQueryNode } from './merge-query-node.js';
|
|
89
|
+
import { MatchedNode } from './matched-node.js';
|
|
88
90
|
import { AddIndexNode } from './add-index-node.js';
|
|
91
|
+
import { CastNode } from './cast-node.js';
|
|
92
|
+
import { FetchNode } from './fetch-node.js';
|
|
93
|
+
import { TopNode } from './top-node.js';
|
|
94
|
+
import { OutputNode } from './output-node.js';
|
|
89
95
|
export declare abstract class OperationNodeVisitor {
|
|
90
96
|
#private;
|
|
91
97
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -177,5 +183,11 @@ export declare abstract class OperationNodeVisitor {
|
|
|
177
183
|
protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
|
|
178
184
|
protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
|
|
179
185
|
protected abstract visitTuple(node: TupleNode): void;
|
|
186
|
+
protected abstract visitMergeQuery(node: MergeQueryNode): void;
|
|
187
|
+
protected abstract visitMatched(node: MatchedNode): void;
|
|
180
188
|
protected abstract visitAddIndex(node: AddIndexNode): void;
|
|
189
|
+
protected abstract visitCast(node: CastNode): void;
|
|
190
|
+
protected abstract visitFetch(node: FetchNode): void;
|
|
191
|
+
protected abstract visitTop(node: TopNode): void;
|
|
192
|
+
protected abstract visitOutput(node: OutputNode): void;
|
|
181
193
|
}
|
|
@@ -92,7 +92,13 @@ export class OperationNodeVisitor {
|
|
|
92
92
|
JSONPathLegNode: this.visitJSONPathLeg.bind(this),
|
|
93
93
|
JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
|
|
94
94
|
TupleNode: this.visitTuple.bind(this),
|
|
95
|
+
MergeQueryNode: this.visitMergeQuery.bind(this),
|
|
96
|
+
MatchedNode: this.visitMatched.bind(this),
|
|
95
97
|
AddIndexNode: this.visitAddIndex.bind(this),
|
|
98
|
+
CastNode: this.visitCast.bind(this),
|
|
99
|
+
FetchNode: this.visitFetch.bind(this),
|
|
100
|
+
TopNode: this.visitTop.bind(this),
|
|
101
|
+
OutputNode: this.visitOutput.bind(this),
|
|
96
102
|
});
|
|
97
103
|
visitNode = (node) => {
|
|
98
104
|
this.nodeStack.push(node);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'AddIndexNode';
|
|
1
|
+
export type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode' | 'BinaryOperationNode' | 'UnaryOperationNode' | 'UsingNode' | 'FunctionNode' | 'CaseNode' | 'WhenNode' | 'JSONReferenceNode' | 'JSONPathNode' | 'JSONPathLegNode' | 'JSONOperatorChainNode' | 'TupleNode' | 'MergeQueryNode' | 'MatchedNode' | 'AddIndexNode' | 'CastNode' | 'FetchNode' | 'TopNode' | 'OutputNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
|
-
export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"];
|
|
2
|
+
export declare const COMPARISON_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "^@", "&&", "?", "?&", "?|", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from"];
|
|
3
3
|
export declare const ARITHMETIC_OPERATORS: readonly ["+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>"];
|
|
4
4
|
export declare const JSON_OPERATORS: readonly ["->", "->>"];
|
|
5
|
-
export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
|
|
5
|
+
export declare const BINARY_OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "^@", "&&", "?", "?&", "?|", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||"];
|
|
6
6
|
export declare const UNARY_FILTER_OPERATORS: readonly ["exists", "not exists"];
|
|
7
7
|
export declare const UNARY_OPERATORS: readonly ["not", "-", "exists", "not exists"];
|
|
8
|
-
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "&&", "?", "?&", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"];
|
|
8
|
+
export declare const OPERATORS: readonly ["=", "==", "!=", "<>", ">", ">=", "<", "<=", "in", "not in", "is", "is not", "like", "not like", "match", "ilike", "not ilike", "@>", "<@", "^@", "&&", "?", "?&", "?|", "!<", "!>", "<=>", "!~", "~", "~*", "!~*", "@@", "@@@", "!!", "<->", "regexp", "is distinct from", "is not distinct from", "+", "-", "*", "/", "%", "^", "&", "|", "#", "<<", ">>", "&&", "||", "->", "->>", "not", "-", "exists", "not exists", "between", "between symmetric"];
|
|
9
9
|
export type ComparisonOperator = (typeof COMPARISON_OPERATORS)[number];
|
|
10
10
|
export type ArithmeticOperator = (typeof ARITHMETIC_OPERATORS)[number];
|
|
11
11
|
export type JSONOperator = (typeof JSON_OPERATORS)[number];
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
export interface OutputNode extends OperationNode {
|
|
3
|
+
readonly kind: 'OutputNode';
|
|
4
|
+
readonly selections: ReadonlyArray<OperationNode>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare const OutputNode: Readonly<{
|
|
10
|
+
is(node: OperationNode): node is OutputNode;
|
|
11
|
+
create(selections: ReadonlyArray<OperationNode>): OutputNode;
|
|
12
|
+
cloneWithSelections(output: OutputNode, selections: ReadonlyArray<OperationNode>): OutputNode;
|
|
13
|
+
}>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="./output-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const OutputNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'OutputNode';
|
|
9
|
+
},
|
|
10
|
+
create(selections) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'OutputNode',
|
|
13
|
+
selections: freeze(selections),
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
cloneWithSelections(output, selections) {
|
|
17
|
+
return freeze({
|
|
18
|
+
...output,
|
|
19
|
+
selections: output.selections
|
|
20
|
+
? freeze([...output.selections, ...selections])
|
|
21
|
+
: freeze(selections),
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
});
|