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:
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
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:
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.
Source: neo4j/neo4j