Thread
-
[Bug]Assertion failure in LATERAL GRAPH_TABLE with multi-label pattern
SATYANARAYANA NARLAPURAM <satyanarlapuram@gmail.com> — 2026-05-07T04:13:20Z
Hi hackers, A LATERAL GRAPH_TABLE whose pattern matches more than one path query fails with the assert TRAP: failed Assert("!bms_is_member(rti, lateral_relids)"), File: "initsplan.c", Line: 1428, PID: 3586144 postgres: postgres postgres [local] SELECT(ExceptionalCondition+0x70)[0x63488e3cc070] postgres: postgres postgres [local] SELECT(create_lateral_join_info+0x468)[0x63488e14ac28] postgres: postgres postgres [local] SELECT(query_planner+0x13a)[0x63488e14dfca] Repro: SELECT v1.vname, gt.aname FROM v1, LATERAL (SELECT * FROM GRAPH_TABLE (g1 MATCH (a IS vl1 | vl2 WHERE a.vprop1 = v1.vprop1) COLUMNS (a.vname AS aname)) g) gt ORDER BY 1, 2; Single-label GRAPH_TABLE with the same outer reference works fine. rewriteGraphTable() turns the GRAPH_TABLE RTE into a subquery RTE and bumps outer Vars by one sublevel. When the pattern produces multiple path queries, generate_setop_from_pathqueries() wraps each one in another subquery RTE for the UNION ALL but does not bump again, so the lateral reference collapses onto GRAPH_TABLE's own RTE. Tried fixing this by bumping each lquery's sublevels by 1 before the addRangeTableEntry ForSubquery() wrap. Single-pathquery queries skip this path entirely. Attached a patch with the tests. Thanks, Satya