You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2025/01/18 02:16:07 UTC
(asterixdb) branch master updated (e27dfd58ea -> d3881ce8b3)
This is an automated email from the ASF dual-hosted git repository.
mblow pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
from e27dfd58ea Merge "Merge branch 'gerrit/goldfish' into 'master'"
new bd2809b1af [ASTERIXDB-3539][STO] Failure to evaluate filter in case of antimatter
new 87f19a1e8f [ASTERIXDB-3540][COMP] Fixed calculation of expected schema for pushdown
new b7ee9398f5 Merge branch 'gerrit/stabilization-1cffa2bc98' into 'gerrit/goldfish'
new d3881ce8b3 Merge branch 'gerrit/goldfish' into 'master'
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../pushdown/schema/ExpectedSchemaBuilder.java | 32 +-
.../ASTERIXDB-3539.001.ddl.sqlpp} | 0
.../ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp | 30 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp | 22 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp | 33 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp | 37 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp | 23 ++
.../assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm | 1 +
.../ASTERIXDB-3540/ASTERIXDB-3540.003.plan | 18 +
.../ASTERIXDB-3540/ASTERIXDB-3540.004.plan | 18 +
.../ASTERIXDB-3540/ASTERIXDB-3540.005.adm} | 0
.../ASTERIXDB-3540/ASTERIXDB-3540.006.adm} | 0
.../src/test/resources/runtimets/sqlpp_queries.xml | 10 +
.../runtimets/testsuite_single_partition_sqlpp.xml | 387 +++++++++++++++++++++
.../column/tuple/QueryColumnTupleReference.java | 3 +
.../tuple/QueryColumnWithMetaTupleReference.java | 3 +
.../lsm/btree/column/api/IColumnTupleIterator.java | 7 +
.../impls/lsm/LSMColumnBTreeRangeSearchCursor.java | 4 +-
.../lsm/tuples/AbstractColumnTupleReference.java | 13 +
23 files changed, 718 insertions(+), 15 deletions(-)
copy asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/{ASTERIXDB-3491-2/ASTERIXDB-3491.001.ddl.sqlpp => ASTERIXDB-3539/ASTERIXDB-3539.001.ddl.sqlpp} (100%)
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/results/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.plan
create mode 100644 asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.plan
copy asterixdb/asterix-app/src/test/resources/runtimets/results/{external-dataset/common/parquet/ASTERIXDB-3540/ASTERIXDB-3540.03.adm => column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.adm} (100%)
copy asterixdb/asterix-app/src/test/resources/runtimets/results/{external-dataset/common/parquet/ASTERIXDB-3540/ASTERIXDB-3540.03.adm => column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.adm} (100%)
(asterixdb) 03/04: Merge branch 'gerrit/stabilization-1cffa2bc98' into 'gerrit/goldfish'
Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit b7ee9398f5fbe8159b8dc5f5e819dc6defd403bb
Merge: de0acbf578 87f19a1e8f
Author: Michael Blow <mi...@couchbase.com>
AuthorDate: Fri Jan 17 08:53:34 2025 -0500
Merge branch 'gerrit/stabilization-1cffa2bc98' into 'gerrit/goldfish'
Ext-ref: MB-64561
Change-Id: I5bf1f7bd24a4af26211a3014655b8b712f50db32
.../pushdown/schema/ExpectedSchemaBuilder.java | 32 +-
.../ASTERIXDB-3539/ASTERIXDB-3539.001.ddl.sqlpp | 28 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp | 30 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp | 22 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp | 33 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp | 37 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp | 23 ++
.../assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm | 1 +
.../ASTERIXDB-3540/ASTERIXDB-3540.003.plan | 20 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.004.plan | 20 ++
.../pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.adm | 1 +
.../pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.adm | 1 +
.../src/test/resources/runtimets/sqlpp_queries.xml | 10 +
.../runtimets/testsuite_single_partition_sqlpp.xml | 387 +++++++++++++++++++++
.../column/tuple/QueryColumnTupleReference.java | 3 +
.../tuple/QueryColumnWithMetaTupleReference.java | 3 +
.../lsm/btree/column/api/IColumnTupleIterator.java | 7 +
.../impls/lsm/LSMColumnBTreeRangeSearchCursor.java | 4 +-
.../lsm/tuples/AbstractColumnTupleReference.java | 13 +
23 files changed, 752 insertions(+), 15 deletions(-)
(asterixdb) 01/04: [ASTERIXDB-3539][STO] Failure to evaluate filter in case of antimatter
Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit bd2809b1afe0f48f59b112d63c80a8cb4c33d5b9
Author: Ritik Raj <ra...@gmail.com>
AuthorDate: Tue Dec 24 03:30:14 2024 +0530
[ASTERIXDB-3539][STO] Failure to evaluate filter in case of antimatter
- user model changes: no
- storage format changes: no
- interface changes: yes
Details:
When a tuple deleted in a subsequent delete operation
is located in the middle of non-deleted entries,
the rangeCursor increments the tupleIndex by one.
This results in a mismatch between the ColumnFilter tuple pointer
and the rangeCursor tuple pointer, leading to missing tuples during processing.
Ext-ref: MB-64715
Change-Id: If1afb009ba5c9ca076bdb2dee1cdf332c2f2df59
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19224
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>
---
.../ASTERIXDB-3539/ASTERIXDB-3539.001.ddl.sqlpp | 28 ++++++++++++++++++++
.../ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp | 30 ++++++++++++++++++++++
.../ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp | 22 ++++++++++++++++
.../ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp | 23 +++++++++++++++++
.../assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm | 1 +
.../src/test/resources/runtimets/sqlpp_queries.xml | 5 ++++
.../column/tuple/QueryColumnTupleReference.java | 3 +++
.../tuple/QueryColumnWithMetaTupleReference.java | 3 +++
.../lsm/btree/column/api/IColumnTupleIterator.java | 7 +++++
.../impls/lsm/LSMColumnBTreeRangeSearchCursor.java | 4 ++-
.../lsm/tuples/AbstractColumnTupleReference.java | 13 ++++++++++
11 files changed, 138 insertions(+), 1 deletion(-)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.001.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.001.ddl.sqlpp
new file mode 100644
index 0000000000..d151eb1317
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.001.ddl.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * 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.
+ */
+
+ DROP DATAVERSE test IF EXISTS;
+ CREATE DATAVERSE test;
+
+ USE test;
+
+ CREATE DATASET ColumnDataset
+ PRIMARY KEY (uid:int) WITH {
+ "storage-format": {"format": "column"}
+ };
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp
new file mode 100644
index 0000000000..7828d12b36
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+
+
+USE test;
+UPSERT INTO ColumnDataset(
+ {"uid": 1, "a": [{"x": "aaaaaaaaaazzzz"}, {"x": "aaaaaaaaaaabzzzz"}, {"x": "aaaaaaaaaaaaabzzzzzzzz"}]},
+ {"uid": 2, "a": [{"x": "aaaaaaaaaazzzzextra"}, {"x": "aaaaaaaaaaabzzzzextra"}, {"x": "aaaaaaaaaaaaabzzzzzzzzextra"}]},
+ {"uid": 3, "a": [{"x": "aaaaaaaaaazzzzextra"}, {"x": "aaaaaaaaaaabzzzzextra"}, {"x": "aaaaaaaaaaaaabzzzzzzzzextra"}]},
+ {"uid": 4, "a": [{"x": "aaaaaaaaaazzzzextra"}, {"x": "aaaaaaaaaaabzzzzextra"}, {"x": "aaaaaaaaaaaaabzzzzzzzzextra"}]},
+ {"uid": 5, "a": [{"x": "aaaaaaaaaazzzzextra"}, {"x": "aaaaaaaaaaabzzzzextra"}, {"x": "aaaaaaaaaaaaabzzzzzzzzextra"}]},
+ {"uid": 6, "a": [{"x": "aaaaaaaaaazzzzextra"}, {"x": "aaaaaaaaaaabzzzzextra"}, {"x": "aaaaaaaaaaaaabzzzzzzzzextra"}]},
+ {"uid": 7, "a": [{"x": "aaaaaaaaaazzzzextra"}, {"x": "aaaaaaaaaaabzzzzextra"}, {"x": "aaaaaaaaaaaaabzzzzzzzz"}]}
+);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp
new file mode 100644
index 0000000000..5337d9bfc8
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp
@@ -0,0 +1,22 @@
+/*
+ * 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.
+ */
+
+USE test;
+DELETE FROM ColumnDataset
+WHERE uid >= 2 AND uid <= 6;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp
new file mode 100644
index 0000000000..b7fac3cd7b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+ USE test;
+ SELECT VALUE a.x
+ FROM ColumnDataset c, c.a a
+ WHERE a.x = "aaaaaaaaaazzzzextra";
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm
new file mode 100644
index 0000000000..7328549937
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm
@@ -0,0 +1 @@
+"aaaaaaaaaazzzzextra"
\ No newline at end of file
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 422d913760..5476877fc7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -16368,6 +16368,11 @@
<output-dir compare="Text">assembly/ASTERIXDB-3491-7</output-dir>
</compilation-unit>
</test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3539">
+ <output-dir compare="Text">assembly/ASTERIXDB-3539</output-dir>
+ </compilation-unit>
+ </test-case>
<test-case FilePath="column">
<compilation-unit name="filter/ASTERIXDB-3499">
<output-dir compare="Text">filter/ASTERIXDB-3499</output-dir>
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 e1dddf1632..64ac0a278f 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
@@ -162,11 +162,14 @@ public final class QueryColumnTupleReference extends AbstractAsterixColumnTupleR
// index == -1 if the normalized filter indicated that a mega leaf node
// is filtered
if (index == tupleIndex) {
+ antimatterGap = 0;
// 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();
+ } else {
+ antimatterGap++;
}
return MissingValueGetter.MISSING;
}
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 e7402c3651..4202f47a9a 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
@@ -186,12 +186,15 @@ public final class QueryColumnWithMetaTupleReference extends AbstractAsterixColu
// index == -1 if the normalized filter indicated that a mega leaf node is filtered
if (index == tupleIndex) {
// setAt in the assembler expect the value index (i.e., tupleCount - antiMatterCount)
+ antimatterGap = 0;
int valueIndex = columnFilterEvaluator.getValueIndex();
assembler.setAt(valueIndex);
metaAssembler.setAt(valueIndex);
// set the next tuple index that satisfies the filter
columnFilterEvaluator.evaluate();
return assembler.nextValue();
+ } else {
+ antimatterGap++;
}
return MissingValueGetter.MISSING;
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/IColumnTupleIterator.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/IColumnTupleIterator.java
index 4034906f25..4b9cc99a8f 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/IColumnTupleIterator.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/api/IColumnTupleIterator.java
@@ -108,4 +108,11 @@ public interface IColumnTupleIterator extends ILSMTreeTupleReference, Comparable
void unpinColumnsPages() throws HyracksDataException;
void close();
+
+ /**
+ * @return the gap between the lastAssembledTuple index and the current antimatter tuple index
+ */
+ int getAntimatterGap();
+
+ void resetAntimatterGap();
}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTreeRangeSearchCursor.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTreeRangeSearchCursor.java
index 41126e2c39..cee77eddf8 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTreeRangeSearchCursor.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/LSMColumnBTreeRangeSearchCursor.java
@@ -86,7 +86,9 @@ public class LSMColumnBTreeRangeSearchCursor extends LSMBTreeRangeSearchCursor {
IColumnTupleIterator columnTuple = (IColumnTupleIterator) e.getTuple();
if (!columnTuple.isAntimatter()) {
// Skip non-key columns
- columnTuple.skip(1);
+ int antiMatterGap = columnTuple.getAntimatterGap();
+ columnTuple.skip(antiMatterGap + 1);
+ columnTuple.resetAntimatterGap();
}
}
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
index f30007d9f9..1937ffc65d 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/impls/lsm/tuples/AbstractColumnTupleReference.java
@@ -46,6 +46,7 @@ public abstract class AbstractColumnTupleReference implements IColumnTupleIterat
private final int numberOfPrimaryKeys;
private int endIndex;
protected int tupleIndex;
+ protected int antimatterGap;
// For logging
private final LongSet pinnedPages;
@@ -102,6 +103,7 @@ public abstract class AbstractColumnTupleReference implements IColumnTupleIterat
@Override
public final void newPage() throws HyracksDataException {
tupleIndex = 0;
+ antimatterGap = 0;
ByteBuffer pageZero = frame.getBuffer();
pageZero.clear();
pageZero.position(HEADER_SIZE);
@@ -119,6 +121,7 @@ public abstract class AbstractColumnTupleReference implements IColumnTupleIterat
@Override
public final void reset(int startIndex, int endIndex) throws HyracksDataException {
tupleIndex = startIndex;
+ antimatterGap = 0;
this.endIndex = endIndex;
ByteBuffer pageZero = frame.getBuffer();
int numberOfTuples = frame.getTupleCount();
@@ -293,4 +296,14 @@ public abstract class AbstractColumnTupleReference implements IColumnTupleIterat
public final void resetByTupleIndex(ITreeIndexFrame frame, int tupleIndex) {
throw new UnsupportedOperationException(UNSUPPORTED_OPERATION_MSG);
}
+
+ @Override
+ public int getAntimatterGap() {
+ return antimatterGap;
+ }
+
+ @Override
+ public void resetAntimatterGap() {
+ antimatterGap = 0;
+ }
}
(asterixdb) 02/04: [ASTERIXDB-3540][COMP] Fixed calculation of expected schema for pushdown
Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 87f19a1e8f9bad67135cdbb134f4090be9465fad
Author: Ritik Raj <ra...@gmail.com>
AuthorDate: Fri Dec 27 13:04:41 2024 +0530
[ASTERIXDB-3540][COMP] Fixed calculation of expected schema for pushdown
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
if the getField expr consisted of a function which needs to be
evaluated at runtime, the pushdown computer was not evaluating
those expression leading to incorrect computation.
eg:
1. `field-access-by-name`(t.r.p, x.y.age_field)
2. `field-access-by-name`(t.r.p, substring(x.y.age_field, 0, 4))
Ext-ref: MB-64721
Change-Id: I9b665cf86e7dee20c847a883554f5f32ecd0671f
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19226
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mh...@apache.org>
---
.../pushdown/schema/ExpectedSchemaBuilder.java | 69 ++++
.../ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp | 33 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp | 37 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.003.plan | 20 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.004.plan | 20 ++
.../pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.adm | 1 +
.../pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.adm | 1 +
.../src/test/resources/runtimets/sqlpp_queries.xml | 5 +
.../runtimets/testsuite_single_partition_sqlpp.xml | 387 +++++++++++++++++++++
13 files changed, 665 insertions(+)
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
index e442d64ae9..f4b6cb0c55 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/pushdown/schema/ExpectedSchemaBuilder.java
@@ -56,6 +56,11 @@ public class ExpectedSchemaBuilder {
public boolean setSchemaFromExpression(AbstractFunctionCallExpression expr, LogicalVariable producedVar,
IVariableTypeEnvironment typeEnv) throws AlgebricksException {
+ return buildExpectedSchemaNodes(expr, typeEnv, producedVar);
+ }
+
+ private boolean setSchemaFromCalculatedExpression(AbstractFunctionCallExpression expr, LogicalVariable producedVar,
+ IVariableTypeEnvironment typeEnv) throws AlgebricksException {
//Parent always nested
AbstractComplexExpectedSchemaNode parent = (AbstractComplexExpectedSchemaNode) buildNestedNode(expr, typeEnv);
if (parent != null) {
@@ -104,6 +109,70 @@ public class ExpectedSchemaBuilder {
return varToNode.get(variable);
}
+ private boolean buildExpectedSchemaNodes(ILogicalExpression expr, IVariableTypeEnvironment typeEnv,
+ LogicalVariable producedVar) throws AlgebricksException {
+ return buildNestedNodes(expr, typeEnv, producedVar);
+ }
+
+ private boolean buildNestedNodes(ILogicalExpression expr, IVariableTypeEnvironment typeEnv,
+ LogicalVariable producedVar) throws AlgebricksException {
+ //The current node expression
+ boolean changed = false;
+ if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+ return false;
+ }
+
+ AbstractFunctionCallExpression myExpr = (AbstractFunctionCallExpression) expr;
+ if (!SUPPORTED_FUNCTIONS.contains(myExpr.getFunctionIdentifier()) || noArgsOrFirstArgIsConstant(myExpr)) {
+ // Check if the function consists of the Supported Functions
+ for (Mutable<ILogicalExpression> arg : myExpr.getArguments()) {
+ changed |= buildNestedNodes(arg.getValue(), typeEnv, producedVar);
+ }
+
+ return changed;
+ }
+
+ // if the child is not a function expression, then just one node.
+ if (BuiltinFunctions.ARRAY_STAR.equals(myExpr.getFunctionIdentifier())
+ || BuiltinFunctions.SCAN_COLLECTION.equals(myExpr.getFunctionIdentifier())) {
+ // these supported function won't have second child
+ IExpectedSchemaNode expectedSchemaNode = buildNestedNode(expr, typeEnv);
+ if (expectedSchemaNode != null) {
+ changed |=
+ setSchemaFromCalculatedExpression((AbstractFunctionCallExpression) expr, producedVar, typeEnv);
+ }
+ } else {
+ ILogicalExpression childExpr = myExpr.getArguments().get(1).getValue();
+ if (childExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+ // must be a variable or constant
+ IExpectedSchemaNode expectedSchemaNode = buildNestedNode(expr, typeEnv);
+ if (expectedSchemaNode != null) {
+ changed |= setSchemaFromCalculatedExpression((AbstractFunctionCallExpression) expr, producedVar,
+ typeEnv);
+ }
+ } else {
+ // as the childExpr is a function.
+ // if the function had been evaluated at compile time, it would have been
+ // evaluated at this stage of compilation.
+ // eg: field-access(t.r.p, substring("name",2,4))
+ // this will be evaluated to field-access(t.r.p, "me") at compile time itself.
+
+ // since the execution reached this branch, this means the childExpr
+ // need to be evaluated at runtime, hence the childExpr should also be checked
+ // for possible pushdown.
+ // eg: field-access(t.r.p, substring(x.y.age_field, 0, 4))
+ ILogicalExpression parentExpr = myExpr.getArguments().get(0).getValue();
+ IExpectedSchemaNode parentExpectedNode = buildNestedNode(parentExpr, typeEnv);
+ if (parentExpectedNode != null) {
+ changed |= setSchemaFromCalculatedExpression((AbstractFunctionCallExpression) parentExpr,
+ producedVar, typeEnv);
+ }
+ changed |= buildNestedNodes(childExpr, typeEnv, producedVar);
+ }
+ }
+ return changed;
+ }
+
private IExpectedSchemaNode buildNestedNode(ILogicalExpression expr, IVariableTypeEnvironment typeEnv)
throws AlgebricksException {
//The current node expression
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp
new file mode 100644
index 0000000000..8a95edc189
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+
+DROP DATAVERSE test IF EXISTS;
+CREATE DATAVERSE test;
+
+USE test;
+
+CREATE TYPE ColumnType AS {
+ id: string
+};
+
+
+CREATE DATASET ColumnDataset(ColumnType)
+PRIMARY KEY id WITH {
+ "storage-format": {"format" : "column"}
+};
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp
new file mode 100644
index 0000000000..9bf4aadbab
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp
@@ -0,0 +1,37 @@
+/*
+ * 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.
+ */
+
+USE test;
+ UPSERT INTO ColumnDataset(
+ {
+ "id": "1",
+ "name": "Monica",
+ "x": {
+ "y": {
+ "age_field": "age"
+ }
+ },
+ "t": {
+ "r": {
+ "p": {
+ "age": "26"
+ }
+ }
+ }
+ });
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp
new file mode 100644
index 0000000000..93ab4cd09a
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+USE test;
+
+EXPLAIN SELECT t.r.g, `field-access-by-name`(t.r.p, x.y.age_field)
+FROM ColumnDataset;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp
new file mode 100644
index 0000000000..75c01678b6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+USE test;
+
+EXPLAIN SELECT t.r.g, `field-access-by-name`(t.r.p, substring(x.y.age_field, 0, 4))
+FROM ColumnDataset;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp
new file mode 100644
index 0000000000..4ce0ec5115
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+USE test;
+
+SELECT t.r.g, `field-access-by-name`(t.r.p, x.y.age_field)
+FROM ColumnDataset;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp
new file mode 100644
index 0000000000..e0fbee0e1d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+USE test;
+
+SELECT t.r.g, `field-access-by-name`(t.r.p, substring(x.y.age_field, 0, 4))
+FROM ColumnDataset;
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.plan
new file mode 100644
index 0000000000..40cfb0053c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.plan
@@ -0,0 +1,20 @@
+distribute result [$$25] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+-- DISTRIBUTE_RESULT |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ project ([$$25]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ assign [$$25] <- [{"g": $$26.getField("g"), "$1": $$26.getField("p").getField("$$ColumnDataset.getField("x").getField("y").getField("age_field")")}] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
+ assign [$$26] <- [$$ColumnDataset.getField("t").getField("r")] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$ColumnDataset]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$27, $$ColumnDataset] <- test.ColumnDataset project ({t:{r:{p:any,g:any}},x:{y:{age_field:any}}}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.plan b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.plan
new file mode 100644
index 0000000000..7e0e44494e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.plan
@@ -0,0 +1,20 @@
+distribute result [$$26] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+-- DISTRIBUTE_RESULT |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ project ([$$26]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ assign [$$26] <- [{"g": $$27.getField("g"), "$1": $$27.getField("p").getField("substring($$ColumnDataset.getField("x").getField("y").getField("age_field"), 0, 4)")}] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
+ assign [$$27] <- [$$ColumnDataset.getField("t").getField("r")] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
+ project ([$$ColumnDataset]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- STREAM_PROJECT |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ data-scan []<-[$$28, $$ColumnDataset] <- test.ColumnDataset project ({t:{r:{p:any,g:any}},x:{y:{age_field:any}}}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- DATASOURCE_SCAN |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
+ empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.adm
new file mode 100644
index 0000000000..224633561b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.adm
@@ -0,0 +1 @@
+{ "$1": "26" }
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.adm
new file mode 100644
index 0000000000..224633561b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.adm
@@ -0,0 +1 @@
+{ "$1": "26" }
\ No newline at end of file
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 5476877fc7..b5ea9efe7c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml
@@ -16493,6 +16493,11 @@
<output-dir compare="Text">pushdown/array-access-pushdown</output-dir>
</compilation-unit>
</test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/ASTERIXDB-3540">
+ <output-dir compare="Text">pushdown/ASTERIXDB-3540</output-dir>
+ </compilation-unit>
+ </test-case>
<test-case FilePath="column">
<compilation-unit name="pushdown/field-access-pushdown">
<output-dir compare="Text">pushdown/field-access-pushdown</output-dir>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_single_partition_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_single_partition_sqlpp.xml
index 3dcfe8d467..dc35948db7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_single_partition_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_single_partition_sqlpp.xml
@@ -19,6 +19,91 @@
!-->
<test-suite xmlns="urn:xml.testframework.asterix.apache.org" ResultOffsetPath="results" QueryOffsetPath="queries_sqlpp" QueryFileExtension=".sqlpp">
<test-group name="column">
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/001">
+ <output-dir compare="Text">assembly/001</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/002">
+ <output-dir compare="Text">assembly/002</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/003">
+ <output-dir compare="Text">assembly/003</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/004">
+ <output-dir compare="Text">assembly/004</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3491">
+ <output-dir compare="Text">assembly/ASTERIXDB-3491</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3504">
+ <output-dir compare="Text">assembly/ASTERIXDB-3504</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3491-2">
+ <output-dir compare="Text">assembly/ASTERIXDB-3491-2</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3491-3">
+ <output-dir compare="Text">assembly/ASTERIXDB-3491-3</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3491-4">
+ <output-dir compare="Text">assembly/ASTERIXDB-3491-4</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3491-5">
+ <output-dir compare="Text">assembly/ASTERIXDB-3491-5</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3491-6">
+ <output-dir compare="Text">assembly/ASTERIXDB-3491-6</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3491-7">
+ <output-dir compare="Text">assembly/ASTERIXDB-3491-7</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="assembly/ASTERIXDB-3539">
+ <output-dir compare="Text">assembly/ASTERIXDB-3539</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/ASTERIXDB-3499">
+ <output-dir compare="Text">filter/ASTERIXDB-3499</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/ASTERIXDB-3502">
+ <output-dir compare="Text">filter/ASTERIXDB-3502</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="delete/001">
+ <output-dir compare="Text">delete/001</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="delete/002">
+ <output-dir compare="Text">delete/002</output-dir>
+ </compilation-unit>
+ </test-case>
<test-case FilePath="column">
<compilation-unit name="delete/003">
<output-dir compare="Text">delete/003</output-dir>
@@ -34,5 +119,307 @@
<output-dir compare="Text">delete/005</output-dir>
</compilation-unit>
</test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="nested-pk">
+ <output-dir compare="Text">nested-pk</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="composite-pks">
+ <output-dir compare="Text">composite-pks</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="meta/meta_after_gby">
+ <output-dir compare="Text">meta/meta_after_gby</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="meta/meta_in_with_clause">
+ <output-dir compare="Text">meta/meta_in_with_clause</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="meta/resolving_pk_with_meta">
+ <output-dir compare="Text">meta/resolving_pk_with_meta</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/001">
+ <output-dir compare="Text">missing-null-values/001</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/002">
+ <output-dir compare="Text">missing-null-values/002</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/003">
+ <output-dir compare="Text">missing-null-values/003</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/003">
+ <output-dir compare="Text">missing-null-values/003</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/005">
+ <output-dir compare="Text">missing-null-values/005</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/006">
+ <output-dir compare="Text">missing-null-values/006</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/007">
+ <output-dir compare="Text">missing-null-values/007</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="missing-null-values/008">
+ <output-dir compare="Text">missing-null-values/008</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="empty-array/001">
+ <output-dir compare="Text">empty-array/001</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="empty-array/002">
+ <output-dir compare="Text">empty-array/002</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="empty-array/003">
+ <output-dir compare="Text">empty-array/003</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/array-access-pushdown">
+ <output-dir compare="Text">pushdown/array-access-pushdown</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/field-access-pushdown">
+ <output-dir compare="Text">pushdown/field-access-pushdown</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/ASTERIXDB-3540">
+ <output-dir compare="Text">pushdown/ASTERIXDB-3540</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/heterogeneous-access-pushdown">
+ <output-dir compare="Text">pushdown/heterogeneous-access-pushdown</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/join/condition-pushdown">
+ <output-dir compare="Text">pushdown/join/condition-pushdown</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/join/left-outer">
+ <output-dir compare="Text">pushdown/join/left-outer</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/other-pushdowns">
+ <output-dir compare="Text">pushdown/other-pushdowns</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="pushdown/replicate">
+ <output-dir compare="Text">pushdown/replicate</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="select-count-one-field">
+ <output-dir compare="Text">select-count-one-field</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="upsert/001">
+ <output-dir compare="Text">upsert/001</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="upsert/002">
+ <output-dir compare="Text">upsert/002</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="upsert/003">
+ <output-dir compare="Text">upsert/003</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column" check-warnings="true">
+ <compilation-unit name="filter/001">
+ <output-dir compare="Text">filter/001</output-dir>
+ <expected-warn>ASX0051: Incomparable input types: string and bigint (in line 30, at column 23)</expected-warn>
+ <expected-warn>ASX0051: Incomparable input types: bigint and string (in line 29, at column 38)</expected-warn>
+ <expected-warn>ASX0051: Incomparable input types: array and bigint (in line 28, at column 15)</expected-warn>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column" check-warnings="true">
+ <compilation-unit name="filter/002">
+ <output-dir compare="Text">filter/002</output-dir>
+ <expected-warn>ASX0051: Incomparable input types: string and bigint (in line 29, at column 23)</expected-warn>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/003">
+ <output-dir compare="Text">filter/003</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/004">
+ <output-dir compare="Text">filter/004</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/005">
+ <output-dir compare="Text">filter/005</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/006">
+ <output-dir compare="Text">filter/006</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/007">
+ <output-dir compare="Text">filter/007</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/008">
+ <output-dir compare="Text">filter/008</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column" check-warnings="true">
+ <compilation-unit name="filter/boolean">
+ <output-dir compare="Text">filter/boolean</output-dir>
+ <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>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column" check-warnings="true">
+ <compilation-unit name="filter/non-existing-fields">
+ <output-dir compare="Text">filter/non-existing-fields</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/sql-compat">
+ <output-dir compare="Text">filter/sql-compat</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="filter/subplan">
+ <output-dir compare="Text">filter/subplan</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="big-object">
+ <output-dir compare="Text">big-object</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/array-index/use-case-1">
+ <output-dir compare="Text">secondary-index/array-index/use-case-1</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/array-index/use-case-2">
+ <output-dir compare="Text">secondary-index/array-index/use-case-2</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/array-index/use-case-3">
+ <output-dir compare="Text">secondary-index/array-index/use-case-3</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/array-index/use-case-4">
+ <output-dir compare="Text">secondary-index/array-index/use-case-4</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/array-index/with-additional-atomic-index">
+ <output-dir compare="Text">secondary-index/array-index/with-additional-atomic-index</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/array-index/with-composite-sk">
+ <output-dir compare="Text">secondary-index/array-index/with-composite-sk</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/index-with-meta">
+ <output-dir compare="Text">secondary-index/index-with-meta</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/create-index/after-bulkload">
+ <output-dir compare="Text">secondary-index/create-index/after-bulkload</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/create-index/after-insert">
+ <output-dir compare="Text">secondary-index/create-index/after-insert</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/create-index/after-upsert-with-meta">
+ <output-dir compare="Text">secondary-index/create-index/after-upsert-with-meta</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="secondary-index/outer-join">
+ <output-dir compare="Text">secondary-index/outer-join</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="metadata">
+ <output-dir compare="Text">metadata</output-dir>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="supported-types">
+ <output-dir compare="Text">supported-types</output-dir>
+ <expected-error>ASX0067: Type(s) '[datetime]' are not supported in columnar storage format. Supported types are [bigint, float, double, string, boolean, uuid]</expected-error>
+ <expected-error>ASX0067: Type(s) '[datetime, date, time, duration]' are not supported in columnar storage format. Supported types are [bigint, float, double, string, boolean, uuid]</expected-error>
+ <expected-error>ASX0067: Type(s) '[datetime]' are not supported in columnar storage format. Supported types are [bigint, float, double, string, boolean, uuid]</expected-error>
+ <expected-error>ASX0067: Type(s) '[datetime]' are not supported in columnar storage format. Supported types are [bigint, float, double, string, boolean, uuid]</expected-error>
+ <source-location>false</source-location>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="column">
+ <compilation-unit name="validation">
+ <output-dir compare="Text">validation</output-dir>
+ <expected-error>ASX1191: Merge policy 'correlated-prefix' is not supported with columnar storage format</expected-error>
+ <expected-error>ASX1192: Filters are not supported with columnar storage format</expected-error>
+ <expected-error>ASX1193: Unknown storage format 'col'</expected-error>
+ <expected-error>ASX1194: Index type 'RTREE' is not supported with columnar storage format</expected-error>
+ <expected-error>ASX1194: Index type 'LENGTH_PARTITIONED_NGRAM_INVIX' is not supported with columnar storage format</expected-error>
+ <expected-error>ASX1194: Index type 'LENGTH_PARTITIONED_WORD_INVIX' is not supported with columnar storage format</expected-error>
+ <source-location>false</source-location>
+ </compilation-unit>
+ </test-case>
</test-group>
</test-suite>
(asterixdb) 04/04: Merge branch 'gerrit/goldfish' into 'master'
Posted by mb...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit d3881ce8b3f71493bf43cae185995c8f48be6c78
Merge: e27dfd58ea b7ee9398f5
Author: Michael Blow <mi...@couchbase.com>
AuthorDate: Fri Jan 17 16:39:42 2025 -0500
Merge branch 'gerrit/goldfish' into 'master'
Change-Id: I0442576f43a7737de10b25c41ad095ab5dc05910
.../pushdown/schema/ExpectedSchemaBuilder.java | 32 +-
.../ASTERIXDB-3539/ASTERIXDB-3539.001.ddl.sqlpp | 28 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.002.update.sqlpp | 30 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.003.update.sqlpp | 22 ++
.../ASTERIXDB-3539/ASTERIXDB-3539.004.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.001.ddl.sqlpp | 33 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.002.update.sqlpp | 37 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.003.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.004.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.005.query.sqlpp | 23 ++
.../ASTERIXDB-3540/ASTERIXDB-3540.006.query.sqlpp | 23 ++
.../assembly/ASTERIXDB-3539/ASTERIXDB-3539.003.adm | 1 +
.../ASTERIXDB-3540/ASTERIXDB-3540.003.plan | 18 +
.../ASTERIXDB-3540/ASTERIXDB-3540.004.plan | 18 +
.../pushdown/ASTERIXDB-3540/ASTERIXDB-3540.005.adm | 1 +
.../pushdown/ASTERIXDB-3540/ASTERIXDB-3540.006.adm | 1 +
.../src/test/resources/runtimets/sqlpp_queries.xml | 10 +
.../runtimets/testsuite_single_partition_sqlpp.xml | 387 +++++++++++++++++++++
.../column/tuple/QueryColumnTupleReference.java | 3 +
.../tuple/QueryColumnWithMetaTupleReference.java | 3 +
.../lsm/btree/column/api/IColumnTupleIterator.java | 7 +
.../impls/lsm/LSMColumnBTreeRangeSearchCursor.java | 4 +-
.../lsm/tuples/AbstractColumnTupleReference.java | 13 +
23 files changed, 748 insertions(+), 15 deletions(-)
diff --cc asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.plan
index 0000000000,40cfb0053c..e8211a2b50
mode 000000,100644..100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.003.plan
@@@ -1,0 -1,20 +1,18 @@@
+ distribute result [$$25] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- DISTRIBUTE_RESULT |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$25]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- STREAM_PROJECT |PARTITIONED|
- assign [$$25] <- [{"g": $$26.getField("g"), "$1": $$26.getField("p").getField("$$ColumnDataset.getField("x").getField("y").getField("age_field")")}] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ assign [$$25] <- [{"g": $$26.getField("g"), "$1": $$26.getField("p").getField("$$ColumnDataset.getField("x").getField("y").getField("age_field")")}] project: [$$25] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- ASSIGN |PARTITIONED|
++ assign [$$26] <- [$$ColumnDataset.getField("t").getField("r")] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
- assign [$$26] <- [$$ColumnDataset.getField("t").getField("r")] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ASSIGN |PARTITIONED|
- project ([$$ColumnDataset]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$27, $$ColumnDataset] <- test.ColumnDataset project ({t:{r:{p:any,g:any}},x:{y:{age_field:any}}}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
++ project ([$$ColumnDataset]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- STREAM_PROJECT |PARTITIONED|
++ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
++ data-scan []<-[$$27, $$ColumnDataset] <- test.ColumnDataset project ({t:{r:{p:any,g:any}},x:{y:{age_field:any}}}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- DATASOURCE_SCAN |PARTITIONED|
++ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
++ empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- EMPTY_TUPLE_SOURCE |PARTITIONED|
diff --cc asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.plan
index 0000000000,7e0e44494e..273d5b8bab
mode 000000,100644..100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.plan
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/column/pushdown/ASTERIXDB-3540/ASTERIXDB-3540.004.plan
@@@ -1,0 -1,20 +1,18 @@@
+ distribute result [$$26] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- DISTRIBUTE_RESULT |PARTITIONED|
+ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- project ([$$26]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- STREAM_PROJECT |PARTITIONED|
- assign [$$26] <- [{"g": $$27.getField("g"), "$1": $$27.getField("p").getField("substring($$ColumnDataset.getField("x").getField("y").getField("age_field"), 0, 4)")}] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ assign [$$26] <- [{"g": $$27.getField("g"), "$1": $$27.getField("p").getField("substring($$ColumnDataset.getField("x").getField("y").getField("age_field"), 0, 4)")}] project: [$$26] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- ASSIGN |PARTITIONED|
++ assign [$$27] <- [$$ColumnDataset.getField("t").getField("r")] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
+ -- ASSIGN |PARTITIONED|
- assign [$$27] <- [$$ColumnDataset.getField("t").getField("r")] [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ASSIGN |PARTITIONED|
- project ([$$ColumnDataset]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- STREAM_PROJECT |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- data-scan []<-[$$28, $$ColumnDataset] <- test.ColumnDataset project ({t:{r:{p:any,g:any}},x:{y:{age_field:any}}}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- DATASOURCE_SCAN |PARTITIONED|
- exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
- empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
- -- EMPTY_TUPLE_SOURCE |PARTITIONED|
++ project ([$$ColumnDataset]) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- STREAM_PROJECT |PARTITIONED|
++ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
++ data-scan []<-[$$28, $$ColumnDataset] <- test.ColumnDataset project ({t:{r:{p:any,g:any}},x:{y:{age_field:any}}}) [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- DATASOURCE_SCAN |PARTITIONED|
++ exchange [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- ONE_TO_ONE_EXCHANGE |PARTITIONED|
++ empty-tuple-source [cardinality: 0.0, op-cost: 0.0, total-cost: 0.0]
++ -- EMPTY_TUPLE_SOURCE |PARTITIONED|