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:40 UTC
[11/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/NumericAbsDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
index d1f6a2d..47c78d6 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
@@ -49,11 +49,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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;
@@ -72,19 +74,19 @@ public class NumericAbsDescriptor extends AbstractScalarFunctionDynamicDescripto
}
@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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
-
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ return new IScalarEvaluator() {
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private AMutableDouble aDouble = new AMutableDouble(0);
private AMutableFloat aFloat = new AMutableFloat(0);
private AMutableInt64 aInt64 = new AMutableInt64(0);
@@ -96,58 +98,62 @@ public class NumericAbsDescriptor extends AbstractScalarFunctionDynamicDescripto
@SuppressWarnings("unchecked")
@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[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (data[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT8);
- byte val = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
aInt8.setValue((val <= 0) ? (byte) (0 - val) : val);
serde.serialize(aInt8, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT16);
- short val = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
aInt16.setValue((val <= 0) ? (short) (0 - val) : val);
serde.serialize(aInt16, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT32);
- int val = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
aInt32.setValue((val <= 0) ? (0 - val) : val);
serde.serialize(aInt32, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT64);
- long val = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
aInt64.setValue((val <= 0L) ? (0L - val) : val);
serde.serialize(aInt64, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AFLOAT);
- float val = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(data, offset + 1);
aFloat.setValue((val <= 0.0f) ? 0.0f - val : val);
serde.serialize(aFloat, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ADOUBLE);
- double val = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
aDouble.setValue((val <= 0.0D) ? 0.0D - val : val);
serde.serialize(aDouble, out);
} else {
- throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_ABS.getName()
- + ": not implemented for "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
+ throw new NotImplementedException(
+ AsterixBuiltinFunctions.NUMERIC_ABS.getName() + ": not implemented for "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
+ 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/NumericCeilingDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
index ed4353a..0a42ffb 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
@@ -49,11 +49,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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;
@@ -73,17 +75,19 @@ public class NumericCeilingDescriptor extends AbstractScalarFunctionDynamicDescr
}
@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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ return new IScalarEvaluator() {
+
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
private AMutableDouble aDouble = new AMutableDouble(0);
private AMutableFloat aFloat = new AMutableFloat(0);
private AMutableInt64 aInt64 = new AMutableInt64(0);
@@ -95,55 +99,59 @@ public class NumericCeilingDescriptor extends AbstractScalarFunctionDynamicDescr
@SuppressWarnings("unchecked")
@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[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (data[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT8);
- byte val = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
aInt8.setValue(val);
serde.serialize(aInt8, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT16);
- short val = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
aInt16.setValue(val);
serde.serialize(aInt16, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT32);
- int val = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
aInt32.setValue(val);
serde.serialize(aInt32, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT64);
- long val = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
aInt64.setValue(val);
serde.serialize(aInt64, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AFLOAT);
- float val = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(data, offset + 1);
aFloat.setValue((float) Math.ceil(val));
serde.serialize(aFloat, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ADOUBLE);
- double val = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
aDouble.setValue(Math.ceil(val));
serde.serialize(aDouble, out);
} else {
- throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_CEILING.getName()
- + ": not implemented for "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
+ throw new NotImplementedException(
+ AsterixBuiltinFunctions.NUMERIC_CEILING.getName() + ": not implemented for "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
+ result.set(resultStorage);
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
index c9f1974..0c6aae9 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
@@ -49,11 +49,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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;
@@ -72,18 +74,19 @@ public class NumericFloorDescriptor extends AbstractScalarFunctionDynamicDescrip
}
@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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
+ 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);
private AMutableDouble aDouble = new AMutableDouble(0);
private AMutableFloat aFloat = new AMutableFloat(0);
private AMutableInt64 aInt64 = new AMutableInt64(0);
@@ -95,55 +98,59 @@ public class NumericFloorDescriptor extends AbstractScalarFunctionDynamicDescrip
@SuppressWarnings("unchecked")
@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[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (data[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT8);
- byte val = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
aInt8.setValue(val);
serde.serialize(aInt8, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT16);
- short val = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
aInt16.setValue(val);
serde.serialize(aInt16, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT32);
- int val = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
aInt32.setValue(val);
serde.serialize(aInt32, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT64);
- long val = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
aInt64.setValue(val);
serde.serialize(aInt64, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AFLOAT);
- float val = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(data, offset + 1);
aFloat.setValue((float) Math.floor(val));
serde.serialize(aFloat, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ADOUBLE);
- double val = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
aDouble.setValue(Math.floor(val));
serde.serialize(aDouble, out);
} else {
- throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_FLOOR.getName()
- + ": not implemented for "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
+ throw new NotImplementedException(
+ AsterixBuiltinFunctions.NUMERIC_FLOOR.getName() + ": not implemented for "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
+ result.set(resultStorage);
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
index d770e03..1bc936c 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
@@ -44,11 +44,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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;
@@ -59,6 +61,7 @@ public class NumericModuloDescriptor extends AbstractScalarFunctionDynamicDescri
private static final long serialVersionUID = 1L;
public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+ @Override
public IFunctionDescriptor createFunctionDescriptor() {
return new NumericModuloDescriptor();
}
@@ -70,19 +73,21 @@ public class NumericModuloDescriptor 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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
- private DataOutput out = output.getDataOutput();
+ return new IScalarEvaluator() {
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
// one temp. buffer re-used by both children
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator evalLeft = args[0].createEvaluator(argOut);
- private ICopyEvaluator evalRight = args[1].createEvaluator(argOut);
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator evalLeft = args[0].createScalarEvaluator(ctx);
+ private IScalarEvaluator evalRight = args[1].createScalarEvaluator(ctx);
private double[] operands = new double[args.length];
private boolean metInt8 = false, metInt16 = false, metInt32 = false, metInt64 = false,
metFloat = false, metDouble = false;
@@ -98,59 +103,61 @@ public class NumericModuloDescriptor extends AbstractScalarFunctionDynamicDescri
@SuppressWarnings("unchecked")
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
+ resultStorage.reset();
for (int i = 0; i < args.length; i++) {
- argOut.reset();
- if (i == 0)
- evalLeft.evaluate(tuple);
- else
- evalRight.evaluate(tuple);
- typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]);
+ if (i == 0) {
+ evalLeft.evaluate(tuple, argPtr);
+ } else {
+ evalRight.evaluate(tuple, argPtr);
+ }
+ byte[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+ typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]);
switch (typeTag) {
case INT8: {
metInt8 = true;
- operands[i] = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ operands[i] = AInt8SerializerDeserializer.getByte(data, offset + 1);
break;
}
case INT16: {
metInt16 = true;
- operands[i] = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ operands[i] = AInt16SerializerDeserializer.getShort(data, offset + 1);
break;
}
case INT32: {
metInt32 = true;
- operands[i] = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ operands[i] = AInt32SerializerDeserializer.getInt(data, offset + 1);
break;
}
case INT64: {
metInt64 = true;
- operands[i] = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ operands[i] = AInt64SerializerDeserializer.getLong(data, offset + 1);
break;
}
case FLOAT: {
metFloat = true;
- operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ operands[i] = AFloatSerializerDeserializer.getFloat(data, offset + 1);
break;
}
case DOUBLE: {
metDouble = true;
- operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ operands[i] = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
break;
}
case NULL: {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
}
default: {
throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_MOD.getName()
- + (i == 0 ? ": left" : ": right")
- + " operand can not be "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut
- .getByteArray()[0]));
+ + (i == 0 ? ": left" : ": right") + " operand can not be "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
}
}
@@ -186,7 +193,7 @@ public class NumericModuloDescriptor extends AbstractScalarFunctionDynamicDescri
aInt8.setValue((byte) (operands[0] % operands[1]));
serde.serialize(aInt8, out);
}
-
+ result.set(resultStorage);
} catch (HyracksDataException hde) {
throw new AlgebricksException(hde);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
index 23bfad8..b05ff65 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
@@ -49,11 +49,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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;
@@ -72,18 +74,19 @@ public class NumericRoundDescriptor extends AbstractScalarFunctionDynamicDescrip
}
@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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
+ 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);
private AMutableDouble aDouble = new AMutableDouble(0);
private AMutableFloat aFloat = new AMutableFloat(0);
private AMutableInt64 aInt64 = new AMutableInt64(0);
@@ -95,60 +98,64 @@ public class NumericRoundDescriptor extends AbstractScalarFunctionDynamicDescrip
@SuppressWarnings("unchecked")
@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[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (data[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT8);
- byte val = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
aInt8.setValue(val);
serde.serialize(aInt8, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT16);
- short val = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
aInt16.setValue(val);
serde.serialize(aInt16, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT32);
- int val = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
aInt32.setValue(val);
serde.serialize(aInt32, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT64);
- long val = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
aInt64.setValue(val);
serde.serialize(aInt64, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AFLOAT);
- float val = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(data, offset + 1);
val = Math.round(val);
aFloat.setValue(val);
serde.serialize(aFloat, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ADOUBLE);
- double val = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
val = Math.round(val);
aDouble.setValue(val);
serde.serialize(aDouble, out);
} else {
- throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_ROUND.getName()
- + ": not implemented for "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
+ throw new NotImplementedException(
+ AsterixBuiltinFunctions.NUMERIC_ROUND.getName() + ": not implemented for "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
+ 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/NumericRoundHalfToEven2Descriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
index cdf9115..a1acb14 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
@@ -50,11 +50,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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;
@@ -74,19 +76,20 @@ public class NumericRoundHalfToEven2Descriptor extends AbstractScalarFunctionDyn
}
@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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
+ return new IScalarEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator eval = args[0].createEvaluator(argOut);
- private ICopyEvaluator precision = args[1].createEvaluator(argOut);
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
+ private IScalarEvaluator precision = args[1].createScalarEvaluator(ctx);
private AMutableDouble aDouble = new AMutableDouble(0);
private AMutableFloat aFloat = new AMutableFloat(0);
private AMutableInt64 aInt64 = new AMutableInt64(0);
@@ -97,17 +100,19 @@ public class NumericRoundHalfToEven2Descriptor extends AbstractScalarFunctionDyn
private ISerializerDeserializer serde;
private int getPrecision(IFrameTupleReference tuple) throws AlgebricksException {
- argOut.reset();
- precision.evaluate(tuple);
+ resultStorage.reset();
+ precision.evaluate(tuple, argPtr);
+ byte[] bytes = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
- return AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
- return AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
- return AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
- return (int) AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ if (bytes[offset] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
+ return AInt8SerializerDeserializer.getByte(bytes, offset + 1);
+ } else if (bytes[offset] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
+ return AInt16SerializerDeserializer.getShort(bytes, offset + 1);
+ } else if (bytes[offset] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+ return AInt32SerializerDeserializer.getInt(bytes, offset + 1);
+ } else if (bytes[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
+ return (int) AInt64SerializerDeserializer.getLong(bytes, offset + 1);
} else {
throw new AlgebricksException(AsterixBuiltinFunctions.NUMERIC_ROUND_HALF_TO_EVEN2.getName()
+ ": the precision argument should be an INT8/INT16/INT32/INT64.");
@@ -116,43 +121,45 @@ public class NumericRoundHalfToEven2Descriptor extends AbstractScalarFunctionDyn
@SuppressWarnings("unchecked")
@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[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (data[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT8);
- byte val = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
aInt8.setValue(val);
serde.serialize(aInt8, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT16);
- short val = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
aInt16.setValue(val);
serde.serialize(aInt16, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT32);
- int val = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
aInt32.setValue(val);
serde.serialize(aInt32, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT64);
- long val = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
aInt64.setValue(val);
serde.serialize(aInt64, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AFLOAT);
- float val = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(data, offset + 1);
if (Float.isNaN(val) || Float.isInfinite(val) || val == -0.0F || val == 0.0F) {
aFloat.setValue(val);
serde.serialize(aFloat, out);
@@ -162,10 +169,10 @@ public class NumericRoundHalfToEven2Descriptor extends AbstractScalarFunctionDyn
r.setScale(getPrecision(tuple), BigDecimal.ROUND_HALF_EVEN).floatValue());
serde.serialize(aFloat, out);
}
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ADOUBLE);
- double val = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
if (Double.isNaN(val) || Double.isInfinite(val) || val == -0.0D || val == 0.0D) {
aDouble.setValue(val);
serde.serialize(aDouble, out);
@@ -176,13 +183,15 @@ public class NumericRoundHalfToEven2Descriptor extends AbstractScalarFunctionDyn
serde.serialize(aDouble, out);
}
} else {
- throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_ROUND_HALF_TO_EVEN2
- .getName() + ": not implemented for "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
+ throw new NotImplementedException(
+ AsterixBuiltinFunctions.NUMERIC_ROUND_HALF_TO_EVEN2.getName()
+ + ": not implemented for "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
+ 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/NumericRoundHalfToEvenDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
index edae3fe..0d18b24 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
@@ -49,11 +49,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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;
@@ -72,18 +74,19 @@ public class NumericRoundHalfToEvenDescriptor extends AbstractScalarFunctionDyna
}
@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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
+ 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);
private AMutableDouble aDouble = new AMutableDouble(0);
private AMutableFloat aFloat = new AMutableFloat(0);
private AMutableInt64 aInt64 = new AMutableInt64(0);
@@ -95,56 +98,62 @@ public class NumericRoundHalfToEvenDescriptor extends AbstractScalarFunctionDyna
@SuppressWarnings("unchecked")
@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[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+
try {
- if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+ if (data[offset] == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT8_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT8);
- byte val = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(data, offset + 1);
aInt8.setValue(val);
serde.serialize(aInt8, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT16_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT16);
- short val = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ short val = AInt16SerializerDeserializer.getShort(data, offset + 1);
aInt16.setValue(val);
serde.serialize(aInt16, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT32);
- int val = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ int val = AInt32SerializerDeserializer.getInt(data, offset + 1);
aInt32.setValue(val);
serde.serialize(aInt32, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_INT64_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT64);
- long val = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ long val = AInt64SerializerDeserializer.getLong(data, offset + 1);
aInt64.setValue(val);
serde.serialize(aInt64, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_FLOAT_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AFLOAT);
- float val = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(data, offset + 1);
aFloat.setValue((float) Math.rint(val));
serde.serialize(aFloat, out);
- } else if (argOut.getByteArray()[0] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
+ } else if (data[offset] == ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ADOUBLE);
- double val = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
aDouble.setValue(Math.rint(val));
serde.serialize(aDouble, out);
} else {
- throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_ROUND_HALF_TO_EVEN
- .getName() + ": not implemented for "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
+ throw new NotImplementedException(
+ AsterixBuiltinFunctions.NUMERIC_ROUND_HALF_TO_EVEN.getName()
+ + ": not implemented for "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
+ result.set(resultStorage);
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
index 5267e19..b850f91 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
@@ -44,11 +44,13 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
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,6 +58,7 @@ public class NumericSubtractDescriptor extends AbstractScalarFunctionDynamicDesc
private static final long serialVersionUID = 1L;
public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+ @Override
public IFunctionDescriptor createFunctionDescriptor() {
return new NumericSubtractDescriptor();
}
@@ -67,19 +70,21 @@ public class NumericSubtractDescriptor extends AbstractScalarFunctionDynamicDesc
}
@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 {
+ public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
- return new ICopyEvaluator() {
- private DataOutput out = output.getDataOutput();
+ return new IScalarEvaluator() {
+ private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
+ private DataOutput out = resultStorage.getDataOutput();
// one temp. buffer re-used by both children
- private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
- private ICopyEvaluator evalLeft = args[0].createEvaluator(argOut);
- private ICopyEvaluator evalRight = args[1].createEvaluator(argOut);
+ private IPointable argPtr = new VoidPointable();
+ private IScalarEvaluator evalLeft = args[0].createScalarEvaluator(ctx);
+ private IScalarEvaluator evalRight = args[1].createScalarEvaluator(ctx);
private double[] operands = new double[args.length];
private boolean metInt8 = false, metInt16 = false, metInt32 = false, metInt64 = false,
metFloat = false, metDouble = false;
@@ -95,60 +100,60 @@ public class NumericSubtractDescriptor extends AbstractScalarFunctionDynamicDesc
@SuppressWarnings("unchecked")
@Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
+ public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
try {
+ resultStorage.reset();
for (int i = 0; i < args.length; i++) {
- argOut.reset();
- if (i == 0)
- evalLeft.evaluate(tuple);
- else
- evalRight.evaluate(tuple);
- typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]);
+ if (i == 0) {
+ evalLeft.evaluate(tuple, argPtr);
+ } else {
+ evalRight.evaluate(tuple, argPtr);
+ }
+ byte[] data = argPtr.getByteArray();
+ int offset = argPtr.getStartOffset();
+ typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]);
switch (typeTag) {
case INT8: {
metInt8 = true;
- operands[i] = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
+ operands[i] = AInt8SerializerDeserializer.getByte(data, offset + 1);
break;
}
case INT16: {
metInt16 = true;
- operands[i] = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
+ operands[i] = AInt16SerializerDeserializer.getShort(data, offset + 1);
break;
}
case INT32: {
metInt32 = true;
- operands[i] = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
+ operands[i] = AInt32SerializerDeserializer.getInt(data, offset + 1);
break;
}
case INT64: {
metInt64 = true;
- operands[i] = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
+ operands[i] = AInt64SerializerDeserializer.getLong(data, offset + 1);
break;
}
case FLOAT: {
metFloat = true;
- operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
+ operands[i] = AFloatSerializerDeserializer.getFloat(data, offset + 1);
break;
}
case DOUBLE: {
metDouble = true;
- operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
+ operands[i] = ADoubleSerializerDeserializer.getDouble(data, offset + 1);
break;
}
case NULL: {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
+ result.set(resultStorage);
return;
}
default: {
- throw new NotImplementedException(
- AsterixBuiltinFunctions.NUMERIC_SUBTRACT.getName()
- + (i == 0 ? ": left" : ": right")
- + " operand can not be "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut
- .getByteArray()[0]));
+ throw new NotImplementedException(AsterixBuiltinFunctions.NUMERIC_SUBTRACT
+ .getName() + (i == 0 ? ": left" : ": right") + " operand can not be "
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data[offset]));
}
}
}
@@ -184,7 +189,7 @@ public class NumericSubtractDescriptor extends AbstractScalarFunctionDynamicDesc
aInt8.setValue((byte) (operands[0] - operands[1]));
serde.serialize(aInt8, out);
}
-
+ result.set(resultStorage);
} catch (HyracksDataException hde) {
throw new AlgebricksException(hde);
}