• Tom Lane's avatar
    Further hacking on ruleutils' new column-alias-assignment code. · ef655663
    Tom Lane authored
    After further thought about implicit coercions appearing in a joinaliasvars
    list, I realized that they represent an additional reason why we might need
    to reference the join output column directly instead of referencing an
    underlying column.  Consider SELECT x FROM t1 LEFT JOIN t2 USING (x) where
    t1.x is of type date while t2.x is of type timestamptz.  The merged output
    variable is of type timestamptz, but it won't go to null when t2 does,
    therefore neither t1.x nor t2.x is a valid substitute reference.
    
    The code in get_variable() actually gets this case right, since it knows
    it shouldn't look through a coercion, but we failed to ensure that the
    unqualified output column name would be globally unique.  To fix, modify
    the code that trawls for a dangerous situation so that it actually scans
    through an unnamed join's joinaliasvars list to see if there are any
    non-simple-Var entries.
    ef655663
create_view.out 46.2 KB