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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/compute/runner.js
CHANGED
|
@@ -12,15 +12,25 @@ 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 bindings_1 = __importDefault(require("../graph/bindings"));
|
|
15
16
|
const data_cache_1 = __importDefault(require("../graph/data_cache"));
|
|
16
17
|
const data_resolver_1 = __importDefault(require("../graph/data_resolver"));
|
|
18
|
+
const node_1 = __importDefault(require("../graph/node"));
|
|
19
|
+
const relationship_1 = __importDefault(require("../graph/relationship"));
|
|
20
|
+
const binding_reference_1 = __importDefault(require("../parsing/expressions/binding_reference"));
|
|
17
21
|
const parameter_reference_1 = __importDefault(require("../parsing/expressions/parameter_reference"));
|
|
22
|
+
const aggregated_with_1 = __importDefault(require("../parsing/operations/aggregated_with"));
|
|
18
23
|
const create_node_1 = __importDefault(require("../parsing/operations/create_node"));
|
|
19
24
|
const create_relationship_1 = __importDefault(require("../parsing/operations/create_relationship"));
|
|
20
25
|
const delete_node_1 = __importDefault(require("../parsing/operations/delete_node"));
|
|
21
26
|
const delete_relationship_1 = __importDefault(require("../parsing/operations/delete_relationship"));
|
|
27
|
+
const load_1 = __importDefault(require("../parsing/operations/load"));
|
|
28
|
+
const match_1 = __importDefault(require("../parsing/operations/match"));
|
|
29
|
+
const return_1 = __importDefault(require("../parsing/operations/return"));
|
|
30
|
+
const union_1 = __importDefault(require("../parsing/operations/union"));
|
|
22
31
|
const parser_1 = __importDefault(require("../parsing/parser"));
|
|
23
32
|
const statement_info_crawler_1 = __importDefault(require("../parsing/statement_info_crawler"));
|
|
33
|
+
const provenance_1 = require("./provenance");
|
|
24
34
|
/**
|
|
25
35
|
* Executes a FlowQuery statement and retrieves the results.
|
|
26
36
|
*
|
|
@@ -46,14 +56,17 @@ class Runner {
|
|
|
46
56
|
* @param statement - The FlowQuery statement to execute (may contain semicolon-separated statements)
|
|
47
57
|
* @param ast - An optional pre-parsed AST to use instead of parsing the statement
|
|
48
58
|
* @param args - Optional parameters to inject into $-prefixed parameter references
|
|
59
|
+
* @param options - Optional configuration (e.g. `{ provenance: true }`)
|
|
49
60
|
* @throws {Error} If the statement is null, empty, or contains syntax errors
|
|
50
61
|
*/
|
|
51
|
-
constructor(statement = null, ast = null, args = null) {
|
|
62
|
+
constructor(statement = null, ast = null, args = null, options = {}) {
|
|
52
63
|
this._args = null;
|
|
64
|
+
this._provenance = null;
|
|
53
65
|
if ((statement === null || statement === "") && ast === null) {
|
|
54
66
|
throw new Error("Either statement or AST must be provided");
|
|
55
67
|
}
|
|
56
68
|
this._args = args;
|
|
69
|
+
this._options = options;
|
|
57
70
|
if (ast !== null) {
|
|
58
71
|
this._isTopLevel = false;
|
|
59
72
|
this._statements = [Runner.toStatement(ast)];
|
|
@@ -111,10 +124,25 @@ class Runner {
|
|
|
111
124
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
112
125
|
try {
|
|
113
126
|
if (this._isTopLevel) {
|
|
114
|
-
data_resolver_1.default.getInstance().dataCache = new data_cache_1.default();
|
|
127
|
+
data_resolver_1.default.getInstance().dataCache = new data_cache_1.default(this._options.provenance === true);
|
|
128
|
+
}
|
|
129
|
+
if (this._options.provenance) {
|
|
130
|
+
this._provenance = [];
|
|
131
|
+
this.enableProvenance();
|
|
115
132
|
}
|
|
116
133
|
for (const stmt of this._statements) {
|
|
117
134
|
this.bindParameters(stmt.ast);
|
|
135
|
+
// Refresh any stale refreshable bindings referenced
|
|
136
|
+
// by this statement. Sub-query evaluation is
|
|
137
|
+
// async, but BindingReference.value() is sync;
|
|
138
|
+
// populating the cache up-front keeps reads cheap
|
|
139
|
+
// and synchronous.
|
|
140
|
+
const bindingNames = new Set();
|
|
141
|
+
this.collectBindingNames(stmt.ast, bindingNames);
|
|
142
|
+
const bindings = bindings_1.default.getInstance();
|
|
143
|
+
for (const name of bindingNames) {
|
|
144
|
+
yield bindings.materialize(name);
|
|
145
|
+
}
|
|
118
146
|
yield stmt.first.initialize();
|
|
119
147
|
yield stmt.first.run();
|
|
120
148
|
yield stmt.first.finish();
|
|
@@ -127,6 +155,121 @@ class Runner {
|
|
|
127
155
|
}));
|
|
128
156
|
});
|
|
129
157
|
}
|
|
158
|
+
/**
|
|
159
|
+
* Walks the terminal statement's operation chain and wires every
|
|
160
|
+
* MATCH-bound `Node` / `Relationship` slot to the operation that
|
|
161
|
+
* will project it. Aggregation boundaries (`AggregatedWith`,
|
|
162
|
+
* `AggregatedReturn`) absorb upstream sites into their group-level
|
|
163
|
+
* accumulation; aggregations downstream of one another chain via
|
|
164
|
+
* each `AggregatedWith` re-exposing itself as a provenance source
|
|
165
|
+
* for the next consumer.
|
|
166
|
+
*
|
|
167
|
+
* Only the last statement may produce rows; preceding statements
|
|
168
|
+
* are limited to CREATE / DELETE / REFRESH / DROP and never need
|
|
169
|
+
* row-level provenance.
|
|
170
|
+
*/
|
|
171
|
+
enableProvenance() {
|
|
172
|
+
if (this._statements.length === 0)
|
|
173
|
+
return;
|
|
174
|
+
const stmt = this._statements[this._statements.length - 1];
|
|
175
|
+
Runner.wireProvenance(stmt.first, this._provenance);
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Walk `first..terminal`, accumulating live MATCH sites into the
|
|
179
|
+
* "active" source list and handing it off at every aggregation
|
|
180
|
+
* boundary. Each `AggregatedWith` consumes the active list and then
|
|
181
|
+
* re-publishes itself as the single active source going forward.
|
|
182
|
+
* `Load` operations contribute per-row data-source bindings.
|
|
183
|
+
*
|
|
184
|
+
* Exposed as a public static so other components (e.g. `Let` when
|
|
185
|
+
* running a sub-query right-hand side) can wire provenance for an
|
|
186
|
+
* operation chain they drive directly, without going through the
|
|
187
|
+
* full `Runner.run` lifecycle.
|
|
188
|
+
*/
|
|
189
|
+
static wireProvenance(first, sink) {
|
|
190
|
+
const makeSites = () => {
|
|
191
|
+
const s = new provenance_1.ProvenanceSites();
|
|
192
|
+
s.captureProperties = true;
|
|
193
|
+
return s;
|
|
194
|
+
};
|
|
195
|
+
let activeSites = makeSites();
|
|
196
|
+
// Extra (non-site) sources contributed by upstream aggregations.
|
|
197
|
+
let activeAggregations = [];
|
|
198
|
+
// Per-row `Load` operations contributing data-source bindings.
|
|
199
|
+
let activeLoads = [];
|
|
200
|
+
let op = first;
|
|
201
|
+
let terminal = null;
|
|
202
|
+
while (op !== null) {
|
|
203
|
+
if (op instanceof match_1.default) {
|
|
204
|
+
for (const pattern of op.patterns) {
|
|
205
|
+
Runner.collectSitesFromPattern(pattern, activeSites);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
else if (op instanceof load_1.default) {
|
|
209
|
+
activeLoads.push(op.asProvenanceSource());
|
|
210
|
+
}
|
|
211
|
+
else if (op instanceof aggregated_with_1.default) {
|
|
212
|
+
// Aggregation boundary: hand off current sources and
|
|
213
|
+
// re-publish the aggregation as the new source.
|
|
214
|
+
if (!activeSites.isEmpty) {
|
|
215
|
+
op.addProvenanceSource(activeSites);
|
|
216
|
+
}
|
|
217
|
+
for (const a of activeAggregations) {
|
|
218
|
+
op.addProvenanceSource(a.asProvenanceSource());
|
|
219
|
+
}
|
|
220
|
+
for (const l of activeLoads) {
|
|
221
|
+
op.addProvenanceSource(l);
|
|
222
|
+
}
|
|
223
|
+
activeSites = makeSites();
|
|
224
|
+
activeAggregations = [op];
|
|
225
|
+
activeLoads = [];
|
|
226
|
+
}
|
|
227
|
+
if (op.next === null) {
|
|
228
|
+
terminal = op;
|
|
229
|
+
}
|
|
230
|
+
op = op.next;
|
|
231
|
+
}
|
|
232
|
+
if (terminal === null)
|
|
233
|
+
return;
|
|
234
|
+
if (terminal instanceof union_1.default) {
|
|
235
|
+
// UNION composes results from two independent sub-pipelines;
|
|
236
|
+
// wire each branch separately and let Union merge.
|
|
237
|
+
const leftSink = [];
|
|
238
|
+
const rightSink = [];
|
|
239
|
+
Runner.wireProvenance(terminal.left, leftSink);
|
|
240
|
+
Runner.wireProvenance(terminal.right, rightSink);
|
|
241
|
+
terminal.enableProvenance(leftSink, rightSink, sink);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (terminal instanceof return_1.default) {
|
|
245
|
+
// AggregatedReturn folds sources into its GroupBy; plain Return
|
|
246
|
+
// snapshots them per emitted row. Both share the same source
|
|
247
|
+
// registration API. We always enable the sink so even
|
|
248
|
+
// source-less queries (`WITH ... RETURN`) emit one
|
|
249
|
+
// `{nodes:[], relationships:[]}` per result row for shape
|
|
250
|
+
// consistency with the results array.
|
|
251
|
+
if (!activeSites.isEmpty) {
|
|
252
|
+
terminal.addProvenanceSource(activeSites);
|
|
253
|
+
}
|
|
254
|
+
for (const a of activeAggregations) {
|
|
255
|
+
terminal.addProvenanceSource(a.asProvenanceSource());
|
|
256
|
+
}
|
|
257
|
+
for (const l of activeLoads) {
|
|
258
|
+
terminal.addProvenanceSource(l);
|
|
259
|
+
}
|
|
260
|
+
terminal.enableProvenance(sink);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
static collectSitesFromPattern(pattern, sites) {
|
|
264
|
+
for (const element of pattern.chain) {
|
|
265
|
+
if (element instanceof node_1.default) {
|
|
266
|
+
sites.addNode(element);
|
|
267
|
+
}
|
|
268
|
+
else if (element instanceof relationship_1.default) {
|
|
269
|
+
sites.addRelationship(element);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
130
273
|
/**
|
|
131
274
|
* Recursively walks the AST to bind ParameterReference nodes
|
|
132
275
|
* to the args provided to this Runner.
|
|
@@ -149,6 +292,19 @@ class Runner {
|
|
|
149
292
|
this.bindParameters(child);
|
|
150
293
|
}
|
|
151
294
|
}
|
|
295
|
+
/**
|
|
296
|
+
* Recursively walks the AST to collect the names of all
|
|
297
|
+
* `BindingReference`s. Used to refresh stale refreshable
|
|
298
|
+
* bindings before statement execution begins.
|
|
299
|
+
*/
|
|
300
|
+
collectBindingNames(node, names) {
|
|
301
|
+
if (node instanceof binding_reference_1.default) {
|
|
302
|
+
names.add(node.name);
|
|
303
|
+
}
|
|
304
|
+
for (const child of node.getChildren()) {
|
|
305
|
+
this.collectBindingNames(child, names);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
152
308
|
/**
|
|
153
309
|
* Gets the results from the executed statement.
|
|
154
310
|
*
|
|
@@ -173,6 +329,157 @@ class Runner {
|
|
|
173
329
|
info: m.info ? statement_info_crawler_1.default.clone(m.info) : undefined,
|
|
174
330
|
};
|
|
175
331
|
}
|
|
332
|
+
/**
|
|
333
|
+
* Row-level data lineage aligned by index with {@link results}.
|
|
334
|
+
*
|
|
335
|
+
* Each {@link RowProvenance} entry lists the concrete `id` values of the
|
|
336
|
+
* node slots and the `(left_id, right_id, type)` hops of the
|
|
337
|
+
* relationship slots that were bound while the corresponding result row
|
|
338
|
+
* was being projected.
|
|
339
|
+
*
|
|
340
|
+
* Returns an empty array unless the runner was constructed with
|
|
341
|
+
* `{ provenance: true }` or the query produced no rows.
|
|
342
|
+
*/
|
|
343
|
+
get provenance() {
|
|
344
|
+
var _a;
|
|
345
|
+
return (_a = this._provenance) !== null && _a !== void 0 ? _a : [];
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Convenience method that bundles structural lineage with row-level
|
|
349
|
+
* provenance for a single result row. Returns one {@link CellTrace}
|
|
350
|
+
* per output column, pairing the column's
|
|
351
|
+
* {@link ColumnLineage | structural lineage} (from
|
|
352
|
+
* {@link metadata}`.info.returns`) with the node / relationship
|
|
353
|
+
* bindings (from {@link provenance}) whose alias matches one of the
|
|
354
|
+
* column's references.
|
|
355
|
+
*
|
|
356
|
+
* Equivalent to manually correlating `metadata.info.returns[col]`
|
|
357
|
+
* with `provenance[rowIndex].nodes` / `.relationships`, but with
|
|
358
|
+
* the `(alias, property) -> binding` join and the per-property
|
|
359
|
+
* value extraction done for you.
|
|
360
|
+
*
|
|
361
|
+
* @param rowIndex - Zero-based index into {@link results}.
|
|
362
|
+
* @returns A `{column -> CellTrace}` map aligned with the row.
|
|
363
|
+
* @throws {RangeError} If `rowIndex` is out of bounds for `results`.
|
|
364
|
+
*/
|
|
365
|
+
traceRow(rowIndex) {
|
|
366
|
+
var _a, _b, _c;
|
|
367
|
+
const rows = this.results;
|
|
368
|
+
const length = Array.isArray(rows) ? rows.length : 0;
|
|
369
|
+
if (rowIndex < 0 || rowIndex >= length) {
|
|
370
|
+
throw new RangeError(`Runner.traceRow: rowIndex ${rowIndex} out of bounds (results.length=${length})`);
|
|
371
|
+
}
|
|
372
|
+
const row = rows[rowIndex];
|
|
373
|
+
const returns = (_b = (_a = this._metadata.info) === null || _a === void 0 ? void 0 : _a.returns) !== null && _b !== void 0 ? _b : {};
|
|
374
|
+
const rowProv = this._provenance ? ((_c = this._provenance[rowIndex]) !== null && _c !== void 0 ? _c : null) : null;
|
|
375
|
+
const out = {};
|
|
376
|
+
for (const column of Object.keys(row)) {
|
|
377
|
+
const lineageRaw = returns[column];
|
|
378
|
+
const lineage = lineageRaw
|
|
379
|
+
? Runner.cloneColumnLineage(lineageRaw)
|
|
380
|
+
: null;
|
|
381
|
+
const bindings = [];
|
|
382
|
+
if (rowProv !== null && lineage !== null) {
|
|
383
|
+
for (const ref of lineage.references) {
|
|
384
|
+
if (ref.kind === "node") {
|
|
385
|
+
for (const n of rowProv.nodes) {
|
|
386
|
+
if (n.alias === ref.alias) {
|
|
387
|
+
bindings.push({
|
|
388
|
+
reference: ref,
|
|
389
|
+
value: Runner.readNodeProperty(n, ref.property),
|
|
390
|
+
node: n,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
for (const r of rowProv.relationships) {
|
|
397
|
+
if (r.alias === ref.alias) {
|
|
398
|
+
bindings.push({
|
|
399
|
+
reference: ref,
|
|
400
|
+
value: Runner.readRelationshipProperty(r, ref.property),
|
|
401
|
+
relationship: r,
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
out[column] = { column, value: row[column], lineage, bindings };
|
|
409
|
+
}
|
|
410
|
+
return out;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* One-shot combined lineage and provenance report for the entire
|
|
414
|
+
* Runner execution. Returns the structural per-column lineage
|
|
415
|
+
* (deep copy of `metadata.info?.returns`) alongside one
|
|
416
|
+
* {@link traceRow} map per result row.
|
|
417
|
+
*
|
|
418
|
+
* Useful as a single object to hand to a UI, dump to a log, or
|
|
419
|
+
* snapshot for debugging. For per-cell lookups during normal flow,
|
|
420
|
+
* {@link traceRow} is cheaper.
|
|
421
|
+
*/
|
|
422
|
+
lineage() {
|
|
423
|
+
var _a, _b, _c;
|
|
424
|
+
const rows = (_a = this.results) !== null && _a !== void 0 ? _a : [];
|
|
425
|
+
const length = Array.isArray(rows) ? rows.length : 0;
|
|
426
|
+
const returnsRaw = (_c = (_b = this._metadata.info) === null || _b === void 0 ? void 0 : _b.returns) !== null && _c !== void 0 ? _c : {};
|
|
427
|
+
const columns = {};
|
|
428
|
+
for (const [k, v] of Object.entries(returnsRaw)) {
|
|
429
|
+
columns[k] = Runner.cloneColumnLineage(v);
|
|
430
|
+
}
|
|
431
|
+
const rowsOut = [];
|
|
432
|
+
for (let i = 0; i < length; i++) {
|
|
433
|
+
rowsOut.push(this.traceRow(i));
|
|
434
|
+
}
|
|
435
|
+
return { columns, rows: rowsOut };
|
|
436
|
+
}
|
|
437
|
+
static cloneColumnLineage(lineage) {
|
|
438
|
+
const copy = {
|
|
439
|
+
references: lineage.references.map((r) => ({
|
|
440
|
+
alias: r.alias,
|
|
441
|
+
kind: r.kind,
|
|
442
|
+
labels: [...r.labels],
|
|
443
|
+
property: r.property,
|
|
444
|
+
})),
|
|
445
|
+
kind: lineage.kind,
|
|
446
|
+
};
|
|
447
|
+
if (lineage.aggregate !== undefined)
|
|
448
|
+
copy.aggregate = lineage.aggregate;
|
|
449
|
+
return copy;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Resolve `binding.property` against a captured `NodeBinding`.
|
|
453
|
+
* The built-in `id` lives at the top of the binding (it's excluded
|
|
454
|
+
* from `properties`); everything else comes from `properties`.
|
|
455
|
+
*/
|
|
456
|
+
static readNodeProperty(binding, property) {
|
|
457
|
+
var _a;
|
|
458
|
+
if (property === "id")
|
|
459
|
+
return binding.id;
|
|
460
|
+
return (_a = binding.properties) === null || _a === void 0 ? void 0 : _a[property];
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Resolve `binding.property` against a captured `RelationshipBinding`.
|
|
464
|
+
* Returns the value from `hops[0]`: the built-ins `left_id`,
|
|
465
|
+
* `right_id`, and `type` come from the hop itself, while everything
|
|
466
|
+
* else comes from `hops[0].properties`. For variable-length matches
|
|
467
|
+
* with heterogeneous hops, inspect `relationship.hops` directly to
|
|
468
|
+
* see per-hop values.
|
|
469
|
+
*/
|
|
470
|
+
static readRelationshipProperty(binding, property) {
|
|
471
|
+
var _a;
|
|
472
|
+
const firstHop = binding.hops[0];
|
|
473
|
+
if (firstHop === undefined)
|
|
474
|
+
return undefined;
|
|
475
|
+
if (property === "left_id")
|
|
476
|
+
return firstHop.left_id;
|
|
477
|
+
if (property === "right_id")
|
|
478
|
+
return firstHop.right_id;
|
|
479
|
+
if (property === "type")
|
|
480
|
+
return firstHop.type;
|
|
481
|
+
return (_a = firstHop.properties) === null || _a === void 0 ? void 0 : _a[property];
|
|
482
|
+
}
|
|
176
483
|
}
|
|
177
484
|
exports.default = Runner;
|
|
178
485
|
//# sourceMappingURL=runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"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"}
|