This is an automated email from the ASF dual-hosted git repository. dlych pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit c622daf54a2c951288779d2fb947937613d58a08 Author: Dmitry Lychagin <[email protected]> AuthorDate: Wed Jun 1 09:54:08 2022 -0700 [ASTERIXDB-3038][COMP] Fix IsomorphismOperatorVisitor - user model changes: no - storage format changes: no - interface changes: no Details: - IsomorphismOperatorVisitor should compare domains of Exchange operators - Set UnnestMap execution mode to PARTITIONED when introducing index-search Change-Id: I79ae17331287aa482a35b521c505d0f201b86063 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/16423 Integration-Tests: Jenkins <[email protected]> Tested-by: Ian Maxon <[email protected]> Reviewed-by: Ali Alsuliman <[email protected]> --- .../optimizer/rules/am/BTreeAccessMethod.java | 14 +++---- .../metadata_only_02/metadata_only_02.1.ddl.sqlpp | 34 +++++++++++++++ .../metadata_only_02.2.query.sqlpp | 49 ++++++++++++++++++++++ .../misc/metadata_only_02/metadata_only_02.2.adm | 2 + .../test/resources/runtimets/testsuite_sqlpp.xml | 5 +++ .../visitors/IsomorphismOperatorVisitor.java | 3 ++ 6 files changed, 98 insertions(+), 9 deletions(-) diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java index 5dd0135d36..2eebe5bf3f 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java @@ -753,7 +753,7 @@ public class BTreeAccessMethod implements IAccessMethod { } else { leftOuterUnnestMapRequired = false; } - + AbstractUnnestMapOperator unnestMapOp; if (conditionRef.getValue() != null) { // The job gen parameters are transferred to the actual job gen // via the UnnestMapOperator's function arguments. @@ -765,7 +765,6 @@ public class BTreeAccessMethod implements IAccessMethod { new UnnestingFunctionCallExpression(primaryIndexSearch, primaryIndexFuncArgs); primaryIndexSearchFunc.setSourceLocation(dataSourceOp.getSourceLocation()); primaryIndexSearchFunc.setReturnsUniqueValues(true); - AbstractUnnestMapOperator unnestMapOp; if (!leftOuterUnnestMapRequired) { unnestMapOp = new UnnestMapOperator(scanVariables, new MutableObject<ILogicalExpression>(primaryIndexSearchFunc), primaryIndexOutputTypes, @@ -775,10 +774,7 @@ public class BTreeAccessMethod implements IAccessMethod { new MutableObject<ILogicalExpression>(primaryIndexSearchFunc), primaryIndexOutputTypes, leftOuterMissingValue); } - unnestMapOp.setSourceLocation(dataSourceOp.getSourceLocation()); - indexSearchOp = unnestMapOp; } else { - AbstractUnnestMapOperator unnestMapOp; if (!leftOuterUnnestMapRequired) { unnestMapOp = new UnnestMapOperator(scanVariables, ((UnnestMapOperator) secondaryIndexUnnestOp).getExpressionRef(), primaryIndexOutputTypes, @@ -788,11 +784,11 @@ public class BTreeAccessMethod implements IAccessMethod { ((LeftOuterUnnestMapOperator) secondaryIndexUnnestOp).getExpressionRef(), primaryIndexOutputTypes, leftOuterMissingValue); } - unnestMapOp.setSourceLocation(dataSourceOp.getSourceLocation()); - indexSearchOp = unnestMapOp; } - // TODO: shouldn't indexSearchOp execution mode be set to that of the input? the default is UNPARTITIONED - indexSearchOp.getInputs().add(new MutableObject<>(inputOp)); + unnestMapOp.setExecutionMode(ExecutionMode.PARTITIONED); + unnestMapOp.setSourceLocation(dataSourceOp.getSourceLocation()); + unnestMapOp.getInputs().add(new MutableObject<>(inputOp)); + indexSearchOp = unnestMapOp; // Adds equivalence classes --- one equivalent class between a primary key // variable and a record field-access expression. diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/metadata_only_02/metadata_only_02.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/metadata_only_02/metadata_only_02.1.ddl.sqlpp new file mode 100644 index 0000000000..ab247a300c --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/metadata_only_02/metadata_only_02.1.ddl.sqlpp @@ -0,0 +1,34 @@ +/* + * 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. + */ + +/* + * The query tests fix for ASTERIXDB-3038 + */ + +drop dataverse test1 if exists; +drop dataverse test2 if exists; + +create dataverse test1; +create dataverse test2; + +create dataset test1.ds1 (id1 integer not unknown) primary key id1; +create dataset test2.ds2 (id2 integer not unknown) primary key id2; + +create synonym test1.syn1 for test1.ds1; +create synonym test2.syn2 for test2.ds2; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/metadata_only_02/metadata_only_02.2.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/metadata_only_02/metadata_only_02.2.query.sqlpp new file mode 100644 index 0000000000..a7e1b930fe --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/metadata_only_02/metadata_only_02.2.query.sqlpp @@ -0,0 +1,49 @@ +/* + * 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. + */ + +/* + * The query tests fix for ASTERIXDB-3038 + */ + +select syn.DataverseName, syn.SynonymName +from Metadata.`Synonym` as syn +where syn.ObjectDataverseName in + ["test1", "test2"] +and syn.ObjectName in ( + select value ds.DatasetName + from Metadata.`Dataset` as ds + where ds.DataverseName in + ["test1", "test2"] + and ds.DatasetName in + ["ds1", "ds2"]) + or syn.ObjectName in ( + select value syn1.SynonymName + from Metadata.`Synonym` as syn1 + where syn1.SynonymName in + ["syn1", "syn2"] + and syn1.ObjectName in ( + select value ds1.DatasetName + from Metadata.`Dataset` as ds1 + where ds1.DataverseName in + ["test1", "test2"] + and ds1.DatasetName in + ["ds1", "ds2"] + ) + ) +order by syn.DataverseName, syn.SynonymName; \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/metadata_only_02/metadata_only_02.2.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/metadata_only_02/metadata_only_02.2.adm new file mode 100644 index 0000000000..743bb8ab39 --- /dev/null +++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/metadata_only_02/metadata_only_02.2.adm @@ -0,0 +1,2 @@ +{ "DataverseName": "test1", "SynonymName": "syn1" } +{ "DataverseName": "test2", "SynonymName": "syn2" } \ No newline at end of file diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml index 1267995488..5d5980f7b4 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml @@ -7206,6 +7206,11 @@ <output-dir compare="Text">metadata_only_01</output-dir> </compilation-unit> </test-case> + <test-case FilePath="misc"> + <compilation-unit name="metadata_only_02"> + <output-dir compare="Text">metadata_only_02</output-dir> + </compilation-unit> + </test-case> <test-case FilePath="misc"> <compilation-unit name="cast-ASTERIXDB-2458"> <output-dir compare="Text">cast-ASTERIXDB-2458</output-dir> diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java index e5d0241eab..e4df39724d 100644 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/visitors/IsomorphismOperatorVisitor.java @@ -522,6 +522,9 @@ public class IsomorphismOperatorVisitor implements ILogicalOperatorVisitor<Boole if (!partProp.getPartitioningType().equals(partPropArg.getPartitioningType())) { return Boolean.FALSE; } + if (!partProp.getNodeDomain().sameAs(partPropArg.getNodeDomain())) { + return Boolean.FALSE; + } List<LogicalVariable> columns = new ArrayList<LogicalVariable>(); partProp.getColumns(columns); List<LogicalVariable> columnsArg = new ArrayList<LogicalVariable>();
