summaryrefslogtreecommitdiff
path: root/src/include/parser
diff options
context:
space:
mode:
authorPeter Eisentraut2021-03-31 15:09:24 +0000
committerPeter Eisentraut2021-03-31 15:10:50 +0000
commit055fee7eb4dcc78e58672aef146334275e1cc40d (patch)
tree2034e69c471453e9aea59712b09d3fed95bce330 /src/include/parser
parent27e1f14563cf982f1f4d71e21ef247866662a052 (diff)
Allow an alias to be attached to a JOIN ... USING
This allows something like SELECT ... FROM t1 JOIN t2 USING (a, b, c) AS x where x has the columns a, b, c and unlike a regular alias it does not hide the range variables of the tables being joined t1 and t2. Per SQL:2016 feature F404 "Range variable for common column names". Reviewed-by: Vik Fearing <vik.fearing@2ndquadrant.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/454638cf-d563-ab76-a585-2564428062af@2ndquadrant.com
Diffstat (limited to 'src/include/parser')
-rw-r--r--src/include/parser/parse_node.h5
-rw-r--r--src/include/parser/parse_relation.h1
2 files changed, 5 insertions, 1 deletions
diff --git a/src/include/parser/parse_node.h b/src/include/parser/parse_node.h
index 70739bcd5b..1500de2dd0 100644
--- a/src/include/parser/parse_node.h
+++ b/src/include/parser/parse_node.h
@@ -228,7 +228,10 @@ struct ParseState
* An element of a namespace list.
*
* p_names contains the table name and column names exposed by this nsitem.
- * (Currently, it's always equal to p_rte->eref.)
+ * (Typically it's equal to p_rte->eref, but for a JOIN USING alias it's
+ * equal to p_rte->join_using_alias. Since the USING columns will be the
+ * join's first N columns, the net effect is just that we expose only those
+ * join columns via this nsitem.)
*
* p_rte and p_rtindex link to the underlying rangetable entry.
*
diff --git a/src/include/parser/parse_relation.h b/src/include/parser/parse_relation.h
index 5dbe5ba2e2..8336c2c5a2 100644
--- a/src/include/parser/parse_relation.h
+++ b/src/include/parser/parse_relation.h
@@ -88,6 +88,7 @@ extern ParseNamespaceItem *addRangeTableEntryForJoin(ParseState *pstate,
List *aliasvars,
List *leftcols,
List *rightcols,
+ Alias *joinalias,
Alias *alias,
bool inFromCl);
extern ParseNamespaceItem *addRangeTableEntryForCTE(ParseState *pstate,