OSDN Git Service

Fix up ruleutils.c for CTE features. The main problem was that
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Oct 2008 20:29:38 +0000 (20:29 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Oct 2008 20:29:38 +0000 (20:29 +0000)
commit742fd06d98d8b21c32d9651e06c59351508866bb
treebbf0fc942edf66c5ca593bb0d8a75f31fa1fd10a
parentbf461538e18b67ec05d89846fcf15fa9c0cb9a74
Fix up ruleutils.c for CTE features.  The main problem was that
get_name_for_var_field didn't have enough context to interpret a reference to
a CTE query's output.  Fixing this requires separate hacks for the regular
deparse case (pg_get_ruledef) and for the EXPLAIN case, since the available
context information is quite different.  It's pretty nearly parallel to the
existing code for SUBQUERY RTEs, though.  Also, add code to make sure we
qualify a relation name that matches a CTE name; else the CTE will mistakenly
capture the reference when reloading the rule.

In passing, fix a pre-existing problem with get_name_for_var_field not working
on variables in targetlists of SubqueryScan plan nodes.  Although latent all
along, this wasn't a problem until we made EXPLAIN VERBOSE try to print
targetlists.  To do this, refactor the deparse_context_for_plan API so that
the special case for SubqueryScan is all on ruleutils.c's side.
src/backend/commands/explain.c
src/backend/utils/adt/ruleutils.c
src/include/utils/builtins.h