src/cypher/cypher.c(4,972 行)· cypher.hcypher.c 是一個迷你的資料庫查詢引擎:它把 query_graph 收到的 Cypher 字串編譯成可執行的計畫,再對 store 執行。雖然只支援 openCypher 的唯讀子集,但完整的四階段(lexer → parser → planner → executor)都有——讀這個檔案等於讀「怎麼在 C 裡寫一個小型圖查詢引擎」。
把 MATCH (f:Function)-[:CALLS]->(g) RETURN g.name 切成 token 序列。處理 : label、[*1..3] 可變長度、引號字串、=~ regex 等。
遞迴下降解析:pattern(節點、邊、方向)、WHERE 條件樹、aggregates、UNION。遇到不支援的子集語法(MERGE、CALL、comprehensions)在此回報 unsupported … 錯誤。
決定查詢順序:先抓 label 少的候選,再做 join/filter。EXISTS 子查詢(死碼偵測)被編譯成「檢查單跳存在性」的特別步驟。
對 store 的 SQL 下查詢、組列、套 aggregates(count/sum/avg/min/max/collect)、處理 ORDER BY / SKIP / LIMIT、UNION 合併。<1ms 的 Cypher 查詢就在這裡達成。
unsupported … 在哪一層被拒絕、以及 EXISTS 子查詢如何編譯成單跳存在性檢查。