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

Column uniqueness is calculated incorrectly for 'Correlate' expression

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.5.0
    • Fix Version/s: 1.11.0
    • Component/s: core
    • Labels:
      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

            People

            • Assignee:
              julianhyde Julian Hyde
              Reporter:
              Lerm Alexey Makhmutov
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: