Skip to content

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

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

Type

Fields

No fields configured for Bug.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions