[ 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)