[ 
https://issues.apache.org/jira/browse/CALCITE-6727?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17933920#comment-17933920
 ] 

Stamatis Zampetakis commented on CALCITE-6727:
----------------------------------------------

[~joeyutong] I added you as a contributor to the project. You can now assign 
tickets to your self.

> Column uniqueness constrain should only apply to inner join
> -----------------------------------------------------------
>
>                 Key: CALCITE-6727
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6727
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.38.0
>            Reporter: Yu Tang
>            Assignee: Yu Tang
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.39.0
>
>
> When joining with a singleton relation, the columns from the other side are 
> considered to be "associative unique".
> {code:java}
> // RelMdColumnUniqueness.areColumnsUnique(Join rel, RelMetadataQuery mq ...
> final Double rightMaxRowCount = mq.getMaxRowCount(right);
> if (rightMaxRowCount != null && rightMaxRowCount <= 1.0) {
>   leftColumns = leftColumns.union(joinInfo.leftSet());
> }
> final Double leftMaxRowCount = mq.getMaxRowCount(left);
> if (leftMaxRowCount != null && leftMaxRowCount <= 1.0) {
>   rightColumns = rightColumns.union(joinInfo.rightSet());
> } {code}
> In the case
> {code:java}
> @Test void testColumnUniquenessForJoinOnLimit1() {
>   final String sql = ""
>       + "select *\n"
>       + "from emp A\n"
>       + "join (\n"
>       + "  select * from emp\n"
>       + "  limit 1) B\n"
>       + "on A.empno = B.empno";
>   sql(sql)
>       .assertThatAreColumnsUnique(bitSetOf(0), is(true))
>       .assertThatAreColumnsUnique(bitSetOf(1), is(true))
>       .assertThatAreColumnsUnique(bitSetOf(9), is(true))
>       .assertThatAreColumnsUnique(bitSetOf(10), is(true))
>       .assertThatAreColumnsUnique(bitSetOf(), is(true))
>       .assertThatUniqueKeysAre(bitSetOf());
> } {code}
> the join result {{A.ENAME}} is considered to be unique because {{A.EMPNO}} is 
> the unique key. The test still passes when we change it to left join, in 
> which case {{A.ENAME}} is not guaranteed to be unique. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to