You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by ti...@apache.org on 2016/09/23 00:12:00 UTC
asterixdb git commit: Add Record To Map Methods
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 <je...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <je...@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 <ba...@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();
+ }
}