This is an automated email from the ASF dual-hosted git repository.
yashmayya pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new 3d44c91e3c0 Refactor SetOperator and child classes for cleaner
abstraction (#16602)
3d44c91e3c0 is described below
commit 3d44c91e3c034c54daaeab8d0bceea20e7000ca6
Author: Yash Mayya <[email protected]>
AuthorDate: Fri Aug 15 12:07:26 2025 +0530
Refactor SetOperator and child classes for cleaner abstraction (#16602)
---
.../query/runtime/operator/MultiStageOperator.java | 1 +
.../operator/{ => set}/IntersectAllOperator.java | 5 +-
.../operator/{ => set}/IntersectOperator.java | 5 +-
.../operator/{ => set}/MinusAllOperator.java | 5 +-
.../runtime/operator/{ => set}/MinusOperator.java | 5 +-
.../operator/set/RightRowSetBasedSetOperator.java | 104 +++++++++++++++++++++
.../runtime/operator/{ => set}/SetOperator.java | 67 +------------
.../operator/{ => set}/UnionAllOperator.java | 8 +-
.../runtime/operator/{ => set}/UnionOperator.java | 5 +-
.../query/runtime/plan/PlanNodeToOpChain.java | 12 +--
.../runtime/operator/MultiStageAccountingTest.java | 1 +
.../MultistageResourceUsageAccountingTest.java | 1 +
.../{ => set}/IntersectAllOperatorTest.java | 4 +-
.../operator/{ => set}/IntersectOperatorTest.java | 4 +-
.../operator/{ => set}/MinusAllOperatorTest.java | 4 +-
.../operator/{ => set}/MinusOperatorTest.java | 4 +-
.../operator/{ => set}/UnionAllOperatorTest.java | 4 +-
.../operator/{ => set}/UnionOperatorTest.java | 4 +-
18 files changed, 152 insertions(+), 91 deletions(-)
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MultiStageOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MultiStageOperator.java
index adf02c497f4..013aa705331 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MultiStageOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MultiStageOperator.java
@@ -37,6 +37,7 @@ import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.plan.ExplainInfo;
import org.apache.pinot.query.runtime.blocks.ErrorMseBlock;
import org.apache.pinot.query.runtime.blocks.MseBlock;
+import org.apache.pinot.query.runtime.operator.set.SetOperator;
import org.apache.pinot.query.runtime.plan.MultiStageQueryStats;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.apache.pinot.query.runtime.plan.pipeline.PipelineBreakerOperator;
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/IntersectAllOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/IntersectAllOperator.java
similarity index 90%
rename from
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/IntersectAllOperator.java
rename to
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/IntersectAllOperator.java
index 343d4f56159..7b0ad8962f3 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/IntersectAllOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/IntersectAllOperator.java
@@ -16,11 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import java.util.List;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.data.table.Record;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,7 +30,7 @@ import org.slf4j.LoggerFactory;
/**
* INTERSECT ALL operator.
*/
-public class IntersectAllOperator extends SetOperator {
+public class IntersectAllOperator extends RightRowSetBasedSetOperator {
private static final Logger LOGGER =
LoggerFactory.getLogger(IntersectAllOperator.class);
private static final String EXPLAIN_NAME = "INTERSECT_ALL";
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/IntersectOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/IntersectOperator.java
similarity index 90%
rename from
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/IntersectOperator.java
rename to
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/IntersectOperator.java
index 997f2d8ebe5..96ef78082b2 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/IntersectOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/IntersectOperator.java
@@ -16,11 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import java.util.List;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.data.table.Record;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,7 +30,7 @@ import org.slf4j.LoggerFactory;
/**
* Intersect operator.
*/
-public class IntersectOperator extends SetOperator {
+public class IntersectOperator extends RightRowSetBasedSetOperator {
private static final Logger LOGGER =
LoggerFactory.getLogger(IntersectOperator.class);
private static final String EXPLAIN_NAME = "INTERSECT";
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MinusAllOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/MinusAllOperator.java
similarity index 90%
rename from
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MinusAllOperator.java
rename to
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/MinusAllOperator.java
index de111e0e683..d500f096d5f 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MinusAllOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/MinusAllOperator.java
@@ -16,11 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import java.util.List;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.data.table.Record;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -29,7 +30,7 @@ import org.slf4j.LoggerFactory;
/**
* EXCEPT ALL operator.
*/
-public class MinusAllOperator extends SetOperator {
+public class MinusAllOperator extends RightRowSetBasedSetOperator {
private static final Logger LOGGER =
LoggerFactory.getLogger(MinusAllOperator.class);
private static final String EXPLAIN_NAME = "MINUS_ALL";
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MinusOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/MinusOperator.java
similarity index 91%
rename from
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MinusOperator.java
rename to
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/MinusOperator.java
index 68e564b459f..180101b3f80 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/MinusOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/MinusOperator.java
@@ -16,12 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import java.util.List;
import javax.annotation.Nullable;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.data.table.Record;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -30,7 +31,7 @@ import org.slf4j.LoggerFactory;
/**
* Minus/Except operator.
*/
-public class MinusOperator extends SetOperator {
+public class MinusOperator extends RightRowSetBasedSetOperator {
private static final Logger LOGGER =
LoggerFactory.getLogger(MinusOperator.class);
private static final String EXPLAIN_NAME = "MINUS";
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/RightRowSetBasedSetOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/RightRowSetBasedSetOperator.java
new file mode 100644
index 00000000000..07f7ced2eac
--- /dev/null
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/RightRowSetBasedSetOperator.java
@@ -0,0 +1,104 @@
+/**
+ * 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.pinot.query.runtime.operator.set;
+
+import com.google.common.collect.HashMultiset;
+import com.google.common.collect.Multiset;
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.pinot.common.utils.DataSchema;
+import org.apache.pinot.core.data.table.Record;
+import org.apache.pinot.query.runtime.blocks.MseBlock;
+import org.apache.pinot.query.runtime.blocks.RowHeapDataBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
+import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
+
+
+/**
+ * Abstract base class for set operators that process the right child operator
first in order to build a set of rows
+ * that are then used to filter rows from the left child operator.
+ */
+public abstract class RightRowSetBasedSetOperator extends SetOperator {
+ protected final Multiset<Record> _rightRowSet;
+
+ public RightRowSetBasedSetOperator(OpChainExecutionContext
opChainExecutionContext,
+ List<MultiStageOperator> inputOperators,
+ DataSchema dataSchema) {
+ super(opChainExecutionContext, inputOperators, dataSchema);
+ _rightRowSet = HashMultiset.create();
+ }
+
+ /**
+ * Processes the right child operator and builds the set of rows that can be
used to filter the left child.
+ *
+ * @return either a data block containing rows or an EoS block, never {@code
null}.
+ */
+ @Override
+ protected MseBlock processRightOperator() {
+ MseBlock block = _rightChildOperator.nextBlock();
+ while (block.isData()) {
+ MseBlock.Data dataBlock = (MseBlock.Data) block;
+ for (Object[] row : dataBlock.asRowHeap().getRows()) {
+ _rightRowSet.add(new Record(row));
+ }
+ sampleAndCheckInterruption();
+ block = _rightChildOperator.nextBlock();
+ }
+ assert block.isEos();
+ return block;
+ }
+
+ /**
+ * Processes the left child operator and returns blocks of rows that match
the criteria defined by the set operation.
+ *
+ * @return block containing matched rows or EoS, never {@code null}.
+ */
+ @Override
+ protected MseBlock processLeftOperator() {
+ // Keep reading the input blocks until we find a match row or all blocks
are processed.
+ // TODO: Consider batching the rows to improve performance.
+ while (true) {
+ MseBlock leftBlock = _leftChildOperator.nextBlock();
+ if (leftBlock.isEos()) {
+ return leftBlock;
+ }
+ MseBlock.Data dataBlock = (MseBlock.Data) leftBlock;
+ List<Object[]> rows = new ArrayList<>();
+ for (Object[] row : dataBlock.asRowHeap().getRows()) {
+ if (handleRowMatched(row)) {
+ rows.add(row);
+ }
+ }
+ sampleAndCheckInterruption();
+ if (!rows.isEmpty()) {
+ return new RowHeapDataBlock(rows, _dataSchema);
+ }
+ }
+ }
+
+ /**
+ * Returns true if the row matches the criteria defined by the set operation.
+ * <p>
+ * Also updates the right row set based on the operator.
+ *
+ * @param row the row from the left operator to be checked for matching.
+ * @return true if the row is matched.
+ */
+ protected abstract boolean handleRowMatched(Object[] row);
+}
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/SetOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/SetOperator.java
similarity index 67%
rename from
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/SetOperator.java
rename to
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/SetOperator.java
index ae5e0a5471f..a19487e35bd 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/SetOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/SetOperator.java
@@ -16,20 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import com.google.common.base.Preconditions;
-import com.google.common.collect.HashMultiset;
-import com.google.common.collect.Multiset;
-import java.util.ArrayList;
import java.util.List;
import org.apache.pinot.common.datatable.StatMap;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.common.ExplainPlanRows;
-import org.apache.pinot.core.data.table.Record;
import org.apache.pinot.core.operator.ExecutionStatistics;
import org.apache.pinot.query.runtime.blocks.MseBlock;
-import org.apache.pinot.query.runtime.blocks.RowHeapDataBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.apache.pinot.segment.spi.IndexSegment;
@@ -42,7 +38,6 @@ import org.apache.pinot.segment.spi.IndexSegment;
* UnionOperator: The right child operator is consumed in a blocking manner.
*/
public abstract class SetOperator extends MultiStageOperator {
- protected final Multiset<Record> _rightRowSet;
protected final MultiStageOperator _leftChildOperator;
protected final MultiStageOperator _rightChildOperator;
@@ -59,7 +54,6 @@ public abstract class SetOperator extends MultiStageOperator {
Preconditions.checkState(inputOperators.size() == 2, "Set operator should
have 2 child operators");
_leftChildOperator = inputOperators.get(0);
_rightChildOperator = inputOperators.get(1);
- _rightRowSet = HashMultiset.create();
_isRightChildOperatorProcessed = false;
}
@@ -123,68 +117,15 @@ public abstract class SetOperator extends
MultiStageOperator {
}
}
- /**
- * Processes the right child operator and build the set of rows that can be
used to filter the left child. This method
- * can be overridden to also be able to return data blocks while processing
the right operator.
- *
- * @return either a data block containing rows or an EoS block, never {@code
null}.
- */
- protected MseBlock processRightOperator() {
- MseBlock block = _rightChildOperator.nextBlock();
- while (block.isData()) {
- MseBlock.Data dataBlock = (MseBlock.Data) block;
- for (Object[] row : dataBlock.asRowHeap().getRows()) {
- _rightRowSet.add(new Record(row));
- }
- sampleAndCheckInterruption();
- block = _rightChildOperator.nextBlock();
- }
- assert block.isEos();
- return block;
- }
+ protected abstract MseBlock processLeftOperator();
- /**
- * Processes the left child operator and returns blocks of rows that match
the criteria defined by the set operation.
- *
- * @return block containing matched rows or EoS, never {@code null}.
- */
- protected MseBlock processLeftOperator() {
- // Keep reading the input blocks until we find a match row or all blocks
are processed.
- // TODO: Consider batching the rows to improve performance.
- while (true) {
- MseBlock leftBlock = _leftChildOperator.nextBlock();
- if (leftBlock.isEos()) {
- return leftBlock;
- }
- MseBlock.Data dataBlock = (MseBlock.Data) leftBlock;
- List<Object[]> rows = new ArrayList<>();
- for (Object[] row : dataBlock.asRowHeap().getRows()) {
- if (handleRowMatched(row)) {
- rows.add(row);
- }
- }
- sampleAndCheckInterruption();
- if (!rows.isEmpty()) {
- return new RowHeapDataBlock(rows, _dataSchema);
- }
- }
- }
+ protected abstract MseBlock processRightOperator();
@Override
protected StatMap<?> copyStatMaps() {
return new StatMap<>(_statMap);
}
- /**
- * Returns true if the row is matched.
- * <p>
- * Also updates the right row set based on the Operator.
- *
- * @param row the row to be checked for matching.
- * @return true if the row is matched.
- */
- protected abstract boolean handleRowMatched(Object[] row);
-
public enum StatKey implements StatMap.Key {
//@formatter:off
EXECUTION_TIME_MS(StatMap.Type.LONG) {
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/UnionAllOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/UnionAllOperator.java
similarity index 90%
rename from
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/UnionAllOperator.java
rename to
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/UnionAllOperator.java
index a3237968939..8cd2f07a9cb 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/UnionAllOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/UnionAllOperator.java
@@ -16,11 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import java.util.List;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.query.runtime.blocks.MseBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,9 +63,4 @@ public class UnionAllOperator extends SetOperator {
protected MseBlock processLeftOperator() {
return _leftChildOperator.nextBlock();
}
-
- @Override
- protected boolean handleRowMatched(Object[] row) {
- throw new UnsupportedOperationException("UNION ALL operator does not
support row matching");
- }
}
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/UnionOperator.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/UnionOperator.java
similarity index 94%
rename from
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/UnionOperator.java
rename to
pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/UnionOperator.java
index db43853d56c..46417c2491c 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/UnionOperator.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/operator/set/UnionOperator.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import java.util.ArrayList;
import java.util.List;
@@ -25,6 +25,7 @@ import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.data.table.Record;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.RowHeapDataBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.plan.OpChainExecutionContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -34,7 +35,7 @@ import org.slf4j.LoggerFactory;
* Union operator for UNION queries. Unlike {@link UnionAllOperator}, this
operator removes duplicate rows and only
* returns distinct rows.
*/
-public class UnionOperator extends SetOperator {
+public class UnionOperator extends RightRowSetBasedSetOperator {
private static final Logger LOGGER =
LoggerFactory.getLogger(UnionOperator.class);
private static final String EXPLAIN_NAME = "UNION";
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/PlanNodeToOpChain.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/PlanNodeToOpChain.java
index 01ca2314cb3..4f5f719c8bf 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/PlanNodeToOpChain.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/plan/PlanNodeToOpChain.java
@@ -46,24 +46,24 @@ import
org.apache.pinot.query.runtime.operator.EnrichedHashJoinOperator;
import org.apache.pinot.query.runtime.operator.ErrorOperator;
import org.apache.pinot.query.runtime.operator.FilterOperator;
import org.apache.pinot.query.runtime.operator.HashJoinOperator;
-import org.apache.pinot.query.runtime.operator.IntersectAllOperator;
-import org.apache.pinot.query.runtime.operator.IntersectOperator;
import org.apache.pinot.query.runtime.operator.LeafOperator;
import org.apache.pinot.query.runtime.operator.LiteralValueOperator;
import org.apache.pinot.query.runtime.operator.LookupJoinOperator;
import org.apache.pinot.query.runtime.operator.MailboxReceiveOperator;
import org.apache.pinot.query.runtime.operator.MailboxSendOperator;
-import org.apache.pinot.query.runtime.operator.MinusAllOperator;
-import org.apache.pinot.query.runtime.operator.MinusOperator;
import org.apache.pinot.query.runtime.operator.MultiStageOperator;
import org.apache.pinot.query.runtime.operator.NonEquiJoinOperator;
import org.apache.pinot.query.runtime.operator.OpChain;
import org.apache.pinot.query.runtime.operator.SortOperator;
import org.apache.pinot.query.runtime.operator.SortedMailboxReceiveOperator;
import org.apache.pinot.query.runtime.operator.TransformOperator;
-import org.apache.pinot.query.runtime.operator.UnionAllOperator;
-import org.apache.pinot.query.runtime.operator.UnionOperator;
import org.apache.pinot.query.runtime.operator.WindowAggregateOperator;
+import org.apache.pinot.query.runtime.operator.set.IntersectAllOperator;
+import org.apache.pinot.query.runtime.operator.set.IntersectOperator;
+import org.apache.pinot.query.runtime.operator.set.MinusAllOperator;
+import org.apache.pinot.query.runtime.operator.set.MinusOperator;
+import org.apache.pinot.query.runtime.operator.set.UnionAllOperator;
+import org.apache.pinot.query.runtime.operator.set.UnionOperator;
import org.apache.pinot.query.runtime.plan.server.ServerPlanRequestContext;
import org.apache.pinot.spi.exception.QueryErrorCode;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultiStageAccountingTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultiStageAccountingTest.java
index 57b27b907fd..a1ee88e56a9 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultiStageAccountingTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultiStageAccountingTest.java
@@ -37,6 +37,7 @@ import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.RowHeapDataBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.set.IntersectOperator;
import org.apache.pinot.spi.accounting.QueryResourceTracker;
import org.apache.pinot.spi.accounting.ThreadExecutionContext;
import org.apache.pinot.spi.accounting.ThreadResourceTracker;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultistageResourceUsageAccountingTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultistageResourceUsageAccountingTest.java
index 8312bd098ba..dd17202f644 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultistageResourceUsageAccountingTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MultistageResourceUsageAccountingTest.java
@@ -37,6 +37,7 @@ import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.RowHeapDataBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.set.IntersectOperator;
import org.apache.pinot.spi.accounting.QueryResourceTracker;
import org.apache.pinot.spi.accounting.ThreadExecutionContext;
import org.apache.pinot.spi.accounting.ThreadResourceTracker;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/IntersectAllOperatorTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/IntersectAllOperatorTest.java
similarity index 96%
rename from
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/IntersectAllOperatorTest.java
rename to
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/IntersectAllOperatorTest.java
index d16140ef228..b052d532650 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/IntersectAllOperatorTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/IntersectAllOperatorTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
@@ -25,6 +25,8 @@ import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
+import org.apache.pinot.query.runtime.operator.OperatorTestUtil;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/IntersectOperatorTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/IntersectOperatorTest.java
similarity index 97%
rename from
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/IntersectOperatorTest.java
rename to
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/IntersectOperatorTest.java
index 335e17e9a78..4252d0a895a 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/IntersectOperatorTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/IntersectOperatorTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
@@ -26,6 +26,8 @@ import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.ErrorMseBlock;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
+import org.apache.pinot.query.runtime.operator.OperatorTestUtil;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MinusAllOperatorTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/MinusAllOperatorTest.java
similarity index 96%
rename from
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MinusAllOperatorTest.java
rename to
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/MinusAllOperatorTest.java
index e9b3f4794fe..869c4277b39 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MinusAllOperatorTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/MinusAllOperatorTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
@@ -25,6 +25,8 @@ import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
+import org.apache.pinot.query.runtime.operator.OperatorTestUtil;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MinusOperatorTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/MinusOperatorTest.java
similarity index 97%
rename from
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MinusOperatorTest.java
rename to
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/MinusOperatorTest.java
index 83ff007985b..967164eb126 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/MinusOperatorTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/MinusOperatorTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import com.google.common.collect.ImmutableList;
import java.util.Arrays;
@@ -26,6 +26,8 @@ import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.ErrorMseBlock;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
+import org.apache.pinot.query.runtime.operator.OperatorTestUtil;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/UnionAllOperatorTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/UnionAllOperatorTest.java
similarity index 96%
rename from
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/UnionAllOperatorTest.java
rename to
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/UnionAllOperatorTest.java
index e5e01959014..3299a84fee7 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/UnionAllOperatorTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/UnionAllOperatorTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
@@ -27,6 +27,8 @@ import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.ErrorMseBlock;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
+import org.apache.pinot.query.runtime.operator.OperatorTestUtil;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
diff --git
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/UnionOperatorTest.java
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/UnionOperatorTest.java
similarity index 96%
rename from
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/UnionOperatorTest.java
rename to
pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/UnionOperatorTest.java
index c8b27d466c6..cfb9f55ed49 100644
---
a/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/UnionOperatorTest.java
+++
b/pinot-query-runtime/src/test/java/org/apache/pinot/query/runtime/operator/set/UnionOperatorTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.pinot.query.runtime.operator;
+package org.apache.pinot.query.runtime.operator.set;
import com.google.common.collect.ImmutableList;
import java.util.ArrayList;
@@ -27,6 +27,8 @@ import org.apache.pinot.query.routing.VirtualServerAddress;
import org.apache.pinot.query.runtime.blocks.ErrorMseBlock;
import org.apache.pinot.query.runtime.blocks.MseBlock;
import org.apache.pinot.query.runtime.blocks.SuccessMseBlock;
+import org.apache.pinot.query.runtime.operator.MultiStageOperator;
+import org.apache.pinot.query.runtime.operator.OperatorTestUtil;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]