#13981·neo4j

CypherExecution raises arraycopy internal error for a multi-component MATCH followed by OPTIONAL MATCH

Author: YGY-001Created Sep 16, 2026Updated Sep 17, 2026
Labelsbug

Neo4j version

Neo4j 2026.08.1 (neo4j:2026.08)

Environment

  • Fresh database
  • Slotted runtime
  • Pipelined runtime

Reproduction

Create the following data:

cypher
CREATE
(n0:L7 {k47:2000000000000000000})<-[r0:T4]-(n1:L5 {k35:1900420387549331023}),
(n2:L1 {k9:'a'})-[r1:T21 {k178:-4866941474805577387}]->(n3:L2:L3 {k14:1687814637493126242,k13:'sRKup'}),
(n4:L5:L0 {k4:901107332415277137,k33:-9075383130849221876})-[r2:T27]->(n5:L0:L6 {k0:'34l2iAhX',k4:1}),
(n6:L7)-[r3:T0 {k61:'iBoU'}]->(n5),
(n6)-[r4:T30 {k230:'nUkabn',k235:'z'}]->(n7 {id:14})-[r5:T26]->(n8:L0 {k5:-8326898867956399889}),
(n10:L1 {k8:-2207813004658417566})-[r6:T21]->(n9:L3 {k17:'CpArTRG'}),
(n12:L6:L1 {k9:'sOMcxy'})-[r7:T8]->(n11:L3:L6 {k42:true,k22:'0XV3IA'});

LEFT

cypher
MATCH (n0:L7)<-[r0:T4]-(n1:L5 {k35:1900420387549331023}), (n2:L1)-[r1:T21]->(n3:L2:L3 {k14:1687814637493126242}), (n4:L5:L0 {k4:901107332415277137})-[r2:T27]-(n5:L0:L6 {k0:'34l2iAhX'})<-[r3:T0]-(n6:L7)-[r4:T30]-(n7)-[r5:T26]-(n8:L0 {k5:-8326898867956399889}), (n9:L3 {k17:'CpArTRG'})<-[r6:T21]-(n10:L1 {k8:-2207813004658417566}), (n11:L3:L6)<-[r7:T8]-(n12:L6:L1 {k9:'sOMcxy'})
WHERE (((((n11.k42) = true) OR ((n5.k4) = (n5.k4))) AND (true)) AND (((((((((((((((((n0.k47) > 1029174302659070504) AND (true)) AND ((true) AND ((n2.k9) < 'y1njDYZ'))) AND (((true) AND ((r1.k178) = -4866941474805577387)) AND (((r1.k178) >= -4866941474805577388) AND (true)))) AND ((n3.k13) ENDS WITH 'sRKup')) AND (((n4.k33) >= -9075383130849221878) AND ((n4.k33) <= -9075383130849221874))) AND ((r3.k61) CONTAINS 'iBoU')) AND ((((r4.k230) CONTAINS 'nUkabn') AND (((r4.k235) > 'djqOA') AND (true))) AND (true))) AND ((n7.id) = 14)) AND ((((((true) AND (true)) AND ((true) AND (true))) AND ((true) AND (true))) AND (true)) AND ((true) AND (true)))) AND ((true) AND (true))) AND (true)) AND (true)) AND ((n11.k22) STARTS WITH '0XV3IA')) AND ((true) AND (true))) AND (true)))
OPTIONAL MATCH (n9:L3)<-[r8:T21]-(n10), (n11)<-[r9:T21]-(n13:L1), (n0:L7)-[r10:T4]-(n1), (n9)<-[r11:T0]-(n14 {k9:'m3EHd8'})-[r12:T26]-(n10 {id:12}), (n9 {k21:'J0pmtwc'})-[r13:T30]-(n7)-[r14:T26]-(n15:L7 {k44:true})-[r15:T5]-(n2 {k10:7684302091931604040})-[r16:T7]-(n8)<-[r17:T32]-(n1 {k33:-6993538653649411471})-[r18:T12]-(n16:L4 {k26:7179354984526712181})-[r19:T12]-(n10 {k10:-8992639014810996456})
WHERE true
RETURN replace('0St0nTF5O', '1HllxS9m', 'hl0O96DB') AS a0
ORDER BY a0 DESC;

RIGHT

The only change is the following row-preserving collect + UNWIND barrier after the initial MATCH:

