Skip to content

COLLECT { ... } subqueries may return null instead of the collected list. #3957

@Silence6666668

Description

@Silence6666668

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions