flowquery 1.0.68 → 1.0.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +244 -1
- package/dist/compute/runner.d.ts +6 -0
- package/dist/compute/runner.d.ts.map +1 -1
- package/dist/compute/runner.js +26 -0
- package/dist/compute/runner.js.map +1 -1
- package/dist/flowquery.min.js +1 -1
- package/dist/graph/bindings.d.ts +78 -0
- package/dist/graph/bindings.d.ts.map +1 -0
- package/dist/graph/bindings.js +210 -0
- package/dist/graph/bindings.js.map +1 -0
- package/dist/graph/database.d.ts +4 -2
- package/dist/graph/database.d.ts.map +1 -1
- package/dist/graph/database.js +45 -9
- package/dist/graph/database.js.map +1 -1
- package/dist/graph/physical_node.d.ts +9 -0
- package/dist/graph/physical_node.d.ts.map +1 -1
- package/dist/graph/physical_node.js +70 -3
- package/dist/graph/physical_node.js.map +1 -1
- package/dist/graph/physical_relationship.d.ts +9 -0
- package/dist/graph/physical_relationship.d.ts.map +1 -1
- package/dist/graph/physical_relationship.js +70 -3
- package/dist/graph/physical_relationship.js.map +1 -1
- package/dist/parsing/ast_node.d.ts +9 -0
- package/dist/parsing/ast_node.d.ts.map +1 -1
- package/dist/parsing/ast_node.js +21 -4
- package/dist/parsing/ast_node.js.map +1 -1
- package/dist/parsing/expressions/binding_reference.d.ts +16 -0
- package/dist/parsing/expressions/binding_reference.d.ts.map +1 -0
- package/dist/parsing/expressions/binding_reference.js +34 -0
- package/dist/parsing/expressions/binding_reference.js.map +1 -0
- package/dist/parsing/operations/create_node.d.ts +5 -1
- package/dist/parsing/operations/create_node.d.ts.map +1 -1
- package/dist/parsing/operations/create_node.js +12 -2
- package/dist/parsing/operations/create_node.js.map +1 -1
- package/dist/parsing/operations/create_relationship.d.ts +5 -1
- package/dist/parsing/operations/create_relationship.d.ts.map +1 -1
- package/dist/parsing/operations/create_relationship.js +12 -2
- package/dist/parsing/operations/create_relationship.js.map +1 -1
- package/dist/parsing/operations/drop_binding.d.ts +15 -0
- package/dist/parsing/operations/drop_binding.d.ts.map +1 -0
- package/dist/parsing/operations/drop_binding.js +42 -0
- package/dist/parsing/operations/drop_binding.js.map +1 -0
- package/dist/parsing/operations/let.d.ts +36 -0
- package/dist/parsing/operations/let.d.ts.map +1 -0
- package/dist/parsing/operations/let.js +101 -0
- package/dist/parsing/operations/let.js.map +1 -0
- package/dist/parsing/operations/load.d.ts +11 -0
- package/dist/parsing/operations/load.d.ts.map +1 -1
- package/dist/parsing/operations/load.js +31 -2
- package/dist/parsing/operations/load.js.map +1 -1
- package/dist/parsing/operations/merge.d.ts +158 -0
- package/dist/parsing/operations/merge.d.ts.map +1 -0
- package/dist/parsing/operations/merge.js +338 -0
- package/dist/parsing/operations/merge.js.map +1 -0
- package/dist/parsing/operations/refresh_binding.d.ts +15 -0
- package/dist/parsing/operations/refresh_binding.d.ts.map +1 -0
- package/dist/parsing/operations/refresh_binding.js +42 -0
- package/dist/parsing/operations/refresh_binding.js.map +1 -0
- package/dist/parsing/operations/refresh_node.d.ts +11 -0
- package/dist/parsing/operations/refresh_node.d.ts.map +1 -0
- package/dist/parsing/operations/refresh_node.js +46 -0
- package/dist/parsing/operations/refresh_node.js.map +1 -0
- package/dist/parsing/operations/refresh_relationship.d.ts +11 -0
- package/dist/parsing/operations/refresh_relationship.d.ts.map +1 -0
- package/dist/parsing/operations/refresh_relationship.js +46 -0
- package/dist/parsing/operations/refresh_relationship.js.map +1 -0
- package/dist/parsing/operations/return.d.ts.map +1 -1
- package/dist/parsing/operations/return.js +7 -1
- package/dist/parsing/operations/return.js.map +1 -1
- package/dist/parsing/operations/update.d.ts +27 -0
- package/dist/parsing/operations/update.d.ts.map +1 -0
- package/dist/parsing/operations/update.js +88 -0
- package/dist/parsing/operations/update.js.map +1 -0
- package/dist/parsing/operations/update_delete.d.ts +43 -0
- package/dist/parsing/operations/update_delete.d.ts.map +1 -0
- package/dist/parsing/operations/update_delete.js +105 -0
- package/dist/parsing/operations/update_delete.js.map +1 -0
- package/dist/parsing/parser.d.ts +70 -1
- package/dist/parsing/parser.d.ts.map +1 -1
- package/dist/parsing/parser.js +704 -10
- package/dist/parsing/parser.js.map +1 -1
- package/dist/parsing/statement_info_crawler.d.ts +26 -0
- package/dist/parsing/statement_info_crawler.d.ts.map +1 -1
- package/dist/parsing/statement_info_crawler.js +86 -4
- package/dist/parsing/statement_info_crawler.js.map +1 -1
- package/dist/tokenization/keyword.d.ts +21 -1
- package/dist/tokenization/keyword.d.ts.map +1 -1
- package/dist/tokenization/keyword.js +20 -0
- package/dist/tokenization/keyword.js.map +1 -1
- package/dist/tokenization/token.d.ts +24 -0
- package/dist/tokenization/token.d.ts.map +1 -1
- package/dist/tokenization/token.js +73 -0
- package/dist/tokenization/token.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/load.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAEtC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,SAAS,MAAM,0BAA0B,CAAC;AACjD,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,IAAK,SAAQ,SAAS;IACxB,OAAO,CAAC,MAAM,CAAa;;IAK3B,IAAW,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,CAEpC;IAED;;OAEG;IACH,IAAW,aAAa,IAAI,IAAI,CAE/B;IAED;;OAEG;IACH,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED;;OAEG;IACH,IAAW,aAAa,IAAI,aAAa,GAAG,IAAI,CAG/C;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IACD,IAAW,OAAO,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAK9C;IACD,IAAW,OAAO,IAAI,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAUzF;IACD,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,OAAO;IAcf;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAG9B;IAED;;;OAGG;YACW,YAAY;IA4B1B;;;OAGG;YACW,gBAAgB;IAS9B;;OAEG;YACW,WAAW;
|
|
1
|
+
{"version":3,"file":"load.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/load.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,mBAAmB,CAAC;AACpC,OAAO,IAAI,MAAM,oBAAoB,CAAC;AAEtC,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,IAAI,MAAM,oBAAoB,CAAC;AACtC,OAAO,gBAAgB,MAAM,sCAAsC,CAAC;AACpE,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,SAAS,MAAM,0BAA0B,CAAC;AACjD,OAAO,aAAa,MAAM,6BAA6B,CAAC;AACxD,OAAO,QAAQ,MAAM,uBAAuB,CAAC;AAC7C,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,IAAK,SAAQ,SAAS;IACxB,OAAO,CAAC,MAAM,CAAa;;IAK3B,IAAW,IAAI,IAAI,KAAK,GAAG,GAAG,GAAG,IAAI,CAEpC;IAED;;OAEG;IACH,IAAW,aAAa,IAAI,IAAI,CAE/B;IAED;;OAEG;IACH,IAAW,eAAe,IAAI,OAAO,CAEpC;IAED;;OAEG;IACH,IAAW,aAAa,IAAI,aAAa,GAAG,IAAI,CAG/C;IAED,IAAW,IAAI,IAAI,MAAM,CAExB;IACD,IAAW,OAAO,IAAI;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAK9C;IACD,IAAW,OAAO,IAAI,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAUzF;IACD,OAAO,CAAC,MAAM;IAOd,OAAO,CAAC,OAAO;IAcf;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAG9B;IAED;;;OAGG;YACW,YAAY;IA4B1B;;;OAGG;YACW,gBAAgB;IAS9B;;OAEG;YACW,WAAW;IAWzB;;;;OAIG;YACW,aAAa;IAI3B;;;OAGG;YACW,IAAI;IAkBL,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAcpB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1B,KAAK,IAAI,GAAG;CAGtB;AAED,eAAe,IAAI,CAAC"}
|
|
@@ -168,7 +168,6 @@ class Load extends operation_1.default {
|
|
|
168
168
|
*/
|
|
169
169
|
loadFromUrl() {
|
|
170
170
|
return __awaiter(this, void 0, void 0, function* () {
|
|
171
|
-
var _a, _b, _c;
|
|
172
171
|
const result = yield fetch(this.from, this.options());
|
|
173
172
|
let data = null;
|
|
174
173
|
if (this.type instanceof json_1.default) {
|
|
@@ -177,6 +176,26 @@ class Load extends operation_1.default {
|
|
|
177
176
|
else if (this.type instanceof text_1.default) {
|
|
178
177
|
data = yield result.text();
|
|
179
178
|
}
|
|
179
|
+
yield this.emit(data);
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Emits an already-resolved JSON value (e.g. coming from a LET-binding
|
|
184
|
+
* referenced by `LOAD JSON FROM <name>`). Arrays expand into one
|
|
185
|
+
* iteration per element; non-array values are emitted once.
|
|
186
|
+
*/
|
|
187
|
+
loadFromValue(data) {
|
|
188
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
189
|
+
yield this.emit(data);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Drives the downstream pipeline for the given data. Shared by
|
|
194
|
+
* URL / file / value loading paths.
|
|
195
|
+
*/
|
|
196
|
+
emit(data) {
|
|
197
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
198
|
+
var _a, _b, _c, _d;
|
|
180
199
|
if (Array.isArray(data)) {
|
|
181
200
|
for (const item of data) {
|
|
182
201
|
this._value = item;
|
|
@@ -191,6 +210,10 @@ class Load extends operation_1.default {
|
|
|
191
210
|
this._value = data;
|
|
192
211
|
yield ((_c = this.next) === null || _c === void 0 ? void 0 : _c.run());
|
|
193
212
|
}
|
|
213
|
+
else if (data !== null && data !== undefined) {
|
|
214
|
+
this._value = data;
|
|
215
|
+
yield ((_d = this.next) === null || _d === void 0 ? void 0 : _d.run());
|
|
216
|
+
}
|
|
194
217
|
});
|
|
195
218
|
}
|
|
196
219
|
load() {
|
|
@@ -202,7 +225,13 @@ class Load extends operation_1.default {
|
|
|
202
225
|
yield this.loadFromFile();
|
|
203
226
|
}
|
|
204
227
|
else {
|
|
205
|
-
|
|
228
|
+
const source = this.children[1].value();
|
|
229
|
+
if (typeof source === "string") {
|
|
230
|
+
yield this.loadFromUrl();
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
yield this.loadFromValue(source);
|
|
234
|
+
}
|
|
206
235
|
}
|
|
207
236
|
});
|
|
208
237
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/parsing/operations/load.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../src/parsing/operations/load.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import ASTNode from "../ast_node";
|
|
2
|
+
import Expression from "../expressions/expression";
|
|
3
|
+
import Operation from "./operation";
|
|
4
|
+
/**
|
|
5
|
+
* One item in the `WHEN MATCHED THEN UPDATE SET` list.
|
|
6
|
+
*
|
|
7
|
+
* `field` is the name of the field on the matched target row to
|
|
8
|
+
* overwrite; `expression` is the value to assign. When `expression`
|
|
9
|
+
* is `null`, the default is `source.<field>` — i.e. the value of the
|
|
10
|
+
* same-named field on the current incoming row. This makes the
|
|
11
|
+
* partial-merge case (`SET .name, .email`) ergonomic without having to
|
|
12
|
+
* write `SET .name = source.name, .email = source.email`.
|
|
13
|
+
*/
|
|
14
|
+
export interface MergeSetItem {
|
|
15
|
+
field: string;
|
|
16
|
+
expression: Expression | null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The action taken when an incoming source row matches an existing
|
|
20
|
+
* target row. Either rewrite specific fields (`update`) or remove
|
|
21
|
+
* the matched target row (`delete`).
|
|
22
|
+
*/
|
|
23
|
+
export type MergeMatchedAction = {
|
|
24
|
+
type: "update";
|
|
25
|
+
setItems: MergeSetItem[];
|
|
26
|
+
} | {
|
|
27
|
+
type: "delete";
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* The action taken when an incoming source row matches no existing
|
|
31
|
+
* target row. Inserts the row produced by `expression`, or the bare
|
|
32
|
+
* source row if `expression` is `null` (the implicit-insert default).
|
|
33
|
+
*/
|
|
34
|
+
export interface MergeNotMatchedAction {
|
|
35
|
+
type: "insert";
|
|
36
|
+
expression: Expression | null;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The `ON` clause: either a short-form list of key fields (matched
|
|
40
|
+
* positionally against the source row by name) or an arbitrary
|
|
41
|
+
* predicate evaluated per (target, source) pair.
|
|
42
|
+
*/
|
|
43
|
+
export type MergeOnClause = {
|
|
44
|
+
type: "keys";
|
|
45
|
+
keys: string[];
|
|
46
|
+
} | {
|
|
47
|
+
type: "predicate";
|
|
48
|
+
predicate: Expression;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* `MERGE INTO <name> [AS <target>] USING <source-rhs> [AS <source>]
|
|
52
|
+
* ON ( <key> | (<k1>, <k2>, …) | <predicate> )
|
|
53
|
+
* [ WHEN MATCHED THEN UPDATE SET <set-list> ]
|
|
54
|
+
* [ WHEN MATCHED THEN DELETE ]
|
|
55
|
+
* [ WHEN NOT MATCHED THEN INSERT [<expr>] ]`
|
|
56
|
+
*
|
|
57
|
+
* SQL-MERGE-style upsert into an existing list-binding. The source
|
|
58
|
+
* may be any expression, sub-query, or bare binding name; both the
|
|
59
|
+
* `target` and `source` aliases are in scope inside the `ON`
|
|
60
|
+
* predicate and any `SET .field = <expr>` / `INSERT <expr>`
|
|
61
|
+
* expressions, allowing per-pair computation across both sides.
|
|
62
|
+
*
|
|
63
|
+
* Execution semantics:
|
|
64
|
+
*
|
|
65
|
+
* - The source RHS is evaluated once to produce a list of rows.
|
|
66
|
+
* - For each source row, the target list is scanned for a matching
|
|
67
|
+
* row using the `ON` clause.
|
|
68
|
+
* - If a match is found and a `WHEN MATCHED` branch is present, that
|
|
69
|
+
* branch is applied (rewriting the matched target row in place, or
|
|
70
|
+
* removing it). Without a `WHEN MATCHED` branch, the source row is
|
|
71
|
+
* silently ignored.
|
|
72
|
+
* - If no match is found and a `WHEN NOT MATCHED THEN INSERT` branch
|
|
73
|
+
* is present, the row is appended to the target list. Without the
|
|
74
|
+
* branch, the source row is silently ignored.
|
|
75
|
+
*
|
|
76
|
+
* The target binding must already exist (use `LET` to create it).
|
|
77
|
+
*/
|
|
78
|
+
/**
|
|
79
|
+
* Proxy AST node used by the parser to register the `target` /
|
|
80
|
+
* `source` alias in the variable scope while parsing the ON
|
|
81
|
+
* predicate and SET / INSERT expressions. Resolves to the row
|
|
82
|
+
* currently exposed by the owning Merge instance.
|
|
83
|
+
*/
|
|
84
|
+
export declare class MergeTargetAlias extends ASTNode {
|
|
85
|
+
private _merge;
|
|
86
|
+
constructor(merge: Merge);
|
|
87
|
+
value(): any;
|
|
88
|
+
}
|
|
89
|
+
export declare class MergeSourceAlias extends ASTNode {
|
|
90
|
+
private _merge;
|
|
91
|
+
constructor(merge: Merge);
|
|
92
|
+
value(): any;
|
|
93
|
+
}
|
|
94
|
+
declare class Merge extends Operation {
|
|
95
|
+
private _name;
|
|
96
|
+
private _targetAlias;
|
|
97
|
+
private _sourceAlias;
|
|
98
|
+
private _onClause;
|
|
99
|
+
private _matched;
|
|
100
|
+
private _notMatched;
|
|
101
|
+
private _sourceExpression;
|
|
102
|
+
private _sourceSubQuery;
|
|
103
|
+
/**
|
|
104
|
+
* The target row currently in scope (during ON / SET / INSERT
|
|
105
|
+
* evaluation). `undefined` for `WHEN NOT MATCHED` rows.
|
|
106
|
+
*/
|
|
107
|
+
private _currentTarget;
|
|
108
|
+
/**
|
|
109
|
+
* The source row currently in scope (during ON / SET / INSERT
|
|
110
|
+
* evaluation).
|
|
111
|
+
*/
|
|
112
|
+
private _currentSource;
|
|
113
|
+
/** The last value written back to the binding (for `results`). */
|
|
114
|
+
private _value;
|
|
115
|
+
constructor(name: string, targetAlias: string | null, sourceAlias: string | null, sourceExpression: Expression | null, sourceSubQuery: ASTNode | null, onClause: MergeOnClause, matched: MergeMatchedAction | null, notMatched: MergeNotMatchedAction | null);
|
|
116
|
+
/**
|
|
117
|
+
* Replaces the placeholder ON clause and matched / not-matched
|
|
118
|
+
* actions with their parsed counterparts (used by the parser,
|
|
119
|
+
* which must register the operation in its variable scope before
|
|
120
|
+
* parsing those expressions so that the target / source aliases
|
|
121
|
+
* resolve to this node).
|
|
122
|
+
*/
|
|
123
|
+
setClauses(onClause: MergeOnClause, matched: MergeMatchedAction | null, notMatched: MergeNotMatchedAction | null): void;
|
|
124
|
+
get name(): string;
|
|
125
|
+
get targetAlias(): string | null;
|
|
126
|
+
get sourceAlias(): string | null;
|
|
127
|
+
get sourceExpression(): Expression | null;
|
|
128
|
+
get sourceSubQuery(): ASTNode | null;
|
|
129
|
+
get onClause(): MergeOnClause;
|
|
130
|
+
get matched(): MergeMatchedAction | null;
|
|
131
|
+
get notMatched(): MergeNotMatchedAction | null;
|
|
132
|
+
/**
|
|
133
|
+
* Returns the row currently in scope for the given alias. This is
|
|
134
|
+
* what {@link Reference}.value() resolves to when the target /
|
|
135
|
+
* source alias is referenced inside the ON predicate or in a
|
|
136
|
+
* SET / INSERT expression. The parser stamps an aliasContext on
|
|
137
|
+
* the proxy AST nodes it registers in the variable scope so we
|
|
138
|
+
* can disambiguate without name comparison.
|
|
139
|
+
*/
|
|
140
|
+
targetValue(): any;
|
|
141
|
+
sourceValue(): any;
|
|
142
|
+
run(): Promise<void>;
|
|
143
|
+
/**
|
|
144
|
+
* Finds the first index in `target` (skipping tombstones) for
|
|
145
|
+
* which the ON clause holds against the current source row. The
|
|
146
|
+
* source row is already exposed via {@link sourceValue}.
|
|
147
|
+
*/
|
|
148
|
+
private findMatch;
|
|
149
|
+
/**
|
|
150
|
+
* Builds the next value for a matched target row by applying the
|
|
151
|
+
* `SET <set-list>` items. Items without an explicit expression
|
|
152
|
+
* default to `source.<field>`.
|
|
153
|
+
*/
|
|
154
|
+
private applySet;
|
|
155
|
+
get results(): Record<string, any>[];
|
|
156
|
+
}
|
|
157
|
+
export default Merge;
|
|
158
|
+
//# sourceMappingURL=merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MergeSourceAlias = exports.MergeTargetAlias = void 0;
|
|
16
|
+
const bindings_1 = __importDefault(require("../../graph/bindings"));
|
|
17
|
+
const ast_node_1 = __importDefault(require("../ast_node"));
|
|
18
|
+
const operation_1 = __importDefault(require("./operation"));
|
|
19
|
+
/**
|
|
20
|
+
* `MERGE INTO <name> [AS <target>] USING <source-rhs> [AS <source>]
|
|
21
|
+
* ON ( <key> | (<k1>, <k2>, …) | <predicate> )
|
|
22
|
+
* [ WHEN MATCHED THEN UPDATE SET <set-list> ]
|
|
23
|
+
* [ WHEN MATCHED THEN DELETE ]
|
|
24
|
+
* [ WHEN NOT MATCHED THEN INSERT [<expr>] ]`
|
|
25
|
+
*
|
|
26
|
+
* SQL-MERGE-style upsert into an existing list-binding. The source
|
|
27
|
+
* may be any expression, sub-query, or bare binding name; both the
|
|
28
|
+
* `target` and `source` aliases are in scope inside the `ON`
|
|
29
|
+
* predicate and any `SET .field = <expr>` / `INSERT <expr>`
|
|
30
|
+
* expressions, allowing per-pair computation across both sides.
|
|
31
|
+
*
|
|
32
|
+
* Execution semantics:
|
|
33
|
+
*
|
|
34
|
+
* - The source RHS is evaluated once to produce a list of rows.
|
|
35
|
+
* - For each source row, the target list is scanned for a matching
|
|
36
|
+
* row using the `ON` clause.
|
|
37
|
+
* - If a match is found and a `WHEN MATCHED` branch is present, that
|
|
38
|
+
* branch is applied (rewriting the matched target row in place, or
|
|
39
|
+
* removing it). Without a `WHEN MATCHED` branch, the source row is
|
|
40
|
+
* silently ignored.
|
|
41
|
+
* - If no match is found and a `WHEN NOT MATCHED THEN INSERT` branch
|
|
42
|
+
* is present, the row is appended to the target list. Without the
|
|
43
|
+
* branch, the source row is silently ignored.
|
|
44
|
+
*
|
|
45
|
+
* The target binding must already exist (use `LET` to create it).
|
|
46
|
+
*/
|
|
47
|
+
/**
|
|
48
|
+
* Proxy AST node used by the parser to register the `target` /
|
|
49
|
+
* `source` alias in the variable scope while parsing the ON
|
|
50
|
+
* predicate and SET / INSERT expressions. Resolves to the row
|
|
51
|
+
* currently exposed by the owning Merge instance.
|
|
52
|
+
*/
|
|
53
|
+
class MergeTargetAlias extends ast_node_1.default {
|
|
54
|
+
constructor(merge) {
|
|
55
|
+
super();
|
|
56
|
+
this._merge = merge;
|
|
57
|
+
}
|
|
58
|
+
value() {
|
|
59
|
+
return this._merge.targetValue();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.MergeTargetAlias = MergeTargetAlias;
|
|
63
|
+
class MergeSourceAlias extends ast_node_1.default {
|
|
64
|
+
constructor(merge) {
|
|
65
|
+
super();
|
|
66
|
+
this._merge = merge;
|
|
67
|
+
}
|
|
68
|
+
value() {
|
|
69
|
+
return this._merge.sourceValue();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.MergeSourceAlias = MergeSourceAlias;
|
|
73
|
+
class Merge extends operation_1.default {
|
|
74
|
+
constructor(name, targetAlias, sourceAlias, sourceExpression, sourceSubQuery, onClause, matched, notMatched) {
|
|
75
|
+
super();
|
|
76
|
+
/**
|
|
77
|
+
* The target row currently in scope (during ON / SET / INSERT
|
|
78
|
+
* evaluation). `undefined` for `WHEN NOT MATCHED` rows.
|
|
79
|
+
*/
|
|
80
|
+
this._currentTarget = undefined;
|
|
81
|
+
/**
|
|
82
|
+
* The source row currently in scope (during ON / SET / INSERT
|
|
83
|
+
* evaluation).
|
|
84
|
+
*/
|
|
85
|
+
this._currentSource = undefined;
|
|
86
|
+
/** The last value written back to the binding (for `results`). */
|
|
87
|
+
this._value = [];
|
|
88
|
+
this._name = name;
|
|
89
|
+
this._targetAlias = targetAlias;
|
|
90
|
+
this._sourceAlias = sourceAlias;
|
|
91
|
+
this._sourceExpression = sourceExpression;
|
|
92
|
+
this._sourceSubQuery = sourceSubQuery;
|
|
93
|
+
this._onClause = onClause;
|
|
94
|
+
this._matched = matched;
|
|
95
|
+
this._notMatched = notMatched;
|
|
96
|
+
if (sourceExpression !== null) {
|
|
97
|
+
this.addChild(sourceExpression);
|
|
98
|
+
}
|
|
99
|
+
if (sourceSubQuery !== null) {
|
|
100
|
+
this.addChild(sourceSubQuery);
|
|
101
|
+
}
|
|
102
|
+
if (onClause.type === "predicate") {
|
|
103
|
+
this.addChild(onClause.predicate);
|
|
104
|
+
}
|
|
105
|
+
if (matched !== null && matched.type === "update") {
|
|
106
|
+
for (const item of matched.setItems) {
|
|
107
|
+
if (item.expression !== null) {
|
|
108
|
+
this.addChild(item.expression);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (notMatched !== null && notMatched.expression !== null) {
|
|
113
|
+
this.addChild(notMatched.expression);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Replaces the placeholder ON clause and matched / not-matched
|
|
118
|
+
* actions with their parsed counterparts (used by the parser,
|
|
119
|
+
* which must register the operation in its variable scope before
|
|
120
|
+
* parsing those expressions so that the target / source aliases
|
|
121
|
+
* resolve to this node).
|
|
122
|
+
*/
|
|
123
|
+
setClauses(onClause, matched, notMatched) {
|
|
124
|
+
this._onClause = onClause;
|
|
125
|
+
this._matched = matched;
|
|
126
|
+
this._notMatched = notMatched;
|
|
127
|
+
if (onClause.type === "predicate") {
|
|
128
|
+
this.addChild(onClause.predicate);
|
|
129
|
+
}
|
|
130
|
+
if (matched !== null && matched.type === "update") {
|
|
131
|
+
for (const item of matched.setItems) {
|
|
132
|
+
if (item.expression !== null) {
|
|
133
|
+
this.addChild(item.expression);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (notMatched !== null && notMatched.expression !== null) {
|
|
138
|
+
this.addChild(notMatched.expression);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
get name() {
|
|
142
|
+
return this._name;
|
|
143
|
+
}
|
|
144
|
+
get targetAlias() {
|
|
145
|
+
return this._targetAlias;
|
|
146
|
+
}
|
|
147
|
+
get sourceAlias() {
|
|
148
|
+
return this._sourceAlias;
|
|
149
|
+
}
|
|
150
|
+
get sourceExpression() {
|
|
151
|
+
return this._sourceExpression;
|
|
152
|
+
}
|
|
153
|
+
get sourceSubQuery() {
|
|
154
|
+
return this._sourceSubQuery;
|
|
155
|
+
}
|
|
156
|
+
get onClause() {
|
|
157
|
+
return this._onClause;
|
|
158
|
+
}
|
|
159
|
+
get matched() {
|
|
160
|
+
return this._matched;
|
|
161
|
+
}
|
|
162
|
+
get notMatched() {
|
|
163
|
+
return this._notMatched;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Returns the row currently in scope for the given alias. This is
|
|
167
|
+
* what {@link Reference}.value() resolves to when the target /
|
|
168
|
+
* source alias is referenced inside the ON predicate or in a
|
|
169
|
+
* SET / INSERT expression. The parser stamps an aliasContext on
|
|
170
|
+
* the proxy AST nodes it registers in the variable scope so we
|
|
171
|
+
* can disambiguate without name comparison.
|
|
172
|
+
*/
|
|
173
|
+
targetValue() {
|
|
174
|
+
return this._currentTarget;
|
|
175
|
+
}
|
|
176
|
+
sourceValue() {
|
|
177
|
+
return this._currentSource;
|
|
178
|
+
}
|
|
179
|
+
run() {
|
|
180
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
181
|
+
var _a;
|
|
182
|
+
const bindings = bindings_1.default.getInstance();
|
|
183
|
+
if (!bindings.has(this._name)) {
|
|
184
|
+
throw new Error(`Binding '${this._name}' is not defined; use LET to create it`);
|
|
185
|
+
}
|
|
186
|
+
if (bindings.isRefreshable(this._name)) {
|
|
187
|
+
throw new Error(`Binding '${this._name}' is refreshable; use REFRESH BINDING ${this._name} to re-evaluate or DROP BINDING ${this._name} first`);
|
|
188
|
+
}
|
|
189
|
+
const existing = bindings.get(this._name);
|
|
190
|
+
if (!Array.isArray(existing)) {
|
|
191
|
+
throw new Error(`MERGE INTO ${this._name} requires '${this._name}' to be a list`);
|
|
192
|
+
}
|
|
193
|
+
// Evaluate source once.
|
|
194
|
+
let source;
|
|
195
|
+
if (this._sourceSubQuery !== null) {
|
|
196
|
+
const first = this._sourceSubQuery.firstChild();
|
|
197
|
+
const last = this._sourceSubQuery.lastChild();
|
|
198
|
+
yield first.initialize();
|
|
199
|
+
yield first.run();
|
|
200
|
+
yield first.finish();
|
|
201
|
+
source = last.results;
|
|
202
|
+
}
|
|
203
|
+
else if (this._sourceExpression !== null) {
|
|
204
|
+
source = this._sourceExpression.value();
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
source = null;
|
|
208
|
+
}
|
|
209
|
+
if (!Array.isArray(source)) {
|
|
210
|
+
throw new Error(`MERGE INTO ${this._name} USING … requires the source to evaluate to a list of rows`);
|
|
211
|
+
}
|
|
212
|
+
// Working copy of the target list; mutations are applied in
|
|
213
|
+
// place and a final assignment writes it back to the binding.
|
|
214
|
+
const result = existing.slice();
|
|
215
|
+
// Tombstone marker for delete actions; we sweep at the end so
|
|
216
|
+
// that intra-merge index lookups remain stable.
|
|
217
|
+
const tombstones = new Set();
|
|
218
|
+
for (const sourceRow of source) {
|
|
219
|
+
this._currentSource = sourceRow;
|
|
220
|
+
const matchedIndex = this.findMatch(result, tombstones, sourceRow);
|
|
221
|
+
if (matchedIndex !== -1) {
|
|
222
|
+
this._currentTarget = result[matchedIndex];
|
|
223
|
+
if (this._matched !== null) {
|
|
224
|
+
if (this._matched.type === "delete") {
|
|
225
|
+
tombstones.add(matchedIndex);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
result[matchedIndex] = this.applySet(result[matchedIndex], this._matched.setItems);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
this._currentTarget = undefined;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
if (this._notMatched !== null) {
|
|
235
|
+
const inserted = this._notMatched.expression !== null
|
|
236
|
+
? this._notMatched.expression.value()
|
|
237
|
+
: sourceRow;
|
|
238
|
+
result.push(inserted);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
this._currentSource = undefined;
|
|
243
|
+
const swept = [];
|
|
244
|
+
for (let i = 0; i < result.length; i++) {
|
|
245
|
+
if (!tombstones.has(i)) {
|
|
246
|
+
swept.push(result[i]);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
bindings.set(this._name, swept);
|
|
250
|
+
this._value = swept;
|
|
251
|
+
yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Finds the first index in `target` (skipping tombstones) for
|
|
256
|
+
* which the ON clause holds against the current source row. The
|
|
257
|
+
* source row is already exposed via {@link sourceValue}.
|
|
258
|
+
*/
|
|
259
|
+
findMatch(target, tombstones, sourceRow) {
|
|
260
|
+
if (this._onClause.type === "keys") {
|
|
261
|
+
const keys = this._onClause.keys;
|
|
262
|
+
// Source row must be an object with all keys defined; if not,
|
|
263
|
+
// it cannot match anything and falls through to NOT MATCHED.
|
|
264
|
+
if (sourceRow === null || typeof sourceRow !== "object") {
|
|
265
|
+
return -1;
|
|
266
|
+
}
|
|
267
|
+
for (const k of keys) {
|
|
268
|
+
if (!(k in sourceRow)) {
|
|
269
|
+
return -1;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
for (let i = 0; i < target.length; i++) {
|
|
273
|
+
if (tombstones.has(i)) {
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
const t = target[i];
|
|
277
|
+
if (t === null || typeof t !== "object") {
|
|
278
|
+
continue;
|
|
279
|
+
}
|
|
280
|
+
let matches = true;
|
|
281
|
+
for (const k of keys) {
|
|
282
|
+
if (!(k in t) || t[k] !== sourceRow[k]) {
|
|
283
|
+
matches = false;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
if (matches) {
|
|
288
|
+
return i;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return -1;
|
|
292
|
+
}
|
|
293
|
+
// Predicate ON — evaluate per (target, source) pair.
|
|
294
|
+
for (let i = 0; i < target.length; i++) {
|
|
295
|
+
if (tombstones.has(i)) {
|
|
296
|
+
continue;
|
|
297
|
+
}
|
|
298
|
+
this._currentTarget = target[i];
|
|
299
|
+
const ok = this._onClause.predicate.value();
|
|
300
|
+
if (ok) {
|
|
301
|
+
this._currentTarget = undefined;
|
|
302
|
+
return i;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
this._currentTarget = undefined;
|
|
306
|
+
return -1;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Builds the next value for a matched target row by applying the
|
|
310
|
+
* `SET <set-list>` items. Items without an explicit expression
|
|
311
|
+
* default to `source.<field>`.
|
|
312
|
+
*/
|
|
313
|
+
applySet(targetRow, setItems) {
|
|
314
|
+
const base = targetRow !== null && typeof targetRow === "object" ? Object.assign({}, targetRow) : {};
|
|
315
|
+
for (const item of setItems) {
|
|
316
|
+
if (item.expression !== null) {
|
|
317
|
+
base[item.field] = item.expression.value();
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
// Default: copy source.<field> if present, otherwise
|
|
321
|
+
// leave the existing field untouched. This makes
|
|
322
|
+
// `SET .name, .email` behave like the old partial-merge
|
|
323
|
+
// form (only listed fields overwrite; missing ones
|
|
324
|
+
// preserve the target's value).
|
|
325
|
+
const src = this._currentSource;
|
|
326
|
+
if (src !== null && typeof src === "object" && item.field in src) {
|
|
327
|
+
base[item.field] = src[item.field];
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return base;
|
|
332
|
+
}
|
|
333
|
+
get results() {
|
|
334
|
+
return this._value;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
exports.default = Merge;
|
|
338
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/parsing/operations/merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Operation from "./operation";
|
|
2
|
+
/**
|
|
3
|
+
* `REFRESH BINDING name`: clear the cached value of a refreshable
|
|
4
|
+
* binding so the next read re-executes the backing sub-query. No-op
|
|
5
|
+
* for plain bindings.
|
|
6
|
+
*/
|
|
7
|
+
declare class RefreshBinding extends Operation {
|
|
8
|
+
private _name;
|
|
9
|
+
constructor(name: string);
|
|
10
|
+
get name(): string;
|
|
11
|
+
run(): Promise<void>;
|
|
12
|
+
get results(): Record<string, any>[];
|
|
13
|
+
}
|
|
14
|
+
export default RefreshBinding;
|
|
15
|
+
//# sourceMappingURL=refresh_binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh_binding.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/refresh_binding.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;;;GAIG;AACH,cAAM,cAAe,SAAQ,SAAS;IAClC,OAAO,CAAC,KAAK,CAAS;gBAEV,IAAI,EAAE,MAAM;IAKxB,IAAW,IAAI,IAAI,MAAM,CAExB;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE1C;CACJ;AAED,eAAe,cAAc,CAAC"}
|