From dd63d600b9fbe6c718a80bebab623280d9a5f755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= Date: Mon, 3 Jun 2019 12:41:07 -0700 Subject: [PATCH] ruleutils: Fix subqueries with shadowed aliases --- src/backend/utils/adt/ruleutils.c | 2 +- src/test/regress/expected/create_view.out | 16 +++++++++++++++- src/test/regress/sql/create_view.sql | 3 +++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 9dda4820af..1982ae7654 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -10310,7 +10310,7 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context) if (j->alias != NULL) { appendStringInfo(buf, " %s", - quote_identifier(j->alias->aliasname)); + quote_identifier(get_rtable_name(j->rtindex, context))); get_column_alias_list(colinfo, context); } } diff --git a/src/test/regress/expected/create_view.out b/src/test/regress/expected/create_view.out index e367ea2571..d28637e375 100644 --- a/src/test/regress/expected/create_view.out +++ b/src/test/regress/expected/create_view.out @@ -377,6 +377,8 @@ CREATE VIEW aliased_view_3 AS CREATE VIEW aliased_view_4 AS select * from temp_view_test.tt1 where exists (select 1 from tt1 where temp_view_test.tt1.y1 = tt1.f1); +CREATE VIEW aliased_view_5 AS + select same.f1 from (select same.f1 from (select f1 from tt1) same) same; \d+ aliased_view_1 View "testviewschm2.aliased_view_1" Column | Type | Collation | Nullable | Default | Storage | Description @@ -441,6 +443,17 @@ View definition: FROM tt1 tt1_1 WHERE tt1.y1 = tt1_1.f1)); +\d+ aliased_view_5 + View "testviewschm2.aliased_view_5" + Column | Type | Collation | Nullable | Default | Storage | Description +--------+---------+-----------+----------+---------+---------+------------- + f1 | integer | | | | plain | +View definition: + SELECT same.f1 + FROM ( SELECT same_1.f1 + FROM ( SELECT tt1.f1 + FROM tt1) same_1) same; + ALTER TABLE tx1 RENAME TO a1; \d+ aliased_view_1 View "testviewschm2.aliased_view_1" @@ -1718,7 +1731,7 @@ select pg_get_ruledef(oid, true) from pg_rewrite -- clean up all the random objects we made above DROP SCHEMA temp_view_test CASCADE; -NOTICE: drop cascades to 27 other objects +NOTICE: drop cascades to 28 other objects DETAIL: drop cascades to table temp_view_test.base_table drop cascades to view v2_temp drop cascades to view v4_temp @@ -1746,6 +1759,7 @@ drop cascades to view aliased_view_1 drop cascades to view aliased_view_2 drop cascades to view aliased_view_3 drop cascades to view aliased_view_4 +drop cascades to view aliased_view_5 DROP SCHEMA testviewschm2 CASCADE; NOTICE: drop cascades to 62 other objects DETAIL: drop cascades to table t1 diff --git a/src/test/regress/sql/create_view.sql b/src/test/regress/sql/create_view.sql index c69f8f6eda..1d8fe5974d 100644 --- a/src/test/regress/sql/create_view.sql +++ b/src/test/regress/sql/create_view.sql @@ -275,11 +275,14 @@ CREATE VIEW aliased_view_3 AS CREATE VIEW aliased_view_4 AS select * from temp_view_test.tt1 where exists (select 1 from tt1 where temp_view_test.tt1.y1 = tt1.f1); +CREATE VIEW aliased_view_5 AS + select same.f1 from (select same.f1 from (select f1 from tt1) same) same; \d+ aliased_view_1 \d+ aliased_view_2 \d+ aliased_view_3 \d+ aliased_view_4 +\d+ aliased_view_5 ALTER TABLE tx1 RENAME TO a1; -- 2.11.0