Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-3012

Column uniqueness metadata provider may return wrong result for FULL OUTER JOIN operator

    XMLWordPrintableJSON

    Details

      Description

      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.

       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;
            }
          }
      
      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
      

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                vgarg Vineet Garg
                Reporter:
                vgarg Vineet Garg
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 2h 20m
                  2h 20m