leangraph 1.1.1 → 1.1.3
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/dist/db.d.ts.map +1 -1
- package/dist/db.js +42 -3
- package/dist/db.js.map +1 -1
- package/dist/engine/hybrid-executor.d.ts +118 -0
- package/dist/engine/hybrid-executor.d.ts.map +1 -0
- package/dist/engine/hybrid-executor.js +205 -0
- package/dist/engine/hybrid-executor.js.map +1 -0
- package/dist/engine/index.d.ts +36 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +34 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/memory-graph.d.ts +68 -0
- package/dist/engine/memory-graph.d.ts.map +1 -0
- package/dist/engine/memory-graph.js +176 -0
- package/dist/engine/memory-graph.js.map +1 -0
- package/dist/engine/query-planner.d.ts +62 -0
- package/dist/engine/query-planner.d.ts.map +1 -0
- package/dist/engine/query-planner.js +481 -0
- package/dist/engine/query-planner.js.map +1 -0
- package/dist/engine/subgraph-loader.d.ts +41 -0
- package/dist/engine/subgraph-loader.d.ts.map +1 -0
- package/dist/engine/subgraph-loader.js +172 -0
- package/dist/engine/subgraph-loader.js.map +1 -0
- package/dist/executor.d.ts +17 -0
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +286 -100
- package/dist/executor.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/parser.d.ts +47 -3
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +228 -41
- package/dist/parser.js.map +1 -1
- package/dist/translator.d.ts +53 -0
- package/dist/translator.d.ts.map +1 -1
- package/dist/translator.js +1548 -183
- package/dist/translator.js.map +1 -1
- package/package.json +9 -3
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subgraph Loader - loads bounded subgraphs from SQLite into memory.
|
|
3
|
+
* Uses indexed SQL queries for anchor node discovery and bounded
|
|
4
|
+
* recursive CTEs for subgraph extraction.
|
|
5
|
+
*/
|
|
6
|
+
import { MemoryGraph } from "./memory-graph.js";
|
|
7
|
+
// SQLite default limit is 999 variables per query
|
|
8
|
+
// Use a conservative batch size to leave room for other params
|
|
9
|
+
const SQL_VARIABLE_BATCH_SIZE = 400;
|
|
10
|
+
export class SubgraphLoader {
|
|
11
|
+
db;
|
|
12
|
+
constructor(db) {
|
|
13
|
+
this.db = db;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Find anchor nodes by label and optional property filters.
|
|
17
|
+
* Uses indexed queries for efficient lookup.
|
|
18
|
+
*/
|
|
19
|
+
findAnchors(label, propertyFilters) {
|
|
20
|
+
// Build query with label filter (uses idx_nodes_primary_label index)
|
|
21
|
+
let sql = `SELECT id FROM nodes WHERE json_extract(label, '$[0]') = ?`;
|
|
22
|
+
const params = [label];
|
|
23
|
+
// Add property filters
|
|
24
|
+
if (propertyFilters) {
|
|
25
|
+
for (const [key, value] of Object.entries(propertyFilters)) {
|
|
26
|
+
sql += ` AND json_extract(properties, '$.${key}') = ?`;
|
|
27
|
+
// json_extract returns raw values for numbers/booleans, JSON strings for strings
|
|
28
|
+
// Numbers come back as numbers, strings come back as strings (without quotes)
|
|
29
|
+
params.push(value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const result = this.db.execute(sql, params);
|
|
33
|
+
return result.rows.map((row) => row.id);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Load a bounded subgraph into memory.
|
|
37
|
+
* Uses a recursive CTE to collect reachable node IDs within bounds,
|
|
38
|
+
* then bulk fetches nodes and edges.
|
|
39
|
+
*/
|
|
40
|
+
loadSubgraph(bounds) {
|
|
41
|
+
const { anchorNodeIds, maxDepth, edgeTypes, direction } = bounds;
|
|
42
|
+
if (anchorNodeIds.length === 0) {
|
|
43
|
+
return MemoryGraph.fromRows([], []);
|
|
44
|
+
}
|
|
45
|
+
// Collect all reachable node IDs using recursive CTE
|
|
46
|
+
const nodeIds = this.collectReachableNodes(anchorNodeIds, maxDepth, edgeTypes, direction);
|
|
47
|
+
if (nodeIds.size === 0) {
|
|
48
|
+
return MemoryGraph.fromRows([], []);
|
|
49
|
+
}
|
|
50
|
+
// Bulk fetch nodes (in batches to avoid SQLite variable limit)
|
|
51
|
+
const nodeIdArray = Array.from(nodeIds);
|
|
52
|
+
const nodeRows = [];
|
|
53
|
+
for (let i = 0; i < nodeIdArray.length; i += SQL_VARIABLE_BATCH_SIZE) {
|
|
54
|
+
const batch = nodeIdArray.slice(i, i + SQL_VARIABLE_BATCH_SIZE);
|
|
55
|
+
const placeholders = batch.map(() => "?").join(",");
|
|
56
|
+
const result = this.db.execute(`SELECT id, label, properties FROM nodes WHERE id IN (${placeholders})`, batch);
|
|
57
|
+
for (const row of result.rows) {
|
|
58
|
+
const r = row;
|
|
59
|
+
nodeRows.push({ id: r.id, label: r.label, properties: r.properties });
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Bulk fetch edges between loaded nodes (in batches)
|
|
63
|
+
// Use temp table approach for large sets to avoid O(n^2) batching
|
|
64
|
+
const edgeRows = [];
|
|
65
|
+
if (nodeIdArray.length <= SQL_VARIABLE_BATCH_SIZE) {
|
|
66
|
+
// Small set: simple IN clause
|
|
67
|
+
const placeholders = nodeIdArray.map(() => "?").join(",");
|
|
68
|
+
const result = this.db.execute(`SELECT id, type, source_id, target_id, properties
|
|
69
|
+
FROM edges
|
|
70
|
+
WHERE source_id IN (${placeholders})
|
|
71
|
+
AND target_id IN (${placeholders})`, [...nodeIdArray, ...nodeIdArray]);
|
|
72
|
+
for (const row of result.rows) {
|
|
73
|
+
const r = row;
|
|
74
|
+
edgeRows.push({
|
|
75
|
+
id: r.id,
|
|
76
|
+
type: r.type,
|
|
77
|
+
source_id: r.source_id,
|
|
78
|
+
target_id: r.target_id,
|
|
79
|
+
properties: r.properties,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
// Large set: use temp table to avoid variable limit
|
|
85
|
+
this.db.execute(`CREATE TEMP TABLE IF NOT EXISTS _subgraph_nodes (id TEXT PRIMARY KEY)`, []);
|
|
86
|
+
this.db.execute(`DELETE FROM _subgraph_nodes`, []);
|
|
87
|
+
// Insert node IDs in batches
|
|
88
|
+
for (let i = 0; i < nodeIdArray.length; i += SQL_VARIABLE_BATCH_SIZE) {
|
|
89
|
+
const batch = nodeIdArray.slice(i, i + SQL_VARIABLE_BATCH_SIZE);
|
|
90
|
+
const placeholders = batch.map(() => "(?)").join(",");
|
|
91
|
+
this.db.execute(`INSERT INTO _subgraph_nodes (id) VALUES ${placeholders}`, batch);
|
|
92
|
+
}
|
|
93
|
+
// Query edges using temp table join
|
|
94
|
+
const result = this.db.execute(`SELECT e.id, e.type, e.source_id, e.target_id, e.properties
|
|
95
|
+
FROM edges e
|
|
96
|
+
INNER JOIN _subgraph_nodes s ON e.source_id = s.id
|
|
97
|
+
INNER JOIN _subgraph_nodes t ON e.target_id = t.id`, []);
|
|
98
|
+
for (const row of result.rows) {
|
|
99
|
+
const r = row;
|
|
100
|
+
edgeRows.push({
|
|
101
|
+
id: r.id,
|
|
102
|
+
type: r.type,
|
|
103
|
+
source_id: r.source_id,
|
|
104
|
+
target_id: r.target_id,
|
|
105
|
+
properties: r.properties,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return MemoryGraph.fromRows(nodeRows, edgeRows);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Collect all node IDs reachable from anchors within the given bounds.
|
|
113
|
+
* Uses BFS with depth tracking.
|
|
114
|
+
*/
|
|
115
|
+
collectReachableNodes(anchorIds, maxDepth, edgeTypes, direction) {
|
|
116
|
+
const reachable = new Set();
|
|
117
|
+
const visited = new Set();
|
|
118
|
+
// Queue entries: [nodeId, currentDepth]
|
|
119
|
+
const queue = [];
|
|
120
|
+
// Initialize with anchor nodes
|
|
121
|
+
for (const id of anchorIds) {
|
|
122
|
+
// Verify anchor exists
|
|
123
|
+
const exists = this.db.execute("SELECT 1 FROM nodes WHERE id = ?", [id]);
|
|
124
|
+
if (exists.rows.length > 0) {
|
|
125
|
+
queue.push([id, 0]);
|
|
126
|
+
visited.add(id);
|
|
127
|
+
reachable.add(id);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Build edge type filter for SQL
|
|
131
|
+
let edgeTypeFilter = "";
|
|
132
|
+
const edgeTypeParams = [];
|
|
133
|
+
if (edgeTypes !== null && edgeTypes.length > 0) {
|
|
134
|
+
const placeholders = edgeTypes.map(() => "?").join(",");
|
|
135
|
+
edgeTypeFilter = ` AND type IN (${placeholders})`;
|
|
136
|
+
edgeTypeParams.push(...edgeTypes);
|
|
137
|
+
}
|
|
138
|
+
// BFS traversal
|
|
139
|
+
while (queue.length > 0) {
|
|
140
|
+
const [nodeId, depth] = queue.shift();
|
|
141
|
+
if (depth >= maxDepth) {
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
// Get neighbor IDs based on direction
|
|
145
|
+
const neighborIds = [];
|
|
146
|
+
if (direction === "out" || direction === "both") {
|
|
147
|
+
const sql = `SELECT target_id FROM edges WHERE source_id = ?${edgeTypeFilter}`;
|
|
148
|
+
const result = this.db.execute(sql, [nodeId, ...edgeTypeParams]);
|
|
149
|
+
for (const row of result.rows) {
|
|
150
|
+
neighborIds.push(row.target_id);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (direction === "in" || direction === "both") {
|
|
154
|
+
const sql = `SELECT source_id FROM edges WHERE target_id = ?${edgeTypeFilter}`;
|
|
155
|
+
const result = this.db.execute(sql, [nodeId, ...edgeTypeParams]);
|
|
156
|
+
for (const row of result.rows) {
|
|
157
|
+
neighborIds.push(row.source_id);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Add unvisited neighbors to queue
|
|
161
|
+
for (const neighborId of neighborIds) {
|
|
162
|
+
if (!visited.has(neighborId)) {
|
|
163
|
+
visited.add(neighborId);
|
|
164
|
+
reachable.add(neighborId);
|
|
165
|
+
queue.push([neighborId, depth + 1]);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return reachable;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=subgraph-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subgraph-loader.js","sourceRoot":"","sources":["../../src/engine/subgraph-loader.ts"],"names":[],"mappings":"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"}
|
package/dist/executor.d.ts
CHANGED
|
@@ -38,6 +38,7 @@ export declare class Executor {
|
|
|
38
38
|
private propertyCache;
|
|
39
39
|
private edgePropertyCache;
|
|
40
40
|
private edgeInfoCache;
|
|
41
|
+
private hybridExecutor;
|
|
41
42
|
constructor(db: GraphDatabase);
|
|
42
43
|
/**
|
|
43
44
|
* Get node properties from cache or parse from JSON string and cache them
|
|
@@ -486,6 +487,7 @@ export declare class Executor {
|
|
|
486
487
|
private generateCartesianProduct;
|
|
487
488
|
/**
|
|
488
489
|
* Resolve properties, including unwind variable references and binary expressions
|
|
490
|
+
* Note: In Cypher, setting a property to null means the property is not stored.
|
|
489
491
|
*/
|
|
490
492
|
private resolvePropertiesWithUnwind;
|
|
491
493
|
/**
|
|
@@ -619,6 +621,17 @@ export declare class Executor {
|
|
|
619
621
|
* Pattern: ... FOREACH (var IN list | SET/CREATE/DELETE...) ...
|
|
620
622
|
*/
|
|
621
623
|
private tryForeachExecution;
|
|
624
|
+
/**
|
|
625
|
+
* Try to execute a hybrid var-length pattern query using the in-memory graph engine.
|
|
626
|
+
* Falls back to null if the query can't be executed via hybrid approach.
|
|
627
|
+
*
|
|
628
|
+
* Supports generalized pattern chains with N nodes and multiple var-length edges.
|
|
629
|
+
*/
|
|
630
|
+
private tryHybridVarLengthExecution;
|
|
631
|
+
/**
|
|
632
|
+
* Get a key for a return item (used when no alias is provided).
|
|
633
|
+
*/
|
|
634
|
+
private getReturnItemKey;
|
|
622
635
|
/**
|
|
623
636
|
* Execute a FOREACH clause within PhaseContext.
|
|
624
637
|
*/
|
|
@@ -733,6 +746,10 @@ export declare class Executor {
|
|
|
733
746
|
* The resolvedIds map is mutated to include newly created node IDs.
|
|
734
747
|
*/
|
|
735
748
|
private createRelationshipWithResolvedIds;
|
|
749
|
+
/**
|
|
750
|
+
* Resolve node properties, including (n $props) parameter maps.
|
|
751
|
+
*/
|
|
752
|
+
private resolveNodePatternProperties;
|
|
736
753
|
/**
|
|
737
754
|
* Resolve parameter references and binary expressions in properties
|
|
738
755
|
*/
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|