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

RelBuilder.aggregate throws IndexOutOfBoundsException if groupKey is non-empty and there are duplicate aggregate functions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.21.0
    • None
    • None

    Description

      There is a bug with aggregate duplicate with group fields. Can repro with a simple modification (adding more group fields than there are aggregate fields) of the test added in https://github.com/apache/calcite/commit/e01ba5ab6e7c57348f9f7be2babf00ae007204b5

      /** Tests that {@link RelBuilder#aggregate} eliminates duplicate aggregate
       * calls and creates a {@code Project} to compensate. */
      @Test public void testAggregateEliminatesDuplicateCalls2() {
        final RelBuilder builder = RelBuilder.create(config().build());
        RelNode root =
                builder.scan("EMP")
                        .aggregate(builder.groupKey(builder.field(0), builder.field(1), builder.field(2), builder.field(3), builder.field(4)),
                                builder.sum(builder.field(1)).as("S1"),
                                builder.count().as("C"),
                                builder.sum(builder.field(2)).as("S2"),
                                builder.sum(builder.field(1)).as("S1b"))
                        .build();
        final String expected = ""
                + "LogicalProject(S1=[$0], C=[$1], S2=[$2], S1b=[$0])\n"
                + "  LogicalAggregate(group=[{}], S1=[SUM($1)], C=[COUNT()], S2=[SUM($2)])\n"
                + "    LogicalTableScan(table=[[scott, EMP]])\n";
        assertThat(root, hasTree(expected));
      }

      Note that the test isn't quite right, as the final expectation would need to be modified, but it reproduces the exception, which in this case is `java.lang.IndexOutOfBoundsException: Index: 4, Size: 4`

       

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              swtalbot Steven Talbot
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: