ArcadeDB version
Observed on Docker images:
arcadedata/arcadedb:latest
arcadedata/arcadedb:26.4.1-SNAPSHOT
Environment
- Docker on Windows host
- ArcadeDB queried through the HTTP API:
/api/v1/command/arcade
- Requests sent in the same shape used by ArcadeDB Studio:
language: opencypher
serializer: studio
Describe the bug
COLLECT { ... } subqueries may return null instead of the collected list.
In the minimized repro below, Alice knows Bob, while Bob and Charlie know nobody.
Neo4j returns:
Alice ["Bob"]
Bob []
Charlie []
ArcadeDB returns null for every row instead of a list, including the row where one matching value clearly exists.
To Reproduce
Setup
CREATE (:Person {name:'Alice'}),
(:Person {name:'Bob'}),
(:Person {name:'Charlie'});
MATCH (a:Person {name:'Alice'}), (b:Person {name:'Bob'})
CREATE (a)-[:KNOWS]->(b);
Query
MATCH (p:Person)
RETURN p.name AS person,
COLLECT { MATCH (p)-[:KNOWS]->(f:Person) RETURN f.name } AS friendNames
ORDER BY person;
Expected behavior
The correlated collect subquery should produce a list for each outer row:
Alice ["Bob"]
Bob []
Charlie []
Actual behavior
ArcadeDB returns:
Alice null
Bob null
Charlie null
Control cases
Control 1, the equivalent query written with OPTIONAL MATCH and ordinary collect() behaves correctly on both Neo4j and ArcadeDB:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:KNOWS]->(f:Person)
RETURN p.name AS person, collect(f.name) AS friendNames
ORDER BY person;
Observed result:
Alice ["Bob"]
Bob []
Charlie []
Control 2, a correlated EXISTS { ... } subquery also behaves correctly on both engines:
MATCH (p:Person)
RETURN p.name AS person,
EXISTS { MATCH (p)-[:KNOWS]->(:Person) } AS hasFriend
ORDER BY person;
Observed result:
Alice true
Bob false
Charlie false
This suggests the issue is specifically tied to COLLECT { ... } subqueries, not to correlated subqueries in general.
ArcadeDB version
Observed on Docker images:
arcadedata/arcadedb:latestarcadedata/arcadedb:26.4.1-SNAPSHOTEnvironment
/api/v1/command/arcadelanguage: opencypherserializer: studioDescribe the bug
COLLECT { ... }subqueries may returnnullinstead of the collected list.In the minimized repro below,
AliceknowsBob, whileBobandCharlieknow nobody.Neo4j returns:
ArcadeDB returns
nullfor every row instead of a list, including the row where one matching value clearly exists.To Reproduce
Setup
Query
Expected behavior
The correlated collect subquery should produce a list for each outer row:
Actual behavior
ArcadeDB returns:
Control cases
Control 1, the equivalent query written with
OPTIONAL MATCHand ordinarycollect()behaves correctly on both Neo4j and ArcadeDB:Observed result:
Control 2, a correlated
EXISTS { ... }subquery also behaves correctly on both engines:Observed result:
This suggests the issue is specifically tied to
COLLECT { ... }subqueries, not to correlated subqueries in general.