Mayil-AI-Sandbox / kuzudb_jan15

MIT License
0 stars 0 forks source link

Incorrect result #65

Open NobleMathews opened 2 months ago

NobleMathews commented 2 months ago

CREATE NODE TABLE V (id STRING, PRIMARY KEY(id)); CREATE NODE TABLE R (id STRING, PRIMARY KEY(id)); CREATE REL TABLE childof (FROM V TO V); CREATE REL TABLE relatedto (FROM R TO V);

CREATE (v1:V {id:"v1"}),(v11:V {id:"v11"}),(v12:V {id:"v12"}),(v111:V {id:"v111"}), (r1:R {id:"r1"}), (r12:R {id:"r12"}), (v111)-[:childof]->(v11),(v11)-[:childof]->(v1),(v12)-[:childof]->(v1), (r1)-[:relatedto]->(v1), (r12)-[:relatedto]->(v12); MATCH (v1:V {id: "v1"}) WITH v1 MATCH (v:V)-[e:childof*]->(v1) OPTIONAL MATCH (r)-[:relatedto]->(v) RETURN r, v; screenshot

What Kuzu returns:


| r | v |

| | {_ID: 0:3, _LABEL: V, id: v111} |

| | {_ID: 0:2, _LABEL: V, id: v12} |

| | {_ID: 0:1, _LABEL: V, id: v11} |

(3 tuples) (2 columns) What Neo4j returns (and what is expected here):

╒════════════════╤═════════════════╕ │r │v │ ╞════════════════╪═════════════════╡ │null │(:V {id: "v11"}) │ ├────────────────┼─────────────────┤ │null │(:V {id: "v111"})│ ├────────────────┼─────────────────┤ │(:R {id: "r12"})│(:V {id: "v12"}) │ └────────────────┴─────────────────┘ Why does Kuzu omit the existing optional match (:R {id: "r12"}) for v12 here?

mayil-ai[bot] commented 2 months ago

To address the issue with Kùzu's output for a Cypher query involving an OPTIONAL MATCH that is missing expected tuples, follow these steps:

// Adjust the grammar and parsing logic for OPTIONAL MATCH in cypher_parser.cpp
// Modify the logic in RelPattern class to handle optional relationships
// Update RecursiveJoin logic to correctly process optional relationships
// Adjust the pruning logic in QueryGraphLabelAnalyzer to preserve optional relationships

By following these steps, you should be able to identify and resolve the issue with the missing tuple in Kùzu's output for the OPTIONAL MATCH Cypher query.

Code snippets to check