This is an automated email from the ASF dual-hosted git repository.

gopalv pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new a26dc36  HIVE-21768: JDBC: Strip the default union prefix for 
un-enclosed UNION queries (Gopal V, reviewed by Jesus Camacho Rodriguez)
a26dc36 is described below

commit a26dc36c04fc3a92ce98b472d9e9ed46e5de7b0e
Author: Gopal V <[email protected]>
AuthorDate: Tue May 28 15:07:12 2019 -0700

    HIVE-21768: JDBC: Strip the default union prefix for un-enclosed UNION 
queries (Gopal V, reviewed by Jesus Camacho Rodriguez)
---
 .../java/org/apache/hive/jdbc/TestJdbcDriver2.java     | 12 ++++++++++++
 .../java/org/apache/hadoop/hive/ql/parse/HiveParser.g  |  2 +-
 .../apache/hadoop/hive/ql/parse/SemanticAnalyzer.java  |  3 ++-
 ql/src/test/results/clientpositive/input_part7.q.out   |  4 ++--
 .../clientpositive/spark/optimize_nullscan.q.out       | 18 +++++++++---------
 .../test/results/clientpositive/spark/union_ppr.q.out  |  8 ++++----
 ql/src/test/results/clientpositive/union_ppr.q.out     |  4 ++--
 7 files changed, 32 insertions(+), 19 deletions(-)

diff --git 
a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java 
b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
index 654bdf8..79e4818 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
@@ -3166,6 +3166,18 @@ public class TestJdbcDriver2 {
   }
 
   @Test
+  public void testUnionUniqueColumnNames() throws Exception {
+    HiveStatement stmt = (HiveStatement) con.createStatement();
+
+    stmt.execute("SET hive.resultset.use.unique.column.names=true");
+    ResultSet rs = stmt.executeQuery("select 1 UNION ALL select 2");
+    ResultSetMetaData metaData = rs.getMetaData();
+    assertEquals("_c0", metaData.getColumnLabel(1));
+    assertTrue("There's no . for the UNION column name", 
!metaData.getColumnLabel(1).contains("."));
+    stmt.close();
+  }
+
+  @Test
   public void testGetQueryId() throws Exception {
     HiveStatement stmt = (HiveStatement) con.createStatement();
     HiveStatement stmt1 = (HiveStatement) con.createStatement();
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index 46fa563..bf9aa39 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -747,7 +747,7 @@ import org.apache.hadoop.hive.conf.HiveConf;
   // counter to generate unique union aliases
   private int aliasCounter;
   private String generateUnionAlias() {
-    return "_u" + (++aliasCounter);
+    return "__u" + (++aliasCounter);
   }
   private char [] excludedCharForColumnName = {'.', ':'};
   private boolean containExcludedCharForCreateTableColumnName(String input) {
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index aadbf38..edb20ae 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -12825,7 +12825,8 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
       }
 
       qualifiedColName = rr.reverseLookup(colInfo.getInternalName());
-      if (useTabAliasIfAvailable && qualifiedColName[0] != null && 
!qualifiedColName[0].isEmpty()) {
+      // __u<n> is a UNION ALL placeholder name
+      if (useTabAliasIfAvailable && qualifiedColName[0] != null && 
(!qualifiedColName[0].isEmpty()) && (!qualifiedColName[0].startsWith("__u"))) {
         colName = qualifiedColName[0] + "." + qualifiedColName[1];
       } else {
         colName = qualifiedColName[1];
diff --git a/ql/src/test/results/clientpositive/input_part7.q.out 
b/ql/src/test/results/clientpositive/input_part7.q.out
index d1838e7..15a388e 100644
--- a/ql/src/test/results/clientpositive/input_part7.q.out
+++ b/ql/src/test/results/clientpositive/input_part7.q.out
@@ -184,8 +184,8 @@ STAGE PLANS:
               name: default.srcpart
             name: default.srcpart
       Truncated Path -> Alias:
-        /srcpart/ds=2008-04-08/hr=11 [a:_u1-subquery1:x, a:_u1-subquery2:y]
-        /srcpart/ds=2008-04-08/hr=12 [a:_u1-subquery1:x, a:_u1-subquery2:y]
+        /srcpart/ds=2008-04-08/hr=11 [a:__u1-subquery1:x, a:__u1-subquery2:y]
+        /srcpart/ds=2008-04-08/hr=12 [a:__u1-subquery1:x, a:__u1-subquery2:y]
       Needs Tagging: false
       Reduce Operator Tree:
         Select Operator
diff --git a/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out 
b/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out
index de3b914..c366443 100644
--- a/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out
+++ b/ql/src/test/results/clientpositive/spark/optimize_nullscan.q.out
@@ -599,7 +599,7 @@ STAGE PLANS:
                         auto parallelism: false
             Execution mode: vectorized
             Path -> Alias:
-              nullscan://null/default.src/part_ [_u1-subquery1:src]
+              nullscan://null/default.src/part_ [__u1-subquery1:src]
             Path -> Partition:
               nullscan://null/default.src/part_ 
                 Partition
@@ -649,7 +649,7 @@ STAGE PLANS:
                     name: default.src
                   name: default.src
             Truncated Path -> Alias:
-              nullscan://null/default.src/part_ [_u1-subquery1:src]
+              nullscan://null/default.src/part_ [__u1-subquery1:src]
         Map 3 
             Map Operator Tree:
                 TableScan
@@ -874,10 +874,10 @@ STAGE PLANS:
                     name: default.srcpart
                   name: default.srcpart
             Truncated Path -> Alias:
-              /srcpart/ds=2008-04-08/hr=11 [_u1-subquery2:srcpart]
-              /srcpart/ds=2008-04-08/hr=12 [_u1-subquery2:srcpart]
-              /srcpart/ds=2008-04-09/hr=11 [_u1-subquery2:srcpart]
-              /srcpart/ds=2008-04-09/hr=12 [_u1-subquery2:srcpart]
+              /srcpart/ds=2008-04-08/hr=11 [__u1-subquery2:srcpart]
+              /srcpart/ds=2008-04-08/hr=12 [__u1-subquery2:srcpart]
+              /srcpart/ds=2008-04-09/hr=11 [__u1-subquery2:srcpart]
+              /srcpart/ds=2008-04-09/hr=12 [__u1-subquery2:srcpart]
         Reducer 2 
             Execution mode: vectorized
             Needs Tagging: false
@@ -1487,7 +1487,7 @@ STAGE PLANS:
                     name: default.src
                   name: default.src
             Truncated Path -> Alias:
-              /src [a:_u1-subquery1:src]
+              /src [a:__u1-subquery1:src]
         Map 2 
             Map Operator Tree:
                 TableScan
@@ -1508,7 +1508,7 @@ STAGE PLANS:
                       auto parallelism: false
             Execution mode: vectorized
             Path -> Alias:
-              nullscan://null/default.src/part_ [a:_u1-subquery2:src]
+              nullscan://null/default.src/part_ [a:__u1-subquery2:src]
             Path -> Partition:
               nullscan://null/default.src/part_ 
                 Partition
@@ -1558,7 +1558,7 @@ STAGE PLANS:
                     name: default.src
                   name: default.src
             Truncated Path -> Alias:
-              nullscan://null/default.src/part_ [a:_u1-subquery2:src]
+              nullscan://null/default.src/part_ [a:__u1-subquery2:src]
         Map 4 
             Map Operator Tree:
                 TableScan
diff --git a/ql/src/test/results/clientpositive/spark/union_ppr.q.out 
b/ql/src/test/results/clientpositive/spark/union_ppr.q.out
index c79d7bf..14a63b7 100644
--- a/ql/src/test/results/clientpositive/spark/union_ppr.q.out
+++ b/ql/src/test/results/clientpositive/spark/union_ppr.q.out
@@ -164,8 +164,8 @@ STAGE PLANS:
                     name: default.srcpart
                   name: default.srcpart
             Truncated Path -> Alias:
-              /srcpart/ds=2008-04-08/hr=11 [a:_u1-subquery1:x]
-              /srcpart/ds=2008-04-08/hr=12 [a:_u1-subquery1:x]
+              /srcpart/ds=2008-04-08/hr=11 [a:__u1-subquery1:x]
+              /srcpart/ds=2008-04-08/hr=12 [a:__u1-subquery1:x]
         Map 3 
             Map Operator Tree:
                 TableScan
@@ -295,8 +295,8 @@ STAGE PLANS:
                     name: default.srcpart
                   name: default.srcpart
             Truncated Path -> Alias:
-              /srcpart/ds=2008-04-08/hr=11 [a:_u1-subquery2:y]
-              /srcpart/ds=2008-04-08/hr=12 [a:_u1-subquery2:y]
+              /srcpart/ds=2008-04-08/hr=11 [a:__u1-subquery2:y]
+              /srcpart/ds=2008-04-08/hr=12 [a:__u1-subquery2:y]
         Reducer 2 
             Execution mode: vectorized
             Needs Tagging: false
diff --git a/ql/src/test/results/clientpositive/union_ppr.q.out 
b/ql/src/test/results/clientpositive/union_ppr.q.out
index 606259b..89985d0 100644
--- a/ql/src/test/results/clientpositive/union_ppr.q.out
+++ b/ql/src/test/results/clientpositive/union_ppr.q.out
@@ -186,8 +186,8 @@ STAGE PLANS:
               name: default.srcpart
             name: default.srcpart
       Truncated Path -> Alias:
-        /srcpart/ds=2008-04-08/hr=11 [a:_u1-subquery1:x, a:_u1-subquery2:y]
-        /srcpart/ds=2008-04-08/hr=12 [a:_u1-subquery1:x, a:_u1-subquery2:y]
+        /srcpart/ds=2008-04-08/hr=11 [a:__u1-subquery1:x, a:__u1-subquery2:y]
+        /srcpart/ds=2008-04-08/hr=12 [a:__u1-subquery1:x, a:__u1-subquery2:y]
       Needs Tagging: false
       Reduce Operator Tree:
         Select Operator

Reply via email to