This is an automated email from the ASF dual-hosted git repository.

cwylie pushed a commit to branch 0.16.0-incubating
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/0.16.0-incubating by this push:
     new b495630  fix caching bug with multi-column group-by (#8535) (#8542)
b495630 is described below

commit b4956308f1b4259c36f08ca32d2ec6a6bb9c5b7f
Author: Clint Wylie <cwy...@apache.org>
AuthorDate: Fri Sep 13 20:12:54 2019 -0700

    fix caching bug with multi-column group-by (#8535) (#8542)
    
    * fix caching bug with multi-column group-by
    
    * review
---
 .../query/groupby/GroupByQueryQueryToolChest.java  |  3 +-
 .../groupby/GroupByQueryQueryToolChestTest.java    | 48 ++++++++++++++++++++++
 2 files changed, 49 insertions(+), 2 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
 
b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
index b942660..5b6bb6d 100644
--- 
a/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
+++ 
b/processing/src/main/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChest.java
@@ -633,8 +633,7 @@ public class GroupByQueryQueryToolChest extends 
QueryToolChest<ResultRow, GroupB
             }
 
             final Iterator<DimensionSpec> dimsIter = dims.iterator();
-            int dimPos = 0;
-            while (dimsIter.hasNext() && results.hasNext()) {
+            for (int dimPos = 0; dimsIter.hasNext() && results.hasNext(); 
dimPos++) {
               final DimensionSpec dimensionSpec = dimsIter.next();
 
               // Must convert generic Jackson-deserialized type into the 
proper type.
diff --git 
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
 
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
index d843060..cf59d7e 100644
--- 
a/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/groupby/GroupByQueryQueryToolChestTest.java
@@ -59,6 +59,7 @@ import 
org.apache.druid.query.groupby.orderby.OrderByColumnSpec;
 import org.apache.druid.query.ordering.StringComparators;
 import org.apache.druid.segment.TestHelper;
 import org.apache.druid.segment.column.ValueType;
+import org.apache.druid.segment.virtual.ExpressionVirtualColumn;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -508,6 +509,53 @@ public class GroupByQueryQueryToolChestTest
   }
 
   @Test
+  public void testMultiColumnCacheStrategy() throws Exception
+  {
+    final GroupByQuery query1 = GroupByQuery
+        .builder()
+        .setDataSource(QueryRunnerTestHelper.DATA_SOURCE)
+        .setQuerySegmentSpec(QueryRunnerTestHelper.FIRST_TO_THIRD)
+        .setDimensions(ImmutableList.of(
+            new DefaultDimensionSpec("test", "test", ValueType.STRING),
+            new DefaultDimensionSpec("v0", "v0", ValueType.STRING)
+        ))
+        .setVirtualColumns(
+            new ExpressionVirtualColumn("v0", "concat('foo', test)", 
ValueType.STRING, TestExprMacroTable.INSTANCE)
+        )
+        .setAggregatorSpecs(
+            Arrays.asList(
+                QueryRunnerTestHelper.ROWS_COUNT,
+                getComplexAggregatorFactoryForValueType(ValueType.STRING)
+            )
+        )
+        .setPostAggregatorSpecs(
+            ImmutableList.of(new ConstantPostAggregator("post", 10))
+        )
+        .setGranularity(QueryRunnerTestHelper.DAY_GRAN)
+        .build();
+
+    CacheStrategy<ResultRow, Object, GroupByQuery> strategy =
+        new GroupByQueryQueryToolChest(null, null).getCacheStrategy(
+            query1
+        );
+
+    // test timestamps that result in integer size millis
+    final ResultRow result1 = ResultRow.of(123L, "val1", "fooval1", 1, 
getIntermediateComplexValue(ValueType.STRING, "val1"));
+
+    Object preparedValue = 
strategy.prepareForSegmentLevelCache().apply(result1);
+
+    ObjectMapper objectMapper = TestHelper.makeJsonMapper();
+    Object fromCacheValue = objectMapper.readValue(
+        objectMapper.writeValueAsBytes(preparedValue),
+        strategy.getCacheObjectClazz()
+    );
+
+    ResultRow fromCacheResult = 
strategy.pullFromSegmentLevelCache().apply(fromCacheValue);
+
+    Assert.assertEquals(result1, fromCacheResult);
+  }
+
+  @Test
   public void testResultSerde() throws Exception
   {
     final GroupByQuery query = GroupByQuery


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@druid.apache.org
For additional commands, e-mail: commits-h...@druid.apache.org

Reply via email to