This is an automated email from the ASF dual-hosted git repository.
jackie 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 42588248d4 Clean up the Block APIs (#10358)
42588248d4 is described below
commit 42588248d4d1cedc51e438db87b1485659b98ffb
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Wed Mar 1 13:04:18 2023 -0800
Clean up the Block APIs (#10358)
---
.../java/org/apache/pinot/core/common/Block.java | 37 +----------
.../apache/pinot/core/common/BlockDocIdSet.java | 53 ++++++++++++++-
.../pinot/core/common/BlockDocIdValueIterator.java | 33 ----------
.../pinot/core/common/BlockDocIdValueSet.java | 24 -------
.../apache/pinot/core/common/BlockMetadata.java | 42 ------------
.../pinot/core/operator/DocIdSetOperator.java | 15 ++---
.../pinot/core/operator/ProjectionOperator.java | 3 +-
.../pinot/core/operator/blocks/DocIdSetBlock.java | 49 ++++----------
.../pinot/core/operator/blocks/FilterBlock.java | 41 ++++--------
.../operator/blocks/InstanceResponseBlock.java | 24 -------
.../core/operator/blocks/ProjectionBlock.java | 23 -------
.../pinot/core/operator/blocks/TransformBlock.java | 23 -------
.../operator/blocks/results/BaseResultsBlock.java | 24 -------
.../dociditerators/ArrayBasedDocIdIterator.java | 53 ---------------
.../pinot/core/operator/docidsets/AndDocIdSet.java | 15 +++--
.../operator/docidsets/ArrayBasedDocIdSet.java | 38 -----------
.../core/operator/docidsets/BitmapDocIdSet.java | 3 +-
.../core/operator/docidsets/EmptyDocIdSet.java | 5 +-
...FilterDocIdSet.java => ExpressionDocIdSet.java} | 5 +-
.../operator/docidsets/FilterBlockDocIdSet.java | 75 ----------------------
.../core/operator/docidsets/MVScanDocIdSet.java | 3 +-
.../core/operator/docidsets/MatchAllDocIdSet.java | 3 +-
.../pinot/core/operator/docidsets/NotDocIdSet.java | 7 +-
.../pinot/core/operator/docidsets/OrDocIdSet.java | 13 ++--
.../docidsets/RangelessBitmapDocIdSet.java | 3 +-
.../core/operator/docidsets/SVScanDocIdSet.java | 3 +-
.../core/operator/docidsets/SortedDocIdSet.java | 3 +-
.../core/operator/filter/AndFilterOperator.java | 9 ++-
.../operator/filter/CombinedFilterOperator.java | 6 +-
.../operator/filter/ExpressionFilterOperator.java | 5 +-
.../core/operator/filter/OrFilterOperator.java | 11 ++--
.../filter/RangeIndexBasedFilterOperator.java | 4 +-
.../core/operator/filter/TestFilterOperator.java | 4 +-
.../apache/pinot/core/plan/FilterPlanNodeTest.java | 4 +-
.../pinot/core/startree/v2/BaseStarTreeV2Test.java | 9 ++-
.../query/runtime/blocks/TransferableBlock.java | 24 -------
36 files changed, 146 insertions(+), 550 deletions(-)
diff --git a/pinot-core/src/main/java/org/apache/pinot/core/common/Block.java
b/pinot-core/src/main/java/org/apache/pinot/core/common/Block.java
index 03397a5948..2ee6585ecf 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/common/Block.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/common/Block.java
@@ -19,41 +19,8 @@
package org.apache.pinot.core.common;
/**
- *
- * A block represents a set of rows.A segment will contain one or more blocks
- * Currently, it assumes only one column per block. We might change this in
- * future
+ * A {@code Block} represents the data block returned by the {@link Operator}.
Each operator can return multiple blocks.
+ * It can contain document ids, column values or result rows depending on the
operator.
*/
public interface Block {
-
- /**
- * Returns valset that allows one to iterate over the docId. If no predicate
- * is provided, this will consists of all docIds within the block
- *
- * @return {@link BlockDocIdSet}
- */
-
- BlockDocIdSet getBlockDocIdSet();
-
- /**
- * Returns valset that allows one to iterate over the values
- *
- * @return {@link BlockValSet}
- */
- BlockValSet getBlockValueSet();
-
- /**
- * Allows one to iterate over the DocId And Value in parallel
- *
- * @return
- */
- BlockDocIdValueSet getBlockDocIdValueSet();
-
- /**
- * For future optimizations. The metadata can consists of bloom filter,
- * min/max, sum, count etc that can be used in filtering, aggregation
- *
- * @return
- */
- BlockMetadata getMetadata();
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdSet.java
index bedff54d83..dec522db9a 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdSet.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdSet.java
@@ -18,9 +18,21 @@
*/
package org.apache.pinot.core.common;
+import org.apache.pinot.core.operator.blocks.FilterBlock;
+import org.apache.pinot.core.operator.dociditerators.AndDocIdIterator;
+import org.apache.pinot.core.operator.dociditerators.BitmapDocIdIterator;
+import org.apache.pinot.core.operator.dociditerators.OrDocIdIterator;
+import
org.apache.pinot.core.operator.dociditerators.RangelessBitmapDocIdIterator;
+import org.apache.pinot.core.operator.dociditerators.ScanBasedDocIdIterator;
+import org.apache.pinot.core.operator.docidsets.BitmapDocIdSet;
+import org.apache.pinot.core.operator.docidsets.RangelessBitmapDocIdSet;
+import org.apache.pinot.segment.spi.Constants;
+import org.roaringbitmap.RoaringBitmapWriter;
+import org.roaringbitmap.buffer.MutableRoaringBitmap;
+
+
/**
- * The interface {@code BlockDocIdSet} represents all the matching document
ids for a predicate.
- * TODO: Redesign the filtering to skip the BlockDocIdSet and directly use
BlockDocIdIterator
+ * The {@code BlockDocIdSet} contains the matching document ids returned by
the {@link FilterBlock}.
*/
public interface BlockDocIdSet {
@@ -29,4 +41,41 @@ public interface BlockDocIdSet {
* ascending order.
*/
BlockDocIdIterator iterator();
+
+ /**
+ * Returns the number of entries (SV value contains one entry, MV value
contains multiple entries) scanned in the
+ * filtering phase. This method should be called after the filtering is done.
+ */
+ long getNumEntriesScannedInFilter();
+
+ /**
+ * For scan-based FilterBlockDocIdSet, pre-scans the documents and returns a
non-scan-based FilterBlockDocIdSet.
+ */
+ default BlockDocIdSet toNonScanDocIdSet() {
+ BlockDocIdIterator docIdIterator = iterator();
+
+ // NOTE: AND and OR DocIdIterator might contain scan-based DocIdIterator
+ // TODO: This scan is not counted in the execution stats
+ if (docIdIterator instanceof ScanBasedDocIdIterator || docIdIterator
instanceof AndDocIdIterator
+ || docIdIterator instanceof OrDocIdIterator) {
+ RoaringBitmapWriter<MutableRoaringBitmap> bitmapWriter =
+ RoaringBitmapWriter.bufferWriter().runCompress(false).get();
+ int docId;
+ while ((docId = docIdIterator.next()) != Constants.EOF) {
+ bitmapWriter.add(docId);
+ }
+ return new RangelessBitmapDocIdSet(bitmapWriter.get());
+ }
+
+ // NOTE: AND and OR DocIdSet might return BitmapBasedDocIdIterator after
processing the iterators. Create a new
+ // DocIdSet to prevent processing the iterators again
+ if (docIdIterator instanceof RangelessBitmapDocIdIterator) {
+ return new RangelessBitmapDocIdSet((RangelessBitmapDocIdIterator)
docIdIterator);
+ }
+ if (docIdIterator instanceof BitmapDocIdIterator) {
+ return new BitmapDocIdSet((BitmapDocIdIterator) docIdIterator);
+ }
+
+ return this;
+ }
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdValueIterator.java
b/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdValueIterator.java
deleted file mode 100644
index 350ef0afcb..0000000000
---
a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdValueIterator.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * 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.core.common;
-
-/**
- *
- * Not used for now, since most of the predicates make use of inverted index.
- * Revisit when we push predicate evaluation up into the operator
- */
-public interface BlockDocIdValueIterator {
-
- boolean advance();
-
- int currentDocId();
-
- int currentVal();
-}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdValueSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdValueSet.java
deleted file mode 100644
index f917df22c3..0000000000
---
a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockDocIdValueSet.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 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.core.common;
-
-public interface BlockDocIdValueSet {
-
- public BlockDocIdValueIterator iterator();
-}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockMetadata.java
b/pinot-core/src/main/java/org/apache/pinot/core/common/BlockMetadata.java
deleted file mode 100644
index 041ea219de..0000000000
--- a/pinot-core/src/main/java/org/apache/pinot/core/common/BlockMetadata.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * 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.core.common;
-
-import org.apache.pinot.segment.spi.index.reader.Dictionary;
-import org.apache.pinot.spi.data.FieldSpec;
-
-
-public interface BlockMetadata {
-
- int getLength();
-
- int getStartDocId();
-
- int getEndDocId();
-
- FieldSpec.DataType getDataType();
-
- boolean isSingleValue();
-
- int getMaxNumberOfMultiValues();
-
- boolean hasDictionary();
-
- Dictionary getDictionary();
-}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/DocIdSetOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/DocIdSetOperator.java
index 6ee1314459..2d6e9acc67 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/DocIdSetOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/DocIdSetOperator.java
@@ -22,9 +22,9 @@ import com.google.common.base.Preconditions;
import java.util.Collections;
import java.util.List;
import org.apache.pinot.core.common.BlockDocIdIterator;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.operator.blocks.DocIdSetBlock;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
import org.apache.pinot.core.operator.filter.BaseFilterOperator;
import org.apache.pinot.core.plan.DocIdSetPlanNode;
import org.apache.pinot.segment.spi.Constants;
@@ -45,7 +45,7 @@ public class DocIdSetOperator extends
BaseOperator<DocIdSetBlock> {
private final BaseFilterOperator _filterOperator;
private final int _maxSizeOfDocIdSet;
- private FilterBlockDocIdSet _filterBlockDocIdSet;
+ private BlockDocIdSet _blockDocIdSet;
private BlockDocIdIterator _blockDocIdIterator;
private int _currentDocId = 0;
@@ -61,11 +61,10 @@ public class DocIdSetOperator extends
BaseOperator<DocIdSetBlock> {
return null;
}
-
// Initialize filter block document Id set
- if (_filterBlockDocIdSet == null) {
- _filterBlockDocIdSet = _filterOperator.nextBlock().getBlockDocIdSet();
- _blockDocIdIterator = _filterBlockDocIdSet.iterator();
+ if (_blockDocIdSet == null) {
+ _blockDocIdSet = _filterOperator.nextBlock().getBlockDocIdSet();
+ _blockDocIdIterator = _blockDocIdSet.iterator();
}
Tracing.ThreadAccountantOps.sample();
@@ -86,7 +85,6 @@ public class DocIdSetOperator extends
BaseOperator<DocIdSetBlock> {
}
}
-
@Override
public String toExplainString() {
return EXPLAIN_NAME;
@@ -99,8 +97,7 @@ public class DocIdSetOperator extends
BaseOperator<DocIdSetBlock> {
@Override
public ExecutionStatistics getExecutionStatistics() {
- long numEntriesScannedInFilter =
- _filterBlockDocIdSet != null ?
_filterBlockDocIdSet.getNumEntriesScannedInFilter() : 0;
+ long numEntriesScannedInFilter = _blockDocIdSet != null ?
_blockDocIdSet.getNumEntriesScannedInFilter() : 0;
return new ExecutionStatistics(0, numEntriesScannedInFilter, 0, 0);
}
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
index fb3c26df75..e0062b00d5 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/ProjectionOperator.java
@@ -64,12 +64,11 @@ public class ProjectionOperator extends
BaseOperator<ProjectionBlock> {
return null;
} else {
Tracing.activeRecording().setNumChildren(_dataSourceMap.size());
- _dataBlockCache.initNewBlock(docIdSetBlock.getDocIdSet(),
docIdSetBlock.getSearchableLength());
+ _dataBlockCache.initNewBlock(docIdSetBlock.getDocIds(),
docIdSetBlock.getLength());
return new ProjectionBlock(_dataSourceMap, _dataBlockCache);
}
}
-
@Override
public List<Operator> getChildOperators() {
return Collections.singletonList(_docIdSetOperator);
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/DocIdSetBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/DocIdSetBlock.java
index bf2528bbb8..d4bb156276 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/DocIdSetBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/DocIdSetBlock.java
@@ -19,48 +19,27 @@
package org.apache.pinot.core.operator.blocks;
import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.common.BlockDocIdValueSet;
-import org.apache.pinot.core.common.BlockMetadata;
-import org.apache.pinot.core.common.BlockValSet;
-import org.apache.pinot.core.operator.docidsets.ArrayBasedDocIdSet;
+import org.apache.pinot.core.operator.DocIdSetOperator;
+/**
+ * The {@code DocIdSetBlock} contains a block of document ids (sorted), and is
returned from {@link DocIdSetOperator}.
+ * Each {@code DocIdSetOperator} can return multiple {@code DocIdSetBlock}s.
+ */
public class DocIdSetBlock implements Block {
+ private final int[] _docIds;
+ private final int _length;
- private final int[] _docIdArray;
- private final int _searchableLength;
-
- public DocIdSetBlock(int[] docIdSet, int searchableLength) {
- _docIdArray = docIdSet;
- _searchableLength = searchableLength;
- }
-
- public int[] getDocIdSet() {
- return _docIdArray;
- }
-
- public int getSearchableLength() {
- return _searchableLength;
- }
-
- @Override
- public BlockValSet getBlockValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdValueSet getBlockDocIdValueSet() {
- throw new UnsupportedOperationException();
+ public DocIdSetBlock(int[] docIds, int length) {
+ _docIds = docIds;
+ _length = length;
}
- @Override
- public BlockDocIdSet getBlockDocIdSet() {
- return new ArrayBasedDocIdSet(_docIdArray, _searchableLength);
+ public int[] getDocIds() {
+ return _docIds;
}
- @Override
- public BlockMetadata getMetadata() {
- throw new UnsupportedOperationException();
+ public int getLength() {
+ return _length;
}
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/FilterBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/FilterBlock.java
index 8afdd8cd3d..185939283b 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/FilterBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/FilterBlock.java
@@ -19,50 +19,31 @@
package org.apache.pinot.core.operator.blocks;
import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockDocIdValueSet;
-import org.apache.pinot.core.common.BlockMetadata;
-import org.apache.pinot.core.common.BlockValSet;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
+import org.apache.pinot.core.common.BlockDocIdSet;
/**
* The {@code FilterBlock} class is the block holding the document Ids
returned from the filter operator.
*/
public class FilterBlock implements Block {
- private final FilterBlockDocIdSet _filterBlockDocIdSet;
- private FilterBlockDocIdSet _nonScanFilterBlockDocIdSet;
+ private final BlockDocIdSet _blockDocIdSet;
+ private BlockDocIdSet _nonScanBlockDocIdSet;
- public FilterBlock(FilterBlockDocIdSet filterBlockDocIdSet) {
- _filterBlockDocIdSet = filterBlockDocIdSet;
+ public FilterBlock(BlockDocIdSet blockDocIdSet) {
+ _blockDocIdSet = blockDocIdSet;
}
/**
* Pre-scans the documents if needed, and returns a non-scan-based
FilterBlockDocIdSet.
*/
- public FilterBlockDocIdSet getNonScanFilterBLockDocIdSet() {
- if (_nonScanFilterBlockDocIdSet == null) {
- _nonScanFilterBlockDocIdSet = _filterBlockDocIdSet.toNonScanDocIdSet();
+ public BlockDocIdSet getNonScanFilterBLockDocIdSet() {
+ if (_nonScanBlockDocIdSet == null) {
+ _nonScanBlockDocIdSet = _blockDocIdSet.toNonScanDocIdSet();
}
- return _nonScanFilterBlockDocIdSet;
+ return _nonScanBlockDocIdSet;
}
- @Override
- public FilterBlockDocIdSet getBlockDocIdSet() {
- return _nonScanFilterBlockDocIdSet != null ? _nonScanFilterBlockDocIdSet :
_filterBlockDocIdSet;
- }
-
- @Override
- public BlockValSet getBlockValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdValueSet getBlockDocIdValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockMetadata getMetadata() {
- throw new UnsupportedOperationException();
+ public BlockDocIdSet getBlockDocIdSet() {
+ return _nonScanBlockDocIdSet != null ? _nonScanBlockDocIdSet :
_blockDocIdSet;
}
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/InstanceResponseBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/InstanceResponseBlock.java
index 4708d5cf83..9c923ecfc7 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/InstanceResponseBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/InstanceResponseBlock.java
@@ -28,10 +28,6 @@ import org.apache.pinot.common.datatable.DataTable;
import org.apache.pinot.common.response.ProcessingException;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.common.BlockDocIdValueSet;
-import org.apache.pinot.core.common.BlockMetadata;
-import org.apache.pinot.core.common.BlockValSet;
import org.apache.pinot.core.common.datatable.DataTableBuilderFactory;
import org.apache.pinot.core.operator.blocks.results.BaseResultsBlock;
import org.apache.pinot.core.query.request.context.QueryContext;
@@ -145,24 +141,4 @@ public class InstanceResponseBlock implements Block {
}
dataTable.getMetadata().putAll(_metadata);
}
-
- @Override
- public BlockValSet getBlockValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdValueSet getBlockDocIdValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdSet getBlockDocIdSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockMetadata getMetadata() {
- throw new UnsupportedOperationException();
- }
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
index 066d27b350..ee1983d8e4 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/ProjectionBlock.java
@@ -21,9 +21,6 @@ package org.apache.pinot.core.operator.blocks;
import java.math.BigDecimal;
import java.util.Map;
import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.common.BlockDocIdValueSet;
-import org.apache.pinot.core.common.BlockMetadata;
import org.apache.pinot.core.common.BlockValSet;
import org.apache.pinot.core.common.DataBlockCache;
import org.apache.pinot.core.operator.docvalsets.ProjectionBlockValSet;
@@ -56,26 +53,6 @@ public class ProjectionBlock implements Block {
return new ProjectionBlockValSet(_dataBlockCache, column,
_dataSourceMap.get(column));
}
- @Override
- public BlockDocIdSet getBlockDocIdSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockValSet getBlockValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdValueSet getBlockDocIdValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockMetadata getMetadata() {
- throw new UnsupportedOperationException();
- }
-
/**
* Pushes a {@see TransformEvaluator} which will produce an int value down
* to be evaluated against the column. This is an unstable API.
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/TransformBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/TransformBlock.java
index 5625a5704d..b0b5ae9e0f 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/TransformBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/TransformBlock.java
@@ -21,9 +21,6 @@ package org.apache.pinot.core.operator.blocks;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.common.BlockDocIdValueSet;
-import org.apache.pinot.core.common.BlockMetadata;
import org.apache.pinot.core.common.BlockValSet;
import org.apache.pinot.core.operator.docvalsets.TransformBlockValSet;
import org.apache.pinot.core.operator.transform.function.TransformFunction;
@@ -62,24 +59,4 @@ public class TransformBlock implements Block {
public BlockValSet getBlockValueSet(String column) {
return _projectionBlock.getBlockValueSet(column);
}
-
- @Override
- public BlockDocIdSet getBlockDocIdSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockValSet getBlockValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdValueSet getBlockDocIdValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockMetadata getMetadata() {
- throw new UnsupportedOperationException();
- }
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/results/BaseResultsBlock.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/results/BaseResultsBlock.java
index 7c17a7abb6..9d119afce7 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/results/BaseResultsBlock.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/blocks/results/BaseResultsBlock.java
@@ -31,10 +31,6 @@ import
org.apache.pinot.common.datatable.DataTable.MetadataKey;
import org.apache.pinot.common.response.ProcessingException;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.common.BlockDocIdValueSet;
-import org.apache.pinot.core.common.BlockMetadata;
-import org.apache.pinot.core.common.BlockValSet;
import org.apache.pinot.core.query.request.context.QueryContext;
@@ -199,24 +195,4 @@ public abstract class BaseResultsBlock implements Block {
metadata.put(MetadataKey.NUM_CONSUMING_SEGMENTS_MATCHED.getName(),
Integer.toString(_numConsumingSegmentsMatched));
return metadata;
}
-
- @Override
- public BlockDocIdSet getBlockDocIdSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockValSet getBlockValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdValueSet getBlockDocIdValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockMetadata getMetadata() {
- throw new UnsupportedOperationException();
- }
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/ArrayBasedDocIdIterator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/ArrayBasedDocIdIterator.java
deleted file mode 100644
index 3b8591bfed..0000000000
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/dociditerators/ArrayBasedDocIdIterator.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 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.core.operator.dociditerators;
-
-import org.apache.pinot.core.common.BlockDocIdIterator;
-import org.apache.pinot.segment.spi.Constants;
-
-
-/**
- * The {@code ArrayBasedDocIdIterator} is the iterator for ArrayBasedDocIdSet.
It iterates on an array of matching
- * document ids.
- */
-public final class ArrayBasedDocIdIterator implements BlockDocIdIterator {
- private final int[] _docIds;
- private final int _searchableLength;
-
- private int _nextIndex = 0;
-
- public ArrayBasedDocIdIterator(int[] docIds, int searchableLength) {
- _docIds = docIds;
- _searchableLength = searchableLength;
- }
-
- @Override
- public int next() {
- if (_nextIndex < _searchableLength) {
- return _docIds[_nextIndex++];
- } else {
- return Constants.EOF;
- }
- }
-
- @Override
- public int advance(int targetDocId) {
- throw new UnsupportedOperationException();
- }
-}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/AndDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/AndDocIdSet.java
index 8b43b7d340..29f267c4a1 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/AndDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/AndDocIdSet.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.apache.commons.collections.MapUtils;
import org.apache.pinot.common.utils.config.QueryOptionsUtils;
import org.apache.pinot.core.common.BlockDocIdIterator;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.AndDocIdIterator;
import org.apache.pinot.core.operator.dociditerators.BitmapBasedDocIdIterator;
import
org.apache.pinot.core.operator.dociditerators.RangelessBitmapDocIdIterator;
@@ -37,9 +38,9 @@ import org.roaringbitmap.buffer.MutableRoaringBitmap;
/**
- * The FilterBlockDocIdSet to perform AND on all child FilterBlockDocIdSets.
+ * The BlockDocIdSet to perform AND on all child BlockDocIdSets.
* <p>The AndBlockDocIdSet will construct the BlockDocIdIterator based on the
BlockDocIdIterators from the child
- * FilterBlockDocIdSets:
+ * BlockDocIdSets:
* <ul>
* <li>
* When there are at least one index-base BlockDocIdIterator
(SortedDocIdIterator or BitmapBasedDocIdIterator) and
@@ -53,11 +54,11 @@ import org.roaringbitmap.buffer.MutableRoaringBitmap;
* </li>
* </ul>
*/
-public final class AndDocIdSet implements FilterBlockDocIdSet {
- private final List<FilterBlockDocIdSet> _docIdSets;
+public final class AndDocIdSet implements BlockDocIdSet {
+ private final List<BlockDocIdSet> _docIdSets;
private final boolean _cardinalityBasedRankingForScan;
- public AndDocIdSet(List<FilterBlockDocIdSet> docIdSets, Map<String, String>
queryOptions) {
+ public AndDocIdSet(List<BlockDocIdSet> docIdSets, Map<String, String>
queryOptions) {
_docIdSets = docIdSets;
_cardinalityBasedRankingForScan =
!MapUtils.isEmpty(queryOptions) &&
QueryOptionsUtils.isAndScanReorderingEnabled(queryOptions);
@@ -66,7 +67,7 @@ public final class AndDocIdSet implements FilterBlockDocIdSet
{
@Override
public BlockDocIdIterator iterator() {
int numDocIdSets = _docIdSets.size();
- // NOTE: Keep the order of FilterBlockDocIdSets to preserve the order
decided within FilterOperatorUtils.
+ // NOTE: Keep the order of BlockDocIdSets to preserve the order decided
within FilterOperatorUtils.
// TODO: Consider deciding the order based on the stats of
BlockDocIdIterators
BlockDocIdIterator[] allDocIdIterators = new
BlockDocIdIterator[numDocIdSets];
List<SortedDocIdIterator> sortedDocIdIterators = new ArrayList<>();
@@ -170,7 +171,7 @@ public final class AndDocIdSet implements
FilterBlockDocIdSet {
@Override
public long getNumEntriesScannedInFilter() {
long numEntriesScannedInFilter = 0L;
- for (FilterBlockDocIdSet child : _docIdSets) {
+ for (BlockDocIdSet child : _docIdSets) {
numEntriesScannedInFilter += child.getNumEntriesScannedInFilter();
}
return numEntriesScannedInFilter;
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ArrayBasedDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ArrayBasedDocIdSet.java
deleted file mode 100644
index 4275586d2b..0000000000
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ArrayBasedDocIdSet.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * 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.core.operator.docidsets;
-
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.operator.dociditerators.ArrayBasedDocIdIterator;
-
-
-public final class ArrayBasedDocIdSet implements BlockDocIdSet {
- private final int[] _docIds;
- private final int _searchableLength;
-
- public ArrayBasedDocIdSet(int[] docIds, int searchableLength) {
- _docIds = docIds;
- _searchableLength = searchableLength;
- }
-
- @Override
- public ArrayBasedDocIdIterator iterator() {
- return new ArrayBasedDocIdIterator(_docIds, _searchableLength);
- }
-}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/BitmapDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/BitmapDocIdSet.java
index a69ac0066a..6abf65545b 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/BitmapDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/BitmapDocIdSet.java
@@ -18,11 +18,12 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.BitmapDocIdIterator;
import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
-public class BitmapDocIdSet implements FilterBlockDocIdSet {
+public class BitmapDocIdSet implements BlockDocIdSet {
private final BitmapDocIdIterator _iterator;
public BitmapDocIdSet(ImmutableRoaringBitmap docIds, int numDocs) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/EmptyDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/EmptyDocIdSet.java
index fc78df51a3..1db64ff557 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/EmptyDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/EmptyDocIdSet.java
@@ -18,13 +18,14 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.EmptyDocIdIterator;
/**
- * Singleton class which extends {@link FilterBlockDocIdSet} that is empty,
i.e. does not contain any document.
+ * Singleton class which extends {@link BlockDocIdSet} that is empty, i.e.
does not contain any document.
*/
-public final class EmptyDocIdSet implements FilterBlockDocIdSet {
+public final class EmptyDocIdSet implements BlockDocIdSet {
private EmptyDocIdSet() {
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ExpressionFilterDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ExpressionDocIdSet.java
similarity index 88%
rename from
pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ExpressionFilterDocIdSet.java
rename to
pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ExpressionDocIdSet.java
index 3fbdf47523..70322ac525 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ExpressionFilterDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/ExpressionDocIdSet.java
@@ -19,16 +19,17 @@
package org.apache.pinot.core.operator.docidsets;
import java.util.Map;
+import org.apache.pinot.core.common.BlockDocIdSet;
import
org.apache.pinot.core.operator.dociditerators.ExpressionScanDocIdIterator;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
import org.apache.pinot.core.operator.transform.function.TransformFunction;
import org.apache.pinot.segment.spi.datasource.DataSource;
-public final class ExpressionFilterDocIdSet implements FilterBlockDocIdSet {
+public final class ExpressionDocIdSet implements BlockDocIdSet {
private final ExpressionScanDocIdIterator _docIdIterator;
- public ExpressionFilterDocIdSet(TransformFunction transformFunction,
PredicateEvaluator predicateEvaluator,
+ public ExpressionDocIdSet(TransformFunction transformFunction,
PredicateEvaluator predicateEvaluator,
Map<String, DataSource> dataSourceMap, int numDocs) {
_docIdIterator = new ExpressionScanDocIdIterator(transformFunction,
predicateEvaluator, dataSourceMap, numDocs);
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/FilterBlockDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/FilterBlockDocIdSet.java
deleted file mode 100644
index 18dab2b21c..0000000000
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/FilterBlockDocIdSet.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * 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.core.operator.docidsets;
-
-import org.apache.pinot.core.common.BlockDocIdIterator;
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.operator.dociditerators.AndDocIdIterator;
-import org.apache.pinot.core.operator.dociditerators.BitmapDocIdIterator;
-import org.apache.pinot.core.operator.dociditerators.OrDocIdIterator;
-import
org.apache.pinot.core.operator.dociditerators.RangelessBitmapDocIdIterator;
-import org.apache.pinot.core.operator.dociditerators.ScanBasedDocIdIterator;
-import org.apache.pinot.segment.spi.Constants;
-import org.roaringbitmap.RoaringBitmapWriter;
-import org.roaringbitmap.buffer.MutableRoaringBitmap;
-
-
-/**
- * The <code>FilterBlockDocIdSet</code> interface represents the
<code>BlockDocIdSet</code> returned by the
- * <code>BaseFilterBlock</code>.
- */
-public interface FilterBlockDocIdSet extends BlockDocIdSet {
-
- /**
- * Returns the number of entries (SV value contains one entry, MV value
contains multiple entries) scanned in the
- * filtering phase. This method should be called after the filtering is done.
- */
- long getNumEntriesScannedInFilter();
-
- /**
- * For scan-based FilterBlockDocIdSet, pre-scans the documents and returns a
non-scan-based FilterBlockDocIdSet.
- */
- default FilterBlockDocIdSet toNonScanDocIdSet() {
- BlockDocIdIterator docIdIterator = iterator();
-
- // NOTE: AND and OR DocIdIterator might contain scan-based DocIdIterator
- // TODO: This scan is not counted in the execution stats
- if (docIdIterator instanceof ScanBasedDocIdIterator || docIdIterator
instanceof AndDocIdIterator
- || docIdIterator instanceof OrDocIdIterator) {
- RoaringBitmapWriter<MutableRoaringBitmap> bitmapWriter =
- RoaringBitmapWriter.bufferWriter().runCompress(false).get();
- int docId;
- while ((docId = docIdIterator.next()) != Constants.EOF) {
- bitmapWriter.add(docId);
- }
- return new RangelessBitmapDocIdSet(bitmapWriter.get());
- }
-
- // NOTE: AND and OR DocIdSet might return BitmapBasedDocIdIterator after
processing the iterators. Create a new
- // DocIdSet to prevent processing the iterators again
- if (docIdIterator instanceof RangelessBitmapDocIdIterator) {
- return new RangelessBitmapDocIdSet((RangelessBitmapDocIdIterator)
docIdIterator);
- }
- if (docIdIterator instanceof BitmapDocIdIterator) {
- return new BitmapDocIdSet((BitmapDocIdIterator) docIdIterator);
- }
-
- return this;
- }
-}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
index 6f85c2b946..dc9361e0d8 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MVScanDocIdSet.java
@@ -18,12 +18,13 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.MVScanDocIdIterator;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
import org.apache.pinot.segment.spi.datasource.DataSource;
-public final class MVScanDocIdSet implements FilterBlockDocIdSet {
+public final class MVScanDocIdSet implements BlockDocIdSet {
private final MVScanDocIdIterator _docIdIterator;
public MVScanDocIdSet(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MatchAllDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MatchAllDocIdSet.java
index 8e6b1bdccb..497be02bd4 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MatchAllDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/MatchAllDocIdSet.java
@@ -18,10 +18,11 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.MatchAllDocIdIterator;
-public final class MatchAllDocIdSet implements FilterBlockDocIdSet {
+public final class MatchAllDocIdSet implements BlockDocIdSet {
private final int _numDocs;
public MatchAllDocIdSet(int numDocs) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/NotDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/NotDocIdSet.java
index 1fe6462b68..c874722e43 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/NotDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/NotDocIdSet.java
@@ -19,14 +19,15 @@
package org.apache.pinot.core.operator.docidsets;
import org.apache.pinot.core.common.BlockDocIdIterator;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.NotDocIdIterator;
-public class NotDocIdSet implements FilterBlockDocIdSet {
- private final FilterBlockDocIdSet _childDocIdSet;
+public class NotDocIdSet implements BlockDocIdSet {
+ private final BlockDocIdSet _childDocIdSet;
private final int _numDocs;
- public NotDocIdSet(FilterBlockDocIdSet childDocIdSet, int numDocs) {
+ public NotDocIdSet(BlockDocIdSet childDocIdSet, int numDocs) {
_childDocIdSet = childDocIdSet;
_numDocs = numDocs;
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/OrDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/OrDocIdSet.java
index 6ead802acf..9464d541bb 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/OrDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/OrDocIdSet.java
@@ -21,6 +21,7 @@ package org.apache.pinot.core.operator.docidsets;
import java.util.ArrayList;
import java.util.List;
import org.apache.pinot.core.common.BlockDocIdIterator;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.BitmapBasedDocIdIterator;
import org.apache.pinot.core.operator.dociditerators.BitmapDocIdIterator;
import org.apache.pinot.core.operator.dociditerators.OrDocIdIterator;
@@ -30,9 +31,9 @@ import org.roaringbitmap.buffer.MutableRoaringBitmap;
/**
- * The FilterBlockDocIdSet to perform OR on all child FilterBlockDocIdSets.
+ * The BlockDocIdSet to perform OR on all child BlockDocIdSets.
* <p>The OrBlockDocIdSet will construct the BlockDocIdIterator based on the
BlockDocIdIterators from the child
- * FilterBlockDocIdSets:
+ * BlockDocIdSets:
* <ul>
* <li>
* When there are more than one index-base BlockDocIdIterator
(SortedDocIdIterator or BitmapBasedDocIdIterator),
@@ -45,11 +46,11 @@ import org.roaringbitmap.buffer.MutableRoaringBitmap;
* </li>
* </ul>
*/
-public final class OrDocIdSet implements FilterBlockDocIdSet {
- private final List<FilterBlockDocIdSet> _docIdSets;
+public final class OrDocIdSet implements BlockDocIdSet {
+ private final List<BlockDocIdSet> _docIdSets;
private final int _numDocs;
- public OrDocIdSet(List<FilterBlockDocIdSet> docIdSets, int numDocs) {
+ public OrDocIdSet(List<BlockDocIdSet> docIdSets, int numDocs) {
_docIdSets = docIdSets;
_numDocs = numDocs;
}
@@ -112,7 +113,7 @@ public final class OrDocIdSet implements
FilterBlockDocIdSet {
@Override
public long getNumEntriesScannedInFilter() {
long numEntriesScannedInFilter = 0L;
- for (FilterBlockDocIdSet docIdSet : _docIdSets) {
+ for (BlockDocIdSet docIdSet : _docIdSets) {
numEntriesScannedInFilter += docIdSet.getNumEntriesScannedInFilter();
}
return numEntriesScannedInFilter;
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/RangelessBitmapDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/RangelessBitmapDocIdSet.java
index 463a2df84a..20fb0af6f5 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/RangelessBitmapDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/RangelessBitmapDocIdSet.java
@@ -18,11 +18,12 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import org.apache.pinot.core.common.BlockDocIdSet;
import
org.apache.pinot.core.operator.dociditerators.RangelessBitmapDocIdIterator;
import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
-public class RangelessBitmapDocIdSet implements FilterBlockDocIdSet {
+public class RangelessBitmapDocIdSet implements BlockDocIdSet {
private final RangelessBitmapDocIdIterator _iterator;
public RangelessBitmapDocIdSet(ImmutableRoaringBitmap docIds) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
index 9167304561..85ca55bacc 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SVScanDocIdSet.java
@@ -18,13 +18,14 @@
*/
package org.apache.pinot.core.operator.docidsets;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.SVScanDocIdIterator;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
import org.apache.pinot.segment.spi.datasource.DataSource;
import org.apache.pinot.segment.spi.index.reader.NullValueVectorReader;
-public final class SVScanDocIdSet implements FilterBlockDocIdSet {
+public final class SVScanDocIdSet implements BlockDocIdSet {
private final SVScanDocIdIterator _docIdIterator;
public SVScanDocIdSet(PredicateEvaluator predicateEvaluator, DataSource
dataSource, int numDocs,
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SortedDocIdSet.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SortedDocIdSet.java
index 2c57caf235..280f9daeb9 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SortedDocIdSet.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/docidsets/SortedDocIdSet.java
@@ -19,11 +19,12 @@
package org.apache.pinot.core.operator.docidsets;
import java.util.List;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.dociditerators.SortedDocIdIterator;
import org.apache.pinot.spi.utils.Pairs.IntPair;
-public final class SortedDocIdSet implements FilterBlockDocIdSet {
+public final class SortedDocIdSet implements BlockDocIdSet {
private final List<IntPair> _docIdRanges;
// NOTE: No need to track numDocs because sorted index can only apply to
ImmutableSegment, so the document ids are
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/AndFilterOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/AndFilterOperator.java
index de2062fd6c..38da261c52 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/AndFilterOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/AndFilterOperator.java
@@ -21,10 +21,10 @@ package org.apache.pinot.core.operator.filter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.operator.blocks.FilterBlock;
import org.apache.pinot.core.operator.docidsets.AndDocIdSet;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
import org.apache.pinot.spi.trace.Tracing;
import org.roaringbitmap.buffer.BufferFastAggregation;
import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
@@ -48,11 +48,11 @@ public class AndFilterOperator extends BaseFilterOperator {
@Override
protected FilterBlock getNextBlock() {
Tracing.activeRecording().setNumChildren(_filterOperators.size());
- List<FilterBlockDocIdSet> filterBlockDocIdSets = new
ArrayList<>(_filterOperators.size());
+ List<BlockDocIdSet> blockDocIdSets = new
ArrayList<>(_filterOperators.size());
for (BaseFilterOperator filterOperator : _filterOperators) {
- filterBlockDocIdSets.add(filterOperator.nextBlock().getBlockDocIdSet());
+ blockDocIdSets.add(filterOperator.nextBlock().getBlockDocIdSet());
}
- return new FilterBlock(new AndDocIdSet(filterBlockDocIdSets,
_queryOptions));
+ return new FilterBlock(new AndDocIdSet(blockDocIdSets, _queryOptions));
}
@Override
@@ -77,7 +77,6 @@ public class AndFilterOperator extends BaseFilterOperator {
return BufferFastAggregation.andCardinality(bitmaps);
}
-
@Override
public List<Operator> getChildOperators() {
return new ArrayList<>(_filterOperators);
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/CombinedFilterOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/CombinedFilterOperator.java
index 89b856d9b6..c0fa2fa04f 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/CombinedFilterOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/CombinedFilterOperator.java
@@ -21,10 +21,10 @@ package org.apache.pinot.core.operator.filter;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.operator.blocks.FilterBlock;
import org.apache.pinot.core.operator.docidsets.AndDocIdSet;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
import org.apache.pinot.spi.trace.Tracing;
@@ -59,8 +59,8 @@ public class CombinedFilterOperator extends
BaseFilterOperator {
@Override
protected FilterBlock getNextBlock() {
Tracing.activeRecording().setNumChildren(2);
- FilterBlockDocIdSet mainFilterDocIdSet =
_mainFilterOperator.nextBlock().getNonScanFilterBLockDocIdSet();
- FilterBlockDocIdSet subFilterDocIdSet =
_subFilterOperator.nextBlock().getBlockDocIdSet();
+ BlockDocIdSet mainFilterDocIdSet =
_mainFilterOperator.nextBlock().getNonScanFilterBLockDocIdSet();
+ BlockDocIdSet subFilterDocIdSet =
_subFilterOperator.nextBlock().getBlockDocIdSet();
return new FilterBlock(new AndDocIdSet(Arrays.asList(mainFilterDocIdSet,
subFilterDocIdSet), _queryOptions));
}
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ExpressionFilterOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ExpressionFilterOperator.java
index 5d3390fc46..50e8ebb7e7 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ExpressionFilterOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/ExpressionFilterOperator.java
@@ -28,7 +28,7 @@ import
org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.request.context.predicate.Predicate;
import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.operator.blocks.FilterBlock;
-import org.apache.pinot.core.operator.docidsets.ExpressionFilterDocIdSet;
+import org.apache.pinot.core.operator.docidsets.ExpressionDocIdSet;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
import
org.apache.pinot.core.operator.filter.predicate.PredicateEvaluatorProvider;
import org.apache.pinot.core.operator.transform.function.TransformFunction;
@@ -65,8 +65,7 @@ public class ExpressionFilterOperator extends
BaseFilterOperator {
@Override
protected FilterBlock getNextBlock() {
- return new FilterBlock(
- new ExpressionFilterDocIdSet(_transformFunction, _predicateEvaluator,
_dataSourceMap, _numDocs));
+ return new FilterBlock(new ExpressionDocIdSet(_transformFunction,
_predicateEvaluator, _dataSourceMap, _numDocs));
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/OrFilterOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/OrFilterOperator.java
index 3d262d5f01..114703ec06 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/OrFilterOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/OrFilterOperator.java
@@ -20,9 +20,9 @@ package org.apache.pinot.core.operator.filter;
import java.util.ArrayList;
import java.util.List;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.operator.blocks.FilterBlock;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
import org.apache.pinot.core.operator.docidsets.OrDocIdSet;
import org.apache.pinot.spi.trace.Tracing;
import org.roaringbitmap.buffer.BufferFastAggregation;
@@ -30,8 +30,8 @@ import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
public class OrFilterOperator extends BaseFilterOperator {
-
private static final String EXPLAIN_NAME = "FILTER_OR";
+
private final List<BaseFilterOperator> _filterOperators;
private final int _numDocs;
@@ -43,14 +43,13 @@ public class OrFilterOperator extends BaseFilterOperator {
@Override
protected FilterBlock getNextBlock() {
Tracing.activeRecording().setNumChildren(_filterOperators.size());
- List<FilterBlockDocIdSet> filterBlockDocIdSets = new
ArrayList<>(_filterOperators.size());
+ List<BlockDocIdSet> blockDocIdSets = new
ArrayList<>(_filterOperators.size());
for (BaseFilterOperator filterOperator : _filterOperators) {
- filterBlockDocIdSets.add(filterOperator.nextBlock().getBlockDocIdSet());
+ blockDocIdSets.add(filterOperator.nextBlock().getBlockDocIdSet());
}
- return new FilterBlock(new OrDocIdSet(filterBlockDocIdSets, _numDocs));
+ return new FilterBlock(new OrDocIdSet(blockDocIdSets, _numDocs));
}
-
@Override
public String toExplainString() {
return EXPLAIN_NAME;
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/RangeIndexBasedFilterOperator.java
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/RangeIndexBasedFilterOperator.java
index 277fa4429f..244718998c 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/RangeIndexBasedFilterOperator.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/operator/filter/RangeIndexBasedFilterOperator.java
@@ -21,11 +21,11 @@ package org.apache.pinot.core.operator.filter;
import java.util.Collections;
import java.util.List;
import org.apache.pinot.common.request.context.predicate.Predicate;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.operator.blocks.FilterBlock;
import org.apache.pinot.core.operator.dociditerators.ScanBasedDocIdIterator;
import org.apache.pinot.core.operator.docidsets.BitmapDocIdSet;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
import org.apache.pinot.core.operator.filter.predicate.PredicateEvaluator;
import org.apache.pinot.core.operator.filter.predicate.traits.DoubleRange;
import org.apache.pinot.core.operator.filter.predicate.traits.DoubleValue;
@@ -95,7 +95,7 @@ public class RangeIndexBasedFilterOperator extends
BaseFilterOperator {
// Need to scan the first and last range as they might be partially matched
ScanBasedFilterOperator scanBasedFilterOperator =
new ScanBasedFilterOperator(_predicateEvaluator, _dataSource,
_numDocs, false);
- FilterBlockDocIdSet scanBasedDocIdSet =
scanBasedFilterOperator.getNextBlock().getBlockDocIdSet();
+ BlockDocIdSet scanBasedDocIdSet =
scanBasedFilterOperator.getNextBlock().getBlockDocIdSet();
MutableRoaringBitmap docIds = ((ScanBasedDocIdIterator)
scanBasedDocIdSet.iterator()).applyAnd(partialMatches);
if (matches != null) {
docIds.or(matches);
diff --git
a/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/TestFilterOperator.java
b/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/TestFilterOperator.java
index 4bcc938118..94526dfc51 100644
---
a/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/TestFilterOperator.java
+++
b/pinot-core/src/test/java/org/apache/pinot/core/operator/filter/TestFilterOperator.java
@@ -21,9 +21,9 @@ package org.apache.pinot.core.operator.filter;
import java.util.Collections;
import java.util.List;
import org.apache.pinot.core.common.BlockDocIdIterator;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.common.Operator;
import org.apache.pinot.core.operator.blocks.FilterBlock;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
import org.apache.pinot.segment.spi.Constants;
@@ -38,7 +38,7 @@ public class TestFilterOperator extends BaseFilterOperator {
@Override
protected FilterBlock getNextBlock() {
- return new FilterBlock(new FilterBlockDocIdSet() {
+ return new FilterBlock(new BlockDocIdSet() {
@Override
public BlockDocIdIterator iterator() {
return new BlockDocIdIterator() {
diff --git
a/pinot-core/src/test/java/org/apache/pinot/core/plan/FilterPlanNodeTest.java
b/pinot-core/src/test/java/org/apache/pinot/core/plan/FilterPlanNodeTest.java
index 8a44e83075..b123f2a807 100644
---
a/pinot-core/src/test/java/org/apache/pinot/core/plan/FilterPlanNodeTest.java
+++
b/pinot-core/src/test/java/org/apache/pinot/core/plan/FilterPlanNodeTest.java
@@ -20,8 +20,8 @@ package org.apache.pinot.core.plan;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.pinot.core.common.BlockDocIdIterator;
+import org.apache.pinot.core.common.BlockDocIdSet;
import org.apache.pinot.core.operator.blocks.FilterBlock;
-import org.apache.pinot.core.operator.docidsets.FilterBlockDocIdSet;
import org.apache.pinot.core.operator.filter.BaseFilterOperator;
import org.apache.pinot.core.query.request.context.QueryContext;
import org.apache.pinot.segment.spi.Constants;
@@ -80,7 +80,7 @@ public class FilterPlanNodeTest {
BaseFilterOperator op = node.run();
int numDocsFiltered = 0;
FilterBlock block = op.nextBlock();
- FilterBlockDocIdSet blockIds = block.getBlockDocIdSet();
+ BlockDocIdSet blockIds = block.getBlockDocIdSet();
BlockDocIdIterator it = blockIds.iterator();
while (it.next() != Constants.EOF) {
numDocsFiltered++;
diff --git
a/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
b/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
index efe2196bb0..f9bb00980c 100644
---
a/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
+++
b/pinot-core/src/test/java/org/apache/pinot/core/startree/v2/BaseStarTreeV2Test.java
@@ -33,7 +33,6 @@ import org.apache.commons.io.FileUtils;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.BlockDocIdIterator;
import org.apache.pinot.core.plan.FilterPlanNode;
-import org.apache.pinot.core.plan.PlanNode;
import org.apache.pinot.core.query.aggregation.function.AggregationFunction;
import org.apache.pinot.core.query.request.context.QueryContext;
import
org.apache.pinot.core.query.request.context.utils.QueryContextConverterUtils;
@@ -256,7 +255,7 @@ abstract class BaseStarTreeV2Test<R, A> {
assertNotNull(predicateEvaluatorsMap);
// Extract values with star-tree
- PlanNode starTreeFilterPlanNode =
+ StarTreeFilterPlanNode starTreeFilterPlanNode =
new StarTreeFilterPlanNode(queryContext, _starTreeV2,
predicateEvaluatorsMap, groupByColumnSet);
List<ForwardIndexReader> starTreeAggregationColumnReaders = new
ArrayList<>(numAggregations);
for (AggregationFunctionColumnPair aggregationFunctionColumnPair :
aggregationFunctionColumnPairs) {
@@ -271,7 +270,7 @@ abstract class BaseStarTreeV2Test<R, A> {
computeStarTreeResult(starTreeFilterPlanNode,
starTreeAggregationColumnReaders, starTreeGroupByColumnReaders);
// Extract values without star-tree
- PlanNode nonStarTreeFilterPlanNode = new FilterPlanNode(_indexSegment,
queryContext);
+ FilterPlanNode nonStarTreeFilterPlanNode = new
FilterPlanNode(_indexSegment, queryContext);
List<ForwardIndexReader> nonStarTreeAggregationColumnReaders = new
ArrayList<>(numAggregations);
List<Dictionary> nonStarTreeAggregationColumnDictionaries = new
ArrayList<>(numAggregations);
for (AggregationFunctionColumnPair aggregationFunctionColumnPair :
aggregationFunctionColumnPairs) {
@@ -305,7 +304,7 @@ abstract class BaseStarTreeV2Test<R, A> {
}
}
- private Map<List<Integer>, List<Object>> computeStarTreeResult(PlanNode
starTreeFilterPlanNode,
+ private Map<List<Integer>, List<Object>>
computeStarTreeResult(StarTreeFilterPlanNode starTreeFilterPlanNode,
List<ForwardIndexReader> aggregationColumnReaders,
List<ForwardIndexReader> groupByColumnReaders)
throws IOException {
Map<List<Integer>, List<Object>> result = new HashMap<>();
@@ -372,7 +371,7 @@ abstract class BaseStarTreeV2Test<R, A> {
}
}
- private Map<List<Integer>, List<Object>> computeNonStarTreeResult(PlanNode
nonStarTreeFilterPlanNode,
+ private Map<List<Integer>, List<Object>>
computeNonStarTreeResult(FilterPlanNode nonStarTreeFilterPlanNode,
List<ForwardIndexReader> aggregationColumnReaders, List<Dictionary>
aggregationColumnDictionaries,
List<ForwardIndexReader> groupByColumnReaders)
throws IOException {
diff --git
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/blocks/TransferableBlock.java
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/blocks/TransferableBlock.java
index 99be9e9105..64e4dc31ae 100644
---
a/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/blocks/TransferableBlock.java
+++
b/pinot-query-runtime/src/main/java/org/apache/pinot/query/runtime/blocks/TransferableBlock.java
@@ -29,10 +29,6 @@ import org.apache.pinot.common.datablock.MetadataBlock;
import org.apache.pinot.common.datablock.RowDataBlock;
import org.apache.pinot.common.utils.DataSchema;
import org.apache.pinot.core.common.Block;
-import org.apache.pinot.core.common.BlockDocIdSet;
-import org.apache.pinot.core.common.BlockDocIdValueSet;
-import org.apache.pinot.core.common.BlockMetadata;
-import org.apache.pinot.core.common.BlockValSet;
import org.apache.pinot.core.common.ObjectSerDeUtils;
import org.apache.pinot.core.common.datablock.DataBlockBuilder;
import org.apache.pinot.query.runtime.operator.OperatorStats;
@@ -192,24 +188,4 @@ public class TransferableBlock implements Block {
MetadataBlock metadata = (MetadataBlock) _dataBlock;
return metadata.getType() == type;
}
-
- @Override
- public BlockValSet getBlockValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdValueSet getBlockDocIdValueSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockDocIdSet getBlockDocIdSet() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public BlockMetadata getMetadata() {
- throw new UnsupportedOperationException();
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]