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:32 UTC
[03/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/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
index 3d03c51..fae8566 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
@@ -36,11 +36,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.api.exceptions.HyracksDataException;
-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;
@@ -61,18 +63,20 @@ public class DatetimeFromUnixTimeInMsDescriptor extends AbstractScalarFunctionDy
* @see org.apache.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
*/
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
// possible output types
@SuppressWarnings("unchecked")
@@ -85,43 +89,40 @@ public class DatetimeFromUnixTimeInMsDescriptor extends AbstractScalarFunctionDy
private AMutableDateTime aDatetime = new AMutableDateTime(0);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut.reset();
- eval.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval.evaluate(tuple, argPtr);
+ byte[] bytes = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
try {
-
- ATypeTag argOutTypeTag = ATypeTag.VALUE_TYPE_MAPPING[argOut.getByteArray()[0]];
-
- if (argOutTypeTag == ATypeTag.NULL) {
+ ATypeTag argPtrTypeTag = ATypeTag.VALUE_TYPE_MAPPING[bytes[offset]];
+ if (argPtrTypeTag == ATypeTag.NULL) {
nullSerde.serialize(ANull.NULL, out);
} else {
- switch (argOutTypeTag) {
+ switch (argPtrTypeTag) {
case INT8:
- aDatetime
- .setValue(AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1));
+ aDatetime.setValue(AInt8SerializerDeserializer.getByte(bytes, offset + 1));
break;
case INT16:
- aDatetime.setValue(AInt16SerializerDeserializer.getShort(argOut.getByteArray(),
- 1));
+ aDatetime.setValue(AInt16SerializerDeserializer.getShort(bytes, offset + 1));
break;
case INT32:
- aDatetime
- .setValue(AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1));
+ aDatetime.setValue(AInt32SerializerDeserializer.getInt(bytes, offset + 1));
break;
case INT64:
- aDatetime.setValue(AInt64SerializerDeserializer.getLong(argOut.getByteArray(),
- 1));
+ aDatetime.setValue(AInt64SerializerDeserializer.getLong(bytes, offset + 1));
break;
default:
- throw new AlgebricksException(FID.getName()
- + ": expects type INT8/INT16/INT32/INT64/NULL but got " + argOutTypeTag);
+ throw new AlgebricksException(
+ FID.getName() + ": expects type INT8/INT16/INT32/INT64/NULL but got "
+ + argPtrTypeTag);
}
datetimeSerde.serialize(aDatetime, out);
}
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
index 16e5803..1450ce6 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInSecsDescriptor.java
@@ -36,11 +36,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.api.exceptions.HyracksDataException;
-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;
@@ -61,18 +63,20 @@ public class DatetimeFromUnixTimeInSecsDescriptor extends AbstractScalarFunction
* @see org.apache.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
*/
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
// possible output types
@SuppressWarnings("unchecked")
@@ -85,44 +89,48 @@ public class DatetimeFromUnixTimeInSecsDescriptor extends AbstractScalarFunction
private AMutableDateTime aDatetime = new AMutableDateTime(0);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut.reset();
- eval.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval.evaluate(tuple, argPtr);
+
+ byte[] bytes = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+
try {
- ATypeTag argOutTypeTag = ATypeTag.VALUE_TYPE_MAPPING[argOut.getByteArray()[0]];
+ ATypeTag argPtrTypeTag = ATypeTag.VALUE_TYPE_MAPPING[bytes[offset]];
- if (argOutTypeTag == ATypeTag.NULL) {
+ if (argPtrTypeTag == ATypeTag.NULL) {
nullSerde.serialize(ANull.NULL, out);
} else {
- switch (argOutTypeTag) {
+ switch (argPtrTypeTag) {
case INT8:
- aDatetime.setValue((AInt8SerializerDeserializer.getByte(argOut.getByteArray(),
- 1) * 1000l));
+ aDatetime.setValue(
+ (AInt8SerializerDeserializer.getByte(bytes, offset + 1) * 1000l));
break;
case INT16:
- aDatetime.setValue((AInt16SerializerDeserializer.getShort(
- argOut.getByteArray(), 1) * 1000l));
+ aDatetime.setValue(
+ (AInt16SerializerDeserializer.getShort(bytes, offset + 1) * 1000l));
break;
case INT32:
- aDatetime.setValue((AInt32SerializerDeserializer.getInt(argOut.getByteArray(),
- 1) * 1000l));
+ aDatetime.setValue(
+ (AInt32SerializerDeserializer.getInt(bytes, offset + 1) * 1000l));
break;
case INT64:
- aDatetime.setValue((AInt64SerializerDeserializer.getLong(argOut.getByteArray(),
- 1) * 1000l));
+ aDatetime.setValue(
+ (AInt64SerializerDeserializer.getLong(bytes, offset + 1) * 1000l));
break;
default:
- throw new AlgebricksException(FID.getName()
- + ": expects type INT8/INT16/INT32/INT64/NULL but got " + argOutTypeTag);
+ throw new AlgebricksException(
+ FID.getName() + ": expects type INT8/INT16/INT32/INT64/NULL but got "
+ + argPtrTypeTag);
}
datetimeSerde.serialize(aDatetime, out);
}
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
-
+ 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/functions/temporal/DayOfWeekDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java
index 48e4136..d7b5044 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayOfWeekDescriptor.java
@@ -36,11 +36,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.api.exceptions.HyracksDataException;
-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;
@@ -60,18 +62,20 @@ public class DayOfWeekDescriptor extends AbstractScalarFunctionDynamicDescriptor
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
// possible returning types
@SuppressWarnings("unchecked")
@@ -84,27 +88,30 @@ public class DayOfWeekDescriptor extends AbstractScalarFunctionDynamicDescriptor
.getSerializerDeserializer(BuiltinType.ANULL);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut.reset();
- eval.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval.evaluate(tuple, argPtr);
+
+ byte[] bytes = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (bytes[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
} else {
int daysSinceAnchor;
int reminder = 0;
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
- daysSinceAnchor = (int) (ADateTimeSerializerDeserializer.getChronon(
- argOut.getByteArray(), 1) / GregorianCalendarSystem.CHRONON_OF_DAY);
- reminder = (int) (ADateTimeSerializerDeserializer.getChronon(argOut.getByteArray(),
- 1) % GregorianCalendarSystem.CHRONON_OF_DAY);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
- daysSinceAnchor = ADateSerializerDeserializer.getChronon(argOut.getByteArray(), 1);
+ if (bytes[offset] == ATypeTag.SERIALIZED_DATETIME_TYPE_TAG) {
+ daysSinceAnchor = (int) (ADateTimeSerializerDeserializer.getChronon(bytes,
+ offset + 1) / GregorianCalendarSystem.CHRONON_OF_DAY);
+ reminder = (int) (ADateTimeSerializerDeserializer.getChronon(bytes, offset + 1)
+ % GregorianCalendarSystem.CHRONON_OF_DAY);
+ } else if (bytes[offset] == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
+ daysSinceAnchor = ADateSerializerDeserializer.getChronon(bytes, offset + 1);
} else {
throw new AlgebricksException(
FID.getName() + ": expects input type DATETIME/DATE/NULL but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(argOut.getByteArray()[0]));
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]));
}
// adjust the day before 1970-01-01
@@ -132,6 +139,7 @@ public class DayOfWeekDescriptor extends AbstractScalarFunctionDynamicDescriptor
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/DayTimeDurationComparatorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
index 1a98f3c..b7d170b 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
@@ -33,11 +33,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.api.exceptions.HyracksDataException;
-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;
@@ -69,20 +71,22 @@ public class DayTimeDurationComparatorDescriptor extends AbstractScalarFunctionD
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- 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);
+ 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);
// possible output types
@SuppressWarnings("unchecked")
@@ -93,46 +97,48 @@ public class DayTimeDurationComparatorDescriptor extends AbstractScalarFunctionD
.getSerializerDeserializer(BuiltinType.ABOOLEAN);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut0.reset();
- eval0.evaluate(tuple);
- argOut1.reset();
- 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();
+ 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] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG
- || argOut1.getByteArray()[0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new AlgebricksException(
- getIdentifier().getName()
- + ": expects type NULL/DURATION, NULL/DURATION but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(
- argOut0.getByteArray()[0])
- + " and " + EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(argOut1.getByteArray()[0]));
+ if (bytes0[offset0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG
+ || bytes1[offset1] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
+ throw new AlgebricksException(getIdentifier().getName()
+ + ": expects type NULL/DURATION, NULL/DURATION but got "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]) + " and "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]));
}
- if ((ADurationSerializerDeserializer.getYearMonth(argOut0.getByteArray(), 1) != 0)
- || (ADurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(), 1) != 0)) {
+ if ((ADurationSerializerDeserializer.getYearMonth(bytes0, offset0 + 1) != 0)
+ || (ADurationSerializerDeserializer.getYearMonth(bytes1, offset1 + 1) != 0)) {
throw new AlgebricksException(
getIdentifier().getName() + ": only year-month durations are allowed.");
}
- if (ADurationSerializerDeserializer.getDayTime(argOut0.getByteArray(),
- 1) > ADurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1)) {
+ if (ADurationSerializerDeserializer.getDayTime(bytes0,
+ offset0 + 1) > ADurationSerializerDeserializer.getDayTime(bytes1, offset1 + 1)) {
boolSerde.serialize(isGreaterThan ? ABoolean.TRUE : ABoolean.FALSE, out);
} else {
boolSerde.serialize(isGreaterThan ? ABoolean.FALSE : ABoolean.TRUE, out);
}
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/DurationEqualDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
index c1493bd..bd18f0b 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
@@ -33,11 +33,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.api.exceptions.HyracksDataException;
-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;
@@ -53,20 +55,22 @@ public class DurationEqualDescriptor extends AbstractScalarFunctionDynamicDescri
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- 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);
+ 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);
// possible output types
@SuppressWarnings("unchecked")
@@ -77,42 +81,45 @@ public class DurationEqualDescriptor extends AbstractScalarFunctionDynamicDescri
.getSerializerDeserializer(BuiltinType.ABOOLEAN);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut0.reset();
- eval0.evaluate(tuple);
- argOut1.reset();
- 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();
+ 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] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG
- || argOut1.getByteArray()[0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
- throw new AlgebricksException(
- FID.getName() + ": expects type NULL/DURATION, NULL/DURATION but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(
- argOut0.getByteArray()[0])
- + " and " + EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(argOut1.getByteArray()[0]));
+ if (bytes0[offset0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG
+ || bytes1[offset1] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
+ throw new AlgebricksException(FID.getName()
+ + ": expects type NULL/DURATION, NULL/DURATION but got "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]) + " and "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]));
}
- if ((ADurationSerializerDeserializer.getDayTime(argOut0.getByteArray(),
- 1) == ADurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1))
- && (ADurationSerializerDeserializer.getYearMonth(argOut0.getByteArray(),
- 1) == ADurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(),
- 1))) {
+ if ((ADurationSerializerDeserializer.getDayTime(bytes0,
+ offset0 + 1) == ADurationSerializerDeserializer.getDayTime(bytes1, offset1 + 1))
+ && (ADurationSerializerDeserializer.getYearMonth(bytes0,
+ offset0 + 1) == ADurationSerializerDeserializer.getYearMonth(bytes1,
+ offset1 + 1))) {
boolSerde.serialize(ABoolean.TRUE, out);
} else {
boolSerde.serialize(ABoolean.FALSE, out);
}
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/DurationFromIntervalDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
index b69a257..28d2b85 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromIntervalDescriptor.java
@@ -35,11 +35,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.api.exceptions.HyracksDataException;
-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;
@@ -56,18 +58,20 @@ public class DurationFromIntervalDescriptor extends AbstractScalarFunctionDynami
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
@@ -80,24 +84,27 @@ public class DurationFromIntervalDescriptor extends AbstractScalarFunctionDynami
private AMutableDayTimeDuration aDayTimeDuration = new AMutableDayTimeDuration(0);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut.reset();
- eval.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval.evaluate(tuple, argPtr);
+
+ byte[] bytes = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (bytes[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
- } else if (argOut.getByteArray()[0] != ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG) {
- throw new AlgebricksException(FID.getName()
- + ": expects INTERVAL/NULL as the input but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
+ } else if (bytes[offset] != ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG) {
+ throw new AlgebricksException(
+ FID.getName() + ": expects INTERVAL/NULL as the input but got "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]));
}
- long chrononStart = AIntervalSerializerDeserializer.getIntervalStart(argOut.getByteArray(),
- 1);
- long chrononEnd = AIntervalSerializerDeserializer.getIntervalEnd(argOut.getByteArray(), 1);
- byte intervalTypeTag = AIntervalSerializerDeserializer
- .getIntervalTimeType(argOut.getByteArray(), 1);
+ long chrononStart = AIntervalSerializerDeserializer.getIntervalStart(bytes, offset + 1);
+ long chrononEnd = AIntervalSerializerDeserializer.getIntervalEnd(bytes, offset + 1);
+ byte intervalTypeTag = AIntervalSerializerDeserializer.getIntervalTimeType(bytes,
+ offset + 1);
if (intervalTypeTag == ATypeTag.SERIALIZED_DATE_TYPE_TAG) {
chrononStart *= GregorianCalendarSystem.CHRONON_OF_DAY;
@@ -110,6 +117,7 @@ public class DurationFromIntervalDescriptor extends AbstractScalarFunctionDynami
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/DurationFromMillisecondsDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
index b9ced3c..b1860bb 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
@@ -36,11 +36,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.api.exceptions.HyracksDataException;
-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;
@@ -58,18 +60,20 @@ public class DurationFromMillisecondsDescriptor extends AbstractScalarFunctionDy
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
- private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr0 = new VoidPointable();
+ private IScalarEvaluator eval0 = args[0].createScalarEvaluator(ctx);
// possible output types
@SuppressWarnings("unchecked")
@@ -82,45 +86,41 @@ public class DurationFromMillisecondsDescriptor extends AbstractScalarFunctionDy
AMutableDuration aDuration = new AMutableDuration(0, 0);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut0.reset();
- eval0.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval0.evaluate(tuple, argPtr0);
+ byte[] bytes = argPtr0.getByteArray();
+ int offset = argPtr0.getStartOffset();
try {
-
- ATypeTag argOutTypeTag = ATypeTag.VALUE_TYPE_MAPPING[argOut0.getByteArray()[0]];
-
- if (argOutTypeTag == ATypeTag.NULL) {
+ ATypeTag argPtrTypeTag = ATypeTag.VALUE_TYPE_MAPPING[bytes[offset]];
+ if (argPtrTypeTag == ATypeTag.NULL) {
nullSerde.serialize(ANull.NULL, out);
} else {
- switch (argOutTypeTag) {
+ switch (argPtrTypeTag) {
case INT8:
- aDuration.setValue(0,
- AInt8SerializerDeserializer.getByte(argOut0.getByteArray(), 1));
+ aDuration.setValue(0, AInt8SerializerDeserializer.getByte(bytes, offset + 1));
break;
case INT16:
- aDuration.setValue(0,
- AInt16SerializerDeserializer.getShort(argOut0.getByteArray(), 1));
+ aDuration.setValue(0, AInt16SerializerDeserializer.getShort(bytes, offset + 1));
break;
case INT32:
- aDuration.setValue(0,
- AInt32SerializerDeserializer.getInt(argOut0.getByteArray(), 1));
+ aDuration.setValue(0, AInt32SerializerDeserializer.getInt(bytes, offset + 1));
break;
case INT64:
- aDuration.setValue(0,
- AInt64SerializerDeserializer.getLong(argOut0.getByteArray(), 1));
+ aDuration.setValue(0, AInt64SerializerDeserializer.getLong(bytes, offset + 1));
break;
default:
- throw new AlgebricksException(FID.getName()
- + ": expects type INT8/INT16/INT32/INT64/NULL but got " + argOutTypeTag);
+ throw new AlgebricksException(
+ FID.getName() + ": expects type INT8/INT16/INT32/INT64/NULL but got "
+ + argPtrTypeTag);
}
durationSerde.serialize(aDuration, out);
}
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
-
+ 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/functions/temporal/DurationFromMonthsDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMonthsDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMonthsDescriptor.java
index f66b56b..334607a 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMonthsDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/DurationFromMonthsDescriptor.java
@@ -33,11 +33,13 @@ import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
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.api.exceptions.HyracksDataException;
-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;
@@ -54,18 +56,20 @@ public class DurationFromMonthsDescriptor extends AbstractScalarFunctionDynamicD
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
- private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr0 = new VoidPointable();
+ private IScalarEvaluator eval0 = args[0].createScalarEvaluator(ctx);
// possible output types
@SuppressWarnings("unchecked")
@@ -78,22 +82,25 @@ public class DurationFromMonthsDescriptor extends AbstractScalarFunctionDynamicD
AMutableDuration aDuration = new AMutableDuration(0, 0);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut0.reset();
- eval0.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval0.evaluate(tuple, argPtr0);
+
+ byte[] bytes = argPtr0.getByteArray();
+ int offset = argPtr0.getStartOffset();
try {
- if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (bytes[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
}
-
- aDuration.setValue(ATypeHierarchy.getIntegerValue(argOut0.getByteArray(), 0), 0);
+ aDuration.setValue(ATypeHierarchy.getIntegerValue(bytes, offset), 0);
durationSerde.serialize(aDuration, out);
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/GetDayTimeDurationDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java
index 2c8ebfd..b75a5b9 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetDayTimeDurationDescriptor.java
@@ -34,11 +34,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.api.exceptions.HyracksDataException;
-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;
@@ -54,18 +56,20 @@ public class GetDayTimeDurationDescriptor extends AbstractScalarFunctionDynamicD
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
- private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr0 = new VoidPointable();
+ private IScalarEvaluator eval0 = args[0].createScalarEvaluator(ctx);
// possible output types
@SuppressWarnings("unchecked")
@@ -78,29 +82,32 @@ public class GetDayTimeDurationDescriptor extends AbstractScalarFunctionDynamicD
AMutableDayTimeDuration aDayTimeDuration = new AMutableDayTimeDuration(0);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut0.reset();
- eval0.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval0.evaluate(tuple, argPtr0);
+
+ byte[] bytes = argPtr0.getByteArray();
+ int offset = argPtr0.getStartOffset();
try {
- if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (bytes[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
}
- if (argOut0.getByteArray()[0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
+ if (bytes[offset] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
throw new AlgebricksException(FID.getName() + ": expects NULL/DURATION, but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[offset]));
}
- aDayTimeDuration.setMilliseconds(
- ADurationSerializerDeserializer.getDayTime(argOut0.getByteArray(), 1));
-
+ aDayTimeDuration
+ .setMilliseconds(ADurationSerializerDeserializer.getDayTime(bytes, offset + 1));
dayTimeDurationSerde.serialize(aDayTimeDuration, out);
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/GetOverlappingIntervalDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
index 8e7f0c6..94ed860 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetOverlappingIntervalDescriptor.java
@@ -34,11 +34,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.api.exceptions.HyracksDataException;
-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;
@@ -52,20 +54,22 @@ public class GetOverlappingIntervalDescriptor extends AbstractScalarFunctionDyna
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- 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);
+ 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 final AMutableInterval aInterval = new AMutableInterval(0, 0, (byte) -1);
@@ -77,22 +81,24 @@ public class GetOverlappingIntervalDescriptor extends AbstractScalarFunctionDyna
.getSerializerDeserializer(BuiltinType.AINTERVAL);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut0.reset();
- eval0.evaluate(tuple);
- argOut1.reset();
- 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();
+ 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);
- } else if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG
- && argOut0.getByteArray()[0] == argOut1.getByteArray()[0]) {
- byte type0 = AIntervalSerializerDeserializer.getIntervalTimeType(argOut0.getByteArray(),
- 1);
- byte type1 = AIntervalSerializerDeserializer.getIntervalTimeType(argOut1.getByteArray(),
- 1);
+ } else if (bytes0[offset0] == ATypeTag.SERIALIZED_INTERVAL_TYPE_TAG
+ && bytes0[offset0] == bytes1[offset1]) {
+ byte type0 = AIntervalSerializerDeserializer.getIntervalTimeType(bytes0, offset0 + 1);
+ byte type1 = AIntervalSerializerDeserializer.getIntervalTimeType(bytes1, offset1 + 1);
if (type0 != type1) {
throw new AlgebricksException(getIdentifier().getName()
+ ": expecting two (nullable) interval values with the same internal time type but got interval of "
@@ -101,13 +107,11 @@ public class GetOverlappingIntervalDescriptor extends AbstractScalarFunctionDyna
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(type1));
}
- long start0 = AIntervalSerializerDeserializer.getIntervalStart(argOut0.getByteArray(),
- 1);
- long end0 = AIntervalSerializerDeserializer.getIntervalEnd(argOut0.getByteArray(), 1);
+ long start0 = AIntervalSerializerDeserializer.getIntervalStart(bytes0, offset0 + 1);
+ long end0 = AIntervalSerializerDeserializer.getIntervalEnd(bytes0, offset0 + 1);
- long start1 = AIntervalSerializerDeserializer.getIntervalStart(argOut1.getByteArray(),
- 1);
- long end1 = AIntervalSerializerDeserializer.getIntervalEnd(argOut1.getByteArray(), 1);
+ long start1 = AIntervalSerializerDeserializer.getIntervalStart(bytes1, offset1 + 1);
+ long end1 = AIntervalSerializerDeserializer.getIntervalEnd(bytes1, offset1 + 1);
if (IntervalLogic.overlap(start0, end0, start1, end1)
|| IntervalLogic.overlappedBy(start0, end0, start1, end1)
@@ -119,17 +123,15 @@ public class GetOverlappingIntervalDescriptor extends AbstractScalarFunctionDyna
nullSerde.serialize(ANull.NULL, out);
}
} else {
- throw new AlgebricksException(
- getIdentifier().getName()
- + ": expecting two (nullable) interval values but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(
- argOut0.getByteArray()[0])
- + " and " + EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(argOut0.getByteArray()[1]));
+ throw new AlgebricksException(getIdentifier().getName()
+ + ": expecting two (nullable) interval values but got "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]) + " and "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[offset1]));
}
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ 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/functions/temporal/GetYearMonthDurationDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java
index 84fd408..d3397c4 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/temporal/GetYearMonthDurationDescriptor.java
@@ -34,11 +34,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.api.exceptions.HyracksDataException;
-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;
@@ -54,18 +56,20 @@ public class GetYearMonthDurationDescriptor extends AbstractScalarFunctionDynami
};
@Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
- return new ICopyEvaluatorFactory() {
+ public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+ throws AlgebricksException {
+ return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
- public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- return new ICopyEvaluator() {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
- private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr0 = new VoidPointable();
+ private IScalarEvaluator eval0 = args[0].createScalarEvaluator(ctx);
// possible output types
@SuppressWarnings("unchecked")
@@ -78,29 +82,32 @@ public class GetYearMonthDurationDescriptor extends AbstractScalarFunctionDynami
AMutableYearMonthDuration aYearMonthDuration = new AMutableYearMonthDuration(0);
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- argOut0.reset();
- eval0.evaluate(tuple);
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+ resultStorage.reset();
+ eval0.evaluate(tuple, argPtr0);
+
+ byte[] bytes0 = argPtr0.getByteArray();
+ int offset0 = argPtr0.getStartOffset();
try {
- if (argOut0.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (bytes0[offset0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
}
- if (argOut0.getByteArray()[0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
+ if (bytes0[offset0] != ATypeTag.SERIALIZED_DURATION_TYPE_TAG) {
throw new AlgebricksException(FID.getName() + ": expects NULL/DURATION, but got "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[offset0]));
}
aYearMonthDuration
- .setMonths(ADurationSerializerDeserializer.getYearMonth(argOut0.getByteArray(), 1));
-
+ .setMonths(ADurationSerializerDeserializer.getYearMonth(bytes0, offset0 + 1));
yearMonthDurationSerde.serialize(aYearMonthDuration, out);
-
} catch (HyracksDataException hex) {
throw new AlgebricksException(hex);
}
+ result.set(resultStorage);
}
};
}