From 2681231c98405da81978b2dca49926e00c1ff389 Mon Sep 17 00:00:00 2001 From: Murat Tuncer Date: Fri, 1 Feb 2019 10:32:50 +0300 Subject: [PATCH] Create column aliases for shard tables in worker queries when requested --- src/backend/distributed/utils/ruleutils_10.c | 6 ++ src/backend/distributed/utils/ruleutils_11.c | 6 ++ .../multi_subquery_complex_queries.out | 59 +++++++++++++++++++ .../sql/multi_subquery_complex_queries.sql | 28 +++++++++ 4 files changed, 99 insertions(+) diff --git a/src/backend/distributed/utils/ruleutils_10.c b/src/backend/distributed/utils/ruleutils_10.c index b522ab5ac..07c1df33c 100644 --- a/src/backend/distributed/utils/ruleutils_10.c +++ b/src/backend/distributed/utils/ruleutils_10.c @@ -7134,6 +7134,12 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context) /* Else print column aliases as needed */ get_column_alias_list(colinfo, context); } + /* check if column's are given aliases in distributed tables */ + else if (colinfo->parentUsing != NIL) + { + Assert(colinfo->printaliases); + get_column_alias_list(colinfo, context); + } /* Tablesample clause must go after any alias */ if ((rteKind == CITUS_RTE_RELATION || rteKind == CITUS_RTE_SHARD) && diff --git a/src/backend/distributed/utils/ruleutils_11.c b/src/backend/distributed/utils/ruleutils_11.c index cad31e7c8..4255a5836 100644 --- a/src/backend/distributed/utils/ruleutils_11.c +++ b/src/backend/distributed/utils/ruleutils_11.c @@ -7151,6 +7151,12 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context) /* Else print column aliases as needed */ get_column_alias_list(colinfo, context); } + /* check if column's are given aliases in distributed tables */ + else if (colinfo->parentUsing != NIL) + { + Assert(colinfo->printaliases); + get_column_alias_list(colinfo, context); + } /* Tablesample clause must go after any alias */ if ((rteKind == CITUS_RTE_RELATION || rteKind == CITUS_RTE_SHARD) && diff --git a/src/test/regress/expected/multi_subquery_complex_queries.out b/src/test/regress/expected/multi_subquery_complex_queries.out index f1f2422bc..7efdde87a 100644 --- a/src/test/regress/expected/multi_subquery_complex_queries.out +++ b/src/test/regress/expected/multi_subquery_complex_queries.out @@ -2690,3 +2690,62 @@ ORDER BY 1; 5 | (4 rows) +-- queries where column aliases are used +-- the query is not very complex. join is given an alias with aliases +-- for each output column +SELECT k1 +FROM ( + SELECT k1, random() + FROM (users_table JOIN events_table USING (user_id)) k (k1, k2, k3)) l +ORDER BY k1 +LIMIT 5; + k1 +---- + 1 + 1 + 1 + 1 + 1 +(5 rows) + +SELECT DISTINCT k1 +FROM ( + SELECT k1, random() + FROM (users_table JOIN events_table USING (user_id)) k (k1, k2, k3)) l +ORDER BY k1 +LIMIT 5; + k1 +---- + 1 + 2 + 3 + 4 + 5 +(5 rows) + +SELECT x1, x3, value_2 +FROM (users_table u FULL JOIN events_table e ON (u.user_id = e.user_id)) k(x1, x2, x3, x4, x5) +ORDER BY 1, 2, 3 +LIMIT 5; + x1 | x3 | value_2 +----+----+--------- + 1 | 1 | 1 + 1 | 1 | 1 + 1 | 1 | 1 + 1 | 1 | 2 + 1 | 1 | 2 +(5 rows) + +SELECT x1, x3, value_2 +FROM (users_table u FULL JOIN events_table e USING (user_id)) k(x1, x2, x3, x4, x5) +ORDER BY 1, 2, 3 +LIMIT 5; + x1 | x3 | value_2 +----+----+--------- + 1 | 1 | 1 + 1 | 1 | 1 + 1 | 1 | 1 + 1 | 1 | 2 + 1 | 1 | 2 +(5 rows) + diff --git a/src/test/regress/sql/multi_subquery_complex_queries.sql b/src/test/regress/sql/multi_subquery_complex_queries.sql index ae89eb166..c44640178 100644 --- a/src/test/regress/sql/multi_subquery_complex_queries.sql +++ b/src/test/regress/sql/multi_subquery_complex_queries.sql @@ -2400,3 +2400,31 @@ FROM USING (user_id) GROUP BY a.user_id ORDER BY 1; + +-- queries where column aliases are used +-- the query is not very complex. join is given an alias with aliases +-- for each output column +SELECT k1 +FROM ( + SELECT k1, random() + FROM (users_table JOIN events_table USING (user_id)) k (k1, k2, k3)) l +ORDER BY k1 +LIMIT 5; + +SELECT DISTINCT k1 +FROM ( + SELECT k1, random() + FROM (users_table JOIN events_table USING (user_id)) k (k1, k2, k3)) l +ORDER BY k1 +LIMIT 5; + +SELECT x1, x3, value_2 +FROM (users_table u FULL JOIN events_table e ON (u.user_id = e.user_id)) k(x1, x2, x3, x4, x5) +ORDER BY 1, 2, 3 +LIMIT 5; + +SELECT x1, x3, value_2 +FROM (users_table u FULL JOIN events_table e USING (user_id)) k(x1, x2, x3, x4, x5) +ORDER BY 1, 2, 3 +LIMIT 5; +