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
package/dist/parsing/ast_node.js
CHANGED
|
@@ -27,6 +27,23 @@ class ASTNode {
|
|
|
27
27
|
child._parent = this;
|
|
28
28
|
this.children.push(child);
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Replaces an existing child node with a new node in-place. The
|
|
32
|
+
* new node takes the old node's position and parent reference.
|
|
33
|
+
*
|
|
34
|
+
* @param oldChild - The existing child to replace
|
|
35
|
+
* @param newChild - The replacement node
|
|
36
|
+
* @returns True if the replacement was performed, false otherwise
|
|
37
|
+
*/
|
|
38
|
+
replaceChild(oldChild, newChild) {
|
|
39
|
+
const idx = this.children.indexOf(oldChild);
|
|
40
|
+
if (idx === -1) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
newChild._parent = this;
|
|
44
|
+
this.children[idx] = newChild;
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
30
47
|
/**
|
|
31
48
|
* Returns the first child node.
|
|
32
49
|
*
|
|
@@ -35,7 +52,7 @@ class ASTNode {
|
|
|
35
52
|
*/
|
|
36
53
|
firstChild() {
|
|
37
54
|
if (this.children.length === 0) {
|
|
38
|
-
throw new Error(
|
|
55
|
+
throw new Error("Expected child");
|
|
39
56
|
}
|
|
40
57
|
return this.children[0];
|
|
41
58
|
}
|
|
@@ -47,7 +64,7 @@ class ASTNode {
|
|
|
47
64
|
*/
|
|
48
65
|
lastChild() {
|
|
49
66
|
if (this.children.length === 0) {
|
|
50
|
-
throw new Error(
|
|
67
|
+
throw new Error("Expected child");
|
|
51
68
|
}
|
|
52
69
|
return this.children[this.children.length - 1];
|
|
53
70
|
}
|
|
@@ -113,7 +130,7 @@ class ASTNode {
|
|
|
113
130
|
* @returns A formatted string showing the tree structure
|
|
114
131
|
*/
|
|
115
132
|
print() {
|
|
116
|
-
return Array.from(this._print(0)).join(
|
|
133
|
+
return Array.from(this._print(0)).join("\n");
|
|
117
134
|
}
|
|
118
135
|
/**
|
|
119
136
|
* Generator function for recursively printing the tree structure.
|
|
@@ -126,7 +143,7 @@ class ASTNode {
|
|
|
126
143
|
yield this.constructor.name;
|
|
127
144
|
}
|
|
128
145
|
else if (indent > 0) {
|
|
129
|
-
yield
|
|
146
|
+
yield "-".repeat(indent) + ` ${this.toString()}`;
|
|
130
147
|
}
|
|
131
148
|
for (const child of this.children) {
|
|
132
149
|
yield* child._print(indent + 1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast_node.js","sourceRoot":"","sources":["../../src/parsing/ast_node.ts"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO;IAAb;QACc,YAAO,GAAmB,IAAI,CAAC;QAC/B,aAAQ,GAAc,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"ast_node.js","sourceRoot":"","sources":["../../src/parsing/ast_node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import Identifier from "./identifier";
|
|
2
|
+
/**
|
|
3
|
+
* Reference to a `LET`-bound binding by name.
|
|
4
|
+
*
|
|
5
|
+
* Distinct from {@link Reference} (which points to a scope-local
|
|
6
|
+
* variable in the parser state) — a `BindingReference` is resolved
|
|
7
|
+
* against the global {@link Bindings} singleton at execution time.
|
|
8
|
+
*/
|
|
9
|
+
declare class BindingReference extends Identifier {
|
|
10
|
+
constructor(value: string);
|
|
11
|
+
get name(): string;
|
|
12
|
+
toString(): string;
|
|
13
|
+
value(): any;
|
|
14
|
+
}
|
|
15
|
+
export default BindingReference;
|
|
16
|
+
//# sourceMappingURL=binding_reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding_reference.d.ts","sourceRoot":"","sources":["../../../src/parsing/expressions/binding_reference.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC;;;;;;GAMG;AACH,cAAM,gBAAiB,SAAQ,UAAU;gBACzB,KAAK,EAAE,MAAM;IAIzB,IAAW,IAAI,IAAI,MAAM,CAExB;IAEM,QAAQ,IAAI,MAAM;IAIlB,KAAK,IAAI,GAAG;CAOtB;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const bindings_1 = __importDefault(require("../../graph/bindings"));
|
|
7
|
+
const identifier_1 = __importDefault(require("./identifier"));
|
|
8
|
+
/**
|
|
9
|
+
* Reference to a `LET`-bound binding by name.
|
|
10
|
+
*
|
|
11
|
+
* Distinct from {@link Reference} (which points to a scope-local
|
|
12
|
+
* variable in the parser state) — a `BindingReference` is resolved
|
|
13
|
+
* against the global {@link Bindings} singleton at execution time.
|
|
14
|
+
*/
|
|
15
|
+
class BindingReference extends identifier_1.default {
|
|
16
|
+
constructor(value) {
|
|
17
|
+
super(value);
|
|
18
|
+
}
|
|
19
|
+
get name() {
|
|
20
|
+
return this._value;
|
|
21
|
+
}
|
|
22
|
+
toString() {
|
|
23
|
+
return `BindingReference (${this._value})`;
|
|
24
|
+
}
|
|
25
|
+
value() {
|
|
26
|
+
const bindings = bindings_1.default.getInstance();
|
|
27
|
+
if (!bindings.has(this._value)) {
|
|
28
|
+
throw new Error(`Binding '${this._value}' is not defined`);
|
|
29
|
+
}
|
|
30
|
+
return bindings.get(this._value);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.default = BindingReference;
|
|
34
|
+
//# sourceMappingURL=binding_reference.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binding_reference.js","sourceRoot":"","sources":["../../../src/parsing/expressions/binding_reference.ts"],"names":[],"mappings":";;;;;AAAA,oEAA4C;AAC5C,8DAAsC;AAEtC;;;;;;GAMG;AACH,MAAM,gBAAiB,SAAQ,oBAAU;IACrC,YAAY,KAAa;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAEM,QAAQ;QACX,OAAO,qBAAqB,IAAI,CAAC,MAAM,GAAG,CAAC;IAC/C,CAAC;IAEM,KAAK;QACR,MAAM,QAAQ,GAAG,kBAAQ,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,MAAM,kBAAkB,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACJ;AAED,kBAAe,gBAAgB,CAAC"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
import { ProvenanceSource } from "../../compute/provenance";
|
|
1
2
|
import Return from "./return";
|
|
2
3
|
declare class AggregatedReturn extends Return {
|
|
3
4
|
private _group_by;
|
|
4
5
|
run(): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Provenance sources registered on an aggregate RETURN are folded
|
|
8
|
+
* into the active group's dedup maps rather than snapshotted per
|
|
9
|
+
* row, because each output row corresponds to a *group* of upstream
|
|
10
|
+
* matches. Override to route through the embedded `GroupBy`.
|
|
11
|
+
*/
|
|
12
|
+
addProvenanceSource(source: ProvenanceSource): void;
|
|
5
13
|
get results(): Record<string, any>[];
|
|
14
|
+
finish(): Promise<void>;
|
|
15
|
+
private _buildAggregateOutput;
|
|
6
16
|
}
|
|
7
17
|
export default AggregatedReturn;
|
|
8
18
|
//# sourceMappingURL=aggregated_return.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregated_return.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_return.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"aggregated_return.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_return.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAiB,MAAM,0BAA0B,CAAC;AAI3E,OAAO,MAAM,MAAM,UAAU,CAAC;AAE9B,cAAM,gBAAiB,SAAQ,MAAM;IACjC,OAAO,CAAC,SAAS,CAAuD;IAC3D,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAGjC;;;;;OAKG;IACI,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAG1D,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAG1C;IACY,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAWpC,OAAO,CAAC,qBAAqB;CAmChC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -13,6 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const group_by_1 = __importDefault(require("./group_by"));
|
|
16
|
+
const operation_1 = __importDefault(require("./operation"));
|
|
16
17
|
const return_1 = __importDefault(require("./return"));
|
|
17
18
|
class AggregatedReturn extends return_1.default {
|
|
18
19
|
constructor() {
|
|
@@ -24,15 +25,67 @@ class AggregatedReturn extends return_1.default {
|
|
|
24
25
|
yield this._group_by.run();
|
|
25
26
|
});
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Provenance sources registered on an aggregate RETURN are folded
|
|
30
|
+
* into the active group's dedup maps rather than snapshotted per
|
|
31
|
+
* row, because each output row corresponds to a *group* of upstream
|
|
32
|
+
* matches. Override to route through the embedded `GroupBy`.
|
|
33
|
+
*/
|
|
34
|
+
addProvenanceSource(source) {
|
|
35
|
+
this._group_by.addProvenanceSource(source);
|
|
36
|
+
}
|
|
27
37
|
get results() {
|
|
38
|
+
const { results } = this._buildAggregateOutput();
|
|
39
|
+
return results;
|
|
40
|
+
}
|
|
41
|
+
finish() {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
if (this._provenanceSink !== null) {
|
|
44
|
+
const { provenance } = this._buildAggregateOutput();
|
|
45
|
+
this._provenanceSink.length = 0;
|
|
46
|
+
for (const p of provenance)
|
|
47
|
+
this._provenanceSink.push(p);
|
|
48
|
+
}
|
|
49
|
+
// Skip Return.finish() because it would re-materialise provenance
|
|
50
|
+
// from the empty per-row `_results` array; chain straight to the
|
|
51
|
+
// next operation instead.
|
|
52
|
+
yield operation_1.default.prototype.finish.call(this);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
_buildAggregateOutput() {
|
|
28
56
|
if (this._where !== null) {
|
|
29
57
|
this._group_by.where = this._where;
|
|
30
58
|
}
|
|
31
|
-
const results =
|
|
59
|
+
const results = [];
|
|
60
|
+
const provenance = [];
|
|
61
|
+
// Emit a provenance entry per result row whenever a sink is
|
|
62
|
+
// registered, even if no provenance sources were attached (e.g.
|
|
63
|
+
// `RETURN count(*)` over no MATCH). This keeps
|
|
64
|
+
// `runner.provenance.length === runner.results.length`.
|
|
65
|
+
const wantProvenance = this._provenanceSink !== null;
|
|
66
|
+
if (wantProvenance) {
|
|
67
|
+
const recordIter = this._group_by.generate_results();
|
|
68
|
+
const provIter = this._group_by.generate_provenance();
|
|
69
|
+
while (true) {
|
|
70
|
+
const r = recordIter.next();
|
|
71
|
+
const p = provIter.next();
|
|
72
|
+
if (r.done || p.done)
|
|
73
|
+
break;
|
|
74
|
+
results.push(r.value);
|
|
75
|
+
provenance.push(p.value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
for (const r of this._group_by.generate_results())
|
|
80
|
+
results.push(r);
|
|
81
|
+
}
|
|
32
82
|
if (this._orderBy !== null) {
|
|
33
|
-
|
|
83
|
+
const indices = this._orderBy.sortIndices(results);
|
|
84
|
+
const sorted = indices.map((i) => results[i]);
|
|
85
|
+
const sortedProv = wantProvenance ? indices.map((i) => provenance[i]) : provenance;
|
|
86
|
+
return { results: sorted, provenance: sortedProv };
|
|
34
87
|
}
|
|
35
|
-
return results;
|
|
88
|
+
return { results, provenance };
|
|
36
89
|
}
|
|
37
90
|
}
|
|
38
91
|
exports.default = AggregatedReturn;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregated_return.js","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_return.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"aggregated_return.js","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_return.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,27 @@
|
|
|
1
|
+
import { ProvenanceSource } from "../../compute/provenance";
|
|
1
2
|
import With from "./return";
|
|
2
3
|
declare class AggregatedWith extends With {
|
|
3
4
|
private _group_by;
|
|
5
|
+
/**
|
|
6
|
+
* Iterator over the per-group provenance produced by `_group_by`.
|
|
7
|
+
* Advanced in lockstep with `generate_results()` inside `finish()` so
|
|
8
|
+
* that `_currentGroupProvenance` always reflects the group whose row
|
|
9
|
+
* the downstream pipeline is about to project.
|
|
10
|
+
*/
|
|
11
|
+
private _currentGroupProvenance;
|
|
4
12
|
run(): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Forward upstream provenance sources into the embedded `GroupBy`
|
|
15
|
+
* so each group accumulates the union of contributing bindings.
|
|
16
|
+
*/
|
|
17
|
+
addProvenanceSource(source: ProvenanceSource): void;
|
|
18
|
+
/**
|
|
19
|
+
* Expose this aggregation as a downstream provenance source. When
|
|
20
|
+
* the downstream pipeline projects a row, it snapshots us and
|
|
21
|
+
* receives the pre-computed provenance for the group currently being
|
|
22
|
+
* flushed by `finish()`.
|
|
23
|
+
*/
|
|
24
|
+
asProvenanceSource(): ProvenanceSource;
|
|
5
25
|
finish(): Promise<void>;
|
|
6
26
|
}
|
|
7
27
|
export default AggregatedWith;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregated_with.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_with.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"aggregated_with.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_with.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAiB,MAAM,0BAA0B,CAAC;AAG3E,OAAO,IAAI,MAAM,UAAU,CAAC;AAE5B,cAAM,cAAe,SAAQ,IAAI;IAC7B,OAAO,CAAC,SAAS,CAAuD;IACxE;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB,CAA8B;IAChD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAGjC;;;OAGG;IACI,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAG1D;;;;;OAKG;IACI,kBAAkB,IAAI,gBAAgB;IAMhC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAavC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -12,27 +12,59 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const return_1 = __importDefault(require("./return"));
|
|
16
15
|
const group_by_1 = __importDefault(require("./group_by"));
|
|
16
|
+
const return_1 = __importDefault(require("./return"));
|
|
17
17
|
class AggregatedWith extends return_1.default {
|
|
18
18
|
constructor() {
|
|
19
19
|
super(...arguments);
|
|
20
20
|
this._group_by = new group_by_1.default(this.children);
|
|
21
|
+
/**
|
|
22
|
+
* Iterator over the per-group provenance produced by `_group_by`.
|
|
23
|
+
* Advanced in lockstep with `generate_results()` inside `finish()` so
|
|
24
|
+
* that `_currentGroupProvenance` always reflects the group whose row
|
|
25
|
+
* the downstream pipeline is about to project.
|
|
26
|
+
*/
|
|
27
|
+
this._currentGroupProvenance = null;
|
|
21
28
|
}
|
|
22
29
|
run() {
|
|
23
30
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24
31
|
yield this._group_by.run();
|
|
25
32
|
});
|
|
26
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Forward upstream provenance sources into the embedded `GroupBy`
|
|
36
|
+
* so each group accumulates the union of contributing bindings.
|
|
37
|
+
*/
|
|
38
|
+
addProvenanceSource(source) {
|
|
39
|
+
this._group_by.addProvenanceSource(source);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Expose this aggregation as a downstream provenance source. When
|
|
43
|
+
* the downstream pipeline projects a row, it snapshots us and
|
|
44
|
+
* receives the pre-computed provenance for the group currently being
|
|
45
|
+
* flushed by `finish()`.
|
|
46
|
+
*/
|
|
47
|
+
asProvenanceSource() {
|
|
48
|
+
return {
|
|
49
|
+
snapshot: () => { var _a; return (_a = this._currentGroupProvenance) !== null && _a !== void 0 ? _a : { nodes: [], relationships: [], rows: [] }; },
|
|
50
|
+
};
|
|
51
|
+
}
|
|
27
52
|
finish() {
|
|
28
53
|
const _super = Object.create(null, {
|
|
29
54
|
finish: { get: () => super.finish }
|
|
30
55
|
});
|
|
31
56
|
return __awaiter(this, void 0, void 0, function* () {
|
|
32
57
|
var _a;
|
|
58
|
+
const wantProvenance = this._group_by.provenanceEnabled;
|
|
59
|
+
const provIter = wantProvenance ? this._group_by.generate_provenance() : null;
|
|
33
60
|
for (const _ of this._group_by.generate_results()) {
|
|
61
|
+
if (provIter !== null) {
|
|
62
|
+
const next = provIter.next();
|
|
63
|
+
this._currentGroupProvenance = next.done ? null : next.value;
|
|
64
|
+
}
|
|
34
65
|
yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
|
|
35
66
|
}
|
|
67
|
+
this._currentGroupProvenance = null;
|
|
36
68
|
yield _super.finish.call(this);
|
|
37
69
|
});
|
|
38
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregated_with.js","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_with.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"aggregated_with.js","sourceRoot":"","sources":["../../../src/parsing/operations/aggregated_with.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,0DAAiC;AACjC,sDAA4B;AAE5B,MAAM,cAAe,SAAQ,gBAAI;IAAjC;;QACY,cAAS,GAAY,IAAI,kBAAO,CAAC,IAAI,CAAC,QAAwB,CAAC,CAAC;QACxE;;;;;WAKG;QACK,4BAAuB,GAAyB,IAAI,CAAC;IAoCjE,CAAC;IAnCgB,GAAG;;YACZ,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QAC/B,CAAC;KAAA;IACD;;;OAGG;IACI,mBAAmB,CAAC,MAAwB;QAC/C,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IACD;;;;;OAKG;IACI,kBAAkB;QACrB,OAAO;YACH,QAAQ,EAAE,GAAkB,EAAE,WAC1B,OAAA,MAAA,IAAI,CAAC,uBAAuB,mCAAI,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA,EAAA;SACjF,CAAC;IACN,CAAC;IACY,MAAM;;;;;;YACf,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;YACxD,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAChD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;oBACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;oBAC7B,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBACjE,CAAC;gBACD,MAAM,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,EAAE,CAAA,CAAC;YAC3B,CAAC;YACD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC;YACpC,MAAM,OAAM,MAAM,WAAE,CAAC;QACzB,CAAC;KAAA;CACJ;AAED,kBAAe,cAAc,CAAC"}
|
|
@@ -4,9 +4,13 @@ import Operation from "./operation";
|
|
|
4
4
|
declare class CreateNode extends Operation {
|
|
5
5
|
private _node;
|
|
6
6
|
private _statement;
|
|
7
|
-
|
|
7
|
+
private _isStatic;
|
|
8
|
+
private _refreshEveryMs;
|
|
9
|
+
constructor(node: Node, statement: ASTNode, isStatic?: boolean, refreshEveryMs?: number | null);
|
|
8
10
|
get node(): Node | null;
|
|
9
11
|
get statement(): ASTNode | null;
|
|
12
|
+
get isStatic(): boolean;
|
|
13
|
+
get refreshEveryMs(): number | null;
|
|
10
14
|
run(): Promise<void>;
|
|
11
15
|
get results(): Record<string, any>[];
|
|
12
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_node.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/create_node.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,UAAW,SAAQ,SAAS;IAC9B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,UAAU,CAAwB;
|
|
1
|
+
{"version":3,"file":"create_node.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/create_node.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,UAAW,SAAQ,SAAS;IAC9B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,eAAe,CAAuB;gBAE1C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,OAAO,EAClB,QAAQ,GAAE,OAAe,EACzB,cAAc,GAAE,MAAM,GAAG,IAAW;IAQxC,IAAW,IAAI,IAAI,IAAI,GAAG,IAAI,CAE7B;IACD,IAAW,SAAS,IAAI,OAAO,GAAG,IAAI,CAErC;IACD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IACD,IAAW,cAAc,IAAI,MAAM,GAAG,IAAI,CAEzC;IACM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE1C;CACJ;AAED,eAAe,UAAU,CAAC"}
|
|
@@ -15,12 +15,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
const database_1 = __importDefault(require("../../graph/database"));
|
|
16
16
|
const operation_1 = __importDefault(require("./operation"));
|
|
17
17
|
class CreateNode extends operation_1.default {
|
|
18
|
-
constructor(node, statement) {
|
|
18
|
+
constructor(node, statement, isStatic = false, refreshEveryMs = null) {
|
|
19
19
|
super();
|
|
20
20
|
this._node = null;
|
|
21
21
|
this._statement = null;
|
|
22
|
+
this._isStatic = false;
|
|
23
|
+
this._refreshEveryMs = null;
|
|
22
24
|
this._node = node;
|
|
23
25
|
this._statement = statement;
|
|
26
|
+
this._isStatic = isStatic;
|
|
27
|
+
this._refreshEveryMs = refreshEveryMs;
|
|
24
28
|
}
|
|
25
29
|
get node() {
|
|
26
30
|
return this._node;
|
|
@@ -28,6 +32,12 @@ class CreateNode extends operation_1.default {
|
|
|
28
32
|
get statement() {
|
|
29
33
|
return this._statement;
|
|
30
34
|
}
|
|
35
|
+
get isStatic() {
|
|
36
|
+
return this._isStatic;
|
|
37
|
+
}
|
|
38
|
+
get refreshEveryMs() {
|
|
39
|
+
return this._refreshEveryMs;
|
|
40
|
+
}
|
|
31
41
|
run() {
|
|
32
42
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
33
43
|
try {
|
|
@@ -35,7 +45,7 @@ class CreateNode extends operation_1.default {
|
|
|
35
45
|
throw new Error("Node is null");
|
|
36
46
|
}
|
|
37
47
|
const db = database_1.default.getInstance();
|
|
38
|
-
db.addNode(this._node, this._statement);
|
|
48
|
+
db.addNode(this._node, this._statement, this._isStatic, this._refreshEveryMs);
|
|
39
49
|
resolve();
|
|
40
50
|
}
|
|
41
51
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_node.js","sourceRoot":"","sources":["../../../src/parsing/operations/create_node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAG5C,4DAAoC;AAEpC,MAAM,UAAW,SAAQ,mBAAS;
|
|
1
|
+
{"version":3,"file":"create_node.js","sourceRoot":"","sources":["../../../src/parsing/operations/create_node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAG5C,4DAAoC;AAEpC,MAAM,UAAW,SAAQ,mBAAS;IAK9B,YACI,IAAU,EACV,SAAkB,EAClB,WAAoB,KAAK,EACzB,iBAAgC,IAAI;QAEpC,KAAK,EAAE,CAAC;QAVJ,UAAK,GAAgB,IAAI,CAAC;QAC1B,eAAU,GAAmB,IAAI,CAAC;QAClC,cAAS,GAAY,KAAK,CAAC;QAC3B,oBAAe,GAAkB,IAAI,CAAC;QAQ1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IAC1C,CAAC;IACD,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACM,GAAG;QACN,OAAO,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM,EAAE,GAAa,kBAAQ,CAAC,WAAW,EAAE,CAAC;gBAC5C,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC/E,OAAO,EAAE,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;IACD,IAAW,OAAO;QACd,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,kBAAe,UAAU,CAAC"}
|
|
@@ -4,9 +4,13 @@ import Operation from "./operation";
|
|
|
4
4
|
declare class CreateRelationship extends Operation {
|
|
5
5
|
private _relationship;
|
|
6
6
|
private _statement;
|
|
7
|
-
|
|
7
|
+
private _isStatic;
|
|
8
|
+
private _refreshEveryMs;
|
|
9
|
+
constructor(relationship: Relationship, statement: ASTNode, isStatic?: boolean, refreshEveryMs?: number | null);
|
|
8
10
|
get relationship(): Relationship | null;
|
|
9
11
|
get statement(): ASTNode | null;
|
|
12
|
+
get isStatic(): boolean;
|
|
13
|
+
get refreshEveryMs(): number | null;
|
|
10
14
|
run(): Promise<void>;
|
|
11
15
|
get results(): Record<string, any>[];
|
|
12
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_relationship.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/create_relationship.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,kBAAmB,SAAQ,SAAS;IACtC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,UAAU,CAAwB;
|
|
1
|
+
{"version":3,"file":"create_relationship.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/create_relationship.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,kBAAmB,SAAQ,SAAS;IACtC,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,eAAe,CAAuB;gBAE1C,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,OAAO,EAClB,QAAQ,GAAE,OAAe,EACzB,cAAc,GAAE,MAAM,GAAG,IAAW;IAQxC,IAAW,YAAY,IAAI,YAAY,GAAG,IAAI,CAE7C;IACD,IAAW,SAAS,IAAI,OAAO,GAAG,IAAI,CAErC;IACD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IACD,IAAW,cAAc,IAAI,MAAM,GAAG,IAAI,CAEzC;IACM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB3B,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE1C;CACJ;AACD,eAAe,kBAAkB,CAAC"}
|
|
@@ -15,12 +15,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
const database_1 = __importDefault(require("../../graph/database"));
|
|
16
16
|
const operation_1 = __importDefault(require("./operation"));
|
|
17
17
|
class CreateRelationship extends operation_1.default {
|
|
18
|
-
constructor(relationship, statement) {
|
|
18
|
+
constructor(relationship, statement, isStatic = false, refreshEveryMs = null) {
|
|
19
19
|
super();
|
|
20
20
|
this._relationship = null;
|
|
21
21
|
this._statement = null;
|
|
22
|
+
this._isStatic = false;
|
|
23
|
+
this._refreshEveryMs = null;
|
|
22
24
|
this._relationship = relationship;
|
|
23
25
|
this._statement = statement;
|
|
26
|
+
this._isStatic = isStatic;
|
|
27
|
+
this._refreshEveryMs = refreshEveryMs;
|
|
24
28
|
}
|
|
25
29
|
get relationship() {
|
|
26
30
|
return this._relationship;
|
|
@@ -28,6 +32,12 @@ class CreateRelationship extends operation_1.default {
|
|
|
28
32
|
get statement() {
|
|
29
33
|
return this._statement;
|
|
30
34
|
}
|
|
35
|
+
get isStatic() {
|
|
36
|
+
return this._isStatic;
|
|
37
|
+
}
|
|
38
|
+
get refreshEveryMs() {
|
|
39
|
+
return this._refreshEveryMs;
|
|
40
|
+
}
|
|
31
41
|
run() {
|
|
32
42
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
33
43
|
try {
|
|
@@ -35,7 +45,7 @@ class CreateRelationship extends operation_1.default {
|
|
|
35
45
|
throw new Error("Relationship is null");
|
|
36
46
|
}
|
|
37
47
|
const db = database_1.default.getInstance();
|
|
38
|
-
db.addRelationship(this._relationship, this._statement);
|
|
48
|
+
db.addRelationship(this._relationship, this._statement, this._isStatic, this._refreshEveryMs);
|
|
39
49
|
resolve();
|
|
40
50
|
}
|
|
41
51
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create_relationship.js","sourceRoot":"","sources":["../../../src/parsing/operations/create_relationship.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAG5C,4DAAoC;AAEpC,MAAM,kBAAmB,SAAQ,mBAAS;
|
|
1
|
+
{"version":3,"file":"create_relationship.js","sourceRoot":"","sources":["../../../src/parsing/operations/create_relationship.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAG5C,4DAAoC;AAEpC,MAAM,kBAAmB,SAAQ,mBAAS;IAKtC,YACI,YAA0B,EAC1B,SAAkB,EAClB,WAAoB,KAAK,EACzB,iBAAgC,IAAI;QAEpC,KAAK,EAAE,CAAC;QAVJ,kBAAa,GAAwB,IAAI,CAAC;QAC1C,eAAU,GAAmB,IAAI,CAAC;QAClC,cAAS,GAAY,KAAK,CAAC;QAC3B,oBAAe,GAAkB,IAAI,CAAC;QAQ1C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,cAAc,CAAC;IAC1C,CAAC;IACD,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IACD,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACM,GAAG;QACN,OAAO,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC5C,CAAC;gBACD,MAAM,EAAE,GAAG,kBAAQ,CAAC,WAAW,EAAE,CAAC;gBAClC,EAAE,CAAC,eAAe,CACd,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,UAAW,EAChB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,CACvB,CAAC;gBACF,OAAO,EAAE,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;IACD,IAAW,OAAO;QACd,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AACD,kBAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Operation from "./operation";
|
|
2
|
+
/**
|
|
3
|
+
* `DROP BINDING name`: remove a `LET`-bound entry (plain or
|
|
4
|
+
* refreshable) from the {@link Bindings} singleton. No-op if the
|
|
5
|
+
* binding does not exist.
|
|
6
|
+
*/
|
|
7
|
+
declare class DropBinding 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 DropBinding;
|
|
15
|
+
//# sourceMappingURL=drop_binding.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drop_binding.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/drop_binding.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;;;GAIG;AACH,cAAM,WAAY,SAAQ,SAAS;IAC/B,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,WAAW,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
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
|
+
* `DROP BINDING name`: remove a `LET`-bound entry (plain or
|
|
19
|
+
* refreshable) from the {@link Bindings} singleton. No-op if the
|
|
20
|
+
* binding does not exist.
|
|
21
|
+
*/
|
|
22
|
+
class DropBinding extends operation_1.default {
|
|
23
|
+
constructor(name) {
|
|
24
|
+
super();
|
|
25
|
+
this._name = name;
|
|
26
|
+
}
|
|
27
|
+
get name() {
|
|
28
|
+
return this._name;
|
|
29
|
+
}
|
|
30
|
+
run() {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
var _a;
|
|
33
|
+
bindings_1.default.getInstance().delete(this._name);
|
|
34
|
+
yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
get results() {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.default = DropBinding;
|
|
42
|
+
//# sourceMappingURL=drop_binding.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drop_binding.js","sourceRoot":"","sources":["../../../src/parsing/operations/drop_binding.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAC5C,4DAAoC;AAEpC;;;;GAIG;AACH,MAAM,WAAY,SAAQ,mBAAS;IAG/B,YAAY,IAAY;QACpB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEY,GAAG;;;YACZ,kBAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,EAAE,CAAA,CAAC;QAC3B,CAAC;KAAA;IAED,IAAW,OAAO;QACd,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,kBAAe,WAAW,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NodeBinding, ProvenanceSource, RelationshipBinding, RowProvenance, RowSegment } from "../../compute/provenance";
|
|
1
2
|
import AggregationElement from "../functions/reducer_element";
|
|
2
3
|
import Projection from "./projection";
|
|
3
4
|
import Where from "./where";
|
|
@@ -5,11 +6,25 @@ declare class Node {
|
|
|
5
6
|
private _value;
|
|
6
7
|
private _children;
|
|
7
8
|
private _elements;
|
|
9
|
+
private _provenanceNodes;
|
|
10
|
+
private _provenanceRels;
|
|
11
|
+
private _provenanceRows;
|
|
8
12
|
constructor(value?: any);
|
|
9
13
|
get value(): any;
|
|
10
14
|
get children(): Map<string, Node>;
|
|
11
15
|
get elements(): AggregationElement[] | null;
|
|
12
16
|
set elements(elements: AggregationElement[]);
|
|
17
|
+
/** Per-group dedup map for contributing node bindings (lazy). */
|
|
18
|
+
get provenanceNodes(): Map<string, NodeBinding>;
|
|
19
|
+
/** Per-group dedup map for contributing relationship bindings (lazy). */
|
|
20
|
+
get provenanceRelationships(): Map<string, RelationshipBinding>;
|
|
21
|
+
/**
|
|
22
|
+
* Per-input-row contribution segments in arrival order. One entry is
|
|
23
|
+
* appended per `GroupBy.run()` call that lands in this group, so an
|
|
24
|
+
* aggregate row's `provenance.rows` aligns positionally with
|
|
25
|
+
* `collect(...)` outputs from the same group.
|
|
26
|
+
*/
|
|
27
|
+
get provenanceRows(): RowSegment[];
|
|
13
28
|
}
|
|
14
29
|
declare class GroupBy extends Projection {
|
|
15
30
|
private _root;
|
|
@@ -17,7 +32,17 @@ declare class GroupBy extends Projection {
|
|
|
17
32
|
private _mappers;
|
|
18
33
|
private _reducers;
|
|
19
34
|
protected _where: Where | null;
|
|
35
|
+
private _provenanceSources;
|
|
20
36
|
run(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Register a provenance source whose snapshot is folded into the
|
|
39
|
+
* currently active group on every `run()`. May be called multiple
|
|
40
|
+
* times to compose contributions from several upstream MATCHes or
|
|
41
|
+
* upstream aggregation boundaries.
|
|
42
|
+
*/
|
|
43
|
+
addProvenanceSource(source: ProvenanceSource): void;
|
|
44
|
+
get provenanceEnabled(): boolean;
|
|
45
|
+
private recordProvenance;
|
|
21
46
|
private get root();
|
|
22
47
|
private get current();
|
|
23
48
|
private set current(value);
|
|
@@ -28,6 +53,13 @@ declare class GroupBy extends Projection {
|
|
|
28
53
|
private _generate_mappers;
|
|
29
54
|
private get reducers();
|
|
30
55
|
generate_results(mapperIndex?: number, node?: Node): Generator<Record<string, any>>;
|
|
56
|
+
/**
|
|
57
|
+
* Walks the group tree in the same traversal order as
|
|
58
|
+
* {@link generate_results}, yielding the materialised {@link
|
|
59
|
+
* RowProvenance} for each emitted group. When provenance is
|
|
60
|
+
* disabled, yields empty entries so callers can still zip cleanly.
|
|
61
|
+
*/
|
|
62
|
+
generate_provenance(mapperIndex?: number, node?: Node): Generator<RowProvenance>;
|
|
31
63
|
set where(where: Where);
|
|
32
64
|
get where(): boolean;
|
|
33
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"group_by.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/group_by.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"group_by.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/group_by.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,WAAW,EACX,gBAAgB,EAChB,mBAAmB,EACnB,aAAa,EACb,UAAU,EAGb,MAAM,0BAA0B,CAAC;AAGlC,OAAO,kBAAkB,MAAM,8BAA8B,CAAC;AAC9D,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,cAAM,IAAI;IACN,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,eAAe,CAAiD;IACxE,OAAO,CAAC,eAAe,CAA6B;gBACxC,KAAK,GAAE,GAAU;IAG7B,IAAW,KAAK,IAAI,GAAG,CAEtB;IACD,IAAW,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAEvC;IACD,IAAW,QAAQ,IAAI,kBAAkB,EAAE,GAAG,IAAI,CAEjD;IACD,IAAW,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,EAAE,EAEjD;IACD,iEAAiE;IACjE,IAAW,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAKrD;IACD,yEAAyE;IACzE,IAAW,uBAAuB,IAAI,GAAG,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAKrE;IACD;;;;;OAKG;IACH,IAAW,cAAc,IAAI,UAAU,EAAE,CAKxC;CACJ;AAED,cAAM,OAAQ,SAAQ,UAAU;IAC5B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,SAAS,CAAoC;IACrD,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAQ;IACtC,OAAO,CAAC,kBAAkB,CAAmC;IAChD,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;;;;OAKG;IACI,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAM1D,IAAW,iBAAiB,IAAI,OAAO,CAEtC;IACD,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,KAAK,IAAI,GAEf;IACD,OAAO,KAAK,OAAO,GAElB;IACD,OAAO,KAAK,OAAO,QAElB;IACD,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,GAAG;IAeX,OAAO,CAAC,MAAM;IASd,OAAO,KAAK,OAAO,GAKlB;IACD,OAAO,CAAE,iBAAiB;IAO1B,OAAO,KAAK,QAAQ,GASnB;IACO,gBAAgB,CACpB,WAAW,GAAE,MAAU,EACvB,IAAI,GAAE,IAAgB,GACvB,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAyBjC;;;;;OAKG;IACK,mBAAmB,CACvB,WAAW,GAAE,MAAU,EACvB,IAAI,GAAE,IAAgB,GACvB,SAAS,CAAC,aAAa,CAAC;IAwB3B,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,EAE5B;IACD,IAAW,KAAK,IAAI,OAAO,CAK1B;CACJ;AAED,eAAe,OAAO,CAAC"}
|