This is an automated email from the ASF dual-hosted git repository.
mhubail pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
The following commit(s) were added to refs/heads/master by this push:
new 7edce9eed0 [ASTERIXDB-3404][RT] Do not apply columnar filter on
antimatter
7edce9eed0 is described below
commit 7edce9eed01b5eb8e9dd101a6d817243c76ecb53
Author: Wail Alkowaileet <[email protected]>
AuthorDate: Wed May 22 15:47:40 2024 -0700
[ASTERIXDB-3404][RT] Do not apply columnar filter on antimatter
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Ignore antimatter tuples when processing columnar filters
Change-Id: Ica578dac11eba9311d65c47f38cc119811a7dcad
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18309
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Wail Alkowaileet <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
---
.../column/filter/delete/delete.001.ddl.sqlpp} | 19 +++---
.../column/filter/delete/delete.002.update.sqlpp} | 15 ++---
.../column/filter/delete/delete.003.get.http} | 13 +---
.../column/filter/delete/delete.004.update.sqlpp} | 13 +---
.../column/filter/delete/delete.005.update.sqlpp} | 16 ++---
.../column/filter/delete/delete.006.get.http} | 13 +---
.../column/filter/delete/delete.007.query.sqlpp} | 13 ++--
.../column/filter/delete/delete.008.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.009.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.010.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.011.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.012.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.013.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.014.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.015.query.sqlpp} | 14 ++---
.../column/filter/delete/delete.003.regexadm | 1 +
.../column/filter/delete/delete.006.regexadm | 1 +
.../results/column/filter/delete/delete.007.adm | 16 +++++
.../results/column/filter/delete/delete.008.adm | 5 ++
.../results/column/filter/delete/delete.009.adm | 6 ++
.../results/column/filter/delete/delete.010.adm | 5 ++
.../results/column/filter/delete/delete.011.adm | 11 ++++
.../results/column/filter/delete/delete.012.adm | 10 +++
.../results/column/filter/delete/delete.013.adm | 11 ++++
.../results/column/filter/delete/delete.014.adm | 0
.../results/column/filter/delete/delete.015.adm | 16 +++++
.../src/test/resources/runtimets/sqlpp_queries.xml | 5 ++
.../column/filter/FalseColumnFilterEvaluator.java | 5 ++
.../column/filter/FilterAccessorProvider.java | 8 +++
.../column/filter/TrueColumnFilterEvaluator.java | 5 ++
.../iterable/IColumnIterableFilterEvaluator.java | 2 +
.../evaluator/AbstractIterableFilterEvaluator.java | 64 ++++++++++++++++---
.../evaluator/ColumnIterableFilterEvaluator.java | 24 +-------
.../ColumnIterableFilterEvaluatorFactory.java | 3 +
.../ColumnarRepeatedIterableFilterEvaluator.java | 24 +-------
.../column/operation/query/ColumnAssembler.java | 2 +-
.../column/tuple/QueryColumnTupleReference.java | 3 +-
.../tuple/QueryColumnWithMetaTupleReference.java | 11 ++--
.../column/values/IColumnValuesReaderFactory.java | 2 +-
.../values/reader/AbstractColumnValuesReader.java | 2 +-
.../values/reader/ColumnValueReaderFactory.java | 3 +-
.../values/reader/PrimitiveColumnValuesReader.java | 2 +-
.../values/reader/value/key/LevelKeyReader.java | 71 ++++++++++++++++++++++
43 files changed, 337 insertions(+), 195 deletions(-)
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.001.ddl.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.001.ddl.sqlpp
index 67eb135d4d..a271778586 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.001.ddl.sqlpp
@@ -16,15 +16,16 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+DROP DATAVERSE test if exists;
+CREATE DATAVERSE test;
+USE test;
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
+CREATE TYPE ColumnType AS {
+ id: int
+};
- int getTupleIndex();
-
- void setAt(int index) throws HyracksDataException;
-}
+CREATE DATASET ColumnDataset(ColumnType)
+PRIMARY KEY id WITH {
+ "storage-format": {"format" : "column"}
+};
\ No newline at end of file
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.002.update.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.002.update.sqlpp
index 67eb135d4d..23f368ae52 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.002.update.sqlpp
@@ -16,15 +16,10 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
-
- int getTupleIndex();
-
- void setAt(int index) throws HyracksDataException;
-}
+UPSERT INTO ColumnDataset (
+ SELECT VALUE {"id": x, "a": x}
+ FROM RANGE (1, 32) x
+);
\ No newline at end of file
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.003.get.http
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.003.get.http
index 67eb135d4d..57d830aed0 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.003.get.http
@@ -16,15 +16,4 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
-
- int getTupleIndex();
-
- void setAt(int index) throws HyracksDataException;
-}
+/connector?dataverseName=test&datasetName=ColumnDataset
\ No newline at end of file
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.004.update.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.004.update.sqlpp
index 67eb135d4d..8a84d36537 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.004.update.sqlpp
@@ -16,15 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
-
- int getTupleIndex();
-
- void setAt(int index) throws HyracksDataException;
-}
+DELETE FROM ColumnDataset
+WHERE a MOD 2 = 0;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.005.update.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.005.update.sqlpp
index 67eb135d4d..37f50b5720 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.005.update.sqlpp
@@ -16,15 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
-
- int getTupleIndex();
-
- void setAt(int index) throws HyracksDataException;
-}
+UPSERT INTO ColumnDataset (
+ SELECT VALUE {"id": x, "a": x}
+ FROM RANGE (1, 32) x
+ WHERE x MOD 2 = 1
+);
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.006.get.http
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.006.get.http
index 67eb135d4d..57d830aed0 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.006.get.http
@@ -16,15 +16,4 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
-
- int getTupleIndex();
-
- void setAt(int index) throws HyracksDataException;
-}
+/connector?dataverseName=test&datasetName=ColumnDataset
\ No newline at end of file
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.007.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.007.query.sqlpp
index 67eb135d4d..f7f794f7f8 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.007.query.sqlpp
@@ -16,15 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.008.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.008.query.sqlpp
index 67eb135d4d..3c55c72053 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.008.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 = 0
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.009.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.009.query.sqlpp
index 67eb135d4d..8ef187a04a 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.009.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 = 1
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.010.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.010.query.sqlpp
index 67eb135d4d..f9d28cedd9 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.010.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 = 2
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.011.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.011.query.sqlpp
index 67eb135d4d..61c0def517 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.011.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 != 0
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.012.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.012.query.sqlpp
index 67eb135d4d..ce57d42445 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.012.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 != 1
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.013.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.013.query.sqlpp
index 67eb135d4d..3d5765b49e 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.013.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 3 != 2
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.014.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.014.query.sqlpp
index 67eb135d4d..8f5f165e94 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.014.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 2 = 0
+ORDER by d.id;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.015.query.sqlpp
similarity index 69%
copy from
asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
copy to
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.015.query.sqlpp
index 67eb135d4d..a1b871c0a1 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/filter/delete/delete.015.query.sqlpp
@@ -16,15 +16,13 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.asterix.column.filter.iterable;
-import org.apache.asterix.column.filter.IColumnFilterEvaluator;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
+USE test;
+SET `compiler.column.filter` "true";
-public interface IColumnIterableFilterEvaluator extends IColumnFilterEvaluator
{
- void reset();
- int getTupleIndex();
- void setAt(int index) throws HyracksDataException;
-}
+SELECT VALUE d
+FROM ColumnDataset d
+WHERE a MOD 2 != 0
+ORDER by d.id;
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.003.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.003.regexadm
new file mode 100644
index 0000000000..81882d4ca9
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.003.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"ColumnType","open":true,"fields":[{"id":{"type":"AInt64"}}]},"splits":[\E.*\Q]}\E
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.006.regexadm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.006.regexadm
new file mode 100644
index 0000000000..81882d4ca9
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.006.regexadm
@@ -0,0 +1 @@
+\Q{"keys":"id","type":{"type":"org.apache.asterix.om.types.ARecordType","name":"ColumnType","open":true,"fields":[{"id":{"type":"AInt64"}}]},"splits":[\E.*\Q]}\E
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.007.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.007.adm
new file mode 100644
index 0000000000..9b5244cb2a
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.007.adm
@@ -0,0 +1,16 @@
+{ "id": 1, "a": 1 }
+{ "id": 3, "a": 3 }
+{ "id": 5, "a": 5 }
+{ "id": 7, "a": 7 }
+{ "id": 9, "a": 9 }
+{ "id": 11, "a": 11 }
+{ "id": 13, "a": 13 }
+{ "id": 15, "a": 15 }
+{ "id": 17, "a": 17 }
+{ "id": 19, "a": 19 }
+{ "id": 21, "a": 21 }
+{ "id": 23, "a": 23 }
+{ "id": 25, "a": 25 }
+{ "id": 27, "a": 27 }
+{ "id": 29, "a": 29 }
+{ "id": 31, "a": 31 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.008.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.008.adm
new file mode 100644
index 0000000000..1e05777ba6
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.008.adm
@@ -0,0 +1,5 @@
+{ "id": 3, "a": 3 }
+{ "id": 9, "a": 9 }
+{ "id": 15, "a": 15 }
+{ "id": 21, "a": 21 }
+{ "id": 27, "a": 27 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.009.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.009.adm
new file mode 100644
index 0000000000..ac77f3904b
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.009.adm
@@ -0,0 +1,6 @@
+{ "id": 1, "a": 1 }
+{ "id": 7, "a": 7 }
+{ "id": 13, "a": 13 }
+{ "id": 19, "a": 19 }
+{ "id": 25, "a": 25 }
+{ "id": 31, "a": 31 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.010.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.010.adm
new file mode 100644
index 0000000000..c13bcec61d
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.010.adm
@@ -0,0 +1,5 @@
+{ "id": 5, "a": 5 }
+{ "id": 11, "a": 11 }
+{ "id": 17, "a": 17 }
+{ "id": 23, "a": 23 }
+{ "id": 29, "a": 29 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.011.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.011.adm
new file mode 100644
index 0000000000..864fabe8c0
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.011.adm
@@ -0,0 +1,11 @@
+{ "id": 1, "a": 1 }
+{ "id": 5, "a": 5 }
+{ "id": 7, "a": 7 }
+{ "id": 11, "a": 11 }
+{ "id": 13, "a": 13 }
+{ "id": 17, "a": 17 }
+{ "id": 19, "a": 19 }
+{ "id": 23, "a": 23 }
+{ "id": 25, "a": 25 }
+{ "id": 29, "a": 29 }
+{ "id": 31, "a": 31 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.012.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.012.adm
new file mode 100644
index 0000000000..138272079e
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.012.adm
@@ -0,0 +1,10 @@
+{ "id": 3, "a": 3 }
+{ "id": 5, "a": 5 }
+{ "id": 9, "a": 9 }
+{ "id": 11, "a": 11 }
+{ "id": 15, "a": 15 }
+{ "id": 17, "a": 17 }
+{ "id": 21, "a": 21 }
+{ "id": 23, "a": 23 }
+{ "id": 27, "a": 27 }
+{ "id": 29, "a": 29 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.013.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.013.adm
new file mode 100644
index 0000000000..5ab1d997db
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.013.adm
@@ -0,0 +1,11 @@
+{ "id": 1, "a": 1 }
+{ "id": 3, "a": 3 }
+{ "id": 7, "a": 7 }
+{ "id": 9, "a": 9 }
+{ "id": 13, "a": 13 }
+{ "id": 15, "a": 15 }
+{ "id": 19, "a": 19 }
+{ "id": 21, "a": 21 }
+{ "id": 25, "a": 25 }
+{ "id": 27, "a": 27 }
+{ "id": 31, "a": 31 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.014.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.014.adm
new file mode 100644
index 0000000000..e69de29bb2
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.015.adm
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.015.adm
new file mode 100644
index 0000000000..9b5244cb2a
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/filter/delete/delete.015.adm
@@ -0,0 +1,16 @@
+{ "id": 1, "a": 1 }
+{ "id": 3, "a": 3 }
+{ "id": 5, "a": 5 }
+{ "id": 7, "a": 7 }
+{ "id": 9, "a": 9 }
+{ "id": 11, "a": 11 }
+{ "id": 13, "a": 13 }
+{ "id": 15, "a": 15 }
+{ "id": 17, "a": 17 }
+{ "id": 19, "a": 19 }
+{ "id": 21, "a": 21 }
+{ "id": 23, "a": 23 }
+{ "id": 25, "a": 25 }
+{ "id": 27, "a": 27 }
+{ "id": 29, "a": 29 }
+{ "id": 31, "a": 31 }
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
index 6e19f2b106..7e2259b7ec 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -16388,6 +16388,11 @@
<expected-warn>ASX0051: Incomparable input types: array and boolean
(in line 27, at column 8)</expected-warn>
</compilation-unit>
</test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/delete">
+ <output-dir compare="Text">filter/delete</output-dir>
+ </compilation-unit>
+ </test-case>
<test-case FilePath="column">
<compilation-unit name="filter/not-in_every">
<output-dir compare="Text">filter/not-in_every</output-dir>
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
index f53208bb2a..51f125bd3f 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FalseColumnFilterEvaluator.java
@@ -41,6 +41,11 @@ public class FalseColumnFilterEvaluator implements
IColumnIterableFilterEvaluato
return -1;
}
+ @Override
+ public int getValueIndex() {
+ return -1;
+ }
+
@Override
public void setAt(int index) {
// NoOp
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
index af64325f60..db1862c3dd 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/FilterAccessorProvider.java
@@ -52,6 +52,7 @@ public class FilterAccessorProvider {
private final ObjectSchemaNode root;
private final ObjectSchemaNode metaRoot;
private final SchemaClipperVisitor clipperVisitor;
+ private final IColumnValuesReaderFactory readerFactory;
private final PathExtractorVisitor pathExtractorVisitor;
private final Map<ARecordType, PrimitiveSchemaNode> cachedNodes;
private final List<IColumnRangeFilterValueAccessor> filterAccessors;
@@ -68,6 +69,7 @@ public class FilterAccessorProvider {
this.root = root;
this.metaRoot = metaRoot;
this.clipperVisitor = clipperVisitor;
+ this.readerFactory = readerFactory;
this.valueGetterFactory = valueGetterFactory;
pathExtractorVisitor = new PathExtractorVisitor(readerFactory);
cachedNodes = new HashMap<>();
@@ -122,6 +124,12 @@ public class FilterAccessorProvider {
return new UnionColumnFilterValueAccessorEvaluator(unionReaders,
valueGetters);
}
+ public void initializeFilterReaders() {
+ // This primary key level reader will help us avoid skipping filter
values when an anti-matter is encountered
+ IColumnValuesReader primaryKeyLevelReader =
readerFactory.createValueReader(ATypeTag.MISSING, 0, 1, true);
+ filterColumnReaders.add(0, primaryKeyLevelReader);
+ }
+
public List<IColumnRangeFilterValueAccessor> getFilterAccessors() {
return filterAccessors;
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
index 86ccab3aa4..0841e015e6 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/TrueColumnFilterEvaluator.java
@@ -45,6 +45,11 @@ public class TrueColumnFilterEvaluator implements
IColumnIterableFilterEvaluator
return -1;
}
+ @Override
+ public int getValueIndex() {
+ return -1;
+ }
+
@Override
public void setAt(int index) {
// NoOp
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
index 67eb135d4d..1d2838e397 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/IColumnIterableFilterEvaluator.java
@@ -26,5 +26,7 @@ public interface IColumnIterableFilterEvaluator extends
IColumnFilterEvaluator {
int getTupleIndex();
+ int getValueIndex();
+
void setAt(int index) throws HyracksDataException;
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
index 9ebb7b72f8..a992090cd4 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/AbstractIterableFilterEvaluator.java
@@ -18,7 +18,10 @@
*/
package org.apache.asterix.column.filter.iterable.evaluator;
+import java.util.List;
+
import
org.apache.asterix.column.filter.iterable.IColumnIterableFilterEvaluator;
+import org.apache.asterix.column.values.IColumnValuesReader;
import org.apache.asterix.formats.nontagged.BinaryBooleanInspector;
import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -26,33 +29,78 @@ import org.apache.hyracks.data.std.primitive.VoidPointable;
abstract class AbstractIterableFilterEvaluator implements
IColumnIterableFilterEvaluator {
protected final IScalarEvaluator evaluator;
+ protected final IColumnValuesReader primaryKeyReader;
+ protected final List<IColumnValuesReader> readers;
private final VoidPointable booleanResult;
- protected int index;
+ protected int tupleIndex;
+ protected int valueIndex;
- AbstractIterableFilterEvaluator(IScalarEvaluator evaluator) {
+ AbstractIterableFilterEvaluator(IScalarEvaluator evaluator,
List<IColumnValuesReader> readers) {
this.evaluator = evaluator;
+ this.primaryKeyReader = readers.get(0);
+ this.readers = readers;
this.booleanResult = new VoidPointable();
reset();
}
@Override
public final void reset() {
- index = -1;
+ tupleIndex = -1;
+ valueIndex = -1;
}
@Override
public final int getTupleIndex() {
- return index;
+ return tupleIndex;
+ }
+
+ @Override
+ public int getValueIndex() {
+ return valueIndex;
}
@Override
public final void setAt(int index) throws HyracksDataException {
- int count = index - this.index;
- // count - 1 as we want to evaluate the value at 'index'
- skip(count - 1);
+ // -1 as we want to evaluate the value at 'index'
+ int count = index - this.tupleIndex - 1;
+ if (count > 0) {
+ tupleIndex += count - 1;
+ // skip(int) returns the number of skipped values (i.e., without
anti-matters)
+ valueIndex += skip(count - 1);
+ }
}
- protected abstract void skip(int count) throws HyracksDataException;
+ protected final boolean next() throws HyracksDataException {
+ // start from 1 as 0 is reserved for the primary key level reader
+ boolean advance = true;
+ while (advance) {
+ advance = primaryKeyReader.next() && primaryKeyReader.isMissing();
+ // Advance tuple index
+ tupleIndex++;
+ }
+
+ // Advance value index
+ valueIndex++;
+ for (int i = 1; i < readers.size(); i++) {
+ if (!readers.get(i).next()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ protected final int skip(int count) throws HyracksDataException {
+ // Count non-anti-matter tuples
+ int nonAntiMatterCount = 0;
+ for (int i = 0; i < count; i++) {
+ primaryKeyReader.next();
+ nonAntiMatterCount += primaryKeyReader.isValue() ? 0 : 1;
+ }
+ for (int i = 1; nonAntiMatterCount > 0 && i < readers.size(); i++) {
+ readers.get(i).skip(nonAntiMatterCount);
+ }
+ return nonAntiMatterCount;
+ }
protected final boolean inspect() throws HyracksDataException {
evaluator.evaluate(null, booleanResult);
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
index 2878429da6..094b2bfd42 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluator.java
@@ -25,11 +25,9 @@ import
org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
public class ColumnIterableFilterEvaluator extends
AbstractIterableFilterEvaluator {
- private final List<IColumnValuesReader> readers;
public ColumnIterableFilterEvaluator(IScalarEvaluator evaluator,
List<IColumnValuesReader> readers) {
- super(evaluator);
- this.readers = readers;
+ super(evaluator, readers);
}
@Override
@@ -37,28 +35,12 @@ public class ColumnIterableFilterEvaluator extends
AbstractIterableFilterEvaluat
boolean result = false;
while (!result && next()) {
result = inspect();
- index++;
}
if (!result) {
// Last tuple does not satisfy the condition
- index++;
+ tupleIndex++;
+ valueIndex++;
}
return result;
}
-
- private boolean next() throws HyracksDataException {
- for (int i = 0; i < readers.size(); i++) {
- if (!readers.get(i).next()) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- public void skip(int count) throws HyracksDataException {
- for (int i = 0; count > 0 && i < readers.size(); i++) {
- readers.get(i).skip(count);
- }
- }
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
index 44441ddb86..2fd92e87a7 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnIterableFilterEvaluatorFactory.java
@@ -48,6 +48,9 @@ public class ColumnIterableFilterEvaluatorFactory implements
IColumnIterableFilt
throw new NullPointerException("Readers are empty");
}
+ // Initialize column filter readers by including a primary key level
reader
+ filterAccessorProvider.initializeFilterReaders();
+
if (readers.stream().anyMatch(IColumnValuesReader::isRepeated)) {
return new ColumnarRepeatedIterableFilterEvaluator(evaluator,
readers);
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
index 7db9f65d18..9a1f07f2cb 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/filter/iterable/evaluator/ColumnarRepeatedIterableFilterEvaluator.java
@@ -26,12 +26,10 @@ import
org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
import org.apache.hyracks.api.exceptions.HyracksDataException;
public class ColumnarRepeatedIterableFilterEvaluator extends
AbstractIterableFilterEvaluator {
- private final List<IColumnValuesReader> readers;
private final List<IColumnValuesReader> repeatedReaders;
ColumnarRepeatedIterableFilterEvaluator(IScalarEvaluator evaluator,
List<IColumnValuesReader> readers) {
- super(evaluator);
- this.readers = readers;
+ super(evaluator, readers);
repeatedReaders = new ArrayList<>();
for (IColumnValuesReader reader : readers) {
if (reader.isRepeated()) {
@@ -47,11 +45,11 @@ public class ColumnarRepeatedIterableFilterEvaluator
extends AbstractIterableFil
// TODO handle nested repetition (x = unnest --> y = unnest -->
select (x = 1 AND y = 3))
// TODO we need a way to 'rewind' y for each x
result = evaluateRepeated();
- index++;
}
if (!result) {
// Last tuple does not satisfy the condition
- index++;
+ tupleIndex++;
+ valueIndex++;
}
return result;
}
@@ -73,20 +71,4 @@ public class ColumnarRepeatedIterableFilterEvaluator extends
AbstractIterableFil
} while (doNext);
return result;
}
-
- private boolean next() throws HyracksDataException {
- for (int i = 0; i < readers.size(); i++) {
- if (!readers.get(i).next()) {
- return false;
- }
- }
- return true;
- }
-
- @Override
- protected void skip(int count) throws HyracksDataException {
- for (int i = 0; count > 0 && i < readers.size(); i++) {
- readers.get(i).skip(count);
- }
- }
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
index 835bb50f63..e619ecf99a 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/operation/query/ColumnAssembler.java
@@ -110,7 +110,7 @@ public final class ColumnAssembler {
}
public int skip(int count) throws HyracksDataException {
- if (numberOfTuples == 0) {
+ if (numberOfTuples == 0 || count == 0) {
// Avoid advancing tupleIndex and numberOfSkips if a mega leaf
node is filtered out
return 0;
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
index 19cb753300..7ba0aae5cd 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnTupleReference.java
@@ -157,7 +157,8 @@ public final class QueryColumnTupleReference extends
AbstractAsterixColumnTupleR
// index == -1 if the normalized filter indicated that a mega leaf node
// is filtered
if (index == tupleIndex) {
- assembler.setAt(index);
+ // setAt in the assembler expect the value index (i.e., tupleCount
- antiMatterCount)
+ assembler.setAt(columnFilterEvaluator.getValueIndex());
// set the next tuple index that satisfies the filter
columnFilterEvaluator.evaluate();
return assembler.nextValue();
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
index fc1f1d2b16..1e4aaeaadb 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/tuple/QueryColumnWithMetaTupleReference.java
@@ -176,15 +176,18 @@ public final class QueryColumnWithMetaTupleReference
extends AbstractAsterixColu
private IValueReference getFilteredAssembledValue() throws
HyracksDataException {
int index = columnFilterEvaluator.getTupleIndex();
- // index == -1 if the normalized filter indicated that a mega leaf node
- // is filtered
+
+ // index == -1 if the normalized filter indicated that a mega leaf
node is filtered
if (index == tupleIndex) {
- assembler.setAt(index);
- metaAssembler.setAt(index);
+ // setAt in the assembler expect the value index (i.e., tupleCount
- antiMatterCount)
+ int valueIndex = columnFilterEvaluator.getValueIndex();
+ assembler.setAt(valueIndex);
+ metaAssembler.setAt(valueIndex);
// set the next tuple index that satisfies the filter
columnFilterEvaluator.evaluate();
return assembler.nextValue();
}
+
return MissingValueGetter.MISSING;
}
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
index 7c41512239..c32de2d055 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/IColumnValuesReaderFactory.java
@@ -52,7 +52,7 @@ public interface IColumnValuesReaderFactory {
*
* @param input column metadata info
* @return columnar reader
- * @see PathInfoSerializer#writePathInfo(ATypeTag, int, boolean) for more
information on how the path info is serialized
+ * @see PathInfoSerializer#writePathInfo(ATypeTag, int, boolean) how it
serializes the path info
*/
IColumnValuesReader createValueReader(DataInput input) throws IOException;
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
index 133c744314..b03da57b32 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/AbstractColumnValuesReader.java
@@ -57,7 +57,7 @@ abstract class AbstractColumnValuesReader implements
IColumnValuesReader {
AbstractColumnValuesReader(AbstractValueReader valueReader, int
columnIndex, int maxLevel, boolean primaryKey) {
this.valueReader = valueReader;
this.columnIndex = columnIndex;
- this.maxLevel = valueReader.getTypeTag() == ATypeTag.MISSING ?
Integer.MAX_VALUE : maxLevel;
+ this.maxLevel = !primaryKey && valueReader.getTypeTag() ==
ATypeTag.MISSING ? Integer.MAX_VALUE : maxLevel;
definitionLevels = new
ParquetRunLengthBitPackingHybridDecoder(ColumnValuesUtil.getBitWidth(maxLevel));
valuesStream = primaryKey ? new ByteBufferInputStream() : new
MultiByteBufferInputStream();
this.primaryKey = primaryKey;
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
index 34111385d1..d054b13c05 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/ColumnValueReaderFactory.java
@@ -33,6 +33,7 @@ import
org.apache.asterix.column.values.reader.value.StringValueReader;
import org.apache.asterix.column.values.reader.value.UUIDValueReader;
import org.apache.asterix.column.values.reader.value.key.DoubleKeyValueReader;
import org.apache.asterix.column.values.reader.value.key.FloatKeyValueReader;
+import org.apache.asterix.column.values.reader.value.key.LevelKeyReader;
import org.apache.asterix.column.values.reader.value.key.LongKeyValueReader;
import org.apache.asterix.column.values.reader.value.key.StringKeyValueReader;
import org.apache.asterix.column.values.reader.value.key.UUIDKeyValueReader;
@@ -70,7 +71,7 @@ public class ColumnValueReaderFactory implements
IColumnValuesReaderFactory {
switch (typeTag) {
case MISSING:
case NULL:
- return NoOpValueReader.INSTANCE;
+ return primaryKey ? LevelKeyReader.INSTANCE :
NoOpValueReader.INSTANCE;
case BOOLEAN:
return new BooleanValueReader();
case TINYINT:
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
index 5f28995da6..f1c29293d8 100644
---
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/PrimitiveColumnValuesReader.java
@@ -39,7 +39,7 @@ public final class PrimitiveColumnValuesReader extends
AbstractColumnValuesReade
*/
private final boolean primaryKey;
- public PrimitiveColumnValuesReader(AbstractValueReader reader, int
columnIndex, int maxLevel, boolean primaryKey) {
+ PrimitiveColumnValuesReader(AbstractValueReader reader, int columnIndex,
int maxLevel, boolean primaryKey) {
super(reader, columnIndex, maxLevel, primaryKey);
this.primaryKey = primaryKey;
}
diff --git
a/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/value/key/LevelKeyReader.java
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/value/key/LevelKeyReader.java
new file mode 100644
index 0000000000..dddd0fa537
--- /dev/null
+++
b/asterixdb/asterix-column/src/main/java/org/apache/asterix/column/values/reader/value/key/LevelKeyReader.java
@@ -0,0 +1,71 @@
+/*
+ * 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.asterix.column.values.reader.value.key;
+
+import java.io.IOException;
+
+import org.apache.asterix.column.bytes.stream.in.AbstractBytesInputStream;
+import org.apache.asterix.column.values.IColumnKeyValueReader;
+import org.apache.asterix.column.values.reader.value.AbstractValueReader;
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.api.IValueReference;
+
+/**
+ * This singleton is used to ignore the key value and provide a way to read
the key's level using
+ * {@link org.apache.asterix.column.values.reader.PrimitiveColumnValuesReader}
+ *
+ * @see
org.apache.asterix.column.filter.iterable.evaluator.ColumnIterableFilterEvaluatorFactory
+ */
+public final class LevelKeyReader extends AbstractValueReader implements
IColumnKeyValueReader {
+ public static final LevelKeyReader INSTANCE = new LevelKeyReader();
+
+ private LevelKeyReader() {
+ }
+
+ @Override
+ public int reset(int startIndex, int skipCount) throws
HyracksDataException {
+ return 0;
+ }
+
+ @Override
+ public IValueReference getValue(int index) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+
+ @Override
+ public void init(AbstractBytesInputStream in, int tupleCount) throws
IOException {
+ // NoOp
+ }
+
+ @Override
+ public void nextValue() throws HyracksDataException {
+ // NoOp
+ }
+
+ @Override
+ public ATypeTag getTypeTag() {
+ return ATypeTag.MISSING;
+ }
+
+ @Override
+ public int compareTo(AbstractValueReader o) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+}