Visitar URL original
Path endpoint properties disagree with the same bound node after REMOVE · Issue #10513 · ArcadeData/arcadedb · GitHub
Skip to content

Path endpoint properties disagree with the same bound node after REMOVE #10513

Closed

Description

@YGY-001

Environment

  • Image: arcadedata/arcadedb:latest
  • Image digest: sha256:8783fe27ec732d36d5cab55fa2463a422ea79bf05a1b97892947fd2c2d84cb90
  • Server: ArcadeDB 26.11.1-SNAPSHOT, build b061c8904a99264366178fbadf08d86d4656428d/1792441435124/main
  • Execution: direct Bolt; use a fresh database for each query.

Description

The last node of p is b (b = last(nodes(p)) evaluates to true). After removing b.k10, the two property expressions for that same node should agree. Adding the no-match OPTIONAL MATCH changes the observable result for 101 rows.

Setup

CREATE (a {k10: false})<-[:R]-(b {k10: true})

Query A

UNWIND range(1, 101) AS row
MATCH p=(a)<-[:R]-(b)
REMOVE b.k10
RETURN count(*) AS rows,
       count(CASE WHEN properties(b) <> properties(last(nodes(p))) THEN 1 END)
         AS inconsistentAliasRows

Query B

UNWIND range(1, 101) AS row
MATCH p=(a)<-[:R]-(b)
OPTIONAL MATCH (:Never)
WHERE false
WITH *
REMOVE b.k10
RETURN count(*) AS rows,
       count(CASE WHEN properties(b) <> properties(last(nodes(p))) THEN 1 END)
         AS inconsistentAliasRows

Expected

The two queries return the same aggregate result. The path endpoint and b are the same node, so adding an identity OPTIONAL MATCH must not change how many rows contain different property maps for those aliases.

Actual

Both queries return rows = 101. Query A returns inconsistentAliasRows = 100; Query B returns inconsistentAliasRows = 101. In a row-level diagnostic, row 101 had sameNode = true; Query A returned boundNode = {} and pathEnd = {}, while Query B returned boundNode = {} and pathEnd = {k10=true}. The 100-row control produced equivalent LEFT/RIGHT results.

Activity

  1. added this to the 26.11.1 milestone on Oct 21, 2026
  2. self-assigned this
    on Oct 21, 2026
  3. added
    in progressThe team is actively working on this issue
    on Oct 21, 2026
  4. added a commit that references this issue on Oct 21, 2026
  5. lvca commented on Oct 21, 2026

    @lvca
    Member

    Fixed in #10549 (merged), shipping in 26.11.1.

    SET / REMOVE through a variable updated that variable but not the same node inside a path variable of the same row, so last(nodes(p)) still showed the old values. Paths now see the write, which also fixes MATCH p=(a)-->(b) SET b.v = 1 RETURN p.


    ❤️ Thanks for helping make ArcadeDB better! ArcadeDB is free and open source, sustained by its community. If it's useful to you or your company, please consider becoming a sponsor to keep development going.

  6. removed
    in progressThe team is actively working on this issue
    on Oct 21, 2026
  7. added a commit that references this issue on Nov 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugopencypherseverity:minorCosmetic, documentation, edge case, or a workaround exists

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions