This is an automated email from the ASF dual-hosted git repository.
gian 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 2720cfbdb48 MSQ: Use MapBinder for QueryKit implementations. (#18875)
2720cfbdb48 is described below
commit 2720cfbdb4830f5bcb8bf58be52458db59047982
Author: Gian Merlino <[email protected]>
AuthorDate: Thu Jan 1 09:37:18 2026 -0800
MSQ: Use MapBinder for QueryKit implementations. (#18875)
---
.../msq/dart/controller/sql/DartQueryMaker.java | 4 ++
.../msq/dart/controller/sql/DartSqlEngine.java | 7 +++
.../controller/sql/PrePlannedDartQueryMaker.java | 3 +-
.../org/apache/druid/msq/exec/ControllerImpl.java | 3 +-
.../druid/msq/exec/QueryKitBasedMSQPlanner.java | 29 ------------
.../org/apache/druid/msq/guice/MSQBinders.java | 53 ++++++++++++++++++++++
.../apache/druid/msq/guice/MSQIndexingModule.java | 24 ++++++++++
.../apache/druid/msq/querykit/MultiQueryKit.java | 8 ++++
.../druid/msq/querykit/WindowOperatorQueryKit.java | 10 ++--
.../msq/querykit/groupby/GroupByQueryKit.java | 5 +-
.../druid/msq/querykit/scan/ScanQueryKit.java | 5 +-
.../dart/controller/http/DartSqlResourceTest.java | 2 +
.../druid/msq/sql/MSQTaskQueryMakerTest.java | 4 +-
.../org/apache/druid/msq/test/MSQTestBase.java | 1 +
14 files changed, 120 insertions(+), 38 deletions(-)
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartQueryMaker.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartQueryMaker.java
index c40a59f208b..c309ef0d419 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartQueryMaker.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartQueryMaker.java
@@ -53,6 +53,7 @@ import org.apache.druid.msq.indexing.error.MSQErrorReport;
import org.apache.druid.msq.indexing.report.MSQResultsReport;
import org.apache.druid.msq.indexing.report.MSQStatusReport;
import org.apache.druid.msq.indexing.report.MSQTaskReportPayload;
+import org.apache.druid.msq.querykit.MultiQueryKit;
import org.apache.druid.msq.sql.MSQTaskQueryMaker;
import org.apache.druid.query.QueryContext;
import org.apache.druid.query.QueryContexts;
@@ -120,6 +121,7 @@ public class DartQueryMaker implements QueryMaker
private final ServerConfig serverConfig;
final QueryKitSpecFactory queryKitSpecFactory;
+ final MultiQueryKit queryKit;
public DartQueryMaker(
List<Entry<Integer, String>> fieldMapping,
@@ -129,6 +131,7 @@ public class DartQueryMaker implements QueryMaker
DartControllerConfig controllerConfig,
ExecutorService controllerExecutor,
QueryKitSpecFactory queryKitSpecFactory,
+ MultiQueryKit queryKit,
ServerConfig serverConfig
)
{
@@ -139,6 +142,7 @@ public class DartQueryMaker implements QueryMaker
this.controllerConfig = controllerConfig;
this.controllerExecutor = controllerExecutor;
this.queryKitSpecFactory = queryKitSpecFactory;
+ this.queryKit = queryKit;
this.serverConfig = serverConfig;
}
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
index cbef28d98ec..f61ed243fb3 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/DartSqlEngine.java
@@ -41,6 +41,7 @@ import
org.apache.druid.msq.dart.controller.http.DartQueryInfo;
import org.apache.druid.msq.dart.guice.DartControllerConfig;
import org.apache.druid.msq.exec.QueryKitSpecFactory;
import org.apache.druid.msq.indexing.error.CancellationReason;
+import org.apache.druid.msq.querykit.MultiQueryKit;
import org.apache.druid.msq.sql.DartQueryKitSpecFactory;
import org.apache.druid.msq.sql.MSQTaskSqlEngine;
import org.apache.druid.query.DefaultQueryConfig;
@@ -82,6 +83,7 @@ public class DartSqlEngine implements SqlEngine
private final ExecutorService controllerExecutor;
private final ServerConfig serverConfig;
private final QueryKitSpecFactory queryKitSpecFactory;
+ private final MultiQueryKit queryKit;
private final DefaultQueryConfig dartQueryConfig;
private final SqlToolbox toolbox;
private final DartSqlClients sqlClients;
@@ -92,6 +94,7 @@ public class DartSqlEngine implements SqlEngine
DartControllerRegistry controllerRegistry,
DartControllerConfig controllerConfig,
DartQueryKitSpecFactory queryKitSpecFactory,
+ MultiQueryKit queryKit,
ServerConfig serverConfig,
@Dart DefaultQueryConfig dartQueryConfig,
SqlToolbox toolbox,
@@ -104,6 +107,7 @@ public class DartSqlEngine implements SqlEngine
controllerConfig,
Execs.multiThreaded(controllerConfig.getConcurrentQueries(),
"dart-controller-%s"),
queryKitSpecFactory,
+ queryKit,
serverConfig,
dartQueryConfig,
toolbox,
@@ -117,6 +121,7 @@ public class DartSqlEngine implements SqlEngine
DartControllerConfig controllerConfig,
ExecutorService controllerExecutor,
QueryKitSpecFactory queryKitSpecFactory,
+ MultiQueryKit queryKit,
ServerConfig serverConfig,
DefaultQueryConfig dartQueryConfig,
SqlToolbox toolbox,
@@ -128,6 +133,7 @@ public class DartSqlEngine implements SqlEngine
this.controllerConfig = controllerConfig;
this.controllerExecutor = controllerExecutor;
this.queryKitSpecFactory = queryKitSpecFactory;
+ this.queryKit = queryKit;
this.serverConfig = serverConfig;
this.dartQueryConfig = dartQueryConfig;
this.toolbox = toolbox;
@@ -216,6 +222,7 @@ public class DartSqlEngine implements SqlEngine
controllerConfig,
controllerExecutor,
queryKitSpecFactory,
+ queryKit,
serverConfig
);
if (plannerContext.queryContext().isPrePlanned()) {
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/PrePlannedDartQueryMaker.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/PrePlannedDartQueryMaker.java
index d22b7ebe028..e6cdc9e0bb2 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/PrePlannedDartQueryMaker.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/dart/controller/sql/PrePlannedDartQueryMaker.java
@@ -125,8 +125,7 @@ class PrePlannedDartQueryMaker implements QueryMaker,
QueryMaker.FromDruidLogica
querySpec.getQuery(),
plannerContext.getJsonMapper(),
dartQueryMaker.queryKitSpecFactory.makeQueryKitSpec(
- QueryKitBasedMSQPlanner
- .makeQueryControllerToolKit(querySpec.getContext(),
plannerContext.getJsonMapper()),
+ dartQueryMaker.queryKit,
dartQueryId,
querySpec.getTuningConfig(),
querySpec.getContext()
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java
index 0330c1f5b39..b72e660c0f6 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/ControllerImpl.java
@@ -155,6 +155,7 @@ import
org.apache.druid.msq.kernel.controller.ControllerQueryKernel;
import org.apache.druid.msq.kernel.controller.ControllerQueryKernelConfig;
import org.apache.druid.msq.kernel.controller.ControllerStagePhase;
import org.apache.druid.msq.kernel.controller.WorkerInputs;
+import org.apache.druid.msq.querykit.MultiQueryKit;
import org.apache.druid.msq.querykit.QueryKitUtils;
import org.apache.druid.msq.shuffle.input.DurableStorageInputChannelFactory;
import org.apache.druid.msq.shuffle.input.WorkerInputChannelFactory;
@@ -715,7 +716,7 @@ public class ControllerImpl implements Controller
legacyQuery,
context.jsonMapper(),
queryKitSpecFactory.makeQueryKitSpec(
-
QueryKitBasedMSQPlanner.makeQueryControllerToolKit(querySpec.getContext(),
context.jsonMapper()),
+ context.injector().getInstance(MultiQueryKit.class),
context.queryId(),
querySpec.getTuningConfig(),
querySpec.getContext()
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/QueryKitBasedMSQPlanner.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/QueryKitBasedMSQPlanner.java
index 15cd96b3f05..cf2ca91c8d1 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/exec/QueryKitBasedMSQPlanner.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/exec/QueryKitBasedMSQPlanner.java
@@ -36,30 +36,20 @@ import org.apache.druid.msq.input.stage.StageInputSpec;
import org.apache.druid.msq.kernel.QueryDefinition;
import org.apache.druid.msq.kernel.QueryDefinitionBuilder;
import org.apache.druid.msq.kernel.StageDefinition;
-import org.apache.druid.msq.querykit.MultiQueryKit;
-import org.apache.druid.msq.querykit.QueryKit;
import org.apache.druid.msq.querykit.QueryKitSpec;
import org.apache.druid.msq.querykit.QueryKitUtils;
import org.apache.druid.msq.querykit.ShuffleSpecFactory;
-import org.apache.druid.msq.querykit.WindowOperatorQueryKit;
-import org.apache.druid.msq.querykit.groupby.GroupByQueryKit;
import org.apache.druid.msq.querykit.results.ExportResultsStageProcessor;
import org.apache.druid.msq.querykit.results.QueryResultStageProcessor;
-import org.apache.druid.msq.querykit.scan.ScanQueryKit;
import org.apache.druid.msq.util.MSQTaskQueryMakerUtils;
import org.apache.druid.msq.util.MultiStageQueryContext;
import org.apache.druid.query.Query;
import org.apache.druid.query.QueryContext;
-import org.apache.druid.query.groupby.GroupByQuery;
-import org.apache.druid.query.operator.WindowOperatorQuery;
-import org.apache.druid.query.scan.ScanQuery;
import org.apache.druid.segment.column.ColumnHolder;
import org.apache.druid.sql.calcite.planner.ColumnMappings;
import org.apache.druid.sql.http.ResultFormat;
import org.apache.druid.storage.ExportStorageProvider;
-import java.util.Map;
-
public class QueryKitBasedMSQPlanner
{
private final MSQSpec querySpec;
@@ -91,25 +81,6 @@ public class QueryKitBasedMSQPlanner
this.queryKitSpec = queryKitSpec;
}
- @SuppressWarnings("rawtypes")
- public static QueryKit<Query<?>> makeQueryControllerToolKit(QueryContext
queryContext, ObjectMapper jsonMapper)
- {
- final Map<Class<? extends Query>, QueryKit> kitMap =
- ImmutableMap.<Class<? extends Query>, QueryKit>builder()
- .put(ScanQuery.class, new ScanQueryKit(jsonMapper))
- .put(GroupByQuery.class, new GroupByQueryKit(jsonMapper))
- .put(
- WindowOperatorQuery.class,
- new WindowOperatorQueryKit(
- jsonMapper,
-
MultiStageQueryContext.isWindowFunctionOperatorTransformationEnabled(queryContext)
- )
- )
- .build();
-
- return new MultiQueryKit(kitMap);
- }
-
@SuppressWarnings("unchecked")
public QueryDefinition makeQueryDefinition()
{
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQBinders.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQBinders.java
new file mode 100644
index 00000000000..0a6b0827324
--- /dev/null
+++ b/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQBinders.java
@@ -0,0 +1,53 @@
+/*
+ * 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.guice;
+
+import com.google.inject.Binder;
+import com.google.inject.TypeLiteral;
+import com.google.inject.multibindings.MapBinder;
+import org.apache.druid.msq.querykit.QueryKit;
+import org.apache.druid.query.Query;
+
+/**
+ * Utility class for MSQ-related Guice bindings.
+ */
+public class MSQBinders
+{
+ /**
+ * Creates a MapBinder for QueryKit implementations. Extensions can use this
+ * to register their own QueryKit implementations for custom query types.
+ *
+ * Example usage:
+ * <pre>
+ * MSQBinders.queryKitBinder(binder)
+ * .addBinding(MyCustomQuery.class)
+ * .to(MyCustomQueryKit.class);
+ * </pre>
+ */
+ @SuppressWarnings("rawtypes")
+ public static MapBinder<Class<? extends Query>, QueryKit>
queryKitBinder(Binder binder)
+ {
+ return MapBinder.newMapBinder(
+ binder,
+ new TypeLiteral<>() {},
+ new TypeLiteral<>() {}
+ );
+ }
+}
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
index 30ffdf2cb6a..0c2680bf416 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/guice/MSQIndexingModule.java
@@ -24,6 +24,7 @@ import com.fasterxml.jackson.databind.jsontype.NamedType;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.google.common.collect.ImmutableList;
import com.google.inject.Binder;
+import org.apache.druid.guice.LazySingleton;
import org.apache.druid.initialization.DruidModule;
import org.apache.druid.msq.counters.ChannelCounters;
import org.apache.druid.msq.counters.CounterSnapshotsSerializer;
@@ -87,16 +88,23 @@ import org.apache.druid.msq.input.table.SegmentsInputSlice;
import org.apache.druid.msq.input.table.TableInputSpec;
import org.apache.druid.msq.kernel.NilExtraInfoHolder;
import org.apache.druid.msq.querykit.InputNumberDataSource;
+import org.apache.druid.msq.querykit.MultiQueryKit;
import org.apache.druid.msq.querykit.RestrictedInputNumberDataSource;
+import org.apache.druid.msq.querykit.WindowOperatorQueryKit;
import org.apache.druid.msq.querykit.WindowOperatorQueryStageProcessor;
import org.apache.druid.msq.querykit.common.OffsetLimitStageProcessor;
import org.apache.druid.msq.querykit.common.SortMergeJoinStageProcessor;
import org.apache.druid.msq.querykit.groupby.GroupByPostShuffleStageProcessor;
import org.apache.druid.msq.querykit.groupby.GroupByPreShuffleStageProcessor;
+import org.apache.druid.msq.querykit.groupby.GroupByQueryKit;
import org.apache.druid.msq.querykit.results.ExportResultsStageProcessor;
import org.apache.druid.msq.querykit.results.QueryResultStageProcessor;
+import org.apache.druid.msq.querykit.scan.ScanQueryKit;
import org.apache.druid.msq.querykit.scan.ScanQueryStageProcessor;
import org.apache.druid.msq.util.PassthroughAggregatorFactory;
+import org.apache.druid.query.groupby.GroupByQuery;
+import org.apache.druid.query.operator.WindowOperatorQuery;
+import org.apache.druid.query.scan.ScanQuery;
import java.util.Collections;
import java.util.List;
@@ -214,5 +222,21 @@ public class MSQIndexingModule implements DruidModule
@Override
public void configure(Binder binder)
{
+ binder.bind(MultiQueryKit.class).in(LazySingleton.class);
+
+ MSQBinders.queryKitBinder(binder)
+ .addBinding(ScanQuery.class)
+ .to(ScanQueryKit.class);
+ binder.bind(ScanQueryKit.class).in(LazySingleton.class);
+
+ MSQBinders.queryKitBinder(binder)
+ .addBinding(GroupByQuery.class)
+ .to(GroupByQueryKit.class);
+ binder.bind(GroupByQueryKit.class).in(LazySingleton.class);
+
+ MSQBinders.queryKitBinder(binder)
+ .addBinding(WindowOperatorQuery.class)
+ .to(WindowOperatorQueryKit.class);
+ binder.bind(WindowOperatorQueryKit.class).in(LazySingleton.class);
}
}
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/MultiQueryKit.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/MultiQueryKit.java
index 3129bbfacb9..ef189a55412 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/MultiQueryKit.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/MultiQueryKit.java
@@ -20,7 +20,10 @@
package org.apache.druid.msq.querykit;
import com.google.common.base.Preconditions;
+import com.google.inject.Binder;
+import com.google.inject.Inject;
import org.apache.druid.java.util.common.ISE;
+import org.apache.druid.msq.guice.MSQBinders;
import org.apache.druid.msq.kernel.QueryDefinition;
import org.apache.druid.query.Query;
@@ -28,12 +31,17 @@ import java.util.Map;
/**
* Delegates to other {@link QueryKit} implementations based on the class of
the {@link Query}.
+ *
+ * The map of query types to QueryKit implementations is populated via Guice
MapBinder.
+ * Extensions can register additional QueryKit implementations using
+ * {@link MSQBinders#queryKitBinder(Binder)}.
*/
@SuppressWarnings("rawtypes")
public class MultiQueryKit implements QueryKit<Query<?>>
{
private final Map<Class<? extends Query>, QueryKit> toolKitMap;
+ @Inject
public MultiQueryKit(final Map<Class<? extends Query>, QueryKit> toolKitMap)
{
this.toolKitMap = Preconditions.checkNotNull(toolKitMap, "toolKitMap");
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/WindowOperatorQueryKit.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/WindowOperatorQueryKit.java
index 90ac89d140e..94ef7ac4cbf 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/WindowOperatorQueryKit.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/WindowOperatorQueryKit.java
@@ -20,9 +20,11 @@
package org.apache.druid.msq.querykit;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
import org.apache.druid.frame.key.ClusterBy;
import org.apache.druid.frame.key.KeyColumn;
import org.apache.druid.frame.key.KeyOrder;
+import org.apache.druid.guice.annotations.Json;
import org.apache.druid.java.util.common.ISE;
import org.apache.druid.java.util.common.granularity.Granularity;
import org.apache.druid.java.util.common.logger.Logger;
@@ -56,12 +58,11 @@ public class WindowOperatorQueryKit implements
QueryKit<WindowOperatorQuery>
{
private static final Logger log = new Logger(WindowOperatorQueryKit.class);
private final ObjectMapper jsonMapper;
- private final boolean isOperatorTransformationEnabled;
- public WindowOperatorQueryKit(ObjectMapper jsonMapper, boolean
isOperatorTransformationEnabled)
+ @Inject
+ public WindowOperatorQueryKit(@Json final ObjectMapper jsonMapper)
{
this.jsonMapper = jsonMapper;
- this.isOperatorTransformationEnabled = isOperatorTransformationEnabled;
}
@Override
@@ -88,6 +89,9 @@ public class WindowOperatorQueryKit implements
QueryKit<WindowOperatorQuery>
.getFinalStageDefinition()
.getSignature();
+ final boolean isOperatorTransformationEnabled =
+
MultiStageQueryContext.isWindowFunctionOperatorTransformationEnabled(originalQuery.context());
+
final WindowStages windowStages = new WindowStages(
originalQuery,
jsonMapper,
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByQueryKit.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByQueryKit.java
index 7f9c6e623e9..6dacc20c6ce 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByQueryKit.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/groupby/GroupByQueryKit.java
@@ -21,9 +21,11 @@ package org.apache.druid.msq.querykit.groupby;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
+import com.google.inject.Inject;
import org.apache.druid.frame.key.ClusterBy;
import org.apache.druid.frame.key.KeyColumn;
import org.apache.druid.frame.key.KeyOrder;
+import org.apache.druid.guice.annotations.Json;
import org.apache.druid.java.util.common.ISE;
import org.apache.druid.java.util.common.granularity.Granularities;
import org.apache.druid.java.util.common.granularity.Granularity;
@@ -58,7 +60,8 @@ public class GroupByQueryKit implements QueryKit<GroupByQuery>
{
private final ObjectMapper jsonMapper;
- public GroupByQueryKit(ObjectMapper jsonMapper)
+ @Inject
+ public GroupByQueryKit(@Json final ObjectMapper jsonMapper)
{
this.jsonMapper = jsonMapper;
}
diff --git
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryKit.java
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryKit.java
index 6382d63f7cd..95f3d200b33 100644
---
a/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryKit.java
+++
b/multi-stage-query/src/main/java/org/apache/druid/msq/querykit/scan/ScanQueryKit.java
@@ -20,9 +20,11 @@
package org.apache.druid.msq.querykit.scan;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.inject.Inject;
import org.apache.druid.frame.key.ClusterBy;
import org.apache.druid.frame.key.KeyColumn;
import org.apache.druid.frame.key.KeyOrder;
+import org.apache.druid.guice.annotations.Json;
import org.apache.druid.java.util.common.granularity.Granularity;
import org.apache.druid.msq.input.stage.StageInputSpec;
import org.apache.druid.msq.kernel.MixShuffleSpec;
@@ -50,7 +52,8 @@ public class ScanQueryKit implements QueryKit<ScanQuery>
{
private final ObjectMapper jsonMapper;
- public ScanQueryKit(final ObjectMapper jsonMapper)
+ @Inject
+ public ScanQueryKit(@Json final ObjectMapper jsonMapper)
{
this.jsonMapper = jsonMapper;
}
diff --git
a/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
b/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
index 48d4cab9450..64335b3a76c 100644
---
a/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
+++
b/multi-stage-query/src/test/java/org/apache/druid/msq/dart/controller/http/DartSqlResourceTest.java
@@ -52,6 +52,7 @@ import org.apache.druid.msq.indexing.error.MSQFaultUtils;
import org.apache.druid.msq.indexing.report.MSQStatusReport;
import org.apache.druid.msq.indexing.report.MSQTaskReport;
import org.apache.druid.msq.kernel.controller.ControllerQueryKernelConfig;
+import org.apache.druid.msq.querykit.MultiQueryKit;
import org.apache.druid.msq.sql.DartQueryKitSpecFactory;
import org.apache.druid.msq.test.MSQTestBase;
import org.apache.druid.msq.test.MSQTestControllerContext;
@@ -258,6 +259,7 @@ public class DartSqlResourceTest extends MSQTestBase
StringUtils.encodeForFormat(getClass().getSimpleName() +
"-controller-exec")
),
new DartQueryKitSpecFactory(new
TestTimelineServerView(Collections.emptyList())),
+ injector.getInstance(MultiQueryKit.class),
new ServerConfig(),
new DefaultQueryConfig(ImmutableMap.of("foo", "bar")),
toolbox,
diff --git
a/multi-stage-query/src/test/java/org/apache/druid/msq/sql/MSQTaskQueryMakerTest.java
b/multi-stage-query/src/test/java/org/apache/druid/msq/sql/MSQTaskQueryMakerTest.java
index 4005f08ef2e..3e2c3b0de96 100644
---
a/multi-stage-query/src/test/java/org/apache/druid/msq/sql/MSQTaskQueryMakerTest.java
+++
b/multi-stage-query/src/test/java/org/apache/druid/msq/sql/MSQTaskQueryMakerTest.java
@@ -46,6 +46,7 @@ import
org.apache.druid.java.util.common.granularity.Granularities;
import org.apache.druid.java.util.common.io.Closer;
import org.apache.druid.math.expr.ExprMacroTable;
import org.apache.druid.msq.exec.DataServerQueryHandlerFactory;
+import org.apache.druid.msq.guice.MSQIndexingModule;
import org.apache.druid.msq.indexing.destination.MSQTerminalStageSpecFactory;
import
org.apache.druid.msq.indexing.destination.SegmentGenerationTerminalStageSpecFactory;
import org.apache.druid.msq.indexing.error.MSQErrorReport;
@@ -219,7 +220,8 @@ public class MSQTaskQueryMakerTest
new LifecycleModule(),
new ConfigModule(),
new SegmentWranglerModule(),
- new LookylooModule()
+ new LookylooModule(),
+ new MSQIndexingModule()
);
Injector injector = Guice.createInjector(defaultModule,
BoundFieldModule.of(this));
DruidSecondaryModule.setupJackson(injector, objectMapper);
diff --git
a/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
b/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
index 8e6e38bb39b..bc1af37f1e6 100644
--- a/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
+++ b/multi-stage-query/src/test/java/org/apache/druid/msq/test/MSQTestBase.java
@@ -561,6 +561,7 @@ public class MSQTestBase extends BaseCalciteQueryTest
}
),
new ExpressionModule(),
+ new MSQIndexingModule(),
new MSQExternalDataSourceModule(),
new LookylooModule(),
new SegmentWranglerModule(),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]