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

karan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 34c80ee3de6 Add MSQ engine support for window function drill tests 
(#16665)
34c80ee3de6 is described below

commit 34c80ee3de68bfc46308ed0c920e20276224e4b3
Author: Akshat Jain <[email protected]>
AuthorDate: Fri Jun 28 11:14:17 2024 +0530

    Add MSQ engine support for window function drill tests (#16665)
    
    * Add MSQ engine support for window function drill tests
    
    * Address review comments
    
    * Revert formatting changes in TestDataBuilder
---
 .../druid/msq/exec/MSQDrillWindowQueryTest.java    |  94 +++++++++++
 .../druid/msq/test/CalciteMSQTestsHelper.java      |   7 +
 .../sql/calcite/CalciteNestedDataQueryTest.java    |   1 +
 .../druid/sql/calcite/DrillWindowQueryTest.java    | 171 +++-----------------
 .../apache/druid/sql/calcite/NotYetSupported.java  |   2 +-
 .../apache/druid/sql/calcite/QueryTestRunner.java  |  11 +-
 .../druid/sql/calcite/util/CalciteTests.java       |   5 +
 .../druid/sql/calcite/util/TestDataBuilder.java    | 176 +++++++++++++++++++++
 8 files changed, 308 insertions(+), 159 deletions(-)

diff --git 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQDrillWindowQueryTest.java
 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQDrillWindowQueryTest.java
new file mode 100644
index 00000000000..d3a67fdd659
--- /dev/null
+++ 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/exec/MSQDrillWindowQueryTest.java
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.msq.exec;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.ImmutableList;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import org.apache.druid.guice.DruidInjectorBuilder;
+import 
org.apache.druid.msq.exec.MSQDrillWindowQueryTest.DrillWindowQueryMSQComponentSupplier;
+import org.apache.druid.msq.sql.MSQTaskSqlEngine;
+import org.apache.druid.msq.test.CalciteMSQTestsHelper;
+import org.apache.druid.msq.test.ExtractResultsFactory;
+import org.apache.druid.msq.test.MSQTestOverlordServiceClient;
+import org.apache.druid.msq.test.MSQTestTaskActionClient;
+import org.apache.druid.msq.test.VerifyMSQSupportedNativeQueriesPredicate;
+import org.apache.druid.query.groupby.TestGroupByBuffers;
+import org.apache.druid.server.QueryLifecycleFactory;
+import org.apache.druid.sql.calcite.DrillWindowQueryTest;
+import org.apache.druid.sql.calcite.QueryTestBuilder;
+import org.apache.druid.sql.calcite.SqlTestFrameworkConfig;
+import org.apache.druid.sql.calcite.TempDirProducer;
+import org.apache.druid.sql.calcite.run.SqlEngine;
+
[email protected](DrillWindowQueryMSQComponentSupplier.class)
+public class MSQDrillWindowQueryTest extends DrillWindowQueryTest
+{
+  public static class DrillWindowQueryMSQComponentSupplier extends 
DrillComponentSupplier
+  {
+    public DrillWindowQueryMSQComponentSupplier(TempDirProducer 
tempFolderProducer)
+    {
+      super(tempFolderProducer);
+    }
+
+    @Override
+    public void configureGuice(DruidInjectorBuilder builder)
+    {
+      super.configureGuice(builder);
+      
builder.addModules(CalciteMSQTestsHelper.fetchModules(tempDirProducer::newTempFolder,
 TestGroupByBuffers.createDefault()).toArray(new Module[0]));
+    }
+
+    @Override
+    public SqlEngine createEngine(
+        QueryLifecycleFactory qlf,
+        ObjectMapper queryJsonMapper,
+        Injector injector
+    )
+    {
+      final WorkerMemoryParameters workerMemoryParameters =
+          WorkerMemoryParameters.createInstance(
+              WorkerMemoryParameters.PROCESSING_MINIMUM_BYTES * 50,
+              2,
+              10,
+              2,
+              0,
+              0
+          );
+      final MSQTestOverlordServiceClient indexingServiceClient = new 
MSQTestOverlordServiceClient(
+          queryJsonMapper,
+          injector,
+          new MSQTestTaskActionClient(queryJsonMapper, injector),
+          workerMemoryParameters,
+          ImmutableList.of()
+      );
+      return new MSQTaskSqlEngine(indexingServiceClient, queryJsonMapper);
+    }
+  }
+
+  @Override
+  protected QueryTestBuilder testBuilder()
+  {
+    return new QueryTestBuilder(new CalciteTestConfig(true))
+        .addCustomRunner(new ExtractResultsFactory(() -> 
(MSQTestOverlordServiceClient) ((MSQTaskSqlEngine) 
queryFramework().engine()).overlordClient()))
+        .skipVectorize(true)
+        .verifyNativeQueries(new VerifyMSQSupportedNativeQueriesPredicate());
+  }
+}
diff --git 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/CalciteMSQTestsHelper.java
 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/CalciteMSQTestsHelper.java
index a144a0b3594..54552e5d5b0 100644
--- 
a/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/CalciteMSQTestsHelper.java
+++ 
b/extensions-core/multi-stage-query/src/test/java/org/apache/druid/msq/test/CalciteMSQTestsHelper.java
@@ -391,6 +391,13 @@ public class CalciteMSQTestsHelper
       case CalciteTests.WIKIPEDIA_FIRST_LAST:
         index = 
TestDataBuilder.makeWikipediaIndexWithAggregation(tempFolderProducer.apply("tmpDir"));
         break;
+      case CalciteTests.TBL_WITH_NULLS_PARQUET:
+      case CalciteTests.SML_TBL_PARQUET:
+      case CalciteTests.ALL_TYPES_UNIQ_PARQUET:
+      case CalciteTests.FEW_ROWS_ALL_DATA_PARQUET:
+      case CalciteTests.T_ALL_TYPE_PARQUET:
+        index = 
TestDataBuilder.getQueryableIndexForDrillDatasource(segmentId.getDataSource(), 
tempFolderProducer.apply("tmpDir"));
+        break;
       default:
         throw new ISE("Cannot query segment %s in test runner", segmentId);
 
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
 
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
index 95a4d0c1c32..e2bc9d45eb2 100644
--- 
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
+++ 
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
@@ -6870,6 +6870,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void testJsonQueryArrays()
   {
+    msqIncompatible();
     testBuilder()
         .sql("SELECT JSON_QUERY_ARRAY(arrayObject, '$') FROM druid.arrays")
         .queryContext(QUERY_CONTEXT_DEFAULT)
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java
index ec661f8d315..baeb04fb561 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/DrillWindowQueryTest.java
@@ -19,38 +19,22 @@
 
 package org.apache.druid.sql.calcite;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterators;
 import com.google.common.io.ByteStreams;
 import com.google.inject.Injector;
 import org.apache.calcite.sql.SqlNode;
 import org.apache.calcite.sql2rel.SqlToRelConverter;
 import org.apache.commons.io.FileUtils;
 import org.apache.druid.common.config.NullHandling;
-import org.apache.druid.data.input.InputRow;
-import org.apache.druid.data.input.MapBasedInputRow;
-import org.apache.druid.data.input.impl.DimensionSchema;
-import org.apache.druid.data.input.impl.DimensionsSpec;
-import org.apache.druid.data.input.impl.DoubleDimensionSchema;
-import org.apache.druid.data.input.impl.LongDimensionSchema;
-import org.apache.druid.data.input.impl.StringDimensionSchema;
-import org.apache.druid.jackson.DefaultObjectMapper;
-import org.apache.druid.java.util.common.Intervals;
 import org.apache.druid.java.util.common.Numbers;
-import org.apache.druid.java.util.common.RE;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.parsers.TimestampParser;
 import org.apache.druid.query.QueryContexts;
 import org.apache.druid.query.QueryRunnerFactoryConglomerate;
-import org.apache.druid.segment.IndexBuilder;
-import org.apache.druid.segment.QueryableIndex;
 import org.apache.druid.segment.column.ColumnType;
 import org.apache.druid.segment.column.RowSignature;
-import org.apache.druid.segment.incremental.IncrementalIndexSchema;
 import org.apache.druid.segment.join.JoinableFactoryWrapper;
-import 
org.apache.druid.segment.writeout.OnHeapMemorySegmentWriteOutMediumFactory;
 import org.apache.druid.server.SpecificSegmentsQuerySegmentWalker;
 import org.apache.druid.sql.calcite.DisableUnless.DisableUnlessRule;
 import 
org.apache.druid.sql.calcite.DrillWindowQueryTest.DrillComponentSupplier;
@@ -60,8 +44,7 @@ import 
org.apache.druid.sql.calcite.QueryTestRunner.QueryResults;
 import org.apache.druid.sql.calcite.planner.PlannerCaptureHook;
 import org.apache.druid.sql.calcite.planner.PlannerContext;
 import 
org.apache.druid.sql.calcite.util.SqlTestFramework.StandardComponentSupplier;
-import org.apache.druid.timeline.DataSegment;
-import org.apache.druid.timeline.partition.NumberedShardSpec;
+import org.apache.druid.sql.calcite.util.TestDataBuilder;
 import org.joda.time.DateTime;
 import org.joda.time.LocalTime;
 import org.junit.Assert;
@@ -88,7 +71,6 @@ import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -113,8 +95,6 @@ import static org.junit.Assert.fail;
 @SqlTestFrameworkConfig.ComponentSupplier(DrillComponentSupplier.class)
 public class DrillWindowQueryTest extends BaseCalciteQueryTest
 {
-  private static final ObjectMapper MAPPER = new DefaultObjectMapper();
-
   static {
     NullHandling.initializeForTests();
   }
@@ -259,135 +239,9 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
           joinableFactory,
           injector);
 
-      attachIndex(
-          retVal,
-          "tblWnulls.parquet",
-          new LongDimensionSchema("c1"),
-          new StringDimensionSchema("c2"));
-
-      // 
{"col0":1,"col1":65534,"col2":256.0,"col3":1234.9,"col4":73578580,"col5":1393720082338,"col6":421185052800000,"col7":false,"col8":"CA","col9":"AXXXXXXXXXXXXXXXXXXXXXXXXXCXXXXXXXXXXXXXXXXXXXXXXXXZ"}
-      attachIndex(
-          retVal,
-          "allTypsUniq.parquet",
-          new LongDimensionSchema("col0"),
-          new LongDimensionSchema("col1"),
-          new DoubleDimensionSchema("col2"),
-          new DoubleDimensionSchema("col3"),
-          new LongDimensionSchema("col4"),
-          new LongDimensionSchema("col5"),
-          new LongDimensionSchema("col6"),
-          new StringDimensionSchema("col7"),
-          new StringDimensionSchema("col8"),
-          new StringDimensionSchema("col9"));
-      attachIndex(
-          retVal,
-          "smlTbl.parquet",
-          // "col_int": 8122,
-          new LongDimensionSchema("col_int"),
-          // "col_bgint": 817200,
-          new LongDimensionSchema("col_bgint"),
-          // "col_char_2": "IN",
-          new StringDimensionSchema("col_char_2"),
-          // "col_vchar_52":
-          // "AXXXXXXXXXXXXXXXXXXXXXXXXXCXXXXXXXXXXXXXXXXXXXXXXXXB",
-          new StringDimensionSchema("col_vchar_52"),
-          // "col_tmstmp": 1409617682418,
-          new LongDimensionSchema("col_tmstmp"),
-          // "col_dt": 422717616000000,
-          new LongDimensionSchema("col_dt"),
-          // "col_booln": false,
-          new StringDimensionSchema("col_booln"),
-          // "col_dbl": 12900.48,
-          new DoubleDimensionSchema("col_dbl"),
-          // "col_tm": 33109170
-          new LongDimensionSchema("col_tm"));
-      attachIndex(
-          retVal,
-          "fewRowsAllData.parquet",
-          // "col0":12024,
-          new LongDimensionSchema("col0"),
-          // "col1":307168,
-          new LongDimensionSchema("col1"),
-          // "col2":"VT",
-          new StringDimensionSchema("col2"),
-          // "col3":"DXXXXXXXXXXXXXXXXXXXXXXXXXEXXXXXXXXXXXXXXXXXXXXXXXXF",
-          new StringDimensionSchema("col3"),
-          // "col4":1338596882419,
-          new LongDimensionSchema("col4"),
-          // "col5":422705433600000,
-          new LongDimensionSchema("col5"),
-          // "col6":true,
-          new StringDimensionSchema("col6"),
-          // "col7":3.95110006277E8,
-          new DoubleDimensionSchema("col7"),
-          // "col8":67465430
-          new LongDimensionSchema("col8"));
-      attachIndex(
-          retVal,
-          "t_alltype.parquet",
-          // "c1":1,
-          new LongDimensionSchema("c1"),
-          // "c2":592475043,
-          new LongDimensionSchema("c2"),
-          // "c3":616080519999272,
-          new LongDimensionSchema("c3"),
-          // "c4":"ObHeWTDEcbGzssDwPwurfs",
-          new StringDimensionSchema("c4"),
-          // "c5":"0sZxIfZ CGwTOaLWZ6nWkUNx",
-          new StringDimensionSchema("c5"),
-          // "c6":1456290852307,
-          new LongDimensionSchema("c6"),
-          // "c7":421426627200000,
-          new LongDimensionSchema("c7"),
-          // "c8":true,
-          new StringDimensionSchema("c8"),
-          // "c9":0.626179100469
-          new DoubleDimensionSchema("c9"));
-
-      return retVal;
-    }
-
-    @SuppressWarnings({"rawtypes", "unchecked"})
-    private void attachIndex(SpecificSegmentsQuerySegmentWalker texasRanger, 
String dataSource, DimensionSchema... dims)
-    {
-      ArrayList<String> dimensionNames = new ArrayList<>(dims.length);
-      for (DimensionSchema dimension : dims) {
-        dimensionNames.add(dimension.getName());
-      }
-
       final File tmpFolder = tempDirProducer.newTempFolder();
-      final QueryableIndex queryableIndex = IndexBuilder
-          .create()
-          .tmpDir(new File(tmpFolder, dataSource))
-          
.segmentWriteOutMediumFactory(OnHeapMemorySegmentWriteOutMediumFactory.instance())
-          .schema(new IncrementalIndexSchema.Builder()
-              .withRollup(false)
-              .withDimensionsSpec(new DimensionsSpec(Arrays.asList(dims)))
-              .build())
-          .rows(
-              () -> {
-                try {
-                  return Iterators.transform(
-                      MAPPER.readerFor(Map.class)
-                          .readValues(
-                              
ClassLoader.getSystemResource("drill/window/datasources/" + dataSource + 
".json")),
-                      (Function<Map, InputRow>) input -> new 
MapBasedInputRow(0, dimensionNames, input));
-                }
-                catch (IOException e) {
-                  throw new RE(e, "problem reading file");
-                }
-              })
-          .buildMMappedIndex();
-
-      texasRanger.add(
-          DataSegment.builder()
-              .dataSource(dataSource)
-              .interval(Intervals.ETERNITY)
-              .version("1")
-              .shardSpec(new NumberedShardSpec(0, 0))
-              .size(0)
-              .build(),
-          queryableIndex);
+      TestDataBuilder.attachIndexesForDrillTestDatasources(retVal, tmpFolder);
+      return retVal;
     }
   }
 
@@ -421,7 +275,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
       try {
         Assert.assertEquals(StringUtils.format("result count: %s", sql), 
expectedResultsText.size(), results.size());
         if (!isOrdered(queryResults)) {
-          // in case the resultset is not ordered; order via the same 
comparator before comparision
+          // in case the resultset is not ordered; order via the same 
comparator before comparison
           results.sort(new ArrayRowCmp());
           expectedResults.sort(new ArrayRowCmp());
         }
@@ -4410,6 +4264,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_aggregates_winFnQry_83()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6302,6 +6157,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_aggregates_winFnQry_84()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6309,6 +6165,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_aggregates_winFnQry_85()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6694,6 +6551,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_avg_mulwds()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6701,6 +6559,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_count_mulwds()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6708,6 +6567,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_fval_mulwds()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6715,6 +6575,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_lval_mulwds()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6722,6 +6583,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_mulwind_08()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6729,6 +6591,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_mulwind_09()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -6736,6 +6599,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_sum_mulwds()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -7508,6 +7372,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_rnkNoFrm01()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -7515,6 +7380,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_rnkNoFrm02()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -7522,6 +7388,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_rnkNoFrm03()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -7529,6 +7396,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_rnkNoFrm04()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -7536,6 +7404,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_rnkNoFrm05()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -7543,6 +7412,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_frameclause_multipl_wnwds_rnkNoFrm06()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
@@ -7655,6 +7525,7 @@ public class DrillWindowQueryTest extends 
BaseCalciteQueryTest
   @Test
   public void test_nestedAggs_multiWin_6()
   {
+    msqIncompatible();
     windowQueryTest();
   }
 
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java
index d1a0c4ec883..a3f6208f112 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/NotYetSupported.java
@@ -171,7 +171,7 @@ public @interface NotYetSupported
           Matcher m = annotation.value().getPattern().matcher(trace);
 
           if (!m.find()) {
-            throw new AssertionError("Exception stactrace doesn't match regex: 
" + annotation.value().regex, e);
+            throw new AssertionError("Exception stacktrace doesn't match 
regex: " + annotation.value().regex, e);
           }
           throw new AssumptionViolatedException("Test is not-yet supported; 
ignored with:" + annotation);
         }
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java
index 3430e10edfc..61678497fc8 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/QueryTestRunner.java
@@ -356,15 +356,12 @@ public class QueryTestRunner
   public static class VerifyResults implements QueryVerifyStep
   {
     protected final BaseExecuteQuery execStep;
-    protected final boolean verifyRowSignature;
 
     public VerifyResults(
-        BaseExecuteQuery execStep,
-        boolean verifyRowSignature
+        BaseExecuteQuery execStep
     )
     {
       this.execStep = execStep;
-      this.verifyRowSignature = verifyRowSignature;
     }
 
     @Override
@@ -386,9 +383,7 @@ public class QueryTestRunner
       }
 
       QueryTestBuilder builder = execStep.builder();
-      if (verifyRowSignature) {
-        
builder.expectedResultsVerifier.verifyRowSignature(queryResults.signature);
-      }
+      
builder.expectedResultsVerifier.verifyRowSignature(queryResults.signature);
       builder.expectedResultsVerifier.verify(builder.sql, queryResults);
     }
   }
@@ -747,7 +742,7 @@ public class QueryTestRunner
       if (builder.expectedResultsVerifier != null) {
         // Don't verify the row signature when MSQ is running, since the 
broker receives the task id, and the signature
         // would be {TASK:STRING} instead of the expected results signature
-        verifySteps.add(new VerifyResults(finalExecStep, 
!config.isRunningMSQ()));
+        verifySteps.add(new VerifyResults(finalExecStep));
       }
 
       if (!builder.customVerifications.isEmpty()) {
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java
index 2594d2e98dc..3fdbafb71a8 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/CalciteTests.java
@@ -125,6 +125,11 @@ public class CalciteTests
   public static final String DRUID_SCHEMA_NAME = "druid";
   public static final String WIKIPEDIA = "wikipedia";
   public static final String WIKIPEDIA_FIRST_LAST = "wikipedia_first_last";
+  public static final String TBL_WITH_NULLS_PARQUET = "tblWnulls.parquet";
+  public static final String SML_TBL_PARQUET = "smlTbl.parquet";
+  public static final String ALL_TYPES_UNIQ_PARQUET = "allTypsUniq.parquet";
+  public static final String FEW_ROWS_ALL_DATA_PARQUET = 
"fewRowsAllData.parquet";
+  public static final String T_ALL_TYPE_PARQUET = "t_alltype.parquet";
 
   public static final String TEST_SUPERUSER_NAME = "testSuperuser";
   public static final AuthorizerMapper TEST_AUTHORIZER_MAPPER = new 
AuthorizerMapper(null)
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/util/TestDataBuilder.java 
b/sql/src/test/java/org/apache/druid/sql/calcite/util/TestDataBuilder.java
index f732771991c..1f6b17e2ca2 100644
--- a/sql/src/test/java/org/apache/druid/sql/calcite/util/TestDataBuilder.java
+++ b/sql/src/test/java/org/apache/druid/sql/calcite/util/TestDataBuilder.java
@@ -19,9 +19,12 @@
 
 package org.apache.druid.sql.calcite.util;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterators;
 import com.google.inject.Injector;
 import org.apache.druid.data.input.InputRow;
 import org.apache.druid.data.input.InputRowSchema;
@@ -36,8 +39,10 @@ import org.apache.druid.data.input.impl.LongDimensionSchema;
 import org.apache.druid.data.input.impl.MapInputRowParser;
 import org.apache.druid.data.input.impl.StringDimensionSchema;
 import org.apache.druid.data.input.impl.TimestampSpec;
+import org.apache.druid.jackson.DefaultObjectMapper;
 import org.apache.druid.java.util.common.DateTimes;
 import org.apache.druid.java.util.common.Intervals;
+import org.apache.druid.java.util.common.RE;
 import org.apache.druid.java.util.common.StringUtils;
 import org.apache.druid.java.util.common.parsers.JSONPathSpec;
 import org.apache.druid.query.DataSource;
@@ -102,6 +107,8 @@ import java.util.stream.Collectors;
  */
 public class TestDataBuilder
 {
+  private static final ObjectMapper MAPPER = new DefaultObjectMapper();
+
   public static final String TIMESTAMP_COLUMN = "t";
   public static final GlobalTableDataSource CUSTOM_TABLE = new 
GlobalTableDataSource(CalciteTests.BROADCAST_DATASOURCE);
 
@@ -962,6 +969,175 @@ public class TestDataBuilder
     );
   }
 
+  public static void 
attachIndexesForDrillTestDatasources(SpecificSegmentsQuerySegmentWalker 
segmentWalker, File tmpDir)
+  {
+    attachIndexForDrillTestDatasource(segmentWalker, 
CalciteTests.TBL_WITH_NULLS_PARQUET, tmpDir);
+    attachIndexForDrillTestDatasource(segmentWalker, 
CalciteTests.SML_TBL_PARQUET, tmpDir);
+    attachIndexForDrillTestDatasource(segmentWalker, 
CalciteTests.ALL_TYPES_UNIQ_PARQUET, tmpDir);
+    attachIndexForDrillTestDatasource(segmentWalker, 
CalciteTests.FEW_ROWS_ALL_DATA_PARQUET, tmpDir);
+    attachIndexForDrillTestDatasource(segmentWalker, 
CalciteTests.T_ALL_TYPE_PARQUET, tmpDir);
+  }
+
+  @SuppressWarnings({"rawtypes", "unchecked"})
+  private static void attachIndexForDrillTestDatasource(
+      SpecificSegmentsQuerySegmentWalker segmentWalker,
+      String dataSource,
+      File tmpDir
+  )
+  {
+    final QueryableIndex queryableIndex = 
getQueryableIndexForDrillDatasource(dataSource, tmpDir);
+
+    segmentWalker.add(
+        DataSegment.builder()
+                   .dataSource(dataSource)
+                   .interval(Intervals.ETERNITY)
+                   .version("1")
+                   .shardSpec(new NumberedShardSpec(0, 0))
+                   .size(0)
+                   .build(),
+        queryableIndex);
+  }
+
+  public static QueryableIndex getQueryableIndexForDrillDatasource(String 
datasource, File parentTempDir)
+  {
+    final IncrementalIndexSchema indexSchema = new 
IncrementalIndexSchema.Builder()
+        .withDimensionsSpec(getDimensionSpecForDrillDatasource(datasource))
+        .withRollup(false)
+        .build();
+    Iterable<InputRow> inputRowsForDrillDatasource = 
getInputRowsForDrillDatasource(datasource);
+    return IndexBuilder
+        .create()
+        .tmpDir(new File(parentTempDir, datasource))
+        
.segmentWriteOutMediumFactory(OffHeapMemorySegmentWriteOutMediumFactory.instance())
+        .schema(indexSchema)
+        .rows(inputRowsForDrillDatasource)
+        .buildMMappedIndex();
+  }
+
+  private static DimensionsSpec getDimensionSpecForDrillDatasource(String 
datasource)
+  {
+    switch (datasource) {
+      case CalciteTests.TBL_WITH_NULLS_PARQUET: {
+        return new DimensionsSpec(
+            ImmutableList.of(
+                new LongDimensionSchema("c1"),
+                new StringDimensionSchema("c2")
+            )
+        );
+      }
+      case CalciteTests.SML_TBL_PARQUET: {
+        return new DimensionsSpec(
+            ImmutableList.of(
+                // "col_int": 8122,
+                new LongDimensionSchema("col_int"),
+                // "col_bgint": 817200,
+                new LongDimensionSchema("col_bgint"),
+                // "col_char_2": "IN",
+                new StringDimensionSchema("col_char_2"),
+                // "col_vchar_52":
+                // "AXXXXXXXXXXXXXXXXXXXXXXXXXCXXXXXXXXXXXXXXXXXXXXXXXXB",
+                new StringDimensionSchema("col_vchar_52"),
+                // "col_tmstmp": 1409617682418,
+                new LongDimensionSchema("col_tmstmp"),
+                // "col_dt": 422717616000000,
+                new LongDimensionSchema("col_dt"),
+                // "col_booln": false,
+                new StringDimensionSchema("col_booln"),
+                // "col_dbl": 12900.48,
+                new DoubleDimensionSchema("col_dbl"),
+                // "col_tm": 33109170
+                new LongDimensionSchema("col_tm")
+            )
+        );
+      }
+      case CalciteTests.ALL_TYPES_UNIQ_PARQUET: {
+        // 
{"col0":1,"col1":65534,"col2":256.0,"col3":1234.9,"col4":73578580,"col5":1393720082338,"col6":421185052800000,"col7":false,"col8":"CA","col9":"AXXXXXXXXXXXXXXXXXXXXXXXXXCXXXXXXXXXXXXXXXXXXXXXXXXZ"}
+        return new DimensionsSpec(
+            ImmutableList.of(
+                new LongDimensionSchema("col0"),
+                new LongDimensionSchema("col1"),
+                new DoubleDimensionSchema("col2"),
+                new DoubleDimensionSchema("col3"),
+                new LongDimensionSchema("col4"),
+                new LongDimensionSchema("col5"),
+                new LongDimensionSchema("col6"),
+                new StringDimensionSchema("col7"),
+                new StringDimensionSchema("col8"),
+                new StringDimensionSchema("col9")
+            )
+        );
+      }
+      case CalciteTests.FEW_ROWS_ALL_DATA_PARQUET: {
+        return new DimensionsSpec(
+            ImmutableList.of(
+                // "col0":12024,
+                new LongDimensionSchema("col0"),
+                // "col1":307168,
+                new LongDimensionSchema("col1"),
+                // "col2":"VT",
+                new StringDimensionSchema("col2"),
+                // 
"col3":"DXXXXXXXXXXXXXXXXXXXXXXXXXEXXXXXXXXXXXXXXXXXXXXXXXXF",
+                new StringDimensionSchema("col3"),
+                // "col4":1338596882419,
+                new LongDimensionSchema("col4"),
+                // "col5":422705433600000,
+                new LongDimensionSchema("col5"),
+                // "col6":true,
+                new StringDimensionSchema("col6"),
+                // "col7":3.95110006277E8,
+                new DoubleDimensionSchema("col7"),
+                // "col8":67465430
+                new LongDimensionSchema("col8")
+            )
+        );
+      }
+      case CalciteTests.T_ALL_TYPE_PARQUET: {
+        return new DimensionsSpec(
+            ImmutableList.of(
+                // "c1":1,
+                new LongDimensionSchema("c1"),
+                // "c2":592475043,
+                new LongDimensionSchema("c2"),
+                // "c3":616080519999272,
+                new LongDimensionSchema("c3"),
+                // "c4":"ObHeWTDEcbGzssDwPwurfs",
+                new StringDimensionSchema("c4"),
+                // "c5":"0sZxIfZ CGwTOaLWZ6nWkUNx",
+                new StringDimensionSchema("c5"),
+                // "c6":1456290852307,
+                new LongDimensionSchema("c6"),
+                // "c7":421426627200000,
+                new LongDimensionSchema("c7"),
+                // "c8":true,
+                new StringDimensionSchema("c8"),
+                // "c9":0.626179100469
+                new DoubleDimensionSchema("c9")
+            )
+        );
+      }
+      default:
+        throw new RuntimeException("Invalid datasource supplied for drill 
tests");
+    }
+  }
+
+  private static Iterable<InputRow> getInputRowsForDrillDatasource(String 
datasource)
+  {
+    DimensionsSpec dimensionSpecForDrillDatasource = 
getDimensionSpecForDrillDatasource(datasource);
+    return () -> {
+      try {
+        return Iterators.transform(
+              MAPPER.readerFor(Map.class)
+                    .readValues(
+                        
ClassLoader.getSystemResource("drill/window/datasources/" + datasource + 
".json")),
+              (Function<Map, InputRow>) input -> new MapBasedInputRow(0, 
dimensionSpecForDrillDatasource.getDimensionNames(), input)
+        );
+      }
+      catch (IOException e) {
+        throw new RE(e, "problem reading file");
+      }
+    };
+  }
+
   private static MapBasedInputRow toRow(String time, List<String> dimensions, 
Map<String, Object> event)
   {
     return new MapBasedInputRow(DateTimes.ISO_DATE_OPTIONAL_TIME.parse(time), 
dimensions, event);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to