[Bug]Assertion failure in LATERAL GRAPH_TABLE with multi-label pattern - Mailing list pgsql-hackers

From SATYANARAYANA NARLAPURAM
Subject [Bug]Assertion failure in LATERAL GRAPH_TABLE with multi-label pattern
Date
Msg-id CAHg+QDfnLzsgjaQ_CiKSpP4JH3MKOiwoawEcCzXa9uYr45yiWw@mail.gmail.com
Whole thread
List pgsql-hackers
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
Attachment

pgsql-hackers by date:

Previous
From: "cca5507"
Date:
Subject: Re: Why is_admin_of_role() use ROLERECURSE_MEMBERS rather than ROLERECURSE_PRIVS?
Next
From: shveta malik
Date:
Subject: Re: Proposal: Conflict log history table for Logical Replication