diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index cd3c860..774cc2b 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -2449,6 +2449,10 @@ void parseJoinCondPopulateAlias(QBJoinTree joinTree, ASTNode condn, if (!rightAliases.contains(tableOrCol)) { rightAliases.add(tableOrCol); } + if (joinTree.getNoSemiJoin() == false) { + // if this is a semijoin, we need to add the condition + joinTree.addRHSSemijoinColumns(tableOrCol, condn); + } } } break; diff --git ql/src/test/queries/clientnegative/semijoin5.q ql/src/test/queries/clientnegative/semijoin5.q new file mode 100644 index 0000000..f805604 --- /dev/null +++ ql/src/test/queries/clientnegative/semijoin5.q @@ -0,0 +1,6 @@ +create table t1 as select cast(key as int) key, value from src where key <= 10; + +create table t5 as select cast(key as int) key1, value value1 from src where key <= 100; + +-- reference rhs of semijoin in where-clause +explain select * from t1 left semi join t5 on value = value1 where key = 100 and key1 = 100; diff --git ql/src/test/results/clientnegative/semijoin5.q.out ql/src/test/results/clientnegative/semijoin5.q.out new file mode 100644 index 0000000..d4fd728 --- /dev/null +++ ql/src/test/results/clientnegative/semijoin5.q.out @@ -0,0 +1,25 @@ +PREHOOK: query: create table t1 as select cast(key as int) key, value from src where key <= 10 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@t1 +POSTHOOK: query: create table t1 as select cast(key as int) key, value from src where key <= 10 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t1 +POSTHOOK: Lineage: t1.key EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: t1.value SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +PREHOOK: query: create table t5 as select cast(key as int) key1, value value1 from src where key <= 100 +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@src +PREHOOK: Output: database:default +PREHOOK: Output: default@t5 +POSTHOOK: query: create table t5 as select cast(key as int) key1, value value1 from src where key <= 100 +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@src +POSTHOOK: Output: database:default +POSTHOOK: Output: default@t5 +POSTHOOK: Lineage: t5.key1 EXPRESSION [(src)src.FieldSchema(name:key, type:string, comment:default), ] +POSTHOOK: Lineage: t5.value1 SIMPLE [(src)src.FieldSchema(name:value, type:string, comment:default), ] +FAILED: SemanticException [Error 10004]: Line 4:81 Invalid table alias or column reference 'key1': (possible column names are: key, value)