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

Column uniqueness is calculated incorrectly for 'Correlate' expression

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.5.0
    • 1.11.0
    • core
    • None

    Description

      Column uniqueness is calculated incorrectly for 'Correlate' expression – and in some cases this leads to java.lang.IndexOutOfBoundsException. Example of such code:

      select
       x.v
      from
       (
        select
         t1.v
        from
         (values (1,1),(1,2)) as t1(k,v) 
         join (values (1)) as t2(k) on t1.k=t2.k
       ) x,
       lateral
       (
        select 
         t.v
        from
         unnest(multiset[x.v]) as t(v)
       ) y
      group by x.v,y.v

      The problems seems to be related to the org.apache.calcite.rel.metadata.RelMdColumnUniqueness.areColumnsUnique(Correlate rel, ImmutableBitSet columns, boolean ignoreNulls) method – it just delegates uniqueness check to left input without changing columns list, which leads to Exception if this list references columns from right input.

      It seems, that right behavior should be following:

      • For Anti/Semi join type keep the current behavior (as resulting rows contains fields only from left input).
      • For Left/Inner join type columns set for correlate is unique only if it includes unique sets from both sides.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            julianhyde Julian Hyde
            Lerm Alexey Makhmutov
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Slack

                Issue deployment