address Pouria's review comments
git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_stabilization_printerfix_staging@1021 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
index 769ede3..47e957b 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -166,17 +166,20 @@
if (!checkArgs(expr)) {
return new Pair<Boolean, ILogicalExpression>(changed, expr);
}
- // TODO: currently ARecord is always a closed record
+ //Current ARecord SerDe assumes a closed record, so we do not constant fold open record constructors
if (expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR)
|| expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.CAST_RECORD)) {
return new Pair<Boolean, ILogicalExpression>(false, null);
}
+ //Current List SerDe assumes a strongly typed list, so we do not constant fold the list constructors if they are not strongly typed
if (expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR)
|| expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR)) {
AbstractCollectionType listType = (AbstractCollectionType) TypeComputerUtilities.getRequiredType(expr);
- // do not fold open lists nor nested lists
if (listType != null
&& (listType.getItemType().getTypeTag() == ATypeTag.ANY || listType.getItemType() instanceof AbstractCollectionType)) {
+ //case1: listType == null, could be a nested list inside a list<ANY>
+ //case2: itemType = ANY
+ //case3: itemType = a nested list
return new Pair<Boolean, ILogicalExpression>(false, null);
}
}
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
index 1d61731..0c6f2ea 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
@@ -220,10 +220,14 @@
/**
* This method statically cast the type of records from their current type to the required type.
*
- * @param func The record constructor expression.
- * @param reqType The required type.
- * @param inputType The current type.
- * @param env The type environment.
+ * @param func
+ * The record constructor expression.
+ * @param reqType
+ * The required type.
+ * @param inputType
+ * The current type.
+ * @param env
+ * The type environment.
* @throws AlgebricksException
*/
private static void staticRecordTypeCast(AbstractFunctionCallExpression func, ARecordType reqType,
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java
index 5f47f4f..283c916 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java
@@ -54,32 +54,32 @@
List<IVisitablePointable> items = listAccessor.getItems();
itemVisitorArg.first = ps;
- //print the beginning part
+ // print the beginning part
ps.print(leftParen);
// print item 0 to n-2
for (int i = 0; i < items.size() - 1; i++) {
- IVisitablePointable itemTypeTag = itemTags.get(i);
- IVisitablePointable item = items.get(i);
- ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag.getByteArray()[itemTypeTag
- .getStartOffset()]);
- itemVisitorArg.second = item.getLength() <= 1 ? ATypeTag.NULL : typeTag;
- item.accept(visitor, itemVisitorArg);
- //print the comma
+ printItem(visitor, itemTags, items, i);
+ // print the comma
ps.print(COMMA);
}
// print item n-1
if (items.size() > 0) {
- IVisitablePointable itemTypeTag = itemTags.get(itemTags.size() - 1);
- IVisitablePointable item = items.get(items.size() - 1);
- ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag.getByteArray()[itemTypeTag
- .getStartOffset()]);
- itemVisitorArg.second = item.getLength() <= 1 ? ATypeTag.NULL : typeTag;
- item.accept(visitor, itemVisitorArg);
+ printItem(visitor, itemTags, items, items.size() - 1);
}
- //print the end part
+ // print the end part
ps.print(rightParen);
}
+
+ private void printItem(APrintVisitor visitor, List<IVisitablePointable> itemTags, List<IVisitablePointable> items,
+ int i) throws AsterixException {
+ IVisitablePointable itemTypeTag = itemTags.get(i);
+ IVisitablePointable item = items.get(i);
+ ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag.getByteArray()[itemTypeTag
+ .getStartOffset()]);
+ itemVisitorArg.second = item.getLength() <= 1 ? ATypeTag.NULL : typeTag;
+ item.accept(visitor, itemVisitorArg);
+ }
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java
index 391d2c9..55f9447 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java
@@ -57,38 +57,32 @@
// print field 0 to n-2
for (int i = 0; i < fieldNames.size() - 1; i++) {
- IVisitablePointable itemTypeTag = fieldTags.get(i);
- IVisitablePointable item = fieldValues.get(i);
- ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag.getByteArray()[itemTypeTag
- .getStartOffset()]);
- itemVisitorArg.second = item.getLength() <= 1 ? ATypeTag.NULL : typeTag;
-
- // print field name
- fieldNames.get(i).accept(visitor, nameVisitorArg);
- ps.print(COLON);
- // print field value
- item.accept(visitor, itemVisitorArg);
-
+ printField(ps, visitor, fieldNames, fieldTags, fieldValues, i);
// print the comma
ps.print(COMMA);
}
// print field n-1
if (fieldValues.size() > 0) {
- IVisitablePointable itemTypeTag = fieldTags.get(fieldTags.size() - 1);
- IVisitablePointable item = fieldValues.get(fieldValues.size() - 1);
- ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag.getByteArray()[itemTypeTag
- .getStartOffset()]);
- itemVisitorArg.second = item.getLength() <= 1 ? ATypeTag.NULL : typeTag;
-
- // print field name
- fieldNames.get(fieldNames.size() - 1).accept(visitor, nameVisitorArg);
- ps.print(COLON);
- // print field value
- item.accept(visitor, itemVisitorArg);
+ printField(ps, visitor, fieldNames, fieldTags, fieldValues, fieldValues.size() - 1);
}
// print the end part
ps.print(RIGHT_PAREN);
}
+
+ private void printField(PrintStream ps, APrintVisitor visitor, List<IVisitablePointable> fieldNames,
+ List<IVisitablePointable> fieldTags, List<IVisitablePointable> fieldValues, int i) throws AsterixException {
+ IVisitablePointable itemTypeTag = fieldTags.get(i);
+ IVisitablePointable item = fieldValues.get(i);
+ ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag.getByteArray()[itemTypeTag
+ .getStartOffset()]);
+ itemVisitorArg.second = item.getLength() <= 1 ? ATypeTag.NULL : typeTag;
+
+ // print field name
+ fieldNames.get(i).accept(visitor, nameVisitorArg);
+ ps.print(COLON);
+ // print field value
+ item.accept(visitor, itemVisitorArg);
+ }
}