• T
    Fix printing of whole-row Vars at top level of a SELECT targetlist. · 092d1d9d
    Tom Lane 提交于
    Normally whole-row Vars are printed as "tabname.*".  However, that does not
    work at top level of a targetlist, because per SQL standard the parser will
    think that the "*" should result in column-by-column expansion; which is
    not at all what a whole-row Var implies.  We used to just print the table
    name in such cases, which works most of the time; but it fails if the table
    name matches a column name available anywhere in the FROM clause.  This
    could lead for instance to a view being interpreted differently after dump
    and reload.  Adding parentheses doesn't fix it, but there is a reasonably
    simple kluge we can use instead: attach a no-op cast, so that the "*" isn't
    syntactically at top level anymore.  This makes the printing of such
    whole-row Vars a lot more consistent with other Vars, and may indeed fix
    more cases than just the reported one; I'm suspicious that cases involving
    schema qualification probably didn't work properly before, either.
    
    Per bug report and fix proposal from Abbas Butt, though this patch is quite
    different in detail from his.
    
    Back-patch to all supported versions.
    092d1d9d
ruleutils.c 144.4 KB