Various code comments say that the RangeTblEntry field inh may only be set for entries of kind RTE_RELATION.

For example

* inh is true for relation references that should be expanded to include
 *    inheritance children, if the rel has any.  This *must* be false for
 *    RTEs other than RTE_RELATION entries.

and various comments in other files.

(Confusingly, it is also listed under "Fields valid in all RTEs:", but that definitely seems wrong.)

I have been deploying some assertions to see if the claims in the RangeTblEntry comments are all correct, and I tripped over something.

The function pull_up_simple_union_all() in prepjointree.c sets ->inh to true for RTE_SUBQUERY entries:

    /*
     * Mark the parent as an append relation.
     */
    rte->inh = true;

Whatever this is doing appears to be some undocumented magic. If I remove the line, then regression tests fail with plan differences, so it definitely seems to do something.

Is this something we should explain the RangeTblEntry comments?


Reply via email to