Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
0.10.0
-
None
-
ubuntu 10.10
-
Reviewed
Description
Currently, join predicates on outer join are evaluated in join operator (or HashSink for MapJoin) and the result value is tagged to end of each values(as a boolean), which is used for joining values. But when predicates are overlapped on single alias, all the predicates are evaluated with AND conjunction, which makes invalid result.
For example with table a with values,
100 40 100 50 100 60
Query below has overlapped predicates on alias b, which is making all the values on b are tagged with true(filtered)
select * from a right outer join a b on (a.key=b.key AND a.value=50 AND b.value=50) left outer join a c on (b.key=c.key AND b.value=60 AND c.value=60); NULL NULL 100 40 NULL NULL NULL NULL 100 50 NULL NULL NULL NULL 100 60 NULL NULL -- Join predicate Join Operator condition map: Right Outer Join0 to 1 Left Outer Join1 to 2 condition expressions: 0 {VALUE._col0} {VALUE._col1} 1 {VALUE._col0} {VALUE._col1} 2 {VALUE._col0} {VALUE._col1} filter predicates: 0 1 {(VALUE._col1 = 50)} {(VALUE._col1 = 60)} 2
but this should be
NULL NULL 100 40 NULL NULL 100 50 100 50 NULL NULL NULL NULL 100 60 100 60