diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java index f7ac6d3bfa..e38befb4c5 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/BaseSemanticAnalyzer.java @@ -460,10 +460,16 @@ public static TableName getQualifiedTableName(ASTNode tabNameNode, String catalo * @throws SemanticException */ public static String getUnescapedUnqualifiedTableName(ASTNode node) throws SemanticException { - assert node.getChildCount() <= 2; + assert node.getChildCount() <= 3; if (node.getChildCount() == 2) { node = (ASTNode) node.getChild(1); + } else if (node.getChildCount() == 3) { + if (node.getChild(0).getType() == HiveParser.TOK_CTE) { + node = (ASTNode) node.getChild(2); + } else { + throw new SemanticException("Unable to get table name."); + } } return getUnescapedName(node); diff --git ql/src/test/queries/clientpositive/cte_join.q ql/src/test/queries/clientpositive/cte_join.q new file mode 100644 index 0000000000..940ab3c065 --- /dev/null +++ ql/src/test/queries/clientpositive/cte_join.q @@ -0,0 +1,8 @@ +CREATE TABLE t1 (a int, b varchar(100)); + +SELECT S.a, t1.a, t1.b FROM ( +WITH + sub1 AS (SELECT a, b FROM t1 WHERE b = 'c') + SELECT sub1.a, sub1.b FROM sub1 +) S +JOIN t1 ON S.a = t1.a; \ No newline at end of file diff --git ql/src/test/results/clientpositive/cte_join.q.out ql/src/test/results/clientpositive/cte_join.q.out new file mode 100644 index 0000000000..48166d157e --- /dev/null +++ ql/src/test/results/clientpositive/cte_join.q.out @@ -0,0 +1,26 @@ +PREHOOK: query: CREATE TABLE t1 (a int, b varchar(100)) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@t1 +POSTHOOK: query: CREATE TABLE t1 (a int, b varchar(100)) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t1 +PREHOOK: query: SELECT S.a, t1.a, t1.b FROM ( +WITH + sub1 AS (SELECT a, b FROM t1 WHERE b = 'c') + SELECT sub1.a, sub1.b FROM sub1 +) S +JOIN t1 ON S.a = t1.a +PREHOOK: type: QUERY +PREHOOK: Input: default@t1 +#### A masked pattern was here #### +POSTHOOK: query: SELECT S.a, t1.a, t1.b FROM ( +WITH + sub1 AS (SELECT a, b FROM t1 WHERE b = 'c') + SELECT sub1.a, sub1.b FROM sub1 +) S +JOIN t1 ON S.a = t1.a +POSTHOOK: type: QUERY +POSTHOOK: Input: default@t1 +#### A masked pattern was here ####