abdullah alamoudi has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/1198
Change subject: Add Record To Map Methods ...................................................................... Add Record To Map Methods Change-Id: I525b99fa56251579e3ba42d79dd578c625fcab67 --- M asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java 1 file changed, 51 insertions(+), 7 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/98/1198/1 diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java index c46b0be..00d8683 100644 --- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java +++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java @@ -22,6 +22,7 @@ import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Map; import org.apache.asterix.builders.OrderedListBuilder; import org.apache.asterix.builders.RecordBuilder; @@ -38,9 +39,14 @@ import org.apache.asterix.om.base.AInt64; import org.apache.asterix.om.base.AMutableString; import org.apache.asterix.om.base.ANull; +import org.apache.asterix.om.base.AOrderedList; +import org.apache.asterix.om.base.ARecord; import org.apache.asterix.om.base.AString; +import org.apache.asterix.om.base.IACursor; +import org.apache.asterix.om.base.IAObject; import org.apache.asterix.om.types.ARecordType; import org.apache.asterix.om.types.BuiltinType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.common.utils.Pair; import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer; import org.apache.hyracks.api.exceptions.HyracksDataException; @@ -78,16 +84,14 @@ break; default: throw new HyracksDataException(ErrorCode.ASTERIX, ErrorCode.ERROR_PARSE_ERROR, - NOT_ALLOWED_EXPRESSIONS_ERROR_MESSAGE, - new Serializable[] { Expression.Kind.LITERAL_EXPRESSION.toString(), - Expression.Kind.RECORD_CONSTRUCTOR_EXPRESSION.toString(), + NOT_ALLOWED_EXPRESSIONS_ERROR_MESSAGE, new Serializable[] { Expression.Kind.LITERAL_EXPRESSION + .toString(), Expression.Kind.RECORD_CONSTRUCTOR_EXPRESSION.toString(), Expression.Kind.LIST_CONSTRUCTOR_EXPRESSION.toString() }); } } public static void parseRecord(RecordConstructor recordValue, ArrayBackedValueStorage serialized, boolean tagged, - List<Pair<String, String>> defaults) - throws HyracksDataException { + List<Pair<String, String>> defaults) throws HyracksDataException { AMutableString fieldNameString = new AMutableString(null); ArrayBackedValueStorage fieldName = new ArrayBackedValueStorage(); ArrayBackedValueStorage fieldValue = new ArrayBackedValueStorage(); @@ -102,8 +106,8 @@ // get key fieldNameString.setValue(exprToStringLiteral(fb.getLeftExpr()).getStringValue()); if (!fieldNames.add(fieldNameString.getStringValue())) { - throw new HyracksDataException( - "Field " + fieldNameString.getStringValue() + " was specified multiple times"); + throw new HyracksDataException("Field " + fieldNameString.getStringValue() + + " was specified multiple times"); } stringSerde.serialize(fieldNameString, fieldName.getDataOutput()); // get value @@ -187,4 +191,44 @@ "Unknown Literal Type %1$s", value.getLiteralType()); } } + + public static void recordToMap(Map<String, String> map, ARecord record) + throws AlgebricksException { + String[] keys = record.getType().getFieldNames(); + for (int i = 0; i < keys.length; i++) { + String key = keys[i]; + String value = aObjToString(record.getValueByPos(i)); + map.put(key, value); + } + } + + public static String aObjToString(IAObject aObj) throws AlgebricksException { + switch (aObj.getType().getTypeTag()) { + case DOUBLE: + return Double.toString(((ADouble) aObj).getDoubleValue()); + case INT64: + return Long.toString(((AInt64) aObj).getLongValue()); + case ORDEREDLIST: + return aOrderedListToString((AOrderedList) aObj); + case STRING: + return ((AString) aObj).getStringValue(); + default: + throw new AlgebricksException("value of type " + aObj.getType() + " is not supported yet"); + } + } + + private static String aOrderedListToString(AOrderedList ol) throws AlgebricksException { + StringBuilder delimitedList = new StringBuilder(); + IACursor cursor = ol.getCursor(); + if (cursor.next()) { + IAObject next = cursor.get(); + delimitedList.append(aObjToString(next)); + } + while (cursor.next()) { + IAObject next = cursor.get(); + delimitedList.append(","); + delimitedList.append(aObjToString(next)); + } + return delimitedList.toString(); + } } -- To view, visit https://asterix-gerrit.ics.uci.edu/1198 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I525b99fa56251579e3ba42d79dd578c625fcab67 Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: abdullah alamoudi <bamou...@gmail.com>