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]


Reply via email to