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

AggregateJoinTransposeRule generates inequivalent nodes if Aggregate relNode contains distinct aggregate function.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.19.0
    • core
    • None

    Description

      AggregateJoinTransposeRule generates inequivalent nodes if Aggregate relNode contains distinct aggregate function.

      T1

      a (String) b (int)
      A 1
      A 2
      B 2
      C 3

       

      T2

      c(int)
      1
      1
      2

      For the following sql, 

      select count (distinct a) from t1, t2 where t1.b = t2.c  
      

      Aggregate would generate following node tree, which is inequivalent with original node tree.

      LogicalAggregate(group=[{}], EXPR$0=[$SUM0($4)])
      +- LogicalProject(b=[$0], EXPR$0=[$1], c=[$2], $f1=[$3], $f4=[*($1, $3)])
      +- LogicalJoin(condition=[=($0, $2)], joinType=[inner])
      :- LogicalAggregate(group=[\{1}], EXPR$0=[COUNT(DISTINCT $0)])
      : +- LogicalTableScan(table=[[t1]])
      +- LogicalAggregate(group=[\{0}], agg#0=[COUNT()])
      +- LogicalTableScan(table=[[t2]])
      

      Based on the converted plan, result is 4; while the correct answer is 2.

      Attachments

        Issue Links

          Activity

            People

              julianhyde Julian Hyde
              jingzhang Jing Zhang
              Votes:
              0 Vote for this issue
              Watchers:
              5 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: