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