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.
@@ -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 first;
17
- private last;
30
+ private _statements;
18
31
  private _args;
19
- private _ast;
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
- * Executes the parsed FlowQuery statement.
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;AAK1C;;;;;;;;;;;;GAYG;AACH,cAAM,MAAM;IACR,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,IAAI,CAAU;IAEtB;;;;;;;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;IAW3C;;;;;OAKG;IACU,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAcjC;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAetB;;;;OAIG;IACH,IAAW,OAAO,IAAI,GAAG,CAExB;CACJ;AAED,eAAe,MAAM,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"}
@@ -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
- this.first = this._ast.firstChild();
47
- this.last = this._ast.lastChild();
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
- * Executes the parsed FlowQuery statement.
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
- this.bindParameters(this._ast);
60
- yield this.first.initialize();
61
- yield this.first.run();
62
- yield this.first.finish();
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;AAE5E,+DAAuC;AAEvC;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM;IAMR;;;;;;;OAOG;IACH,YACI,YAA2B,IAAI,EAC/B,MAAsB,IAAI,EAC1B,OAAmC,IAAI;QAdnC,UAAK,GAA+B,IAAI,CAAC;QAgB7C,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,gBAAM,EAAE,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAe,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAe,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACU,GAAG;;YACZ,OAAO,IAAI,OAAO,CAAO,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC/C,IAAI,CAAC;oBACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;oBAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;oBACvB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC1B,OAAO,EAAE,CAAC;gBACd,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,MAAM,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC;YACL,CAAC,CAAA,CAAC,CAAC;QACP,CAAC;KAAA;IAED;;;;;OAKG;IACK,cAAc,CAAC,IAAa;;QAChC,IAAI,IAAI,YAAY,6BAAkB,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3E,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,cAAc,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzD,CAAC;QACL,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;IAC7B,CAAC;CACJ;AAED,kBAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/compute/runner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,qGAA4E;AAC5E,oFAA2D;AAC3D,oGAA2E;AAC3E,oFAA2D;AAC3D,oGAA2E;AAE3E,+DAAuC;AAkBvC;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM;IAKR;;;;;;;OAOG;IACH,YACI,YAA2B,IAAI,EAC/B,MAAsB,IAAI,EAC1B,OAAmC,IAAI;QAdnC,UAAK,GAA+B,IAAI,CAAC;QAgB7C,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CACzB,IAAI,gBAAM,EAAE,CAAC,eAAe,CAAC,SAAU,CAAC,EACxC,MAAM,CAAC,WAAW,CACrB,CAAC;QACN,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAC5C,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,GAAY;QACnC,OAAO;YACH,GAAG;YACH,KAAK,EAAE,GAAG,CAAC,UAAU,EAAe;YACpC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAe;SACrC,CAAC;IACN,CAAC;IAED;;OAEG;IACK,eAAe;QACnB,MAAM,QAAQ,GAAmB;YAC7B,qBAAqB,EAAE,CAAC;YACxB,6BAA6B,EAAE,CAAC;YAChC,qBAAqB,EAAE,CAAC;YACxB,6BAA6B,EAAE,CAAC;SACnC,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClC,IAAI,EAAE,GAAqB,IAAI,CAAC,KAAK,CAAC;YACtC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;gBACjB,IAAI,EAAE,YAAY,qBAAU;oBAAE,QAAQ,CAAC,qBAAqB,EAAE,CAAC;qBAC1D,IAAI,EAAE,YAAY,6BAAkB;oBAAE,QAAQ,CAAC,6BAA6B,EAAE,CAAC;qBAC/E,IAAI,EAAE,YAAY,qBAAU;oBAAE,QAAQ,CAAC,qBAAqB,EAAE,CAAC;qBAC/D,IAAI,EAAE,YAAY,6BAAkB;oBAAE,QAAQ,CAAC,6BAA6B,EAAE,CAAC;gBACpF,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;OAKG;IACU,GAAG;;YACZ,OAAO,IAAI,OAAO,CAAO,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC/C,IAAI,CAAC;oBACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBAClC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;wBAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;wBACvB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC9B,CAAC;oBACD,OAAO,EAAE,CAAC;gBACd,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACT,MAAM,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC;YACL,CAAC,CAAA,CAAC,CAAC;QACP,CAAC;KAAA;IAED;;;;;OAKG;IACK,cAAc,CAAC,IAAa;;QAChC,IAAI,IAAI,YAAY,6BAAkB,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,MAAA,IAAI,CAAC,KAAK,mCAAI,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC3E,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,cAAc,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzD,CAAC;QACL,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,IAAW,OAAO;QACd,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACH,IAAW,QAAQ;QACf,yBAAY,IAAI,CAAC,SAAS,EAAG;IACjC,CAAC;CACJ;AAED,kBAAe,MAAM,CAAC"}