flowquery 1.0.69 → 1.0.71
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 +682 -86
- package/dist/compute/provenance.d.ts +201 -0
- package/dist/compute/provenance.d.ts.map +1 -0
- package/dist/compute/provenance.js +216 -0
- package/dist/compute/provenance.js.map +1 -0
- package/dist/compute/runner.d.ts +202 -3
- package/dist/compute/runner.d.ts.map +1 -1
- package/dist/compute/runner.js +309 -2
- 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 +224 -0
- package/dist/graph/bindings.js.map +1 -0
- package/dist/graph/data_cache.d.ts +4 -0
- package/dist/graph/data_cache.d.ts.map +1 -1
- package/dist/graph/data_cache.js +15 -3
- package/dist/graph/data_cache.js.map +1 -1
- package/dist/graph/data_resolver.d.ts.map +1 -1
- package/dist/graph/data_resolver.js +23 -4
- package/dist/graph/data_resolver.js.map +1 -1
- 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 +7 -2
- package/dist/graph/physical_node.d.ts.map +1 -1
- package/dist/graph/physical_node.js +22 -26
- package/dist/graph/physical_node.js.map +1 -1
- package/dist/graph/physical_relationship.d.ts +7 -2
- package/dist/graph/physical_relationship.d.ts.map +1 -1
- package/dist/graph/physical_relationship.js +22 -26
- package/dist/graph/physical_relationship.js.map +1 -1
- package/dist/graph/relationship_match_collector.d.ts.map +1 -1
- package/dist/graph/relationship_match_collector.js +9 -0
- package/dist/graph/relationship_match_collector.js.map +1 -1
- package/dist/graph/virtual_sources.d.ts +8 -0
- package/dist/graph/virtual_sources.d.ts.map +1 -0
- package/dist/graph/virtual_sources.js +31 -0
- package/dist/graph/virtual_sources.js.map +1 -0
- package/dist/graph/virtual_statement.d.ts +41 -0
- package/dist/graph/virtual_statement.d.ts.map +1 -0
- package/dist/graph/virtual_statement.js +143 -0
- package/dist/graph/virtual_statement.js.map +1 -0
- package/dist/index.browser.d.ts +3 -3
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.d.ts +3 -3
- package/dist/index.node.d.ts.map +1 -1
- package/dist/index.node.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/aggregated_return.d.ts +10 -0
- package/dist/parsing/operations/aggregated_return.d.ts.map +1 -1
- package/dist/parsing/operations/aggregated_return.js +56 -3
- package/dist/parsing/operations/aggregated_return.js.map +1 -1
- package/dist/parsing/operations/aggregated_with.d.ts +20 -0
- package/dist/parsing/operations/aggregated_with.d.ts.map +1 -1
- package/dist/parsing/operations/aggregated_with.js +33 -1
- package/dist/parsing/operations/aggregated_with.js.map +1 -1
- 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/group_by.d.ts +32 -0
- package/dist/parsing/operations/group_by.d.ts.map +1 -1
- package/dist/parsing/operations/group_by.js +103 -0
- package/dist/parsing/operations/group_by.js.map +1 -1
- 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 +154 -0
- package/dist/parsing/operations/let.js.map +1 -0
- package/dist/parsing/operations/load.d.ts +31 -0
- package/dist/parsing/operations/load.d.ts.map +1 -1
- package/dist/parsing/operations/load.js +102 -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/order_by.d.ts +6 -0
- package/dist/parsing/operations/order_by.d.ts.map +1 -1
- package/dist/parsing/operations/order_by.js +10 -1
- package/dist/parsing/operations/order_by.js.map +1 -1
- 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 +34 -0
- package/dist/parsing/operations/return.d.ts.map +1 -1
- package/dist/parsing/operations/return.js +102 -3
- package/dist/parsing/operations/return.js.map +1 -1
- package/dist/parsing/operations/union.d.ts +19 -2
- package/dist/parsing/operations/union.d.ts.map +1 -1
- package/dist/parsing/operations/union.js +47 -11
- package/dist/parsing/operations/union.js.map +1 -1
- package/dist/parsing/operations/union_all.d.ts +5 -1
- package/dist/parsing/operations/union_all.d.ts.map +1 -1
- package/dist/parsing/operations/union_all.js +8 -2
- package/dist/parsing/operations/union_all.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 +106 -0
- package/dist/parsing/statement_info_crawler.d.ts.map +1 -1
- package/dist/parsing/statement_info_crawler.js +231 -12
- 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
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
const bindings_1 = __importDefault(require("../../graph/bindings"));
|
|
16
|
+
const operation_1 = __importDefault(require("./operation"));
|
|
17
|
+
/**
|
|
18
|
+
* `UPDATE name = <rhs>` — replace the value bound to `name`.
|
|
19
|
+
*
|
|
20
|
+
* `UPDATE name` always requires `name` to already be bound — use
|
|
21
|
+
* `LET` to introduce a new binding. Per-row updates (key-based
|
|
22
|
+
* upsert, partial-field merge, conditional matched/not-matched
|
|
23
|
+
* branches) live on the `MERGE INTO … USING …` operation.
|
|
24
|
+
*
|
|
25
|
+
* `UPDATE name AS alias DELETE WHERE <pred>` — see {@link UpdateDelete}.
|
|
26
|
+
*/
|
|
27
|
+
class Update extends operation_1.default {
|
|
28
|
+
constructor(name, expression, subQuery) {
|
|
29
|
+
super();
|
|
30
|
+
this._value = undefined;
|
|
31
|
+
this._name = name;
|
|
32
|
+
this._expression = expression;
|
|
33
|
+
this._subQuery = subQuery;
|
|
34
|
+
if (expression !== null) {
|
|
35
|
+
this.addChild(expression);
|
|
36
|
+
}
|
|
37
|
+
if (subQuery !== null) {
|
|
38
|
+
this.addChild(subQuery);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
get name() {
|
|
42
|
+
return this._name;
|
|
43
|
+
}
|
|
44
|
+
get expression() {
|
|
45
|
+
return this._expression;
|
|
46
|
+
}
|
|
47
|
+
get subQuery() {
|
|
48
|
+
return this._subQuery;
|
|
49
|
+
}
|
|
50
|
+
run() {
|
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
52
|
+
var _a;
|
|
53
|
+
const bindings = bindings_1.default.getInstance();
|
|
54
|
+
if (!bindings.has(this._name)) {
|
|
55
|
+
throw new Error(`Binding '${this._name}' is not defined; use LET to create it`);
|
|
56
|
+
}
|
|
57
|
+
if (bindings.isRefreshable(this._name)) {
|
|
58
|
+
throw new Error(`Binding '${this._name}' is refreshable; use REFRESH BINDING ${this._name} to re-evaluate or DROP BINDING ${this._name} first`);
|
|
59
|
+
}
|
|
60
|
+
let value;
|
|
61
|
+
if (this._subQuery !== null) {
|
|
62
|
+
const first = this._subQuery.firstChild();
|
|
63
|
+
const last = this._subQuery.lastChild();
|
|
64
|
+
yield first.initialize();
|
|
65
|
+
yield first.run();
|
|
66
|
+
yield first.finish();
|
|
67
|
+
value = last.results;
|
|
68
|
+
}
|
|
69
|
+
else if (this._expression !== null) {
|
|
70
|
+
value = this._expression.value();
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
value = null;
|
|
74
|
+
}
|
|
75
|
+
bindings.set(this._name, value);
|
|
76
|
+
this._value = value;
|
|
77
|
+
yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
get results() {
|
|
81
|
+
if (Array.isArray(this._value)) {
|
|
82
|
+
return this._value;
|
|
83
|
+
}
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.default = Update;
|
|
88
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/parsing/operations/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAG5C,4DAAoC;AAEpC;;;;;;;;;GASG;AACH,MAAM,MAAO,SAAQ,mBAAS;IAM1B,YAAY,IAAY,EAAE,UAA6B,EAAE,QAAwB;QAC7E,KAAK,EAAE,CAAC;QAHJ,WAAM,GAAQ,SAAS,CAAC;QAI5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEY,GAAG;;;YACZ,MAAM,QAAQ,GAAG,kBAAQ,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,wCAAwC,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACX,YAAY,IAAI,CAAC,KAAK,yCAAyC,IAAI,CAAC,KAAK,mCAAmC,IAAI,CAAC,KAAK,QAAQ,CACjI,CAAC;YACN,CAAC;YACD,IAAI,KAAU,CAAC;YACf,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAe,CAAC;gBACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAe,CAAC;gBACrD,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzB,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;gBAClB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;YACzB,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACnC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,MAAM,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,EAAE,CAAA,CAAC;QAC3B,CAAC;KAAA;IAED,IAAW,OAAO;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,MAA+B,CAAC;QAChD,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import Expression from "../expressions/expression";
|
|
2
|
+
import Operation from "./operation";
|
|
3
|
+
/**
|
|
4
|
+
* `UPDATE name AS alias DELETE WHERE <predicate>` — remove rows from a
|
|
5
|
+
* list-binding that satisfy the predicate.
|
|
6
|
+
*
|
|
7
|
+
* Iterates the current rows of `name`, binding each to `alias`, and
|
|
8
|
+
* evaluates the predicate. Rows whose predicate evaluates truthy are
|
|
9
|
+
* dropped; remaining rows keep their relative order. Replaces the
|
|
10
|
+
* binding with the filtered list.
|
|
11
|
+
*
|
|
12
|
+
* The alias is registered in the parser's variable scope so the
|
|
13
|
+
* predicate can reference `alias.field` (or just `alias` for scalar
|
|
14
|
+
* rows). At runtime, the alias resolves to the *current* row via
|
|
15
|
+
* {@link value}.
|
|
16
|
+
*/
|
|
17
|
+
declare class UpdateDelete extends Operation {
|
|
18
|
+
private _name;
|
|
19
|
+
private _alias;
|
|
20
|
+
private _predicate;
|
|
21
|
+
private _currentRow;
|
|
22
|
+
private _value;
|
|
23
|
+
constructor(name: string, alias: string, predicate: Expression);
|
|
24
|
+
/**
|
|
25
|
+
* Replaces the predicate (used by the parser, which must register
|
|
26
|
+
* the operation in its variable scope *before* parsing the
|
|
27
|
+
* predicate so that `<alias>` references resolve to this node).
|
|
28
|
+
*/
|
|
29
|
+
setPredicate(predicate: Expression): void;
|
|
30
|
+
get name(): string;
|
|
31
|
+
get alias(): string;
|
|
32
|
+
get predicate(): Expression;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the row currently bound to the alias during predicate
|
|
35
|
+
* evaluation. This is what {@link Reference}.value() resolves to
|
|
36
|
+
* when the alias is referenced in the predicate.
|
|
37
|
+
*/
|
|
38
|
+
value(): any;
|
|
39
|
+
run(): Promise<void>;
|
|
40
|
+
get results(): Record<string, any>[];
|
|
41
|
+
}
|
|
42
|
+
export default UpdateDelete;
|
|
43
|
+
//# sourceMappingURL=update_delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_delete.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/update_delete.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;;;;;;;;;;;;GAaG;AACH,cAAM,YAAa,SAAQ,SAAS;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAa;gBAEf,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;IAQ9D;;;;OAIG;IACI,YAAY,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAShD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,SAAS,IAAI,UAAU,CAEjC;IAED;;;;OAIG;IACI,KAAK,IAAI,GAAG;IAIN,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE1C;CACJ;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
const bindings_1 = __importDefault(require("../../graph/bindings"));
|
|
16
|
+
const operation_1 = __importDefault(require("./operation"));
|
|
17
|
+
/**
|
|
18
|
+
* `UPDATE name AS alias DELETE WHERE <predicate>` — remove rows from a
|
|
19
|
+
* list-binding that satisfy the predicate.
|
|
20
|
+
*
|
|
21
|
+
* Iterates the current rows of `name`, binding each to `alias`, and
|
|
22
|
+
* evaluates the predicate. Rows whose predicate evaluates truthy are
|
|
23
|
+
* dropped; remaining rows keep their relative order. Replaces the
|
|
24
|
+
* binding with the filtered list.
|
|
25
|
+
*
|
|
26
|
+
* The alias is registered in the parser's variable scope so the
|
|
27
|
+
* predicate can reference `alias.field` (or just `alias` for scalar
|
|
28
|
+
* rows). At runtime, the alias resolves to the *current* row via
|
|
29
|
+
* {@link value}.
|
|
30
|
+
*/
|
|
31
|
+
class UpdateDelete extends operation_1.default {
|
|
32
|
+
constructor(name, alias, predicate) {
|
|
33
|
+
super();
|
|
34
|
+
this._currentRow = undefined;
|
|
35
|
+
this._value = [];
|
|
36
|
+
this._name = name;
|
|
37
|
+
this._alias = alias;
|
|
38
|
+
this._predicate = predicate;
|
|
39
|
+
this.addChild(predicate);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Replaces the predicate (used by the parser, which must register
|
|
43
|
+
* the operation in its variable scope *before* parsing the
|
|
44
|
+
* predicate so that `<alias>` references resolve to this node).
|
|
45
|
+
*/
|
|
46
|
+
setPredicate(predicate) {
|
|
47
|
+
if (this.children.length > 0) {
|
|
48
|
+
this.replaceChild(this._predicate, predicate);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.addChild(predicate);
|
|
52
|
+
}
|
|
53
|
+
this._predicate = predicate;
|
|
54
|
+
}
|
|
55
|
+
get name() {
|
|
56
|
+
return this._name;
|
|
57
|
+
}
|
|
58
|
+
get alias() {
|
|
59
|
+
return this._alias;
|
|
60
|
+
}
|
|
61
|
+
get predicate() {
|
|
62
|
+
return this._predicate;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Returns the row currently bound to the alias during predicate
|
|
66
|
+
* evaluation. This is what {@link Reference}.value() resolves to
|
|
67
|
+
* when the alias is referenced in the predicate.
|
|
68
|
+
*/
|
|
69
|
+
value() {
|
|
70
|
+
return this._currentRow;
|
|
71
|
+
}
|
|
72
|
+
run() {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
74
|
+
var _a;
|
|
75
|
+
const bindings = bindings_1.default.getInstance();
|
|
76
|
+
if (!bindings.has(this._name)) {
|
|
77
|
+
throw new Error(`Binding '${this._name}' is not defined; use LET to create it`);
|
|
78
|
+
}
|
|
79
|
+
if (bindings.isRefreshable(this._name)) {
|
|
80
|
+
throw new Error(`Binding '${this._name}' is refreshable; use REFRESH BINDING ${this._name} to re-evaluate or DROP BINDING ${this._name} first`);
|
|
81
|
+
}
|
|
82
|
+
const existing = bindings.get(this._name);
|
|
83
|
+
if (!Array.isArray(existing)) {
|
|
84
|
+
throw new Error(`UPDATE ${this._name} AS ${this._alias} DELETE WHERE … requires '${this._name}' to be a list`);
|
|
85
|
+
}
|
|
86
|
+
const result = [];
|
|
87
|
+
for (const row of existing) {
|
|
88
|
+
this._currentRow = row;
|
|
89
|
+
const keep = !this._predicate.value();
|
|
90
|
+
if (keep) {
|
|
91
|
+
result.push(row);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
this._currentRow = undefined;
|
|
95
|
+
bindings.set(this._name, result);
|
|
96
|
+
this._value = result;
|
|
97
|
+
yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
get results() {
|
|
101
|
+
return this._value;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
exports.default = UpdateDelete;
|
|
105
|
+
//# sourceMappingURL=update_delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update_delete.js","sourceRoot":"","sources":["../../../src/parsing/operations/update_delete.ts"],"names":[],"mappings":"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"}
|
package/dist/parsing/parser.d.ts
CHANGED
|
@@ -40,7 +40,9 @@ declare class Parser extends BaseParser {
|
|
|
40
40
|
*/
|
|
41
41
|
parseStatements(statement: string): Generator<ASTNode>;
|
|
42
42
|
/**
|
|
43
|
-
* Validates that all operations in a statement are CREATE
|
|
43
|
+
* Validates that all operations in a statement are CREATE, DELETE,
|
|
44
|
+
* REFRESH, LET, or UPDATE — the declaration kinds that may precede the
|
|
45
|
+
* terminal statement in a multi-statement query.
|
|
44
46
|
*/
|
|
45
47
|
private validateIsCreateOrDelete;
|
|
46
48
|
private _parseTokenized;
|
|
@@ -53,6 +55,73 @@ declare class Parser extends BaseParser {
|
|
|
53
55
|
private parseCall;
|
|
54
56
|
private parseCreate;
|
|
55
57
|
private parseDelete;
|
|
58
|
+
private parseRefresh;
|
|
59
|
+
/**
|
|
60
|
+
* Returns true when the current token is a clause keyword that
|
|
61
|
+
* starts a query pipeline (the right-hand side of a `LET name =`
|
|
62
|
+
* or `UPDATE name =`). Used to disambiguate between binding a
|
|
63
|
+
* plain expression and binding the rows produced by a sub-query.
|
|
64
|
+
*/
|
|
65
|
+
private looksLikePipelineStart;
|
|
66
|
+
/**
|
|
67
|
+
* Peeks past `{` to decide whether the brace opens a sub-query
|
|
68
|
+
* (first significant token is a clause keyword) or a map literal
|
|
69
|
+
* (anything else, e.g. identifier+colon or string key).
|
|
70
|
+
*/
|
|
71
|
+
private braceOpensSubQuery;
|
|
72
|
+
/**
|
|
73
|
+
* Parses the right-hand side of a `LET` / `UPDATE`. Returns the
|
|
74
|
+
* expression *or* the sub-query AST that was parsed.
|
|
75
|
+
*/
|
|
76
|
+
private parseLetUpdateRhs;
|
|
77
|
+
private parseLet;
|
|
78
|
+
private parseUpdate;
|
|
79
|
+
/**
|
|
80
|
+
* Parses a `MERGE INTO <name> [AS <target>] USING <rhs>
|
|
81
|
+
* [AS <source>] ON <on-clause> <when-clauses>` statement.
|
|
82
|
+
*/
|
|
83
|
+
private parseMerge;
|
|
84
|
+
/**
|
|
85
|
+
* Parses the body of the `ON` clause. Distinguishes a short-form
|
|
86
|
+
* key list (`ON id`, `ON (a, b, c)`) from a full predicate
|
|
87
|
+
* expression by looking ahead: a bare identifier (or parenthesised
|
|
88
|
+
* list of identifiers) followed by `WHEN` is the key form;
|
|
89
|
+
* anything else is parsed as an expression.
|
|
90
|
+
*/
|
|
91
|
+
private parseMergeOn;
|
|
92
|
+
/**
|
|
93
|
+
* Speculatively parses `<id>` or `(<id> [, <id>]*)` followed by
|
|
94
|
+
* `WHEN`. Returns the key list on success, or `null` if the
|
|
95
|
+
* lookahead doesn't match (leaving the caller to rewind and try
|
|
96
|
+
* an expression).
|
|
97
|
+
*/
|
|
98
|
+
private tryParseMergeKeyList;
|
|
99
|
+
/**
|
|
100
|
+
* Parses a single `WHEN [NOT] MATCHED THEN UPDATE SET … | DELETE
|
|
101
|
+
* | INSERT [<expr>]` clause. Caller is positioned on `WHEN`.
|
|
102
|
+
*/
|
|
103
|
+
private parseMergeWhenClause;
|
|
104
|
+
/**
|
|
105
|
+
* Parses `.field [= <expr>] [, .field [= <expr>]]*` — the body of a
|
|
106
|
+
* `WHEN MATCHED THEN UPDATE SET` clause. An item without an
|
|
107
|
+
* explicit `= <expr>` defaults to `source.<field>` at run time.
|
|
108
|
+
*/
|
|
109
|
+
private parseMergeSetList;
|
|
110
|
+
/**
|
|
111
|
+
* Parses the tail of `UPDATE name AS alias DELETE WHERE <pred>`,
|
|
112
|
+
* with `AS` already consumed by the caller's lookahead.
|
|
113
|
+
*/
|
|
114
|
+
private parseUpdateDeleteTail;
|
|
115
|
+
/**
|
|
116
|
+
* Recursively replaces any unresolved {@link Reference} node in
|
|
117
|
+
* the given subtree with a {@link BindingReference}, which looks up
|
|
118
|
+
* the value from the global {@link Bindings} store at run-time.
|
|
119
|
+
*
|
|
120
|
+
* Used by `UPDATE … AS u DELETE WHERE …` so that predicates can
|
|
121
|
+
* reference other bindings by name, and to keep `LOAD JSON FROM …`
|
|
122
|
+
* behaviour consistent at arbitrary depth.
|
|
123
|
+
*/
|
|
124
|
+
private convertUnresolvedReferencesToBindings;
|
|
56
125
|
private parseMatch;
|
|
57
126
|
private parseNode;
|
|
58
127
|
private parseProperties;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parsing/parser.ts"],"names":[],"mappings":"AAUA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,UAAU,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parsing/parser.ts"],"names":[],"mappings":"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"}
|