Skip to content
This repository was archived by the owner on Oct 10, 2025. It is now read-only.
This repository was archived by the owner on Oct 10, 2025. It is now read-only.

Bug: Segmentation fault removing transitive edges #6049

Description

@mdbenito

Kuzu v0.11.2, Ubuntu 24.04

With this data:

CREATE NODE TABLE People(name STRING PRIMARY KEY);
CREATE REL TABLE LivesWith(FROM People TO People);

CREATE (a:People {name: 'A'});
CREATE (b:People {name: 'B'});
CREATE (c:People {name: 'C'});
CREATE (d:People {name: 'D'});

// A->B->C->D, A->C, A->D
MATCH (a:People {name: 'A'}), (b:People {name:'B'}) CREATE (a)-[:LivesWith]->(b);
MATCH (b:People {name: 'B'}), (c:People {name:'C'}) CREATE (b)-[:LivesWith]->(c);
MATCH (c:People {name: 'C'}), (d:People {name:'D'}) CREATE (c)-[:LivesWith]->(d);
MATCH (a:People {name: 'A'}), (c:People {name:'C'}) CREATE (a)-[:LivesWith]->(c);
MATCH (a:People {name: 'A'}), (d:People {name:'D'}) CREATE (a)-[:LivesWith]->(d);

We can try to count transitive paths A->C and A->D with a naive query:

MATCH (a)-[r:LivesWith]->(d)
MATCH (a)-[:LivesWith*2..]->(d)
WHERE a.name <> d.name
WITH DISTINCT r
RETURN count(r);

and this works, but for larger graphs the plan explodes and kuzu hangs.

If we try to delete paths A->C and A->D with:

MATCH (a)-[t:LivesWith]->(d)
WHERE a.name <> d.name
WITH a, d, t
MATCH p = (a)-[:LivesWith*1..]->(d)
WHERE length(p) >= 2
  AND ALL (r IN relationships(p) WHERE r <> t)
WITH DISTINCT t
RETURN count(t);

The result is a segfault.

If instead we use

MATCH (a)-[t:LivesWith]->(d)
WHERE a.name <> d.name
  AND EXISTS {
    MATCH p = (a)-[:LivesWith*1..]->(d)
    WHERE length(p) >= 2
      AND ALL (r IN relationships(p) WHERE r <> t)
  }
WITH DISTINCT t
RETURN count(t);

Kuzu also segfaults.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions