Repository: asterixdb Updated Branches: refs/heads/master 52ca73695 -> fe00b1af9
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/fe00b1af/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java index 031dbad..56f6e38 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java @@ -77,13 +77,16 @@ public class ATimeConstructorDescriptor extends AbstractScalarFunctionDynamicDes @Override public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException { try { - resultStorage.reset(); eval.evaluate(tuple, inputArg); byte[] serString = inputArg.getByteArray(); int offset = inputArg.getStartOffset(); int len = inputArg.getLength(); - if (serString[offset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) { + byte tt = serString[offset]; + if (tt == ATypeTag.SERIALIZED_TIME_TYPE_TAG) { + result.set(inputArg); + } else if (tt == ATypeTag.SERIALIZED_STRING_TYPE_TAG) { + resultStorage.reset(); utf8Ptr.set(serString, offset + 1, len - 1); int stringLength = utf8Ptr.getUTF8Length(); int startOffset = utf8Ptr.getCharStartOffset(); @@ -103,11 +106,11 @@ public class ATimeConstructorDescriptor extends AbstractScalarFunctionDynamicDes aTime.setValue(chrononTimeInMs); timeSerde.serialize(aTime, out); + result.set(resultStorage); } else { - throw new TypeMismatchException(getIdentifier(), 0, serString[offset], + throw new TypeMismatchException(getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG); } - result.set(resultStorage); } catch (IOException e) { throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_POLYGON_TYPE_TAG); http://git-wip-us.apache.org/repos/asf/asterixdb/blob/fe00b1af/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java index a9b1f88..64b9278 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java @@ -73,31 +73,35 @@ public class AUUIDFromStringConstructorDescriptor extends AbstractScalarFunction private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx); private AMutableUUID uuid = new AMutableUUID(); @SuppressWarnings("unchecked") - private ISerializerDeserializer<AUUID> uuidSerde = SerializerDeserializerProvider.INSTANCE - .getSerializerDeserializer(BuiltinType.AUUID); + private ISerializerDeserializer<AUUID> uuidSerde = + SerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.AUUID); private final UTF8StringPointable utf8Ptr = new UTF8StringPointable(); @Override public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException { try { - resultStorage.reset(); eval.evaluate(tuple, inputArg); byte[] serString = inputArg.getByteArray(); int start = inputArg.getStartOffset(); int len = inputArg.getLength(); - if (serString[start] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) { + + byte tt = serString[start]; + if (tt == ATypeTag.SERIALIZED_UUID_TYPE_TAG) { + result.set(inputArg); + } else if (tt == ATypeTag.SERIALIZED_STRING_TYPE_TAG) { + resultStorage.reset(); utf8Ptr.set(serString, start + 1, len - 1); // first byte: tag, next x bytes: length int offset = utf8Ptr.getCharStartOffset(); uuid.parseUUIDHexBytes(serString, offset); uuidSerde.serialize(uuid, out); + result.set(resultStorage); } else { - throw new TypeMismatchException(getIdentifier(), 0, serString[start], + throw new TypeMismatchException(getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG); } - result.set(resultStorage); } catch (IOException e) { throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_UUID_TYPE_TAG); } http://git-wip-us.apache.org/repos/asf/asterixdb/blob/fe00b1af/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java ---------------------------------------------------------------------- diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java index f7095bc..b95d512 100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java @@ -19,6 +19,7 @@ package org.apache.asterix.runtime.evaluators.constructors; import java.io.DataOutput; +import java.io.IOException; import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider; import org.apache.asterix.om.base.AMutableYearMonthDuration; @@ -78,24 +79,27 @@ public class AYearMonthDurationConstructorDescriptor extends AbstractScalarFunct @Override public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException { try { - resultStorage.reset(); eval.evaluate(tuple, inputArg); byte[] serString = inputArg.getByteArray(); int offset = inputArg.getStartOffset(); int len = inputArg.getLength(); - if (serString[offset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) { + byte tt = serString[offset]; + if (tt == ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG) { + result.set(inputArg); + } else if (tt == ATypeTag.SERIALIZED_STRING_TYPE_TAG) { + resultStorage.reset(); utf8Ptr.set(serString, offset + 1, len - 1); int stringLength = utf8Ptr.getUTF8Length(); ADurationParserFactory.parseDuration(serString, utf8Ptr.getCharStartOffset(), stringLength, aYearMonthDuration, ADurationParseOption.YEAR_MONTH); yearMonthDurationSerde.serialize(aYearMonthDuration, out); + result.set(resultStorage); } else { - throw new TypeMismatchException(getIdentifier(), 0, serString[offset], + throw new TypeMismatchException(getIdentifier(), 0, tt, ATypeTag.SERIALIZED_STRING_TYPE_TAG); } - result.set(resultStorage); - } catch (Exception e) { + } catch (IOException e) { throw new InvalidDataFormatException(getIdentifier(), e, ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG); }
