Обсуждение: [PATCH] ruleutils: Fix subqueries with shadowed aliases

Поиск
Список
Период
Сортировка

[PATCH] ruleutils: Fix subqueries with shadowed aliases

От
Philip Dubé
Дата:
Discovered while looking into issue here: https://github.com/citusdata/citus/pull/2733

For completeness I'll quote the example code to demonstrate the issue:

postgres=# create table events_table (id integer primary key, user_id integer); CREATE TABLE postgres=# create table
users_table_ref(id integer primary key, value_2 integer); CREATE TABLE postgres=# create view asdf as SELECT r FROM 
  (SELECT  user_id_deep, random() as r -- prevent pulling up the subquery
   FROM (events_table
         INNER JOIN
         users_table_ref ON (events_table.user_id = users_table_ref.value_2)) AS join_alias(user_id_dee
p)) AS bar,
     (events_table
      INNER JOIN
     users_table_ref ON (events_table.user_id = users_table_ref.value_2)) AS join_alias(user_id_deep) WHERE
(bar.user_id_deep= join_alias.user_id_deep); CREATE VIEW postgres=# \d+ asdf 
                                 View "public.asdf"
 Column |       Type       | Collation | Nullable | Default | Storage | Description
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
--------+------------------+-----------+----------+---------+---------+-
 r      | double precision |           |          |         | plain   | View definition:
 SELECT bar.r
   FROM ( SELECT join_alias_1.user_id_deep,
            random() AS r
           FROM (events_table events_table_1
             JOIN users_table_ref users_table_ref_1 ON events_table_1.user_id = users_table_ref_1.value_2)
join_alias(user_id_deep,user_id, id, value_2)) bar, 
    (events_table
     JOIN users_table_ref ON events_table.user_id = users_table_ref.value_2) join_alias(user_id_deep, user_id, id,
value_2)
  WHERE bar.user_id_deep = join_alias.user_id_deep;

Where the 2nd join_alias should be renamed to join_alias_1

Вложения

Re: [PATCH] ruleutils: Fix subqueries with shadowed aliases

От
Tom Lane
Дата:
=?iso-8859-1?Q?Philip_Dub=E9?= <Philip.Dub@microsoft.com> writes:
> Discovered while looking into issue here: https://github.com/citusdata/citus/pull/2733
> For completeness I'll quote the example code to demonstrate the issue:
> ...
> Where the 2nd join_alias should be renamed to join_alias_1

Good catch!  The proposed test case is less good though, because
it doesn't actually exercise the bug, ie the test case passes
with or without the code change.  (You also stuck it into the
middle of a bunch of not-very-related test cases.)  I adapted
your example into a better test case and pushed it.  Thanks
for the report and fix.

            regards, tom lane