Vineet Garg created CALCITE-3012:
------------------------------------
Summary: areColumnsUnique for FULL OUTER JOIN could return wrong
answer when ignoreNulls is false
Key: CALCITE-3012
URL: https://issues.apache.org/jira/browse/CALCITE-3012
Project: Calcite
Issue Type: Bug
Components: core
Reporter: Vineet Garg
Assignee: Vineet Garg
Let's say set of columns passed to this API are join keys and there is one NULL
key coming from both the inputs. Following code will return true which is wrong
because the result of FULL. OUTER JOIN with NULL key on both side will produce
two rows with NULL. Even though this value in respective input is unique the
result of join may not be unique.
{code:java}
Boolean leftUnique = mq.areColumnsUnique(left, leftColumns, ignoreNulls);
Boolean rightUnique = mq.areColumnsUnique(right, rightColumns, ignoreNulls);
if ((leftColumns.cardinality() > 0)
&& (rightColumns.cardinality() > 0)) {
if ((leftUnique == null) || (rightUnique == null)) {
return null;
} else {
return leftUnique && rightUnique;
}
}
{code}
{code:sql}
create table trepro(i int);
insert into trepro values(null);
select * from trepro t1 full outer join trepro t2 on t1.i=t2.i;
null, null
null, null
{code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)