Till Westmann has submitted this change and it was merged. Change subject: ConstantExpressionUtil improvements ......................................................................
ConstantExpressionUtil improvements Change-Id: I636538d6ea6c6a527aac1eb9cacdcc40a8489c02 Reviewed-on: https://asterix-gerrit.ics.uci.edu/1074 Sonar-Qube: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Integration-Tests: Jenkins <[email protected]> Reviewed-by: Yingyi Bu <[email protected]> --- M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.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/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java M asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/MetadataBuiltinFunctions.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ABoolean.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordConstructorResultType.java R asterixdb/asterix-om/src/main/java/org/apache/asterix/om/util/ConstantExpressionUtil.java M asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java 19 files changed, 101 insertions(+), 197 deletions(-) Approvals: Yingyi Bu: Looks good to me, approved Jenkins: Verified; No violations found; Verified diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java index 6e8bd69..3ba7084 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java @@ -23,10 +23,9 @@ import java.util.Collections; import org.apache.asterix.algebra.base.AsterixOperatorAnnotations; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.asterix.lang.common.util.FunctionUtil; 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.functions.AsterixBuiltinFunctions; import org.apache.asterix.om.types.ARecordType; @@ -141,7 +140,7 @@ @SuppressWarnings("unchecked") private static ILogicalExpression createFieldAccessByIndex(ARecordType recType, AbstractFunctionCallExpression fce) { - String s = getStringSecondArgument(fce); + String s = ConstantExpressionUtil.getStringArgument(fce, 1); if (s == null) { return null; } @@ -151,22 +150,6 @@ } return new ScalarFunctionCallExpression( FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX), fce.getArguments().get(0), - new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(new AInt32(k))))); - } - - private static String getStringSecondArgument(AbstractFunctionCallExpression expr) { - ILogicalExpression e2 = expr.getArguments().get(1).getValue(); - if (e2.getExpressionTag() != LogicalExpressionTag.CONSTANT) { - return null; - } - ConstantExpression c = (ConstantExpression) e2; - if (!(c.getValue() instanceof AsterixConstantValue)) { - return null; - } - IAObject v = ((AsterixConstantValue) c.getValue()).getObject(); - if (v.getType().getTypeTag() != ATypeTag.STRING) { - return null; - } - return ((AString) v).getStringValue(); + new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AInt32(k))))); } } diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java index 9d9dda0..fec564e 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java @@ -23,6 +23,7 @@ import java.nio.ByteBuffer; import java.util.List; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.asterix.common.config.GlobalConfig; import org.apache.asterix.dataflow.data.common.AqlExpressionTypeComputer; import org.apache.asterix.dataflow.data.nontagged.AqlMissingWriterFactory; @@ -35,7 +36,6 @@ import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider; import org.apache.asterix.formats.nontagged.AqlTypeTraitProvider; import org.apache.asterix.jobgen.QueryLogicalExpressionJobGen; -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.functions.AsterixBuiltinFunctions; @@ -204,9 +204,7 @@ } if (expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME)) { ARecordType rt = (ARecordType) _emptyTypeEnv.getType(expr.getArguments().get(0).getValue()); - String str = - ((AString) ((AsterixConstantValue) ((ConstantExpression) expr.getArguments().get(1).getValue()) - .getValue()).getObject()).getStringValue(); + String str = ConstantExpressionUtil.getStringConstant(expr.getArguments().get(1).getValue()); int k = rt.getFieldIndex(str); if (k >= 0) { // wait for the ByNameToByIndex rule to apply diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java index 36e93c4..d444aca 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/LoadRecordFieldsRule.java @@ -29,6 +29,7 @@ import org.apache.asterix.om.base.AString; import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.functions.AsterixBuiltinFunctions; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.asterix.optimizer.base.AnalysisUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; @@ -344,12 +345,8 @@ Iterator<Mutable<ILogicalExpression>> fldIter = fce.getArguments().iterator(); while (fldIter.hasNext()) { ILogicalExpression fldExpr = fldIter.next().getValue(); - if (fldExpr.getExpressionTag() == LogicalExpressionTag.CONSTANT) { - ConstantExpression ce = (ConstantExpression) fldExpr; - String f2 = ((AString) ((AsterixConstantValue) ce.getValue()).getObject()).getStringValue(); - if (fldName.equals(f2)) { - return fldIter.next().getValue(); - } + if (fldName.equals(ConstantExpressionUtil.getStringConstant(fldExpr))) { + return fldIter.next().getValue(); } fldIter.next(); } diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java index 165d749..079f61a 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushFieldAccessRule.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.asterix.algebra.base.AsterixOperatorAnnotations; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.asterix.common.config.DatasetConfig.DatasetType; import org.apache.asterix.metadata.declared.AqlDataSource; import org.apache.asterix.metadata.declared.AqlDataSource.AqlDataSourceType; @@ -131,14 +132,8 @@ if (dataset.getDatasetType() != DatasetType.INTERNAL) { return false; } - ILogicalExpression e1 = accessFun.getArguments().get(1).getValue(); - if (e1.getExpressionTag() != LogicalExpressionTag.CONSTANT) { - return false; - } - ConstantExpression ce = (ConstantExpression) e1; - IAObject obj = ((AsterixConstantValue) ce.getValue()).getObject(); - if (obj.getType().getTypeTag() != ATypeTag.STRING) { - int pos = ((AInt32) obj).getIntegerValue(); + final Integer pos = ConstantExpressionUtil.getIntConstant(accessFun.getArguments().get(1).getValue()); + if (pos != null) { String tName = dataset.getItemTypeName(); IAType t = mp.findType(dataset.getItemTypeDataverseName(), tName); if (t.getTypeTag() != ATypeTag.RECORD) { diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java index 1d3e904..2cce9b0 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java @@ -34,6 +34,7 @@ import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.AUnionType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; @@ -45,7 +46,6 @@ 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; import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression; import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule; @@ -326,19 +326,10 @@ // Extracts the name of an undefined variable. private String extractConstantString(ILogicalExpression arg) throws AlgebricksException { - if (arg.getExpressionTag() != LogicalExpressionTag.CONSTANT) { - throw new AlgebricksException("The argument is expected to be a constant value."); - } - ConstantExpression ce = (ConstantExpression) arg; - IAlgebricksConstantValue acv = ce.getValue(); - if (!(acv instanceof AsterixConstantValue)) { - throw new AlgebricksException("The argument is expected to be an Asterix constant value."); - } - AsterixConstantValue acv2 = (AsterixConstantValue) acv; - if (acv2.getObject().getType().getTypeTag() != ATypeTag.STRING) { + final String str = ConstantExpressionUtil.getStringConstant(arg); + if (str == null) { throw new AlgebricksException("The argument is expected to be a string constant value."); } - return ((AString) acv2.getObject()).getStringValue(); + return str; } - } 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 69c9f7d..bb382f0 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,7 +18,7 @@ */ package org.apache.asterix.optimizer.rules; -import static org.apache.asterix.algebra.util.ConstantExpressionUtil.getStringArgument; +import static org.apache.asterix.om.util.ConstantExpressionUtil.getStringArgument; import java.util.ArrayList; import java.util.List; diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java index ed1803d..b3e9e09 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java @@ -24,13 +24,13 @@ import java.util.List; import java.util.Map; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.asterix.common.config.DatasetConfig.IndexType; import org.apache.asterix.dataflow.data.common.AqlExpressionTypeComputer; import org.apache.asterix.metadata.api.IMetadataEntity; import org.apache.asterix.metadata.declared.AqlMetadataProvider; import org.apache.asterix.metadata.entities.Index; import org.apache.asterix.metadata.utils.DatasetUtils; -import org.apache.asterix.om.base.AInt32; import org.apache.asterix.om.base.AOrderedList; import org.apache.asterix.om.base.AString; import org.apache.asterix.om.constants.AsterixConstantValue; @@ -699,21 +699,18 @@ List<String> nestedAccessFieldName = null; int fieldIndex = -1; if (funcIdent == AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME) { - ILogicalExpression nameArg = funcExpr.getArguments().get(1).getValue(); - if (nameArg.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + fieldName = ConstantExpressionUtil.getStringArgument(funcExpr, 1); + if (fieldName == null) { return null; } - ConstantExpression constExpr = (ConstantExpression) nameArg; - fieldName = ((AString) ((AsterixConstantValue) constExpr.getValue()).getObject()).getStringValue(); isFieldAccess = true; isByName = true; } else if (funcIdent == AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX) { - ILogicalExpression idxArg = funcExpr.getArguments().get(1).getValue(); - if (idxArg.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + Integer idx = ConstantExpressionUtil.getIntArgument(funcExpr, 1); + if (idx == null) { return null; } - ConstantExpression constExpr = (ConstantExpression) idxArg; - fieldIndex = ((AInt32) ((AsterixConstantValue) constExpr.getValue()).getObject()).getIntegerValue(); + fieldIndex = idx; isFieldAccess = true; } else if (funcIdent == AsterixBuiltinFunctions.FIELD_ACCESS_NESTED) { ILogicalExpression nameArg = funcExpr.getArguments().get(1).getValue(); diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java index db2c627..5b7146f 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java @@ -38,15 +38,14 @@ import org.apache.asterix.metadata.utils.KeyFieldTypeUtils; import org.apache.asterix.om.base.ABoolean; import org.apache.asterix.om.base.AInt32; -import org.apache.asterix.om.base.AInt64; 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.functions.AsterixBuiltinFunctions; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.IAType; import org.apache.asterix.om.types.hierachy.ATypeHierarchy; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; @@ -105,31 +104,23 @@ } public static ConstantExpression createBooleanConstant(boolean b) { - if (b) { - return new ConstantExpression(new AsterixConstantValue(ABoolean.TRUE)); - } else { - return new ConstantExpression(new AsterixConstantValue(ABoolean.FALSE)); - } + return new ConstantExpression(new AsterixConstantValue(ABoolean.valueOf(b))); } public static String getStringConstant(Mutable<ILogicalExpression> expr) { - IAObject obj = ((AsterixConstantValue) ((ConstantExpression) expr.getValue()).getValue()).getObject(); - return ((AString) obj).getStringValue(); + return ConstantExpressionUtil.getStringConstant(expr.getValue()); } public static int getInt32Constant(Mutable<ILogicalExpression> expr) { - IAObject obj = ((AsterixConstantValue) ((ConstantExpression) expr.getValue()).getValue()).getObject(); - return ((AInt32) obj).getIntegerValue(); + return ConstantExpressionUtil.getIntConstant(expr.getValue()); } public static long getInt64Constant(Mutable<ILogicalExpression> expr) { - IAObject obj = ((AsterixConstantValue) ((ConstantExpression) expr.getValue()).getValue()).getObject(); - return ((AInt64) obj).getLongValue(); + return ConstantExpressionUtil.getLongConstant(expr.getValue()); } public static boolean getBooleanConstant(Mutable<ILogicalExpression> expr) { - IAObject obj = ((AsterixConstantValue) ((ConstantExpression) expr.getValue()).getValue()).getObject(); - return ((ABoolean) obj).getBoolean(); + return ConstantExpressionUtil.getBooleanConstant(expr.getValue()); } public static boolean analyzeFuncExprArgsForOneConstAndVar(AbstractFunctionCallExpression funcExpr, diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java index a2bf6d9..45c5e34 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceLSMComponentFilterRule.java @@ -19,7 +19,6 @@ package org.apache.asterix.optimizer.rules.am; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import org.apache.asterix.common.config.DatasetConfig.DatasetType; @@ -30,13 +29,11 @@ import org.apache.asterix.metadata.entities.Index; import org.apache.asterix.metadata.utils.DatasetUtils; import org.apache.asterix.metadata.utils.KeyFieldTypeUtils; -import org.apache.asterix.om.base.AInt32; -import org.apache.asterix.om.base.AString; -import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.functions.AsterixBuiltinFunctions; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.commons.lang3.mutable.MutableObject; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; @@ -49,7 +46,6 @@ import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable; import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractLogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression; import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions; @@ -441,27 +437,23 @@ } if (funcIdent == AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME) { - ILogicalExpression nameArg = funcExpr.getArguments().get(1).getValue(); - if (nameArg.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + String fieldName = ConstantExpressionUtil.getStringArgument(funcExpr, 1); + if (fieldName == null) { return null; } - ConstantExpression constExpr = (ConstantExpression) nameArg; - returnList.addAll(Arrays.asList( - ((AString) ((AsterixConstantValue) constExpr.getValue()).getObject()).getStringValue())); - return new Pair<ARecordType, List<String>>(recType, returnList); + returnList.add(fieldName); + return new Pair<>(recType, returnList); } else if (funcIdent == AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX) { - ILogicalExpression idxArg = funcExpr.getArguments().get(1).getValue(); - if (idxArg.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + Integer fieldIndex = ConstantExpressionUtil.getIntArgument(funcExpr, 1); + if (fieldIndex == null) { return null; } - ConstantExpression constExpr = (ConstantExpression) idxArg; - int fieldIndex = ((AInt32) ((AsterixConstantValue) constExpr.getValue()).getObject()).getIntegerValue(); - returnList.addAll(Arrays.asList(recType.getFieldNames()[fieldIndex])); + returnList.add(recType.getFieldNames()[fieldIndex]); IAType subType = recType.getFieldTypes()[fieldIndex]; if (subType.getTypeTag() == ATypeTag.RECORD) { recType = (ARecordType) subType; } - return new Pair<ARecordType, List<String>>(recType, returnList); + return new Pair<>(recType, returnList); } } diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/MetadataBuiltinFunctions.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/MetadataBuiltinFunctions.java index 9bddd8e..1045898 100644 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/MetadataBuiltinFunctions.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/functions/MetadataBuiltinFunctions.java @@ -20,19 +20,16 @@ import org.apache.asterix.metadata.declared.AqlMetadataProvider; import org.apache.asterix.metadata.entities.Dataset; -import org.apache.asterix.om.base.AString; -import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.functions.AsterixBuiltinFunctions; import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.BuiltinType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.common.utils.Pair; 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.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; @@ -67,11 +64,10 @@ if (t1.getTypeTag() != ATypeTag.STRING) { throw new AlgebricksException("Illegal type " + t1 + " for dataset() argument."); } - if (a1.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + String datasetArg = ConstantExpressionUtil.getStringConstant(a1); + if (datasetArg == null) { return BuiltinType.ANY; } - AsterixConstantValue acv = (AsterixConstantValue) ((ConstantExpression) a1).getValue(); - String datasetArg = ((AString) acv.getObject()).getStringValue(); AqlMetadataProvider metadata = ((AqlMetadataProvider) mp); Pair<String, String> datasetInfo = getDatasetInfo(metadata, datasetArg); String dataverseName = datasetInfo.first; @@ -111,11 +107,10 @@ if (t1.getTypeTag() != ATypeTag.STRING) { throw new AlgebricksException("Illegal type " + t1 + " for feed-ingest argument."); } - if (a1.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + String typeArg = ConstantExpressionUtil.getStringConstant(a1); + if (typeArg == null) { return BuiltinType.ANY; } - AsterixConstantValue acv = (AsterixConstantValue) ((ConstantExpression) a1).getValue(); - String typeArg = ((AString) acv.getObject()).getStringValue(); AqlMetadataProvider metadata = ((AqlMetadataProvider) mp); Pair<String, String> argInfo = getDatasetInfo(metadata, typeArg); String dataverseName = argInfo.first; @@ -148,11 +143,10 @@ if (t1.getTypeTag() != ATypeTag.STRING) { throw new AlgebricksException("Illegal type " + t1 + " for dataset() argument."); } - if (a1.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + String datasetArg = ConstantExpressionUtil.getStringConstant(a1); + if (datasetArg == null) { return BuiltinType.ANY; } - AsterixConstantValue acv = (AsterixConstantValue) ((ConstantExpression) a1).getValue(); - String datasetArg = ((AString) acv.getObject()).getStringValue(); AqlMetadataProvider metadata = ((AqlMetadataProvider) mp); Pair<String, String> datasetInfo = getDatasetInfo(metadata, datasetArg); String dataverseName = datasetInfo.first; diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ABoolean.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ABoolean.java index 7e64cb5..2a56cff 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ABoolean.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/base/ABoolean.java @@ -40,7 +40,7 @@ return bVal; } - public ABoolean valueOf(boolean b) { + public static ABoolean valueOf(boolean b) { return b ? TRUE : FALSE; } diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java index 1aa06bd..e337ea8 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java @@ -21,20 +21,17 @@ import java.util.Iterator; -import org.apache.asterix.om.base.AString; -import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; import org.apache.asterix.om.typecomputer.base.TypeCastUtils; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.AUnionType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; 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.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; @@ -69,10 +66,8 @@ e2Type = AUnionType.createUnknownableType(unionType.getActualType()); } fieldTypes[i] = e2Type; - if (e1.getExpressionTag() == LogicalExpressionTag.CONSTANT) { - ConstantExpression nameExpr = (ConstantExpression) e1; - fieldNames[i] = ((AString) ((AsterixConstantValue) nameExpr.getValue()).getObject()).getStringValue(); - } else { + fieldNames[i] = ConstantExpressionUtil.getStringConstant(e1); + if (fieldNames[i] == null) { throw new AlgebricksException( "Field name " + i + "(" + e1 + ") in call to closed-record-constructor is not a constant."); } diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java index 2b4cf59..f46c102 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java @@ -18,19 +18,15 @@ */ package org.apache.asterix.om.typecomputer.impl; -import org.apache.asterix.om.base.AInt32; -import org.apache.asterix.om.base.IAObject; -import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.BuiltinType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; 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; public class FieldAccessByIndexResultType extends AbstractResultTypeComputer { @@ -56,13 +52,10 @@ return BuiltinType.ANY; } AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; - ILogicalExpression arg1 = funcExpr.getArguments().get(1).getValue(); - if (arg1.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + Integer pos = ConstantExpressionUtil.getIntArgument(funcExpr, 1); + if (pos == null) { return BuiltinType.ANY; } - ConstantExpression ce = (ConstantExpression) arg1; - IAObject v = ((AsterixConstantValue) ce.getValue()).getObject(); - int pos = ((AInt32) v).getIntegerValue(); ARecordType recType = (ARecordType) firstArgType; return recType.getFieldTypes()[pos]; } diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java index 2931d7e..3e5af3c 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java @@ -18,19 +18,15 @@ */ package org.apache.asterix.om.typecomputer.impl; -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.typecomputer.base.AbstractResultTypeComputer; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.ATypeTag; import org.apache.asterix.om.types.BuiltinType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; 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; public class FieldAccessByNameResultType extends AbstractResultTypeComputer { @@ -58,13 +54,10 @@ return BuiltinType.ANY; } AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr; - ILogicalExpression arg1 = funcExpr.getArguments().get(1).getValue(); - if (arg1.getExpressionTag() != LogicalExpressionTag.CONSTANT) { + String fieldName = ConstantExpressionUtil.getStringArgument(funcExpr, 1); + if (fieldName == null) { return BuiltinType.ANY; } - ConstantExpression ce = (ConstantExpression) arg1; - IAObject v = ((AsterixConstantValue) ce.getValue()).getObject(); - String fieldName = ((AString) v).getStringValue(); ARecordType recType = (ARecordType) firstArgType; IAType fieldType = recType.getFieldType(fieldName); return fieldType == null ? BuiltinType.ANY : fieldType; diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java index 04d879f..a12bc1d 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java @@ -25,19 +25,16 @@ import java.util.List; import java.util.Set; -import org.apache.asterix.om.base.AString; -import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; import org.apache.asterix.om.typecomputer.base.TypeCastUtils; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.IAType; import org.apache.asterix.om.types.TypeHelper; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; 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.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; @@ -71,12 +68,7 @@ ILogicalExpression e1 = argIter.next().getValue(); ILogicalExpression e2 = argIter.next().getValue(); IAType t2 = (IAType) env.getType(e2); - String fieldName = null; - if (e1.getExpressionTag() == LogicalExpressionTag.CONSTANT) { - ConstantExpression nameExpr = (ConstantExpression) e1; - AsterixConstantValue acv = (AsterixConstantValue) nameExpr.getValue(); - fieldName = ((AString) acv.getObject()).getStringValue(); - } + String fieldName = ConstantExpressionUtil.getStringConstant(e1); if (fieldName != null && t2 != null && TypeHelper.isClosed(t2)) { namesList.add(fieldName); typesList.add(t2); diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java index 97f4e92..289db7c 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java @@ -27,9 +27,6 @@ import java.util.List; import java.util.Map; -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.typecomputer.base.IResultTypeComputer; import org.apache.asterix.om.types.AOrderedListType; import org.apache.asterix.om.types.ARecordType; @@ -37,13 +34,13 @@ import org.apache.asterix.om.types.AUnionType; import org.apache.asterix.om.types.IAType; import org.apache.asterix.om.types.TypeHelper; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; 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.AbstractLogicalExpression; -import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; @@ -97,7 +94,7 @@ AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) arg1; List<Mutable<ILogicalExpression>> args = f.getArguments(); - AString fieldName = null; + String fieldName = null; IAType fieldType = null; // Iterating through the orderlist input @@ -110,29 +107,17 @@ for (int j = 0; j < fn.length; j++) { if (fn[j].equals(FIELD_NAME_NAME)) { ILogicalExpression fieldNameExpr = recConsExpr.getArguments().get(j).getValue(); - switch (fieldNameExpr.getExpressionTag()) { - case CONSTANT: // Top fields only - IAObject object = ((AsterixConstantValue) ((ConstantExpression) fieldNameExpr) - .getValue()).getObject(); - if (object.getType().getTypeTag() == ATypeTag.STRING) { - // Get the actual "field-name" string - ILogicalExpression recFieldExpr = recConsExpr.getArguments().get(j + 1) - .getValue(); - if (recFieldExpr.getExpressionTag() == LogicalExpressionTag.CONSTANT) { - fieldName = (AString) ((AsterixConstantValue) ((ConstantExpression) recFieldExpr) - .getValue()).getObject(); - } - } - break; - default: - throw new AlgebricksException(fieldNameExpr + " is not supported."); + if (ConstantExpressionUtil.getStringConstant(fieldNameExpr) == null) { + throw new AlgebricksException(fieldNameExpr + " is not supported."); } + // Get the actual "field-name" string + fieldName = ConstantExpressionUtil.getStringArgument(recConsExpr, j + 1); } else if (fn[j].equals(FIELD_VALUE_VALUE)) { fieldType = ft[j]; } } if (fieldName != null) { - additionalFields.put(fieldName.getStringValue(), fieldType); + additionalFields.put(fieldName, fieldType); } } } diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordConstructorResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordConstructorResultType.java index 1a977db..a5d6989 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordConstructorResultType.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordConstructorResultType.java @@ -21,18 +21,15 @@ import java.util.Iterator; -import org.apache.asterix.om.base.AString; -import org.apache.asterix.om.constants.AsterixConstantValue; import org.apache.asterix.om.typecomputer.base.IResultTypeComputer; import org.apache.asterix.om.typecomputer.base.TypeCastUtils; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.commons.lang3.mutable.Mutable; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; 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.IVariableTypeEnvironment; import org.apache.hyracks.algebricks.core.algebra.metadata.IMetadataProvider; @@ -61,19 +58,12 @@ Iterator<Mutable<ILogicalExpression>> argIter = f.getArguments().iterator(); while (argIter.hasNext()) { ILogicalExpression e1 = argIter.next().getValue(); - if (e1.getExpressionTag() == LogicalExpressionTag.CONSTANT) { - ConstantExpression nameExpr = (ConstantExpression) e1; - if (!(nameExpr.getValue() instanceof AsterixConstantValue)) { - throw new AlgebricksException("Expecting a string and found " + nameExpr.getValue() + " instead."); - } - fieldNames[i] = ((AString) ((AsterixConstantValue) nameExpr.getValue()).getObject()).getStringValue(); + fieldNames[i] = ConstantExpressionUtil.getStringConstant(e1); + if (fieldNames[i] == null) { + throw new AlgebricksException("Expecting a string and found " + e1 + " instead."); } ILogicalExpression e2 = argIter.next().getValue(); - try { - fieldTypes[i] = (IAType) env.getType(e2); - } catch (AlgebricksException e) { - throw new AlgebricksException(e); - } + fieldTypes[i] = (IAType) env.getType(e2); i++; } return new ARecordType(null, fieldNames, fieldTypes, isOpen); diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/util/ConstantExpressionUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/util/ConstantExpressionUtil.java similarity index 70% rename from asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/util/ConstantExpressionUtil.java rename to asterixdb/asterix-om/src/main/java/org/apache/asterix/om/util/ConstantExpressionUtil.java index 300ef9d..c67030a 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/algebra/util/ConstantExpressionUtil.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/util/ConstantExpressionUtil.java @@ -16,9 +16,11 @@ * specific language governing permissions and limitations * under the License. */ -package org.apache.asterix.algebra.util; +package org.apache.asterix.om.util; +import org.apache.asterix.om.base.ABoolean; import org.apache.asterix.om.base.AInt32; +import org.apache.asterix.om.base.AInt64; import org.apache.asterix.om.base.AString; import org.apache.asterix.om.base.IAObject; import org.apache.asterix.om.constants.AsterixConstantValue; @@ -31,8 +33,10 @@ public class ConstantExpressionUtil { - private static IAObject getAsterixConstantValue(AbstractFunctionCallExpression f, int index, ATypeTag typeTag) { - final ILogicalExpression expr = f.getArguments().get(index).getValue(); + private ConstantExpressionUtil() { + } + + private static IAObject getConstantIaObject(ILogicalExpression expr, ATypeTag typeTag) { if (expr.getExpressionTag() != LogicalExpressionTag.CONSTANT) { return null; } @@ -44,16 +48,34 @@ return iaObject.getType().getTypeTag() == typeTag ? iaObject : null; } - public static Integer getIntArgument(AbstractFunctionCallExpression f, int index) { - final IAObject iaObject = getAsterixConstantValue(f, index, ATypeTag.INT32); + public static Long getLongConstant(ILogicalExpression expr) { + final IAObject iaObject = getConstantIaObject(expr, ATypeTag.INT64); + return iaObject != null ? ((AInt64) iaObject).getLongValue() : null; + } + + public static Integer getIntConstant(ILogicalExpression expr) { + final IAObject iaObject = getConstantIaObject(expr, 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); + public static String getStringConstant(ILogicalExpression expr) { + final IAObject iaObject = getConstantIaObject(expr, ATypeTag.STRING); return iaObject != null ? ((AString) iaObject).getStringValue() : null; } + public static Boolean getBooleanConstant(ILogicalExpression expr) { + final IAObject iaObject = getConstantIaObject(expr, ATypeTag.BOOLEAN); + return iaObject != null ? ((ABoolean) iaObject).getBoolean() : null; + } + + public static Integer getIntArgument(AbstractFunctionCallExpression f, int index) { + return getIntConstant(f.getArguments().get(index).getValue()); + } + + public static String getStringArgument(AbstractFunctionCallExpression f, int index) { + return getStringConstant(f.getArguments().get(index).getValue()); + } + public static Integer getIntArgument(ILogicalExpression expr, int index) { return expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL ? getIntArgument((AbstractFunctionCallExpression) expr, index) : null; diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java index 8737360..5955e57 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java @@ -61,6 +61,7 @@ import org.apache.asterix.om.types.AUnionType; import org.apache.asterix.om.types.AUnorderedListType; import org.apache.asterix.om.types.IAType; +import org.apache.asterix.om.util.ConstantExpressionUtil; import org.apache.asterix.runtime.aggregates.collections.ListifyAggregateDescriptor; import org.apache.asterix.runtime.evaluators.common.CreateMBREvalFactory; import org.apache.asterix.runtime.evaluators.common.FunctionManagerImpl; @@ -77,7 +78,6 @@ import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException; import org.apache.hyracks.algebricks.common.utils.Triple; 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.base.LogicalVariable; import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression; import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression; @@ -468,19 +468,15 @@ for (int i = 0; i < n; i++) { Mutable<ILogicalExpression> argRef = expr.getArguments().get(2 * i); ILogicalExpression arg = argRef.getValue(); - if (arg.getExpressionTag() == LogicalExpressionTag.CONSTANT) { - String fn = - ((AString) ((AsterixConstantValue) ((ConstantExpression) arg).getValue()).getObject()) - .getStringValue(); - open[i] = true; + open[i] = true; + final String fn = ConstantExpressionUtil.getStringConstant(arg); + if (fn != null) { for (String s : recType.getFieldNames()) { if (s.equals(fn)) { open[i] = false; break; } } - } else { - open[i] = true; } } return open; -- To view, visit https://asterix-gerrit.ics.uci.edu/1074 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: merged Gerrit-Change-Id: I636538d6ea6c6a527aac1eb9cacdcc40a8489c02 Gerrit-PatchSet: 5 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]>
