diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index af7f089975..ee30f1447c 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -478,6 +478,7 @@ minillaplocal.query.files=\ cbo_rp_unionDistinct_2.q,\ cbo_rp_windowing_2.q,\ cbo_subq_not_in.q,\ + column_name_is_table_alias.q,\ column_table_stats.q,\ column_table_stats_orc.q,\ colstats_date_min_max.q,\ diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java index a8c98326fc..4968d16876 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java @@ -657,8 +657,14 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, .getChild(0).getText()); boolean isTableAlias = input.hasTableAlias(tableOrCol); - ColumnInfo colInfo = input.get(null, tableOrCol); - + ColumnInfo colInfo = null; + try { + colInfo = input.get(null, tableOrCol); + } catch (SemanticException semanticException) { + if (!isTableAlias || parent == null || parent.getType() != HiveParser.DOT) { + throw semanticException; + } + } // try outer row resolver if(ctx.getOuterRR() != null && colInfo == null && !isTableAlias) { RowResolver outerRR = ctx.getOuterRR(); diff --git a/ql/src/test/queries/clientpositive/column_name_is_table_alias.q b/ql/src/test/queries/clientpositive/column_name_is_table_alias.q new file mode 100644 index 0000000000..8821b5c092 --- /dev/null +++ b/ql/src/test/queries/clientpositive/column_name_is_table_alias.q @@ -0,0 +1,7 @@ +DROP TABLE IF EXISTS tableA; +DROP TABLE IF EXISTS tableB; + +CREATE TABLE tableA (a INTEGER,z INTEGER); +CREATE TABLE tableB (a INTEGER,b INTEGER,z INTEGER); + +SELECT a.z, b.b FROM tableB AS b JOIN tableA AS a ON a.a=b.b; diff --git a/ql/src/test/results/clientpositive/llap/column_name_is_table_alias.q.out b/ql/src/test/results/clientpositive/llap/column_name_is_table_alias.q.out new file mode 100644 index 0000000000..3b79e330cc --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/column_name_is_table_alias.q.out @@ -0,0 +1,34 @@ +PREHOOK: query: DROP TABLE IF EXISTS tableA +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS tableA +POSTHOOK: type: DROPTABLE +PREHOOK: query: DROP TABLE IF EXISTS tableB +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE IF EXISTS tableB +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE tableA (a INTEGER,z INTEGER) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@tableA +POSTHOOK: query: CREATE TABLE tableA (a INTEGER,z INTEGER) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@tableA +PREHOOK: query: CREATE TABLE tableB (a INTEGER,b INTEGER,z INTEGER) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@tableB +POSTHOOK: query: CREATE TABLE tableB (a INTEGER,b INTEGER,z INTEGER) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@tableB +PREHOOK: query: SELECT a.z, b.b FROM tableB AS b JOIN tableA AS a ON a.a=b.b +PREHOOK: type: QUERY +PREHOOK: Input: default@tablea +PREHOOK: Input: default@tableb +#### A masked pattern was here #### +POSTHOOK: query: SELECT a.z, b.b FROM tableB AS b JOIN tableA AS a ON a.a=b.b +POSTHOOK: type: QUERY +POSTHOOK: Input: default@tablea +POSTHOOK: Input: default@tableb +#### A masked pattern was here ####