flowquery 1.0.51 → 1.0.52
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 +640 -75
- package/dist/compute/runner.d.ts +29 -5
- package/dist/compute/runner.d.ts.map +1 -1
- package/dist/compute/runner.js +66 -10
- package/dist/compute/runner.js.map +1 -1
- package/dist/flowquery.min.js +1 -1
- package/dist/index.browser.d.ts +2 -0
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.d.ts +2 -1
- package/dist/index.node.d.ts.map +1 -1
- package/dist/index.node.js.map +1 -1
- package/dist/parsing/parser.d.ts +15 -0
- package/dist/parsing/parser.d.ts.map +1 -1
- package/dist/parsing/parser.js +71 -1
- package/dist/parsing/parser.js.map +1 -1
- package/dist/tokenization/symbol.d.ts +1 -0
- package/dist/tokenization/symbol.d.ts.map +1 -1
- package/dist/tokenization/symbol.js +1 -0
- package/dist/tokenization/symbol.js.map +1 -1
- package/dist/tokenization/token.d.ts +2 -0
- package/dist/tokenization/token.d.ts.map +1 -1
- package/dist/tokenization/token.js +6 -0
- package/dist/tokenization/token.js.map +1 -1
- package/package.json +2 -2
package/dist/compute/runner.d.ts
CHANGED
|
@@ -1,33 +1,51 @@
|
|
|
1
1
|
import ASTNode from "../parsing/ast_node";
|
|
2
|
+
/**
|
|
3
|
+
* Metadata about the operations performed by a Runner execution.
|
|
4
|
+
*/
|
|
5
|
+
export interface RunnerMetadata {
|
|
6
|
+
virtual_nodes_created: number;
|
|
7
|
+
virtual_relationships_created: number;
|
|
8
|
+
virtual_nodes_deleted: number;
|
|
9
|
+
virtual_relationships_deleted: number;
|
|
10
|
+
}
|
|
2
11
|
/**
|
|
3
12
|
* Executes a FlowQuery statement and retrieves the results.
|
|
4
13
|
*
|
|
5
14
|
* The Runner class parses a FlowQuery statement into an AST and executes it,
|
|
6
15
|
* managing the execution flow from the first operation to the final return statement.
|
|
7
16
|
*
|
|
17
|
+
* Supports multi-statement queries separated by semicolons. Only CREATE and DELETE
|
|
18
|
+
* statements may appear before the last statement. If a retrieval statement is present,
|
|
19
|
+
* it must be the last statement.
|
|
20
|
+
*
|
|
8
21
|
* @example
|
|
9
22
|
* ```typescript
|
|
10
23
|
* const runner = new Runner("WITH 1 as x RETURN x");
|
|
11
24
|
* await runner.run();
|
|
12
25
|
* console.log(runner.results); // [{ x: 1 }]
|
|
26
|
+
* console.log(runner.metadata); // { virtual_nodes_created: 0, ... }
|
|
13
27
|
* ```
|
|
14
28
|
*/
|
|
15
29
|
declare class Runner {
|
|
16
|
-
private
|
|
17
|
-
private last;
|
|
30
|
+
private _statements;
|
|
18
31
|
private _args;
|
|
19
|
-
private
|
|
32
|
+
private _metadata;
|
|
20
33
|
/**
|
|
21
34
|
* Creates a new Runner instance and parses the FlowQuery statement.
|
|
22
35
|
*
|
|
23
|
-
* @param statement - The FlowQuery statement to execute
|
|
36
|
+
* @param statement - The FlowQuery statement to execute (may contain semicolon-separated statements)
|
|
24
37
|
* @param ast - An optional pre-parsed AST to use instead of parsing the statement
|
|
25
38
|
* @param args - Optional parameters to inject into $-prefixed parameter references
|
|
26
39
|
* @throws {Error} If the statement is null, empty, or contains syntax errors
|
|
27
40
|
*/
|
|
28
41
|
constructor(statement?: string | null, ast?: ASTNode | null, args?: Record<string, any> | null);
|
|
42
|
+
private static toStatement;
|
|
29
43
|
/**
|
|
30
|
-
*
|
|
44
|
+
* Walks all statement ASTs to count CREATE/DELETE operations for metadata.
|
|
45
|
+
*/
|
|
46
|
+
private computeMetadata;
|
|
47
|
+
/**
|
|
48
|
+
* Executes the parsed FlowQuery statement(s).
|
|
31
49
|
*
|
|
32
50
|
* @returns A promise that resolves when execution completes
|
|
33
51
|
* @throws {Error} If an error occurs during execution
|
|
@@ -46,6 +64,12 @@ declare class Runner {
|
|
|
46
64
|
* @returns The results from the last operation (typically a RETURN statement)
|
|
47
65
|
*/
|
|
48
66
|
get results(): any;
|
|
67
|
+
/**
|
|
68
|
+
* Gets metadata about the operations in this query.
|
|
69
|
+
*
|
|
70
|
+
* @returns Counts of virtual nodes/relationships created and deleted
|
|
71
|
+
*/
|
|
72
|
+
get metadata(): RunnerMetadata;
|
|
49
73
|
}
|
|
50
74
|
export default Runner;
|
|
51
75
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAS1C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,6BAA6B,EAAE,MAAM,CAAC;IACtC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,6BAA6B,EAAE,MAAM,CAAC;CACzC;AAQD;;;;;;;;;;;;;;;;;GAiBG;AACH,cAAM,MAAM;IACR,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,SAAS,CAAiB;IAElC;;;;;;;OAOG;gBAEC,SAAS,GAAE,MAAM,GAAG,IAAW,EAC/B,GAAG,GAAE,OAAO,GAAG,IAAW,EAC1B,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW;IAmB3C,OAAO,CAAC,MAAM,CAAC,WAAW;IAQ1B;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;;;;OAKG;IACU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAetB;;;;OAIG;IACH,IAAW,OAAO,IAAI,GAAG,CAExB;IAED;;;;OAIG;IACH,IAAW,QAAQ,IAAI,cAAc,CAEpC;CACJ;AAED,eAAe,MAAM,CAAC"}
|
package/dist/compute/runner.js
CHANGED
|
@@ -13,6 +13,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const parameter_reference_1 = __importDefault(require("../parsing/expressions/parameter_reference"));
|
|
16
|
+
const create_node_1 = __importDefault(require("../parsing/operations/create_node"));
|
|
17
|
+
const create_relationship_1 = __importDefault(require("../parsing/operations/create_relationship"));
|
|
18
|
+
const delete_node_1 = __importDefault(require("../parsing/operations/delete_node"));
|
|
19
|
+
const delete_relationship_1 = __importDefault(require("../parsing/operations/delete_relationship"));
|
|
16
20
|
const parser_1 = __importDefault(require("../parsing/parser"));
|
|
17
21
|
/**
|
|
18
22
|
* Executes a FlowQuery statement and retrieves the results.
|
|
@@ -20,18 +24,23 @@ const parser_1 = __importDefault(require("../parsing/parser"));
|
|
|
20
24
|
* The Runner class parses a FlowQuery statement into an AST and executes it,
|
|
21
25
|
* managing the execution flow from the first operation to the final return statement.
|
|
22
26
|
*
|
|
27
|
+
* Supports multi-statement queries separated by semicolons. Only CREATE and DELETE
|
|
28
|
+
* statements may appear before the last statement. If a retrieval statement is present,
|
|
29
|
+
* it must be the last statement.
|
|
30
|
+
*
|
|
23
31
|
* @example
|
|
24
32
|
* ```typescript
|
|
25
33
|
* const runner = new Runner("WITH 1 as x RETURN x");
|
|
26
34
|
* await runner.run();
|
|
27
35
|
* console.log(runner.results); // [{ x: 1 }]
|
|
36
|
+
* console.log(runner.metadata); // { virtual_nodes_created: 0, ... }
|
|
28
37
|
* ```
|
|
29
38
|
*/
|
|
30
39
|
class Runner {
|
|
31
40
|
/**
|
|
32
41
|
* Creates a new Runner instance and parses the FlowQuery statement.
|
|
33
42
|
*
|
|
34
|
-
* @param statement - The FlowQuery statement to execute
|
|
43
|
+
* @param statement - The FlowQuery statement to execute (may contain semicolon-separated statements)
|
|
35
44
|
* @param ast - An optional pre-parsed AST to use instead of parsing the statement
|
|
36
45
|
* @param args - Optional parameters to inject into $-prefixed parameter references
|
|
37
46
|
* @throws {Error} If the statement is null, empty, or contains syntax errors
|
|
@@ -41,13 +50,50 @@ class Runner {
|
|
|
41
50
|
if ((statement === null || statement === "") && ast === null) {
|
|
42
51
|
throw new Error("Either statement or AST must be provided");
|
|
43
52
|
}
|
|
44
|
-
this._ast = ast !== null ? ast : new parser_1.default().parse(statement);
|
|
45
53
|
this._args = args;
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
if (ast !== null) {
|
|
55
|
+
this._statements = [Runner.toStatement(ast)];
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this._statements = Array.from(new parser_1.default().parseStatements(statement), Runner.toStatement);
|
|
59
|
+
}
|
|
60
|
+
this._metadata = this.computeMetadata();
|
|
61
|
+
}
|
|
62
|
+
static toStatement(ast) {
|
|
63
|
+
return {
|
|
64
|
+
ast,
|
|
65
|
+
first: ast.firstChild(),
|
|
66
|
+
last: ast.lastChild(),
|
|
67
|
+
};
|
|
48
68
|
}
|
|
49
69
|
/**
|
|
50
|
-
*
|
|
70
|
+
* Walks all statement ASTs to count CREATE/DELETE operations for metadata.
|
|
71
|
+
*/
|
|
72
|
+
computeMetadata() {
|
|
73
|
+
const metadata = {
|
|
74
|
+
virtual_nodes_created: 0,
|
|
75
|
+
virtual_relationships_created: 0,
|
|
76
|
+
virtual_nodes_deleted: 0,
|
|
77
|
+
virtual_relationships_deleted: 0,
|
|
78
|
+
};
|
|
79
|
+
for (const stmt of this._statements) {
|
|
80
|
+
let op = stmt.first;
|
|
81
|
+
while (op !== null) {
|
|
82
|
+
if (op instanceof create_node_1.default)
|
|
83
|
+
metadata.virtual_nodes_created++;
|
|
84
|
+
else if (op instanceof create_relationship_1.default)
|
|
85
|
+
metadata.virtual_relationships_created++;
|
|
86
|
+
else if (op instanceof delete_node_1.default)
|
|
87
|
+
metadata.virtual_nodes_deleted++;
|
|
88
|
+
else if (op instanceof delete_relationship_1.default)
|
|
89
|
+
metadata.virtual_relationships_deleted++;
|
|
90
|
+
op = op.next;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return metadata;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Executes the parsed FlowQuery statement(s).
|
|
51
97
|
*
|
|
52
98
|
* @returns A promise that resolves when execution completes
|
|
53
99
|
* @throws {Error} If an error occurs during execution
|
|
@@ -56,10 +102,12 @@ class Runner {
|
|
|
56
102
|
return __awaiter(this, void 0, void 0, function* () {
|
|
57
103
|
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
58
104
|
try {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
105
|
+
for (const stmt of this._statements) {
|
|
106
|
+
this.bindParameters(stmt.ast);
|
|
107
|
+
yield stmt.first.initialize();
|
|
108
|
+
yield stmt.first.run();
|
|
109
|
+
yield stmt.first.finish();
|
|
110
|
+
}
|
|
63
111
|
resolve();
|
|
64
112
|
}
|
|
65
113
|
catch (e) {
|
|
@@ -96,7 +144,15 @@ class Runner {
|
|
|
96
144
|
* @returns The results from the last operation (typically a RETURN statement)
|
|
97
145
|
*/
|
|
98
146
|
get results() {
|
|
99
|
-
return this.last.results;
|
|
147
|
+
return this._statements[this._statements.length - 1].last.results;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Gets metadata about the operations in this query.
|
|
151
|
+
*
|
|
152
|
+
* @returns Counts of virtual nodes/relationships created and deleted
|
|
153
|
+
*/
|
|
154
|
+
get metadata() {
|
|
155
|
+
return Object.assign({}, this._metadata);
|
|
100
156
|
}
|
|
101
157
|
}
|
|
102
158
|
exports.default = Runner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,qGAA4E;
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":"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"}
|