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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AliasNode } from './alias-node.js';
|
|
2
|
+
import { JoinNode } from './join-node.js';
|
|
3
|
+
import { OperationNode } from './operation-node.js';
|
|
4
|
+
import { TableNode } from './table-node.js';
|
|
5
|
+
import { TopNode } from './top-node.js';
|
|
6
|
+
import { WhenNode } from './when-node.js';
|
|
7
|
+
import { WithNode } from './with-node.js';
|
|
8
|
+
export interface MergeQueryNode extends OperationNode {
|
|
9
|
+
readonly kind: 'MergeQueryNode';
|
|
10
|
+
readonly into: TableNode | AliasNode;
|
|
11
|
+
readonly using?: JoinNode;
|
|
12
|
+
readonly whens?: ReadonlyArray<WhenNode>;
|
|
13
|
+
readonly with?: WithNode;
|
|
14
|
+
readonly top?: TopNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare const MergeQueryNode: Readonly<{
|
|
20
|
+
is(node: OperationNode): node is MergeQueryNode;
|
|
21
|
+
create(into: TableNode | AliasNode, withNode?: WithNode): MergeQueryNode;
|
|
22
|
+
cloneWithUsing(mergeNode: MergeQueryNode, using: JoinNode): MergeQueryNode;
|
|
23
|
+
cloneWithWhen(mergeNode: MergeQueryNode, when: WhenNode): MergeQueryNode;
|
|
24
|
+
cloneWithThen(mergeNode: MergeQueryNode, then: OperationNode): MergeQueryNode;
|
|
25
|
+
}>;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MergeQueryNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
const when_node_js_1 = require("./when-node.js");
|
|
6
|
+
/**
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
exports.MergeQueryNode = (0, object_utils_js_1.freeze)({
|
|
10
|
+
is(node) {
|
|
11
|
+
return node.kind === 'MergeQueryNode';
|
|
12
|
+
},
|
|
13
|
+
create(into, withNode) {
|
|
14
|
+
return (0, object_utils_js_1.freeze)({
|
|
15
|
+
kind: 'MergeQueryNode',
|
|
16
|
+
into,
|
|
17
|
+
...(withNode && { with: withNode }),
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
cloneWithUsing(mergeNode, using) {
|
|
21
|
+
return (0, object_utils_js_1.freeze)({
|
|
22
|
+
...mergeNode,
|
|
23
|
+
using,
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
cloneWithWhen(mergeNode, when) {
|
|
27
|
+
return (0, object_utils_js_1.freeze)({
|
|
28
|
+
...mergeNode,
|
|
29
|
+
whens: mergeNode.whens
|
|
30
|
+
? (0, object_utils_js_1.freeze)([...mergeNode.whens, when])
|
|
31
|
+
: (0, object_utils_js_1.freeze)([when]),
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
cloneWithThen(mergeNode, then) {
|
|
35
|
+
return (0, object_utils_js_1.freeze)({
|
|
36
|
+
...mergeNode,
|
|
37
|
+
whens: mergeNode.whens
|
|
38
|
+
? (0, object_utils_js_1.freeze)([
|
|
39
|
+
...mergeNode.whens.slice(0, -1),
|
|
40
|
+
when_node_js_1.WhenNode.cloneWithResult(mergeNode.whens[mergeNode.whens.length - 1], then),
|
|
41
|
+
])
|
|
42
|
+
: undefined,
|
|
43
|
+
});
|
|
44
|
+
},
|
|
45
|
+
});
|
|
@@ -85,7 +85,12 @@ 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';
|
|
89
94
|
/**
|
|
90
95
|
* Transforms an operation node tree into another one.
|
|
91
96
|
*
|
|
@@ -200,7 +205,12 @@ export declare class OperationNodeTransformer {
|
|
|
200
205
|
protected transformJSONPathLeg(node: JSONPathLegNode): JSONPathLegNode;
|
|
201
206
|
protected transformJSONOperatorChain(node: JSONOperatorChainNode): JSONOperatorChainNode;
|
|
202
207
|
protected transformTuple(node: TupleNode): TupleNode;
|
|
208
|
+
protected transformMergeQuery(node: MergeQueryNode): MergeQueryNode;
|
|
209
|
+
protected transformMatched(node: MatchedNode): MatchedNode;
|
|
203
210
|
protected transformAddIndex(node: AddIndexNode): AddIndexNode;
|
|
211
|
+
protected transformCast(node: CastNode): CastNode;
|
|
212
|
+
protected transformFetch(node: FetchNode): FetchNode;
|
|
213
|
+
protected transformTop(node: TopNode): TopNode;
|
|
204
214
|
protected transformDataType(node: DataTypeNode): DataTypeNode;
|
|
205
215
|
protected transformSelectAll(node: SelectAllNode): SelectAllNode;
|
|
206
216
|
protected transformIdentifier(node: IdentifierNode): IdentifierNode;
|
|
@@ -121,7 +121,12 @@ class OperationNodeTransformer {
|
|
|
121
121
|
JSONPathLegNode: this.transformJSONPathLeg.bind(this),
|
|
122
122
|
JSONOperatorChainNode: this.transformJSONOperatorChain.bind(this),
|
|
123
123
|
TupleNode: this.transformTuple.bind(this),
|
|
124
|
+
MergeQueryNode: this.transformMergeQuery.bind(this),
|
|
125
|
+
MatchedNode: this.transformMatched.bind(this),
|
|
124
126
|
AddIndexNode: this.transformAddIndex.bind(this),
|
|
127
|
+
CastNode: this.transformCast.bind(this),
|
|
128
|
+
FetchNode: this.transformFetch.bind(this),
|
|
129
|
+
TopNode: this.transformTop.bind(this),
|
|
125
130
|
});
|
|
126
131
|
transformNode(node) {
|
|
127
132
|
if (!node) {
|
|
@@ -159,6 +164,8 @@ class OperationNodeTransformer {
|
|
|
159
164
|
having: this.transformNode(node.having),
|
|
160
165
|
explain: this.transformNode(node.explain),
|
|
161
166
|
setOperations: this.transformNodeList(node.setOperations),
|
|
167
|
+
fetch: this.transformNode(node.fetch),
|
|
168
|
+
top: this.transformNode(node.top),
|
|
162
169
|
});
|
|
163
170
|
}
|
|
164
171
|
transformSelection(node) {
|
|
@@ -260,6 +267,7 @@ class OperationNodeTransformer {
|
|
|
260
267
|
replace: node.replace,
|
|
261
268
|
explain: this.transformNode(node.explain),
|
|
262
269
|
defaultValues: node.defaultValues,
|
|
270
|
+
top: this.transformNode(node.top),
|
|
263
271
|
});
|
|
264
272
|
}
|
|
265
273
|
transformValues(node) {
|
|
@@ -280,6 +288,7 @@ class OperationNodeTransformer {
|
|
|
280
288
|
orderBy: this.transformNode(node.orderBy),
|
|
281
289
|
limit: this.transformNode(node.limit),
|
|
282
290
|
explain: this.transformNode(node.explain),
|
|
291
|
+
top: this.transformNode(node.top),
|
|
283
292
|
});
|
|
284
293
|
}
|
|
285
294
|
transformReturning(node) {
|
|
@@ -319,6 +328,7 @@ class OperationNodeTransformer {
|
|
|
319
328
|
frontModifiers: this.transformNodeList(node.frontModifiers),
|
|
320
329
|
endModifiers: this.transformNodeList(node.endModifiers),
|
|
321
330
|
nullsNotDistinct: node.nullsNotDistinct,
|
|
331
|
+
identity: node.identity,
|
|
322
332
|
});
|
|
323
333
|
}
|
|
324
334
|
transformAddColumn(node) {
|
|
@@ -371,6 +381,8 @@ class OperationNodeTransformer {
|
|
|
371
381
|
returning: this.transformNode(node.returning),
|
|
372
382
|
with: this.transformNode(node.with),
|
|
373
383
|
explain: this.transformNode(node.explain),
|
|
384
|
+
limit: this.transformNode(node.limit),
|
|
385
|
+
top: this.transformNode(node.top),
|
|
374
386
|
});
|
|
375
387
|
}
|
|
376
388
|
transformColumnUpdate(node) {
|
|
@@ -774,6 +786,23 @@ class OperationNodeTransformer {
|
|
|
774
786
|
values: this.transformNodeList(node.values),
|
|
775
787
|
});
|
|
776
788
|
}
|
|
789
|
+
transformMergeQuery(node) {
|
|
790
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
791
|
+
kind: 'MergeQueryNode',
|
|
792
|
+
into: this.transformNode(node.into),
|
|
793
|
+
using: this.transformNode(node.using),
|
|
794
|
+
whens: this.transformNodeList(node.whens),
|
|
795
|
+
with: this.transformNode(node.with),
|
|
796
|
+
top: this.transformNode(node.top),
|
|
797
|
+
});
|
|
798
|
+
}
|
|
799
|
+
transformMatched(node) {
|
|
800
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
801
|
+
kind: 'MatchedNode',
|
|
802
|
+
not: node.not,
|
|
803
|
+
bySource: node.bySource,
|
|
804
|
+
});
|
|
805
|
+
}
|
|
777
806
|
transformAddIndex(node) {
|
|
778
807
|
return (0, require_all_props_js_1.requireAllProps)({
|
|
779
808
|
kind: 'AddIndexNode',
|
|
@@ -784,6 +813,27 @@ class OperationNodeTransformer {
|
|
|
784
813
|
ifNotExists: node.ifNotExists,
|
|
785
814
|
});
|
|
786
815
|
}
|
|
816
|
+
transformCast(node) {
|
|
817
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
818
|
+
kind: 'CastNode',
|
|
819
|
+
expression: this.transformNode(node.expression),
|
|
820
|
+
dataType: this.transformNode(node.dataType),
|
|
821
|
+
});
|
|
822
|
+
}
|
|
823
|
+
transformFetch(node) {
|
|
824
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
825
|
+
kind: 'FetchNode',
|
|
826
|
+
rowCount: this.transformNode(node.rowCount),
|
|
827
|
+
modifier: node.modifier,
|
|
828
|
+
});
|
|
829
|
+
}
|
|
830
|
+
transformTop(node) {
|
|
831
|
+
return (0, require_all_props_js_1.requireAllProps)({
|
|
832
|
+
kind: 'TopNode',
|
|
833
|
+
expression: node.expression,
|
|
834
|
+
modifiers: node.modifiers,
|
|
835
|
+
});
|
|
836
|
+
}
|
|
787
837
|
transformDataType(node) {
|
|
788
838
|
// An Object.freezed leaf node. No need to clone.
|
|
789
839
|
return node;
|
|
@@ -85,7 +85,12 @@ 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';
|
|
89
94
|
export declare abstract class OperationNodeVisitor {
|
|
90
95
|
#private;
|
|
91
96
|
protected readonly nodeStack: OperationNode[];
|
|
@@ -177,5 +182,10 @@ export declare abstract class OperationNodeVisitor {
|
|
|
177
182
|
protected abstract visitJSONPathLeg(node: JSONPathLegNode): void;
|
|
178
183
|
protected abstract visitJSONOperatorChain(node: JSONOperatorChainNode): void;
|
|
179
184
|
protected abstract visitTuple(node: TupleNode): void;
|
|
185
|
+
protected abstract visitMergeQuery(node: MergeQueryNode): void;
|
|
186
|
+
protected abstract visitMatched(node: MatchedNode): void;
|
|
180
187
|
protected abstract visitAddIndex(node: AddIndexNode): void;
|
|
188
|
+
protected abstract visitCast(node: CastNode): void;
|
|
189
|
+
protected abstract visitFetch(node: FetchNode): void;
|
|
190
|
+
protected abstract visitTop(node: TopNode): void;
|
|
181
191
|
}
|
|
@@ -94,7 +94,12 @@ class OperationNodeVisitor {
|
|
|
94
94
|
JSONPathLegNode: this.visitJSONPathLeg.bind(this),
|
|
95
95
|
JSONOperatorChainNode: this.visitJSONOperatorChain.bind(this),
|
|
96
96
|
TupleNode: this.visitTuple.bind(this),
|
|
97
|
+
MergeQueryNode: this.visitMergeQuery.bind(this),
|
|
98
|
+
MatchedNode: this.visitMatched.bind(this),
|
|
97
99
|
AddIndexNode: this.visitAddIndex.bind(this),
|
|
100
|
+
CastNode: this.visitCast.bind(this),
|
|
101
|
+
FetchNode: this.visitFetch.bind(this),
|
|
102
|
+
TopNode: this.visitTop.bind(this),
|
|
98
103
|
});
|
|
99
104
|
visitNode = (node) => {
|
|
100
105
|
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';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -10,7 +10,9 @@ import { OperationNode } from './operation-node.js';
|
|
|
10
10
|
import { ExplainNode } from './explain-node.js';
|
|
11
11
|
import { ExplainFormat } from '../util/explainable.js';
|
|
12
12
|
import { Expression } from '../expression/expression.js';
|
|
13
|
-
|
|
13
|
+
import { MergeQueryNode } from './merge-query-node.js';
|
|
14
|
+
import { TopNode } from './top-node.js';
|
|
15
|
+
export type QueryNode = SelectQueryNode | InsertQueryNode | UpdateQueryNode | DeleteQueryNode | MergeQueryNode;
|
|
14
16
|
type HasJoins = {
|
|
15
17
|
joins?: ReadonlyArray<JoinNode>;
|
|
16
18
|
};
|
|
@@ -23,6 +25,9 @@ type HasReturning = {
|
|
|
23
25
|
type HasExplain = {
|
|
24
26
|
explain?: ExplainNode;
|
|
25
27
|
};
|
|
28
|
+
type HasTop = {
|
|
29
|
+
top?: TopNode;
|
|
30
|
+
};
|
|
26
31
|
/**
|
|
27
32
|
* @internal
|
|
28
33
|
*/
|
|
@@ -31,7 +36,9 @@ export declare const QueryNode: Readonly<{
|
|
|
31
36
|
cloneWithWhere<T extends HasWhere>(node: T, operation: OperationNode): T;
|
|
32
37
|
cloneWithJoin<T_1 extends HasJoins>(node: T_1, join: JoinNode): T_1;
|
|
33
38
|
cloneWithReturning<T_2 extends HasReturning>(node: T_2, selections: ReadonlyArray<SelectionNode>): T_2;
|
|
34
|
-
|
|
35
|
-
|
|
39
|
+
cloneWithoutReturning<T_3 extends HasReturning>(node: T_3): T_3;
|
|
40
|
+
cloneWithoutWhere<T_4 extends HasWhere>(node: T_4): T_4;
|
|
41
|
+
cloneWithExplain<T_5 extends HasExplain>(node: T_5, format: ExplainFormat | undefined, options: Expression<any> | undefined): T_5;
|
|
42
|
+
cloneWithTop<T_6 extends HasTop>(node: T_6, top: TopNode): T_6;
|
|
36
43
|
}>;
|
|
37
44
|
export {};
|
|
@@ -9,6 +9,7 @@ const where_node_js_1 = require("./where-node.js");
|
|
|
9
9
|
const object_utils_js_1 = require("../util/object-utils.js");
|
|
10
10
|
const returning_node_js_1 = require("./returning-node.js");
|
|
11
11
|
const explain_node_js_1 = require("./explain-node.js");
|
|
12
|
+
const merge_query_node_js_1 = require("./merge-query-node.js");
|
|
12
13
|
/**
|
|
13
14
|
* @internal
|
|
14
15
|
*/
|
|
@@ -17,7 +18,8 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
|
|
|
17
18
|
return (select_query_node_js_1.SelectQueryNode.is(node) ||
|
|
18
19
|
insert_query_node_js_1.InsertQueryNode.is(node) ||
|
|
19
20
|
update_query_node_js_1.UpdateQueryNode.is(node) ||
|
|
20
|
-
delete_query_node_js_1.DeleteQueryNode.is(node)
|
|
21
|
+
delete_query_node_js_1.DeleteQueryNode.is(node) ||
|
|
22
|
+
merge_query_node_js_1.MergeQueryNode.is(node));
|
|
21
23
|
},
|
|
22
24
|
cloneWithWhere(node, operation) {
|
|
23
25
|
return (0, object_utils_js_1.freeze)({
|
|
@@ -41,6 +43,12 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
|
|
|
41
43
|
: returning_node_js_1.ReturningNode.create(selections),
|
|
42
44
|
});
|
|
43
45
|
},
|
|
46
|
+
cloneWithoutReturning(node) {
|
|
47
|
+
return (0, object_utils_js_1.freeze)({
|
|
48
|
+
...node,
|
|
49
|
+
returning: undefined,
|
|
50
|
+
});
|
|
51
|
+
},
|
|
44
52
|
cloneWithoutWhere(node) {
|
|
45
53
|
return (0, object_utils_js_1.freeze)({
|
|
46
54
|
...node,
|
|
@@ -53,4 +61,10 @@ exports.QueryNode = (0, object_utils_js_1.freeze)({
|
|
|
53
61
|
explain: explain_node_js_1.ExplainNode.create(format, options?.toOperationNode()),
|
|
54
62
|
});
|
|
55
63
|
},
|
|
64
|
+
cloneWithTop(node, top) {
|
|
65
|
+
return (0, object_utils_js_1.freeze)({
|
|
66
|
+
...node,
|
|
67
|
+
top,
|
|
68
|
+
});
|
|
69
|
+
},
|
|
56
70
|
});
|
|
@@ -14,6 +14,8 @@ import { WithNode } from './with-node.js';
|
|
|
14
14
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
15
15
|
import { ExplainNode } from './explain-node.js';
|
|
16
16
|
import { SetOperationNode } from './set-operation-node.js';
|
|
17
|
+
import { FetchNode } from './fetch-node.js';
|
|
18
|
+
import { TopNode } from './top-node.js';
|
|
17
19
|
export interface SelectQueryNode extends OperationNode {
|
|
18
20
|
readonly kind: 'SelectQueryNode';
|
|
19
21
|
readonly from?: FromNode;
|
|
@@ -31,6 +33,8 @@ export interface SelectQueryNode extends OperationNode {
|
|
|
31
33
|
readonly having?: HavingNode;
|
|
32
34
|
readonly explain?: ExplainNode;
|
|
33
35
|
readonly setOperations?: ReadonlyArray<SetOperationNode>;
|
|
36
|
+
readonly fetch?: FetchNode;
|
|
37
|
+
readonly top?: TopNode;
|
|
34
38
|
}
|
|
35
39
|
/**
|
|
36
40
|
* @internal
|
|
@@ -47,6 +51,7 @@ export declare const SelectQueryNode: Readonly<{
|
|
|
47
51
|
cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
|
|
48
52
|
cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
|
|
49
53
|
cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
|
|
54
|
+
cloneWithFetch(selectNode: SelectQueryNode, fetch: FetchNode): SelectQueryNode;
|
|
50
55
|
cloneWithHaving(selectNode: SelectQueryNode, operation: OperationNode): SelectQueryNode;
|
|
51
56
|
cloneWithSetOperations(selectNode: SelectQueryNode, setOperations: ReadonlyArray<SetOperationNode>): SelectQueryNode;
|
|
52
57
|
cloneWithoutSelections(select: SelectQueryNode): SelectQueryNode;
|
|
@@ -86,6 +86,12 @@ exports.SelectQueryNode = (0, object_utils_js_1.freeze)({
|
|
|
86
86
|
offset,
|
|
87
87
|
});
|
|
88
88
|
},
|
|
89
|
+
cloneWithFetch(selectNode, fetch) {
|
|
90
|
+
return (0, object_utils_js_1.freeze)({
|
|
91
|
+
...selectNode,
|
|
92
|
+
fetch,
|
|
93
|
+
});
|
|
94
|
+
},
|
|
89
95
|
cloneWithHaving(selectNode, operation) {
|
|
90
96
|
return (0, object_utils_js_1.freeze)({
|
|
91
97
|
...selectNode,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
export type TopModifier = 'percent' | 'with ties' | 'percent with ties';
|
|
3
|
+
export interface TopNode extends OperationNode {
|
|
4
|
+
readonly kind: 'TopNode';
|
|
5
|
+
readonly expression: number | bigint;
|
|
6
|
+
readonly modifiers?: TopModifier;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare const TopNode: Readonly<{
|
|
12
|
+
is(node: OperationNode): node is TopNode;
|
|
13
|
+
create(expression: number | bigint, modifiers?: TopModifier): TopNode;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TopNode = void 0;
|
|
4
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
exports.TopNode = (0, object_utils_js_1.freeze)({
|
|
9
|
+
is(node) {
|
|
10
|
+
return node.kind === 'TopNode';
|
|
11
|
+
},
|
|
12
|
+
create(expression, modifiers) {
|
|
13
|
+
return (0, object_utils_js_1.freeze)({
|
|
14
|
+
kind: 'TopNode',
|
|
15
|
+
expression,
|
|
16
|
+
modifiers,
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
});
|
|
@@ -8,10 +8,12 @@ import { WhereNode } from './where-node.js';
|
|
|
8
8
|
import { WithNode } from './with-node.js';
|
|
9
9
|
import { FromNode } from './from-node.js';
|
|
10
10
|
import { ExplainNode } from './explain-node.js';
|
|
11
|
+
import { LimitNode } from './limit-node.js';
|
|
12
|
+
import { TopNode } from './top-node.js';
|
|
11
13
|
export type UpdateValuesNode = ValueListNode | PrimitiveValueListNode;
|
|
12
14
|
export interface UpdateQueryNode extends OperationNode {
|
|
13
15
|
readonly kind: 'UpdateQueryNode';
|
|
14
|
-
readonly table
|
|
16
|
+
readonly table?: OperationNode;
|
|
15
17
|
readonly from?: FromNode;
|
|
16
18
|
readonly joins?: ReadonlyArray<JoinNode>;
|
|
17
19
|
readonly where?: WhereNode;
|
|
@@ -19,6 +21,8 @@ export interface UpdateQueryNode extends OperationNode {
|
|
|
19
21
|
readonly returning?: ReturningNode;
|
|
20
22
|
readonly with?: WithNode;
|
|
21
23
|
readonly explain?: ExplainNode;
|
|
24
|
+
readonly limit?: LimitNode;
|
|
25
|
+
readonly top?: TopNode;
|
|
22
26
|
}
|
|
23
27
|
/**
|
|
24
28
|
* @internal
|
|
@@ -26,6 +30,8 @@ export interface UpdateQueryNode extends OperationNode {
|
|
|
26
30
|
export declare const UpdateQueryNode: Readonly<{
|
|
27
31
|
is(node: OperationNode): node is UpdateQueryNode;
|
|
28
32
|
create(table: OperationNode, withNode?: WithNode): UpdateQueryNode;
|
|
33
|
+
createWithoutTable(): UpdateQueryNode;
|
|
29
34
|
cloneWithFromItems(updateQuery: UpdateQueryNode, fromItems: ReadonlyArray<OperationNode>): UpdateQueryNode;
|
|
30
35
|
cloneWithUpdates(updateQuery: UpdateQueryNode, updates: ReadonlyArray<ColumnUpdateNode>): UpdateQueryNode;
|
|
36
|
+
cloneWithLimit(updateQuery: UpdateQueryNode, limit: LimitNode): UpdateQueryNode;
|
|
31
37
|
}>;
|
|
@@ -17,6 +17,11 @@ exports.UpdateQueryNode = (0, object_utils_js_1.freeze)({
|
|
|
17
17
|
...(withNode && { with: withNode }),
|
|
18
18
|
});
|
|
19
19
|
},
|
|
20
|
+
createWithoutTable() {
|
|
21
|
+
return (0, object_utils_js_1.freeze)({
|
|
22
|
+
kind: 'UpdateQueryNode',
|
|
23
|
+
});
|
|
24
|
+
},
|
|
20
25
|
cloneWithFromItems(updateQuery, fromItems) {
|
|
21
26
|
return (0, object_utils_js_1.freeze)({
|
|
22
27
|
...updateQuery,
|
|
@@ -33,4 +38,10 @@ exports.UpdateQueryNode = (0, object_utils_js_1.freeze)({
|
|
|
33
38
|
: updates,
|
|
34
39
|
});
|
|
35
40
|
},
|
|
41
|
+
cloneWithLimit(updateQuery, limit) {
|
|
42
|
+
return (0, object_utils_js_1.freeze)({
|
|
43
|
+
...updateQuery,
|
|
44
|
+
limit,
|
|
45
|
+
});
|
|
46
|
+
},
|
|
36
47
|
});
|
|
@@ -18,4 +18,4 @@ export declare function parseValueBinaryOperationOrExpression(args: any[]): Oper
|
|
|
18
18
|
export declare function parseValueBinaryOperation(left: ReferenceExpression<any, any>, operator: BinaryOperatorExpression, right: OperandValueExpressionOrList<any, any, any>): BinaryOperationNode;
|
|
19
19
|
export declare function parseReferentialBinaryOperation(left: ReferenceExpression<any, any>, operator: BinaryOperatorExpression, right: OperandValueExpressionOrList<any, any, any>): BinaryOperationNode;
|
|
20
20
|
export declare function parseFilterObject(obj: Readonly<FilterObject<any, any>>, combinator: 'and' | 'or'): OperationNode;
|
|
21
|
-
export declare function parseFilterList(list: ReadonlyArray<OperationNodeSource | OperationNode>, combinator: 'and' | 'or'): OperationNode;
|
|
21
|
+
export declare function parseFilterList(list: ReadonlyArray<OperationNodeSource | OperationNode>, combinator: 'and' | 'or', withParens?: boolean): OperationNode;
|
|
@@ -38,7 +38,7 @@ function parseFilterObject(obj, combinator) {
|
|
|
38
38
|
.map(([k, v]) => parseValueBinaryOperation(k, needsIsOperator(v) ? 'is' : '=', v)), combinator);
|
|
39
39
|
}
|
|
40
40
|
exports.parseFilterObject = parseFilterObject;
|
|
41
|
-
function parseFilterList(list, combinator) {
|
|
41
|
+
function parseFilterList(list, combinator, withParens = true) {
|
|
42
42
|
const combine = combinator === 'and' ? and_node_js_1.AndNode.create : or_node_js_1.OrNode.create;
|
|
43
43
|
if (list.length === 0) {
|
|
44
44
|
return binary_operation_node_js_1.BinaryOperationNode.create(value_node_js_1.ValueNode.createImmediate(1), operator_node_js_1.OperatorNode.create('='), value_node_js_1.ValueNode.createImmediate(combinator === 'and' ? 1 : 0));
|
|
@@ -47,7 +47,7 @@ function parseFilterList(list, combinator) {
|
|
|
47
47
|
for (let i = 1; i < list.length; ++i) {
|
|
48
48
|
node = combine(node, toOperationNode(list[i]));
|
|
49
49
|
}
|
|
50
|
-
if (list.length > 1) {
|
|
50
|
+
if (list.length > 1 && withParens) {
|
|
51
51
|
return parens_node_js_1.ParensNode.create(node);
|
|
52
52
|
}
|
|
53
53
|
return node;
|
|
@@ -4,8 +4,12 @@ exports.parseDataTypeExpression = void 0;
|
|
|
4
4
|
const data_type_node_js_1 = require("../operation-node/data-type-node.js");
|
|
5
5
|
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
6
6
|
function parseDataTypeExpression(dataType) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
if ((0, operation_node_source_js_1.isOperationNodeSource)(dataType)) {
|
|
8
|
+
return dataType.toOperationNode();
|
|
9
|
+
}
|
|
10
|
+
if ((0, data_type_node_js_1.isColumnDataType)(dataType)) {
|
|
11
|
+
return data_type_node_js_1.DataTypeNode.create(dataType);
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`invalid column data type ${JSON.stringify(dataType)}`);
|
|
10
14
|
}
|
|
11
15
|
exports.parseDataTypeExpression = parseDataTypeExpression;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseFetch = void 0;
|
|
4
|
+
const fetch_node_js_1 = require("../operation-node/fetch-node.js");
|
|
5
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
6
|
+
function parseFetch(rowCount, modifier) {
|
|
7
|
+
if (!(0, object_utils_js_1.isNumber)(rowCount) && !(0, object_utils_js_1.isBigInt)(rowCount)) {
|
|
8
|
+
throw new Error(`Invalid fetch row count: ${rowCount}`);
|
|
9
|
+
}
|
|
10
|
+
if (!isFetchModifier(modifier)) {
|
|
11
|
+
throw new Error(`Invalid fetch modifier: ${modifier}`);
|
|
12
|
+
}
|
|
13
|
+
return fetch_node_js_1.FetchNode.create(rowCount, modifier);
|
|
14
|
+
}
|
|
15
|
+
exports.parseFetch = parseFetch;
|
|
16
|
+
function isFetchModifier(value) {
|
|
17
|
+
return value === 'only' || value === 'with ties';
|
|
18
|
+
}
|
|
@@ -9,6 +9,6 @@ export type InsertObject<DB, TB extends keyof DB> = {
|
|
|
9
9
|
[C in NullableInsertKeys<DB[TB]>]?: ValueExpression<DB, TB, InsertType<DB[TB][C]>> | undefined;
|
|
10
10
|
};
|
|
11
11
|
export type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
|
|
12
|
-
export type InsertObjectOrListFactory<DB, TB extends keyof DB> = (eb: ExpressionBuilder<DB, TB>) => InsertObjectOrList<DB, TB>;
|
|
13
|
-
export type InsertExpression<DB, TB extends keyof DB> = InsertObjectOrList<DB, TB> | InsertObjectOrListFactory<DB, TB>;
|
|
14
|
-
export declare function parseInsertExpression(arg: InsertExpression<any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
|
|
12
|
+
export type InsertObjectOrListFactory<DB, TB extends keyof DB, UT extends keyof DB = never> = (eb: ExpressionBuilder<DB, TB | UT>) => InsertObjectOrList<DB, TB>;
|
|
13
|
+
export type InsertExpression<DB, TB extends keyof DB, UT extends keyof DB = never> = InsertObjectOrList<DB, TB> | InsertObjectOrListFactory<DB, TB, UT>;
|
|
14
|
+
export declare function parseInsertExpression(arg: InsertExpression<any, any, any>): [ReadonlyArray<ColumnNode>, ValuesNode];
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
2
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
|
+
import { OperationNode } from '../operation-node/operation-node.js';
|
|
4
|
+
import { WhenNode } from '../operation-node/when-node.js';
|
|
5
|
+
export declare function parseMergeWhen(type: {
|
|
6
|
+
isMatched: boolean;
|
|
7
|
+
bySource?: boolean;
|
|
8
|
+
}, args?: any[], refRight?: boolean): WhenNode;
|
|
9
|
+
export declare function parseMergeThen(result: 'delete' | 'do nothing' | OperationNodeSource | InsertQueryNode): OperationNode;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseMergeThen = exports.parseMergeWhen = void 0;
|
|
4
|
+
const matched_node_js_1 = require("../operation-node/matched-node.js");
|
|
5
|
+
const operation_node_source_js_1 = require("../operation-node/operation-node-source.js");
|
|
6
|
+
const raw_node_js_1 = require("../operation-node/raw-node.js");
|
|
7
|
+
const when_node_js_1 = require("../operation-node/when-node.js");
|
|
8
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
9
|
+
const binary_operation_parser_js_1 = require("./binary-operation-parser.js");
|
|
10
|
+
function parseMergeWhen(type, args, refRight) {
|
|
11
|
+
return when_node_js_1.WhenNode.create((0, binary_operation_parser_js_1.parseFilterList)([
|
|
12
|
+
matched_node_js_1.MatchedNode.create(!type.isMatched, type.bySource),
|
|
13
|
+
...(args && args.length > 0
|
|
14
|
+
? [
|
|
15
|
+
args.length === 3 && refRight
|
|
16
|
+
? (0, binary_operation_parser_js_1.parseReferentialBinaryOperation)(args[0], args[1], args[2])
|
|
17
|
+
: (0, binary_operation_parser_js_1.parseValueBinaryOperationOrExpression)(args),
|
|
18
|
+
]
|
|
19
|
+
: []),
|
|
20
|
+
], 'and', false));
|
|
21
|
+
}
|
|
22
|
+
exports.parseMergeWhen = parseMergeWhen;
|
|
23
|
+
function parseMergeThen(result) {
|
|
24
|
+
if ((0, object_utils_js_1.isString)(result)) {
|
|
25
|
+
return raw_node_js_1.RawNode.create([result], []);
|
|
26
|
+
}
|
|
27
|
+
if ((0, operation_node_source_js_1.isOperationNodeSource)(result)) {
|
|
28
|
+
return result.toOperationNode();
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
exports.parseMergeThen = parseMergeThen;
|
|
@@ -6,16 +6,17 @@ import { AliasedExpression } from '../expression/expression.js';
|
|
|
6
6
|
import { DrainOuterGeneric, ShallowRecord } from '../util/type-utils.js';
|
|
7
7
|
export type TableExpression<DB, TB extends keyof DB> = AnyAliasedTable<DB> | AnyTable<DB> | AliasedExpressionOrFactory<DB, TB>;
|
|
8
8
|
export type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
|
|
9
|
-
export type TableReference<DB> =
|
|
9
|
+
export type TableReference<DB> = SimpleTableReference<DB> | AliasedExpression<any, any>;
|
|
10
|
+
export type SimpleTableReference<DB> = AnyAliasedTable<DB> | AnyTable<DB>;
|
|
10
11
|
export type AnyAliasedTable<DB> = `${AnyTable<DB>} as ${string}`;
|
|
11
12
|
export type TableReferenceOrList<DB> = TableReference<DB> | ReadonlyArray<TableReference<DB>>;
|
|
12
13
|
export type From<DB, TE> = DrainOuterGeneric<{
|
|
13
14
|
[C in keyof DB | ExtractAliasFromTableExpression<DB, TE>]: C extends ExtractAliasFromTableExpression<DB, TE> ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
|
|
14
15
|
}>;
|
|
15
16
|
export type FromTables<DB, TB extends keyof DB, TE> = DrainOuterGeneric<TB | ExtractAliasFromTableExpression<DB, TE>>;
|
|
16
|
-
export type ExtractTableAlias<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : never;
|
|
17
|
+
export type ExtractTableAlias<DB, TE> = TE extends `${string} as ${infer TA}` ? TA extends keyof DB ? TA : never : TE extends keyof DB ? TE : never;
|
|
17
18
|
export type PickTableWithAlias<DB, T extends AnyAliasedTable<DB>> = T extends `${infer TB} as ${infer A}` ? TB extends keyof DB ? ShallowRecord<A, DB[TB]> : never : never;
|
|
18
|
-
type ExtractAliasFromTableExpression<DB, TE> = TE extends string ?
|
|
19
|
+
type ExtractAliasFromTableExpression<DB, TE> = TE extends string ? TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : never : TE extends AliasedExpression<any, infer QA> ? QA : TE extends (qb: any) => AliasedExpression<any, infer QA> ? QA : never;
|
|
19
20
|
type ExtractRowTypeFromTableExpression<DB, TE, A extends keyof any> = TE extends `${infer T} as ${infer TA}` ? TA extends A ? T extends keyof DB ? DB[T] : never : never : TE extends A ? TE extends keyof DB ? DB[TE] : never : TE extends AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : TE extends (qb: any) => AliasedExpression<infer O, infer QA> ? QA extends A ? O : never : never;
|
|
20
21
|
type AnyTable<DB> = keyof DB & string;
|
|
21
22
|
export declare function parseTableExpressionOrList(table: TableExpressionOrList<any, any>): OperationNode[];
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseTop = void 0;
|
|
4
|
+
const top_node_js_1 = require("../operation-node/top-node.js");
|
|
5
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
6
|
+
function parseTop(expression, modifiers) {
|
|
7
|
+
if (!(0, object_utils_js_1.isNumber)(expression) && !(0, object_utils_js_1.isBigInt)(expression)) {
|
|
8
|
+
throw new Error(`Invalid top expression: ${expression}`);
|
|
9
|
+
}
|
|
10
|
+
if (!(0, object_utils_js_1.isUndefined)(modifiers) && !isTopModifiers(modifiers)) {
|
|
11
|
+
throw new Error(`Invalid top modifiers: ${modifiers}`);
|
|
12
|
+
}
|
|
13
|
+
return top_node_js_1.TopNode.create(expression, modifiers);
|
|
14
|
+
}
|
|
15
|
+
exports.parseTop = parseTop;
|
|
16
|
+
function isTopModifiers(modifiers) {
|
|
17
|
+
return (modifiers === 'percent' ||
|
|
18
|
+
modifiers === 'with ties' ||
|
|
19
|
+
modifiers === 'percent with ties');
|
|
20
|
+
}
|