Repository: asterixdb Updated Branches: refs/heads/master d2fc11deb -> 473fc18e7
Add Record To Map Methods Change-Id: I525b99fa56251579e3ba42d79dd578c625fcab67 Reviewed-on: https://asterix-gerrit.ics.uci.edu/1198 Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Reviewed-by: Till Westmann <ti...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/473fc18e Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/473fc18e Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/473fc18e Branch: refs/heads/master Commit: 473fc18e7746af8c6bc5b1f7144eba940f89bd6b Parents: d2fc11d Author: Abdullah Alamoudi <bamou...@gmail.com> Authored: Thu Sep 22 22:48:27 2016 +0300 Committer: Till Westmann <ti...@apache.org> Committed: Thu Sep 22 17:11:29 2016 -0700 ---------------------------------------------------------------------- .../lang/common/util/LangRecordParseUtil.java | 58 +++++++++++++++++--- 1 file changed, 51 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/asterixdb/blob/473fc18e/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java ---------------------------------------------------------------------- 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.io.Serializable; 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.ADouble; 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 @@ public class LangRecordParseUtil { 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 @@ public class LangRecordParseUtil { // 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 @@ public class LangRecordParseUtil { "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(); + } }