cypher
MATCH (n0:L7)<-[r0:T4]-(n1:L5 {k35:1900420387549331023}), (n2:L1)-[r1:T21]->(n3:L2:L3 {k14:1687814637493126242}), (n4:L5:L0 {k4:901107332415277137})-[r2:T27]-(n5:L0:L6 {k0:'34l2iAhX'})<-[r3:T0]-(n6:L7)-[r4:T30]-(n7)-[r5:T26]-(n8:L0 {k5:-8326898867956399889}), (n9:L3 {k17:'CpArTRG'})<-[r6:T21]-(n10:L1 {k8:-2207813004658417566}), (n11:L3:L6)<-[r7:T8]-(n12:L6:L1 {k9:'sOMcxy'})
WITH {n0:n0,r0:r0,n1:n1,n2:n2,r1:r1,n3:n3,n4:n4,r2:r2,n5:n5,r3:r3,n6:n6,r4:r4,n7:n7,r5:r5,n8:n8,n9:n9,r6:r6,n10:n10,n11:n11,r7:r7,n12:n12} AS __shadow_row
WITH collect(__shadow_row) AS __shadow_rows
UNWIND __shadow_rows AS __shadow_row
WITH __shadow_row.n0 AS n0,__shadow_row.r0 AS r0,__shadow_row.n1 AS n1,__shadow_row.n2 AS n2,__shadow_row.r1 AS r1,__shadow_row.n3 AS n3,__shadow_row.n4 AS n4,__shadow_row.r2 AS r2,__shadow_row.n5 AS n5,__shadow_row.r3 AS r3,__shadow_row.n6 AS n6,__shadow_row.r4 AS r4,__shadow_row.n7 AS n7,__shadow_row.r5 AS r5,__shadow_row.n8 AS n8,__shadow_row.n9 AS n9,__shadow_row.r6 AS r6,__shadow_row.n10 AS n10,__shadow_row.n11 AS n11,__shadow_row.r7 AS r7,__shadow_row.n12 AS n12
WHERE (((((n11.k42) = true) OR ((n5.k4) = (n5.k4))) AND (true)) AND (((((((((((((((((n0.k47) > 1029174302659070504) AND (true)) AND ((true) AND ((n2.k9) < 'y1njDYZ'))) AND (((true) AND ((r1.k178) = -4866941474805577387)) AND (((r1.k178) >= -4866941474805577388) AND (true)))) AND ((n3.k13) ENDS WITH 'sRKup')) AND (((n4.k33) >= -9075383130849221878) AND ((n4.k33) <= -9075383130849221874))) AND ((r3.k61) CONTAINS 'iBoU')) AND ((((r4.k230) CONTAINS 'nUkabn') AND (((r4.k235) > 'djqOA') AND (true))) AND (true))) AND ((n7.id) = 14)) AND ((((((true) AND (true)) AND ((true) AND (true))) AND ((true) AND (true))) AND (true)) AND ((true) AND (true)))) AND ((true) AND (true))) AND (true)) AND (true)) AND ((n11.k22) STARTS WITH '0XV3IA')) AND ((true) AND (true))) AND (true)))
OPTIONAL MATCH (n9:L3)<-[r8:T21]-(n10), (n11)<-[r9:T21]-(n13:L1), (n0:L7)-[r10:T4]-(n1), (n9)<-[r11:T0]-(n14 {k9:'m3EHd8'})-[r12:T26]-(n10 {id:12}), (n9 {k21:'J0pmtwc'})-[r13:T30]-(n7)-[r14:T26]-(n15:L7 {k44:true})-[r15:T5]-(n2 {k10:7684302091931604040})-[r16:T7]-(n8)<-[r17:T32]-(n1 {k33:-6993538653649411471})-[r18:T12]-(n16:L4 {k26:7179354984526712181})-[r19:T12]-(n10 {k10:-8992639014810996456})
WHERE true
RETURN replace('0St0nTF5O', '1HllxS9m', 'hl0O96DB') AS a0
ORDER BY a0 DESC;

Actual behavior

The LEFT query fails in all tested runtimes with: 50N00: general processing exception - internal error.

Internal exception raised CypherExecution: arraycopy: last destination index 5 out of bounds for object array[4] The RIGHT query succeeds in all tested runtimes and returns:

a0
"0St0nTF5O"

Expected behavior

The LEFT and RIGHT queries are semantically equivalent and should both execute successfully with the same result.