Till Westmann has submitted this change and it was merged. Change subject: introduce ConstantExpressionUtil ......................................................................
introduce ConstantExpressionUtil Change-Id: Ic0034bd6ba7f449a03eda48070a8de614608c2dd Reviewed-on: https://asterix-gerrit.ics.uci.edu/1069 Reviewed-by: Yingyi Bu <[email protected]> Tested-by: Jenkins <[email protected]> --- A asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/util/ConstantExpressionUtil.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java 3 files changed, 68 insertions(+), 20 deletions(-) Approvals: Yingyi Bu: Looks good to me, approved Jenkins: Verified Objections: Jenkins: Violations found diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/util/ConstantExpressionUtil.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/util/ConstantExpressionUtil.java new file mode 100644 index 0000000..300ef9d --- /dev/null +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/util/ConstantExpressionUtil.java @@ -0,0 +1,66 @@ +/* + * 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.algebra.util; + +import org.apache.asterix.om.base.AInt32; +import org.apache.asterix.om.base.AString; +import org.apache.asterix.om.base.IAObject; +import org.apache.asterix.om.constants.AsterixConstantValue; +import org.apache.asterix.om.types.ATypeTag; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; +import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag; +import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; +import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression; +import org.apache.hyracks.algebricks.core.algebra.expressions.IAlgebricksConstantValue; + +public class ConstantExpressionUtil { + + private static IAObject getAsterixConstantValue(AbstractFunctionCallExpression f, int index, ATypeTag typeTag) { + final ILogicalExpression expr = f.getArguments().get(index).getValue(); + if (expr.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + return null; + } + final IAlgebricksConstantValue acv = ((ConstantExpression) expr).getValue(); + if (!(acv instanceof AsterixConstantValue)) { + return null; + } + final IAObject iaObject = ((AsterixConstantValue) acv).getObject(); + return iaObject.getType().getTypeTag() == typeTag ? iaObject : null; + } + + public static Integer getIntArgument(AbstractFunctionCallExpression f, int index) { + final IAObject iaObject = getAsterixConstantValue(f, index, ATypeTag.INT32); + return iaObject != null ? ((AInt32) iaObject).getIntegerValue() : null; + } + + public static String getStringArgument(AbstractFunctionCallExpression f, int index) { + final IAObject iaObject = getAsterixConstantValue(f, index, ATypeTag.STRING); + return iaObject != null ? ((AString) iaObject).getStringValue() : null; + } + + public static Integer getIntArgument(ILogicalExpression expr, int index) { + return expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL + ? getIntArgument((AbstractFunctionCallExpression) expr, index) : null; + } + + public static String getStringArgument(ILogicalExpression expr, int index) { + return expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL + ? getStringArgument((AbstractFunctionCallExpression) expr, index) : null; + } +} diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java index d623830..69c9f7d 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/UnnestToDataScanRule.java @@ -18,6 +18,8 @@ */ package org.apache.asterix.optimizer.rules; +import static org.apache.asterix.algebra.util.ConstantExpressionUtil.getStringArgument; + import java.util.ArrayList; import java.util.List; @@ -296,24 +298,5 @@ datasetName = datasetNameComponents[1]; } return new Pair<String, String>(dataverseName, datasetName); - } - - private String getStringArgument(AbstractFunctionCallExpression f, int index) { - - ILogicalExpression expr = f.getArguments().get(index).getValue(); - if (expr.getExpressionTag() != LogicalExpressionTag.CONSTANT) { - return null; - } - ConstantExpression ce = (ConstantExpression) expr; - IAlgebricksConstantValue acv = ce.getValue(); - if (!(acv instanceof AsterixConstantValue)) { - return null; - } - AsterixConstantValue acv2 = (AsterixConstantValue) acv; - if (acv2.getObject().getType().getTypeTag() != ATypeTag.STRING) { - return null; - } - String argument = ((AString) acv2.getObject()).getStringValue(); - return argument; } } \ No newline at end of file diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java index 5081587..d85419e 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java @@ -40,7 +40,6 @@ import org.apache.asterix.lang.common.base.Expression; import org.apache.asterix.lang.common.base.Expression.Kind; import org.apache.asterix.lang.common.base.ILangExpression; -import org.apache.asterix.lang.common.base.ILangExpression; import org.apache.asterix.lang.common.base.Statement; import org.apache.asterix.lang.common.clause.GroupbyClause; import org.apache.asterix.lang.common.clause.LetClause; -- To view, visit https://asterix-gerrit.ics.uci.edu/1069 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ic0034bd6ba7f449a03eda48070a8de614608c2dd Gerrit-PatchSet: 3 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Till Westmann <[email protected]> Gerrit-Reviewer: Jenkins <[email protected]> Gerrit-Reviewer: Till Westmann <[email protected]> Gerrit-Reviewer: Yingyi Bu <[email protected]> Gerrit-Reviewer: abdullah alamoudi <[email protected]>
