Till Westmann has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1074
Change subject: ConstantExpressionUtil improvements
......................................................................
ConstantExpressionUtil improvements
Change-Id: I636538d6ea6c6a527aac1eb9cacdcc40a8489c02
---
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/PushFieldAccessRule.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-metadata/src/main/java/org/apache/asterix/metadata/functions/MetadataBuiltinFunctions.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/OpenRecordConstructorResultType.java
M
asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.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
11 files changed, 53 insertions(+), 110 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/74/1074/1
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/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/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-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/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/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..efe8287 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,18 @@
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
+ ILogicalExpression recFieldExpr =
recConsExpr.getArguments().get(j + 1).getValue();
+ fieldName =
ConstantExpressionUtil.getStringConstant(recFieldExpr);
} 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-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 82%
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..9d92242 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,7 +16,7 @@
* 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.AInt32;
import org.apache.asterix.om.base.AString;
@@ -31,8 +31,7 @@
public class ConstantExpressionUtil {
- private static IAObject
getAsterixConstantValue(AbstractFunctionCallExpression f, int index, ATypeTag
typeTag) {
- final ILogicalExpression expr = f.getArguments().get(index).getValue();
+ private static IAObject getConstantIaObject(ILogicalExpression expr,
ATypeTag typeTag) {
if (expr.getExpressionTag() != LogicalExpressionTag.CONSTANT) {
return null;
}
@@ -44,16 +43,24 @@
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 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 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: newchange
Gerrit-Change-Id: I636538d6ea6c6a527aac1eb9cacdcc40a8489c02
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann <[email protected]>