You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by bu...@apache.org on 2016/02/13 03:15:45 UTC
[16/24] incubator-asterixdb git commit: Move to non-copy-based
evaluator interfaces for all function implementations,
including: - scalar functions, - aggregate functions,
- running aggregate functions, - unnesting functions
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java
index 0054848..31ceb9f 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADayTimeDurationConstructorDescriptor.java
@@ -34,11 +34,13 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -54,18 +56,18 @@ public class ADayTimeDurationConstructorDescriptor extends AbstractScalarFunctio
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private String errorMessage = "This can not be an instance of day-time-duration";
private AMutableDayTimeDuration aDayTimeDuration = new AMutableDayTimeDuration(0);
@SuppressWarnings("unchecked")
@@ -77,15 +79,16 @@ public class ADayTimeDurationConstructorDescriptor extends AbstractScalarFunctio
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
-
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ 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) {
+ utf8Ptr.set(serString, offset + 1, len - 1);
int stringLength = utf8Ptr.getUTF8Length();
int startOffset = utf8Ptr.getCharStartOffset();
@@ -93,11 +96,12 @@ public class ADayTimeDurationConstructorDescriptor extends AbstractScalarFunctio
aDayTimeDuration, ADurationParseOption.DAY_TIME);
dayTimeDurationSerde.serialize(aDayTimeDuration, out);
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ } else if (serString[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
} else {
throw new AlgebricksException(errorMessage);
}
+ result.set(resultStorage);
} catch (Exception e1) {
throw new AlgebricksException(e1);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
index 16eea9d..f2dbf20 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
@@ -34,12 +34,14 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
import org.apache.hyracks.util.string.UTF8StringUtil;
@@ -54,18 +56,17 @@ public class ADoubleConstructorDescriptor extends AbstractScalarFunctionDynamicD
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
-
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
+ private final ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private final DataOutput out = resultStorage.getDataOutput();
+ private final IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private String errorMessage = "This can not be an instance of double";
private final byte[] POSITIVE_INF = UTF8StringUtil.writeStringToBytes("INF");
private final byte[] NEGATIVE_INF = UTF8StringUtil.writeStringToBytes("-INF");
@@ -83,32 +84,35 @@ public class ADoubleConstructorDescriptor extends AbstractScalarFunctionDynamicD
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ resultStorage.reset();
+ eval.evaluate(tuple, inputArg);
+ byte[] serString = inputArg.getByteArray();
+ int offset = inputArg.getStartOffset();
+ int len = inputArg.getLength();
- if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(), POSITIVE_INF, 0,
+ if (serString[offset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ if (utf8BinaryComparator.compare(serString, offset + 1, len - 1, POSITIVE_INF, 0,
5) == 0) {
aDouble.setValue(Double.POSITIVE_INFINITY);
- } else if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(),
- NEGATIVE_INF, 0, 6) == 0) {
+ } else if (utf8BinaryComparator.compare(serString, offset + 1, len - 1, NEGATIVE_INF, 0,
+ 6) == 0) {
aDouble.setValue(Double.NEGATIVE_INFINITY);
- } else if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(), NAN, 0,
+ } else if (utf8BinaryComparator.compare(serString, offset + 1, len - 1, NAN, 0,
5) == 0) {
aDouble.setValue(Double.NaN);
} else {
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ utf8Ptr.set(serString, offset + 1, len - 1);
aDouble.setValue(Double.parseDouble(utf8Ptr.toString()));
}
doubleSerde.serialize(aDouble, out);
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)
+ } else if (serString[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
+ result.set(resultStorage);
} catch (IOException e1) {
throw new AlgebricksException(errorMessage);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
index 2f95a2f..7ca7ecc 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
@@ -34,11 +34,13 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -52,18 +54,17 @@ public class ADurationConstructorDescriptor extends AbstractScalarFunctionDynami
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
-
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private String errorMessage = "This can not be an instance of duration";
private AMutableDuration aDuration = new AMutableDuration(0, 0);
@SuppressWarnings("unchecked")
@@ -75,27 +76,26 @@ public class ADurationConstructorDescriptor extends AbstractScalarFunctionDynami
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
+ resultStorage.reset();
+ eval.evaluate(tuple, inputArg);
+ byte[] serString = inputArg.getByteArray();
+ int offset = inputArg.getStartOffset();
+ int len = inputArg.getLength();
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
-
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ if (serString[offset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ utf8Ptr.set(serString, offset + 1, len - 1);
int stringLength = utf8Ptr.getUTF8Length();
-
ADurationParserFactory.parseDuration(serString, utf8Ptr.getCharStartOffset(),
stringLength, aDuration, ADurationParseOption.All);
-
durationSerde.serialize(aDuration, out);
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ } else if (serString[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
} else {
throw new AlgebricksException(errorMessage);
}
+ result.set(resultStorage);
} catch (Exception e1) {
throw new AlgebricksException(e1);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
index d5c2b8c..8e92116 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
@@ -34,12 +34,14 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.IBinaryComparator;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
import org.apache.hyracks.util.string.UTF8StringUtil;
@@ -54,17 +56,17 @@ public class AFloatConstructorDescriptor extends AbstractScalarFunctionDynamicDe
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
-
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private String errorMessage = "This can not be an instance of float";
private final byte[] POSITIVE_INF = UTF8StringUtil.writeStringToBytes("INF");
private final byte[] NEGATIVE_INF = UTF8StringUtil.writeStringToBytes("-INF");
@@ -90,131 +92,39 @@ public class AFloatConstructorDescriptor extends AbstractScalarFunctionDynamicDe
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(), POSITIVE_INF, 0,
+ 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) {
+ if (utf8BinaryComparator.compare(serString, offset + 1, len - 1, POSITIVE_INF, 0,
5) == 0) {
aFloat.setValue(Float.POSITIVE_INFINITY);
- } else if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(),
- NEGATIVE_INF, 0, 6) == 0) {
+ } else if (utf8BinaryComparator.compare(serString, offset + 1, len - 1, NEGATIVE_INF, 0,
+ 6) == 0) {
aFloat.setValue(Float.NEGATIVE_INFINITY);
- } else if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(), NAN, 0,
+ } else if (utf8BinaryComparator.compare(serString, offset + 1, len - 1, NAN, 0,
5) == 0) {
aFloat.setValue(Float.NaN);
} else {
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ utf8Ptr.set(serString, offset + 1, len - 1);
aFloat.setValue(Float.parseFloat(utf8Ptr.toString()));
}
floatSerde.serialize(aFloat, out);
-
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)
+ } else if (serString[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
+ result.set(resultStorage);
} catch (IOException e1) {
throw new AlgebricksException(errorMessage);
}
}
-
- // private float parseFloat(byte[] serString) throws
- // AlgebricksException {
- //
- // if (serString[offset] == '+')
- // offset++;
- // else if (serString[offset] == '-') {
- // offset++;
- // positiveInteger = false;
- // }
- //
- // if ((serString[offset] == '.') || (serString[offset] ==
- // 'e') || (serString[offset] == 'E')
- // || (serString[outInput.getLength() - 1] == '.')
- // || (serString[outInput.getLength() - 1] == 'E')
- // || (serString[outInput.getLength() - 1] == 'e'))
- // throw new AlgebricksException(errorMessage);
- //
- // for (; offset < outInput.getLength(); offset++) {
- // if (serString[offset] >= '0' && serString[offset] <= '9')
- // {
- // value = value * 10 + serString[offset] - '0';
- // } else
- // switch (serString[offset]) {
- // case '.':
- // if (expectingInteger) {
- // if (serString[offset + 1] < '0' || serString[offset + 1]
- // > '9')
- // throw new AlgebricksException(errorMessage);
- // expectingInteger = false;
- // expectingFraction = true;
- // integerPart = value;
- // value = 0;
- // pointIndex = offset;
- // eIndex = outInput.getLength();
- // } else
- // throw new AlgebricksException(errorMessage);
- // break;
- // case 'e':
- // case 'E':
- // if (expectingInteger) {
- // expectingInteger = false;
- // integerPart = value;
- // pointIndex = offset - 1;
- // eIndex = offset;
- // value = 0;
- // expectingExponent = true;
- // } else if (expectingFraction) {
- //
- // expectingFraction = false;
- // fractionPart = value;
- // eIndex = offset;
- // value = 0;
- // expectingExponent = true;
- // } else
- // throw new AlgebricksException();
- //
- // if (serString[offset + 1] == '+')
- // offset++;
- // else if (serString[offset + 1] == '-') {
- // offset++;
- // positiveExponent = false;
- // } else if (serString[offset + 1] < '0' ||
- // serString[offset + 1] > '9')
- // throw new AlgebricksException(errorMessage);
- // break;
- // default:
- // throw new AlgebricksException(errorMessage);
- // }
- // }
- //
- // if (expectingInteger)
- // integerPart = value;
- // else if (expectingFraction)
- // fractionPart = value;
- // else if (expectingExponent)
- // exponentPart = value * (positiveExponent ? 1 : -1);
- //
- // // floatValue = (float) ( integerPart + ( fractionPart *
- // (1.0f / Math.pow(10.0f, eIndex - pointIndex - 1))));
- // // floatValue *= (float) Math.pow(10.0f, exponentPart);
- //
- // floatValue = Float.parseFloat(integerPart+"."+
- // fractionPart+"e"+ exponentPart);
- //
- // if (integerPart != 0
- // && (floatValue == Float.POSITIVE_INFINITY || floatValue
- // == Float.NEGATIVE_INFINITY || floatValue == 0))
- // throw new AlgebricksException(errorMessage);
- //
- // if (floatValue > 0 && !positiveInteger)
- // floatValue *= -1;
- //
- // return floatValue;
- // }
};
}
};
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
index 1919344..46bfbb2 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
@@ -33,11 +33,13 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -52,18 +54,17 @@ public class AInt16ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
-
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private short value;
private int offset;
private boolean positive;
@@ -78,43 +79,51 @@ public class AInt16ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ resultStorage.reset();
+ eval.evaluate(tuple, inputArg);
+ byte[] serString = inputArg.getByteArray();
+ int startOffset = inputArg.getStartOffset();
+ int len = inputArg.getLength();
+
+ if (serString[startOffset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ utf8Ptr.set(serString, startOffset + 1, len - 1);
offset = utf8Ptr.getCharStartOffset();
value = 0;
positive = true;
- if (serString[offset] == '+')
+ if (serString[offset] == '+') {
offset++;
- else if (serString[offset] == '-') {
+ } else if (serString[offset] == '-') {
offset++;
positive = false;
}
- for (; offset < outInput.getLength(); offset++) {
- if (serString[offset] >= '0' && serString[offset] <= '9')
+ int end = startOffset + len;
+ for (; offset < end; offset++) {
+ if (serString[offset] >= '0' && serString[offset] <= '9') {
value = (short) (value * 10 + serString[offset] - '0');
- else if (serString[offset] == 'i' && serString[offset + 1] == '1'
- && serString[offset + 2] == '6' && offset + 3 == outInput.getLength())
+ } else if (serString[offset] == 'i' && serString[offset + 1] == '1'
+ && serString[offset + 2] == '6' && offset + 3 == end) {
break;
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
}
- if (value < 0)
+ if (value < 0) {
throw new AlgebricksException(errorMessage);
- if (value > 0 && !positive)
+ }
+ if (value > 0 && !positive) {
value *= -1;
+ }
aInt16.setValue(value);
int16Serde.serialize(aInt16, out);
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)
+ } else if (serString[startOffset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
+ result.set(resultStorage);
} catch (IOException e1) {
throw new AlgebricksException(errorMessage);
}
@@ -122,6 +131,7 @@ public class AInt16ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
};
}
};
+
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
index 40e1289..9a7fe94 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
@@ -33,11 +33,13 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -51,18 +53,18 @@ public class AInt32ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private int value, offset;
private boolean positive;
private String errorMessage = "This can not be an instance of int32";
@@ -76,43 +78,51 @@ public class AInt32ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ resultStorage.reset();
+ eval.evaluate(tuple, inputArg);
+ byte[] serString = inputArg.getByteArray();
+ int startOffset = inputArg.getStartOffset();
+ int len = inputArg.getLength();
+
+ if (serString[startOffset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ utf8Ptr.set(serString, startOffset + 1, len - 1);
offset = utf8Ptr.getCharStartOffset();
value = 0;
positive = true;
- if (serString[offset] == '+')
+ if (serString[offset] == '+') {
offset++;
- else if (serString[offset] == '-') {
+ } else if (serString[offset] == '-') {
offset++;
positive = false;
}
- for (; offset < outInput.getLength(); offset++) {
- if (serString[offset] >= '0' && serString[offset] <= '9')
+ int end = startOffset + len;
+ for (; offset < end; offset++) {
+ if (serString[offset] >= '0' && serString[offset] <= '9') {
value = value * 10 + serString[offset] - '0';
- else if (serString[offset] == 'i' && serString[offset + 1] == '3'
- && serString[offset + 2] == '2' && offset + 3 == outInput.getLength())
+ } else if (serString[offset] == 'i' && serString[offset + 1] == '3'
+ && serString[offset + 2] == '2' && offset + 3 == end) {
break;
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
}
- if (value < 0)
+ if (value < 0) {
throw new AlgebricksException(errorMessage);
- if (value > 0 && !positive)
+ }
+ if (value > 0 && !positive) {
value *= -1;
+ }
aInt32.setValue(value);
int32Serde.serialize(aInt32, out);
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)
+ } else if (serString[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
+ result.set(resultStorage);
} catch (IOException e1) {
throw new AlgebricksException(errorMessage);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
index 2de9463..fc82129 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
@@ -33,11 +33,13 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -51,18 +53,18 @@ public class AInt64ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private long value;
private int offset;
private boolean positive;
@@ -77,44 +79,51 @@ public class AInt64ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ resultStorage.reset();
+ eval.evaluate(tuple, inputArg);
+ byte[] serString = inputArg.getByteArray();
+ int startOffset = inputArg.getStartOffset();
+ int len = inputArg.getLength();
+
+ if (serString[startOffset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ utf8Ptr.set(serString, startOffset + 1, len - 1);
offset = utf8Ptr.getCharStartOffset();
value = 0;
positive = true;
- if (serString[offset] == '+')
+ if (serString[offset] == '+') {
offset++;
- else if (serString[offset] == '-') {
+ } else if (serString[offset] == '-') {
offset++;
positive = false;
}
- for (; offset < outInput.getLength(); offset++) {
- if (serString[offset] >= '0' && serString[offset] <= '9')
+ int end = startOffset + len;
+ for (; offset < end; offset++) {
+ if (serString[offset] >= '0' && serString[offset] <= '9') {
value = value * 10 + serString[offset] - '0';
- else if (serString[offset] == 'i' && serString[offset + 1] == '6'
- && serString[offset + 2] == '4' && offset + 3 == outInput.getLength())
+ } else if (serString[offset] == 'i' && serString[offset + 1] == '6'
+ && serString[offset + 2] == '4' && offset + 3 == end) {
break;
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
}
if (value < 0 && value != -9223372036854775808L) {
throw new AlgebricksException(errorMessage);
}
- if (value > 0 && !positive)
+ if (value > 0 && !positive) {
value *= -1;
+ }
aInt64.setValue(value);
int64Serde.serialize(aInt64, out);
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)
+ } else if (serString[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
+ result.set(resultStorage);
} catch (IOException e1) {
throw new AlgebricksException(errorMessage);
}
@@ -122,6 +131,7 @@ public class AInt64ConstructorDescriptor extends AbstractScalarFunctionDynamicDe
};
}
};
+
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
index 106464b..c8adda0 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
@@ -33,11 +33,13 @@ import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -51,18 +53,18 @@ public class AInt8ConstructorDescriptor extends AbstractScalarFunctionDynamicDes
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable inputArg = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private byte value;
private int offset;
private boolean positive;
@@ -77,43 +79,51 @@ public class AInt8ConstructorDescriptor extends AbstractScalarFunctionDynamicDes
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
- outInput.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
- if (serString[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ resultStorage.reset();
+ eval.evaluate(tuple, inputArg);
+ byte[] serString = inputArg.getByteArray();
+ int startOffset = inputArg.getStartOffset();
+ int len = inputArg.getLength();
+
+ if (serString[startOffset] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ utf8Ptr.set(serString, startOffset + 1, len - 1);
offset = utf8Ptr.getCharStartOffset();
value = 0;
positive = true;
- if (serString[offset] == '+')
+ if (serString[offset] == '+') {
offset++;
- else if (serString[offset] == '-') {
+ } else if (serString[offset] == '-') {
offset++;
positive = false;
}
- for (; offset < outInput.getLength(); offset++) {
- if (serString[offset] >= '0' && serString[offset] <= '9')
+ int end = startOffset + len;
+ for (; offset < end; offset++) {
+ if (serString[offset] >= '0' && serString[offset] <= '9') {
value = (byte) (value * 10 + serString[offset] - '0');
- else if (serString[offset] == 'i' && serString[offset + 1] == '8'
- && offset + 2 == outInput.getLength())
+ } else if (serString[offset] == 'i' && serString[offset + 1] == '8'
+ && offset + 2 == end) {
break;
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
}
- if (value < 0)
+ if (value < 0) {
throw new AlgebricksException(errorMessage);
- if (value > 0 && !positive)
+ }
+ if (value > 0 && !positive) {
value *= -1;
+ }
aInt8.setValue(value);
int8Serde.serialize(aInt8, out);
- } else if (serString[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)
+ } else if (serString[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
- else
+ } else {
throw new AlgebricksException(errorMessage);
+ }
+ result.set(resultStorage);
} catch (IOException e1) {
throw new AlgebricksException(errorMessage);
}
@@ -121,6 +131,7 @@ public class AInt8ConstructorDescriptor extends AbstractScalarFunctionDynamicDes
};
}
};
+
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
index a342b70..b5b6ddf 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalConstructorDescriptor.java
@@ -37,10 +37,12 @@ import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -55,19 +57,19 @@ public class AIntervalConstructorDescriptor extends AbstractScalarFunctionDynami
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
-
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
- private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
- private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
- private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr0 = new VoidPointable();
+ private IPointable argPtr1 = new VoidPointable();
+ private IScalarEvaluator eval0 = args[0].createScalarEvaluator(ctx);
+ private IScalarEvaluator eval1 = args[1].createScalarEvaluator(ctx);
private String errorMessage = "This can not be an instance of interval (only support Date/Time/Datetime)";
private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
@SuppressWarnings("unchecked")
@@ -78,48 +80,46 @@ public class AIntervalConstructorDescriptor extends AbstractScalarFunctionDynami
.getSerializerDeserializer(BuiltinType.ANULL);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval0.evaluate(tuple, argPtr0);
+ eval1.evaluate(tuple, argPtr1);
- argOut0.reset();
- argOut1.reset();
- eval0.evaluate(tuple);
- eval1.evaluate(tuple);
+ byte[] bytes0 = argPtr0.getByteArray();
+ int offset0 = argPtr0.getStartOffset();
+ byte[] bytes1 = argPtr1.getByteArray();
+ int offset1 = argPtr1.getStartOffset();
try {
-
- if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG
- || argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (bytes0[offset0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG
+ || bytes1[offset1] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
}
- if (argOut0.getByteArray()[0] != argOut1.getByteArray()[0]) {
- throw new AlgebricksException(
- FID.getName()
- + ": expects both arguments to be of the same type. Either DATE/TIME/DATETIME, but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(
- argOut0.getByteArray()[0])
- + " and " + EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(argOut0.getByteArray()[1]));
+ if (bytes0[offset0] != bytes1[offset1]) {
+ throw new AlgebricksException(FID.getName()
+ + ": expects both arguments to be of the same type. Either DATE/TIME/DATETIME, but got "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]) + " and "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]));
}
long intervalStart = 0, intervalEnd = 0;
- ATypeTag intervalType = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(argOut0.getByteArray()[0]);
+ ATypeTag intervalType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]);
switch (intervalType) {
case DATE:
- intervalStart = ADateSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
- intervalEnd = ADateSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+ intervalStart = ADateSerializerDeserializer.getChronon(bytes0, offset0 + 1);
+ intervalEnd = ADateSerializerDeserializer.getChronon(bytes1, offset1 + 1);
break;
case TIME:
- intervalStart = ATimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
- intervalEnd = ATimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+ intervalStart = ATimeSerializerDeserializer.getChronon(bytes0, offset0 + 1);
+ intervalEnd = ATimeSerializerDeserializer.getChronon(bytes1, offset1 + 1);
break;
case DATETIME:
- intervalStart = ADateTimeSerializerDeserializer.getChronon(argOut0.getByteArray(),
- 1);
- intervalEnd = ADateTimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+ intervalStart = ADateTimeSerializerDeserializer.getChronon(bytes0, offset0 + 1);
+ intervalEnd = ADateTimeSerializerDeserializer.getChronon(bytes1, offset1 + 1);
break;
default:
throw new AlgebricksException(
@@ -134,12 +134,12 @@ public class AIntervalConstructorDescriptor extends AbstractScalarFunctionDynami
aInterval.setValue(intervalStart, intervalEnd, intervalType.serialize());
intervalSerde.serialize(aInterval, out);
-
} catch (IOException e1) {
throw new AlgebricksException(errorMessage);
} catch (Exception e2) {
throw new AlgebricksException(e2);
}
+ result.set(resultStorage);
}
};
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
index 5638227..7c1096a 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
@@ -44,11 +44,13 @@ import org.apache.asterix.om.types.EnumDeserializer;
import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -64,20 +66,20 @@ public class AIntervalStartFromDateConstructorDescriptor extends AbstractScalarF
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
-
- private DataOutput out = output.getDataOutput();
-
- private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
- private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
- private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
- private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+ public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
+
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr0 = new VoidPointable();
+ private IPointable argPtr1 = new VoidPointable();
+ private IScalarEvaluator eval0 = args[0].createScalarEvaluator(ctx);
+ private IScalarEvaluator eval1 = args[1].createScalarEvaluator(ctx);
private String errorMessage = "This can not be an instance of interval (from Date)";
private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
@@ -91,66 +93,66 @@ public class AIntervalStartFromDateConstructorDescriptor extends AbstractScalarF
private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
- argOut0.reset();
- argOut1.reset();
- eval0.evaluate(tuple);
- eval1.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval0.evaluate(tuple, argPtr0);
+ eval1.evaluate(tuple, argPtr1);
+
+ byte[] bytes0 = argPtr0.getByteArray();
+ int offset0 = argPtr0.getStartOffset();
+ int len0 = argPtr0.getLength();
+ byte[] bytes1 = argPtr1.getByteArray();
+ int offset1 = argPtr1.getStartOffset();
+ int len1 = argPtr1.getLength();
try {
-
- if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG
- || argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (bytes0[offset0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG
+ || bytes1[offset1] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
}
long intervalStart = 0, intervalEnd = 0;
-
- if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
- intervalStart = ADateSerializerDeserializer.getChronon(argOut0.getByteArray(), 1)
+ if (bytes0[offset0] == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
+ intervalStart = ADateSerializerDeserializer.getChronon(bytes0, offset0 + 1)
* GregorianCalendarSystem.CHRONON_OF_DAY;
- } else if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
- utf8Ptr.set(argOut0.getByteArray(), 1, argOut0.getLength() - 1);
+ } else if (bytes0[offset0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ utf8Ptr.set(bytes0, offset0 + 1, len0 - 1);
// start date
int stringLength = utf8Ptr.getUTF8Length();
int startOffset = utf8Ptr.getCharStartOffset();
- intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), startOffset,
- stringLength);
+ intervalStart = ADateParserFactory.parseDatePart(bytes0, startOffset, stringLength);
} else {
- throw new AlgebricksException(FID.getName()
- + ": expects NULL/STRING/DATE for the first argument, but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+ throw new AlgebricksException(
+ FID.getName() + ": expects NULL/STRING/DATE for the first argument, but got "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]));
}
- if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
+ if (bytes1[offset1] == ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
- ADurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(), 1),
- ADurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1), false);
- } else if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG) {
+ ADurationSerializerDeserializer.getYearMonth(bytes1, offset1 + 1),
+ ADurationSerializerDeserializer.getDayTime(bytes1, offset1 + 1), false);
+ } else if (bytes1[offset1] == ATypeTag.SERIALIZED_DAY_TIME_DURATION_TYPE_TAG) {
intervalEnd = DurationArithmeticOperations.addDuration(intervalStart, 0,
- ADayTimeDurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1),
- false);
- } else if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG) {
+ ADayTimeDurationSerializerDeserializer.getDayTime(bytes1, offset1 + 1), false);
+ } else if (bytes1[offset1] == ATypeTag.SERIALIZED_YEAR_MONTH_DURATION_TYPE_TAG) {
intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
- AYearMonthDurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(),
- 1),
- 0, false);
- } else if (argOut1.getByteArray()[0] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
+ AYearMonthDurationSerializerDeserializer.getYearMonth(bytes1, offset1 + 1), 0,
+ false);
+ } else if (bytes1[offset1] == ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
// duration
- utf8Ptr.set(argOut1.getByteArray(), 1, argOut1.getLength() - 1);
+ utf8Ptr.set(bytes1, offset1 + 1, len1 - 1);
int stringLength = utf8Ptr.getUTF8Length();
- ADurationParserFactory.parseDuration(argOut1.getByteArray(),
- utf8Ptr.getCharStartOffset(), stringLength, aDuration,
- ADurationParseOption.All);
+ ADurationParserFactory.parseDuration(bytes1, utf8Ptr.getCharStartOffset(), stringLength,
+ aDuration, ADurationParseOption.All);
intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
aDuration.getMonths(), aDuration.getMilliseconds(), false);
} else {
throw new AlgebricksException(FID.getName()
+ ": expects NULL/STRING/DURATION for the second argument, but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]));
}
intervalStart = GregorianCalendarSystem.getChrononInDays(intervalStart);
@@ -169,6 +171,7 @@ public class AIntervalStartFromDateConstructorDescriptor extends AbstractScalarF
} catch (Exception e2) {
throw new AlgebricksException(e2);
}
+ result.set(resultStorage);
}
};
}