You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by ji...@apache.org on 2015/10/29 05:44:55 UTC
[04/15] incubator-asterixdb git commit: ASTERIXDB-1102: VarSize
Encoding to store length of String and ByteArray
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
index d951415..97bcd02 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
@@ -37,6 +37,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -72,6 +73,7 @@ public class APoint3DConstructorDescriptor extends AbstractScalarFunctionDynamic
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -81,7 +83,8 @@ public class APoint3DConstructorDescriptor extends AbstractScalarFunctionDynamic
eval.evaluate(tuple);
byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
- String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
+ utf8Ptr.set(serString, 1, outInput.getLength()-1);
+ String s = utf8Ptr.toString();
int firstCommaIndex = s.indexOf(',');
int secondCommaIndex = s.indexOf(',', firstCommaIndex + 1);
aPoint3D.setValue(Double.parseDouble(s.substring(0, firstCommaIndex)),
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
index a7b47f3..49781d5 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
@@ -37,6 +37,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -72,6 +73,7 @@ public class APointConstructorDescriptor extends AbstractScalarFunctionDynamicDe
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -81,7 +83,8 @@ public class APointConstructorDescriptor extends AbstractScalarFunctionDynamicDe
eval.evaluate(tuple);
byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
- String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
+ utf8Ptr.set(serString, 1, outInput.getLength()-1);
+ String s = utf8Ptr.toString();
aPoint.setValue(Double.parseDouble(s.substring(0, s.indexOf(','))),
Double.parseDouble(s.substring(s.indexOf(',') + 1, s.length())));
pointSerde.serialize(aPoint, out);
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
index 1eb1e9d..4fb24a5 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
@@ -36,6 +36,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -68,6 +69,7 @@ public class APolygonConstructorDescriptor extends AbstractScalarFunctionDynamic
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -77,7 +79,8 @@ public class APolygonConstructorDescriptor extends AbstractScalarFunctionDynamic
eval.evaluate(tuple);
byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
- String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
+ utf8Ptr.set(serString, 1, outInput.getLength()-1);
+ String s = utf8Ptr.toString();
String[] points = s.split(" ");
if (points.length <= 2)
throw new AlgebricksException(errorMessage);
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
index 98aaff5..cefa031 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
@@ -38,6 +38,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -74,6 +75,7 @@ public class ARectangleConstructorDescriptor extends AbstractScalarFunctionDynam
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -83,7 +85,8 @@ public class ARectangleConstructorDescriptor extends AbstractScalarFunctionDynam
eval.evaluate(tuple);
byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
- String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
+ utf8Ptr.set(serString, 1, outInput.getLength() -1);
+ String s = utf8Ptr.toString();
int commaIndex = s.indexOf(',');
int spaceIndex = s.indexOf(' ', commaIndex + 1);
aPoint[0].setValue(Double.parseDouble(s.substring(0, commaIndex)),
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
index 290bbda..daa8ac0 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
@@ -20,8 +20,6 @@ package org.apache.asterix.runtime.evaluators.constructors;
import java.io.DataOutput;
import java.io.IOException;
-import java.io.PrintStream;
-import java.io.UnsupportedEncodingException;
import org.apache.asterix.dataflow.data.nontagged.serde.ABooleanSerializerDeserializer;
import org.apache.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer;
@@ -45,7 +43,8 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
+import org.apache.hyracks.data.std.util.GrowableArray;
+import org.apache.hyracks.data.std.util.UTF8StringBuilder;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
public class AStringConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
@@ -64,110 +63,101 @@ public class AStringConstructorDescriptor extends AbstractScalarFunctionDynamicD
@Override
public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
- try {
- return new ICopyEvaluator() {
+ return new ICopyEvaluator() {
- private DataOutput out = output.getDataOutput();
- private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
- private ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
- private PrintStream ps = new PrintStream(baaos, false, "UTF-8");
- private ICopyEvaluator eval = args[0].createEvaluator(outInput);
- @SuppressWarnings("unchecked")
- private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
- .getSerializerDeserializer(BuiltinType.ANULL);
+ private DataOutput out = output.getDataOutput();
+ private ArrayBackedValueStorage outInput = new ArrayBackedValueStorage();
+ private ICopyEvaluator eval = args[0].createEvaluator(outInput);
+ @SuppressWarnings("unchecked")
+ private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+ .getSerializerDeserializer(BuiltinType.ANULL);
+ private UTF8StringBuilder builder = new UTF8StringBuilder();
+ private GrowableArray baaos = new GrowableArray();
- @Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- try {
- outInput.reset();
- baaos.reset();
- eval.evaluate(tuple);
- byte[] serString = outInput.getByteArray();
+ @Override
+ public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+ try {
+ outInput.reset();
+ baaos.reset();
+ eval.evaluate(tuple);
+ byte[] serString = outInput.getByteArray();
- ATypeTag tt = ATypeTag.VALUE_TYPE_MAPPING[serString[0]];
- if (tt == ATypeTag.NULL) {
- nullSerde.serialize(ANull.NULL, out);
- } else if (tt == ATypeTag.STRING) {
- out.write(outInput.getByteArray(), outInput.getStartOffset(), outInput.getLength());
- } else {
- baaos.write(0);
- baaos.write(0);
- switch (tt) {
- case INT8: {
- int i = AInt8SerializerDeserializer.getByte(outInput.getByteArray(), 1);
- ps.print(i);
- break;
- }
- case INT16: {
- int i = AInt16SerializerDeserializer.getShort(outInput.getByteArray(), 1);
- ps.print(i);
- break;
- }
- case INT32: {
- int i = AInt32SerializerDeserializer.getInt(outInput.getByteArray(), 1);
- ps.print(i);
- break;
- }
- case INT64: {
- long l = AInt64SerializerDeserializer.getLong(outInput.getByteArray(), 1);
- ps.print(l);
- break;
- }
- case DOUBLE: {
- double d = ADoubleSerializerDeserializer.getDouble(outInput.getByteArray(),
- 1);
- ps.print(d);
- break;
- }
- case FLOAT: {
- float f = AFloatSerializerDeserializer.getFloat(outInput.getByteArray(), 1);
- ps.print(f);
- break;
- }
- case BOOLEAN: {
- boolean b = ABooleanSerializerDeserializer.getBoolean(
- outInput.getByteArray(), 1);
- ps.print(b);
- break;
- }
-
- // NotYetImplemented
- case CIRCLE:
- case DATE:
- case DATETIME:
- case LINE:
- case TIME:
- case DURATION:
- case YEARMONTHDURATION:
- case DAYTIMEDURATION:
- case INTERVAL:
- case ORDEREDLIST:
- case POINT:
- case POINT3D:
- case RECTANGLE:
- case POLYGON:
- case RECORD:
- case UNORDEREDLIST:
- case UUID:
- default:
- throw new AlgebricksException("string of " + tt + " not supported");
+ ATypeTag tt = ATypeTag.VALUE_TYPE_MAPPING[serString[0]];
+ if (tt == ATypeTag.NULL) {
+ nullSerde.serialize(ANull.NULL, out);
+ } else if (tt == ATypeTag.STRING) {
+ out.write(outInput.getByteArray(), outInput.getStartOffset(), outInput.getLength());
+ } else {
+ builder.reset(baaos, outInput.getLength());
+ switch (tt) {
+ case INT8: {
+ int i = AInt8SerializerDeserializer.getByte(outInput.getByteArray(), 1);
+ builder.appendString(String.valueOf(i));
+ break;
+ }
+ case INT16: {
+ int i = AInt16SerializerDeserializer.getShort(outInput.getByteArray(), 1);
+ builder.appendString(String.valueOf(i));
+ break;
+ }
+ case INT32: {
+ int i = AInt32SerializerDeserializer.getInt(outInput.getByteArray(), 1);
+ builder.appendString(String.valueOf(i));
+ break;
+ }
+ case INT64: {
+ long l = AInt64SerializerDeserializer.getLong(outInput.getByteArray(), 1);
+ builder.appendString(String.valueOf(l));
+ break;
}
- ps.flush();
- byte[] tmpStrBytes = baaos.getByteArray();
- int utfLen = baaos.size() - 2;
- tmpStrBytes[0] = (byte) ((utfLen >>> 8) & 0xFF);
- tmpStrBytes[1] = (byte) ((utfLen >>> 0) & 0xFF);
- out.write(ATypeTag.STRING.serialize());
- out.write(tmpStrBytes);
+ case DOUBLE: {
+ double d = ADoubleSerializerDeserializer.getDouble(outInput.getByteArray(),
+ 1);
+ builder.appendString(String.valueOf(d));
+ break;
+ }
+ case FLOAT: {
+ float f = AFloatSerializerDeserializer.getFloat(outInput.getByteArray(), 1);
+ builder.appendString(String.valueOf(f));
+ break;
+ }
+ case BOOLEAN: {
+ boolean b = ABooleanSerializerDeserializer.getBoolean(
+ outInput.getByteArray(), 1);
+ builder.appendString(String.valueOf(b));
+ break;
+ }
+
+ // NotYetImplemented
+ case CIRCLE:
+ case DATE:
+ case DATETIME:
+ case LINE:
+ case TIME:
+ case DURATION:
+ case YEARMONTHDURATION:
+ case DAYTIMEDURATION:
+ case INTERVAL:
+ case ORDEREDLIST:
+ case POINT:
+ case POINT3D:
+ case RECTANGLE:
+ case POLYGON:
+ case RECORD:
+ case UNORDEREDLIST:
+ case UUID:
+ default:
+ throw new AlgebricksException("string of " + tt + " not supported");
}
- } catch (IOException e) {
- throw new AlgebricksException(e);
+ builder.finish();
+ out.write(ATypeTag.STRING.serialize());
+ out.write(baaos.getByteArray(), 0, baaos.getLength());
}
+ } catch (IOException e) {
+ throw new AlgebricksException(e);
}
- };
- } catch (UnsupportedEncodingException e) {
- throw new AlgebricksException(e);
- }
+ }
+ };
}
};
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
index fa287ce..db8f854 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
@@ -39,6 +39,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -75,6 +76,7 @@ public class ATimeConstructorDescriptor extends AbstractScalarFunctionDynamicDes
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -85,7 +87,9 @@ public class ATimeConstructorDescriptor extends AbstractScalarFunctionDynamicDes
byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
- int stringLength = (serString[1] & 0xff << 8) + (serString[2] & 0xff << 0);
+ utf8Ptr.set(serString, 1, outInput.getLength()-1);
+ int stringLength = utf8Ptr.getUTF8Length();
+ int startOffset = utf8Ptr.getCharStartOffset();
// the string to be parsed should be at least 6 characters: hhmmss
if (stringLength < 6) {
@@ -94,7 +98,7 @@ public class ATimeConstructorDescriptor extends AbstractScalarFunctionDynamicDes
+ stringLength);
}
- int chrononTimeInMs = ATimeParserFactory.parseTimePart(serString, 3, stringLength);
+ int chrononTimeInMs = ATimeParserFactory.parseTimePart(serString, startOffset, stringLength);
if (chrononTimeInMs < 0) {
chrononTimeInMs += GregorianCalendarSystem.CHRONON_OF_DAY;
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java
index 16e913e..6edd393 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AUUIDFromStringConstructorDescriptor.java
@@ -37,6 +37,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -81,6 +82,8 @@ public class AUUIDFromStringConstructorDescriptor extends AbstractScalarFunction
private long lsb = 0;
private long tmpLongValue = 0;
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
+
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
try {
@@ -88,14 +91,14 @@ public class AUUIDFromStringConstructorDescriptor extends AbstractScalarFunction
eval.evaluate(tuple);
byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
+ utf8Ptr.set(serString, 1, outInput.getLength()-1);
msb = 0;
lsb = 0;
tmpLongValue = 0;
- // first byte: tag, next two bytes: length, so
- // we add 3 bytes.
+ // first byte: tag, next x bytes: length
+ int offset = utf8Ptr.getCharStartOffset();
// First part - 8 bytes
- int offset = 3;
msb = calculateLongFromHex(serString, offset, 8);
msb <<= 16;
offset += 8;
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java
index 1265d19..3b9c006 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/constructors/AYearMonthDurationConstructorDescriptor.java
@@ -38,6 +38,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -76,6 +77,7 @@ public class AYearMonthDurationConstructorDescriptor extends AbstractScalarFunct
@SuppressWarnings("unchecked")
private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -85,11 +87,12 @@ public class AYearMonthDurationConstructorDescriptor extends AbstractScalarFunct
byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
+ utf8Ptr.set(serString, 1, outInput.getLength() - 1);
+ int stringLength = utf8Ptr.getUTF8Length();
- int stringLength = (serString[1] & 0xff << 8) + (serString[2] & 0xff << 0);
-
- ADurationParserFactory.parseDuration(serString, 3, stringLength, aYearMonthDuration,
- ADurationParseOption.YEAR_MONTH);
+ ADurationParserFactory
+ .parseDuration(serString, utf8Ptr.getCharStartOffset(), stringLength,
+ aYearMonthDuration, ADurationParseOption.YEAR_MONTH);
yearMonthDurationSerde.serialize(aYearMonthDuration, out);
} else if (serString[0] == SER_NULL_TYPE_TAG) {
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
index c8ee3eb..c40cb95 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
import org.apache.asterix.om.base.ABoolean;
+import org.apache.asterix.om.base.ANull;
import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.BuiltinType;
@@ -33,6 +34,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -49,9 +51,16 @@ public abstract class AbstractBinaryStringBoolEval implements ICopyEvaluator {
private ICopyEvaluator evalLeft;
private ICopyEvaluator evalRight;
private final FunctionIdentifier funcID;
+
+ private final UTF8StringPointable leftPtr = new UTF8StringPointable();
+ private final UTF8StringPointable rightPtr = new UTF8StringPointable();
+
@SuppressWarnings({ "rawtypes" })
private ISerializerDeserializer boolSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ABOOLEAN);
+ @SuppressWarnings("unchecked")
+ private final ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+ .getSerializerDeserializer(BuiltinType.ANULL);
public AbstractBinaryStringBoolEval(DataOutput dout, ICopyEvaluatorFactory evalLeftFactory,
ICopyEvaluatorFactory evalRightFactory, FunctionIdentifier funcID) throws AlgebricksException {
@@ -70,12 +79,8 @@ public abstract class AbstractBinaryStringBoolEval implements ICopyEvaluator {
evalRight.evaluate(tuple);
try {
- if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG && array1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
- boolSerde.serialize(ABoolean.TRUE, dout);
- return;
- } else if ((array0.getByteArray()[0] == SER_NULL_TYPE_TAG && array1.getByteArray()[0] == SER_STRING_TYPE_TAG)
- || (array0.getByteArray()[0] == SER_STRING_TYPE_TAG && array1.getByteArray()[0] == SER_NULL_TYPE_TAG)) {
- boolSerde.serialize(ABoolean.FALSE, dout);
+ if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG || array1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+ nullSerde.serialize(ANull.NULL, dout);
return;
} else if (array0.getByteArray()[0] != SER_STRING_TYPE_TAG
|| array1.getByteArray()[0] != SER_STRING_TYPE_TAG) {
@@ -87,15 +92,10 @@ public abstract class AbstractBinaryStringBoolEval implements ICopyEvaluator {
throw new AlgebricksException(e);
}
- byte[] b1 = array0.getByteArray();
- byte[] b2 = array1.getByteArray();
-
- int lLen = array0.getLength();
- int rLen = array1.getLength();
+ leftPtr.set(array0.getByteArray(), array0.getStartOffset() + 1, array0.getLength());
+ rightPtr.set(array1.getByteArray(), array1.getStartOffset() + 1, array1.getLength());
- int lStart = array0.getStartOffset();
- int rStart = array1.getStartOffset();
- ABoolean res = compute(b1, lLen, lStart, b2, rLen, rStart, array0, array1) ? ABoolean.TRUE : ABoolean.FALSE;
+ ABoolean res = compute(leftPtr, rightPtr) ? ABoolean.TRUE : ABoolean.FALSE;
try {
boolSerde.serialize(res, dout);
} catch (HyracksDataException e) {
@@ -103,34 +103,6 @@ public abstract class AbstractBinaryStringBoolEval implements ICopyEvaluator {
}
}
- protected abstract boolean compute(byte[] lBytes, int lLen, int lStart, byte[] rBytes, int rLen, int rStart,
- ArrayBackedValueStorage array0, ArrayBackedValueStorage array1) throws AlgebricksException;
+ protected abstract boolean compute(UTF8StringPointable left, UTF8StringPointable right) throws AlgebricksException;
- protected String toRegex(AString pattern) {
- StringBuilder sb = new StringBuilder();
- String str = pattern.getStringValue();
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- if (c == '\\' && (i < str.length() - 1) && (str.charAt(i + 1) == '_' || str.charAt(i + 1) == '%')) {
- sb.append(str.charAt(i + 1));
- ++i;
- } else if (c == '%') {
- sb.append(".*");
- } else if (c == '_') {
- sb.append(".");
- } else {
- if (Arrays.binarySearch(reservedRegexChars, c) >= 0) {
- sb.append('\\');
- }
- sb.append(c);
- }
- }
- return sb.toString();
- }
-
- private final static char[] reservedRegexChars = new char[] { '\\', '(', ')', '[', ']', '{', '}', '.', '^', '$',
- '*', '|' };
- static {
- Arrays.sort(reservedRegexChars);
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
index 335182d..7dbc99a 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
@@ -23,12 +23,10 @@
package org.apache.asterix.runtime.evaluators.functions;
import java.io.DataOutput;
-import java.util.Arrays;
import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
import org.apache.asterix.om.base.AMutableString;
import org.apache.asterix.om.base.ANull;
-import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.EnumDeserializer;
@@ -38,6 +36,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -65,6 +64,11 @@ public abstract class AbstractQuadStringStringEval implements ICopyEvaluator {
private ISerializerDeserializer strSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ASTRING);
+ private final UTF8StringPointable strPtr1st = new UTF8StringPointable();
+ private final UTF8StringPointable strPtr2nd = new UTF8StringPointable();
+ private final UTF8StringPointable strPtr3rd = new UTF8StringPointable();
+ private final UTF8StringPointable strPtr4th = new UTF8StringPointable();
+
public AbstractQuadStringStringEval(DataOutput dout, ICopyEvaluatorFactory eval0, ICopyEvaluatorFactory eval1,
ICopyEvaluatorFactory eval2, ICopyEvaluatorFactory eval3, FunctionIdentifier funcID)
throws AlgebricksException {
@@ -108,22 +112,12 @@ public abstract class AbstractQuadStringStringEval implements ICopyEvaluator {
throw new AlgebricksException(e);
}
- byte[] b0 = array0.getByteArray();
- byte[] b1 = array1.getByteArray();
- byte[] b2 = array2.getByteArray();
- byte[] b3 = array3.getByteArray();
-
- int len0 = array0.getLength();
- int len1 = array1.getLength();
- int len2 = array2.getLength();
- int len3 = array3.getLength();
+ strPtr1st.set(array0.getByteArray(), array0.getStartOffset() + 1, array0.getLength());
+ strPtr2nd.set(array1.getByteArray(), array1.getStartOffset() + 1, array1.getLength());
+ strPtr3rd.set(array2.getByteArray(), array2.getStartOffset() + 1, array2.getLength());
+ strPtr4th.set(array3.getByteArray(), array3.getStartOffset() + 1, array3.getLength());
- int s0 = array0.getStartOffset();
- int s1 = array1.getStartOffset();
- int s2 = array2.getStartOffset();
- int s3 = array3.getStartOffset();
-
- String res = compute(b0, len0, s0, b1, len1, s1, b2, len2, s2, b3, len3, s3, array0, array1);
+ String res = compute(strPtr1st, strPtr2nd, strPtr3rd, strPtr4th);
resultBuffer.setValue(res);
try {
strSerde.serialize(resultBuffer, dout);
@@ -132,30 +126,8 @@ public abstract class AbstractQuadStringStringEval implements ICopyEvaluator {
}
}
- protected abstract String compute(byte[] b0, int l0, int s0, byte[] b1, int l1, int s1, byte[] b2, int l2, int s2,
- byte[] b3, int l3, int s3, ArrayBackedValueStorage array0, ArrayBackedValueStorage array1)
- throws AlgebricksException;
-
- protected String toRegex(AString pattern) {
- StringBuilder sb = new StringBuilder();
- String str = pattern.getStringValue();
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- if (c == '\\' && (i < str.length() - 1) && (str.charAt(i + 1) == '_' || str.charAt(i + 1) == '%')) {
- sb.append(str.charAt(i + 1));
- ++i;
- } else if (c == '%') {
- sb.append(".*");
- } else if (c == '_') {
- sb.append(".");
- } else {
- if (Arrays.binarySearch(StringEvaluatorUtils.reservedRegexChars, c) >= 0) {
- sb.append('\\');
- }
- sb.append(c);
- }
- }
- return sb.toString();
- }
+ protected abstract String compute(UTF8StringPointable strPtr1st, UTF8StringPointable strPtr2nd,
+ UTF8StringPointable strPtr3rd,
+ UTF8StringPointable strPtr4th) throws AlgebricksException;
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
deleted file mode 100644
index e946edf..0000000
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.runtime.evaluators.functions;
-
-import java.io.DataOutput;
-
-import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import org.apache.asterix.om.base.ABoolean;
-import org.apache.asterix.om.base.ANull;
-import org.apache.asterix.om.types.ATypeTag;
-import org.apache.asterix.om.types.BuiltinType;
-import org.apache.asterix.om.types.EnumDeserializer;
-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.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
-import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public abstract class AbstractStringContainsEval implements ICopyEvaluator {
-
- private DataOutput dout;
-
- // allowed input types
- private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
- private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-
- private ArrayBackedValueStorage array0 = new ArrayBackedValueStorage();
- private ArrayBackedValueStorage array1 = new ArrayBackedValueStorage();
- private ICopyEvaluator evalString;
- private ICopyEvaluator evalPattern;
- @SuppressWarnings("rawtypes")
- private ISerializerDeserializer boolSerde = AqlSerializerDeserializerProvider.INSTANCE
- .getSerializerDeserializer(BuiltinType.ABOOLEAN);
- @SuppressWarnings("unchecked")
- private final ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
- .getSerializerDeserializer(BuiltinType.ANULL);
-
- private final FunctionIdentifier funcID;
-
- public AbstractStringContainsEval(DataOutput dout, ICopyEvaluatorFactory evalStringFactory,
- ICopyEvaluatorFactory evalPatternFactory, FunctionIdentifier funcID) throws AlgebricksException {
- this.dout = dout;
- this.evalString = evalStringFactory.createEvaluator(array0);
- this.evalPattern = evalPatternFactory.createEvaluator(array1);
- this.funcID = funcID;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
- array1.reset();
- evalPattern.evaluate(tuple);
- array0.reset();
- evalString.evaluate(tuple);
-
- try {
- if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG || array1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
- nullSerde.serialize(ANull.NULL, dout);
- return;
- }
-
- if (array0.getByteArray()[0] != SER_STRING_TYPE_TAG || array1.getByteArray()[0] != SER_STRING_TYPE_TAG) {
- throw new AlgebricksException(funcID.getName()
- + ": expects input type (STRING/NULL, STRING/NULL), but got ("
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(array0.getByteArray()[0]) + ", "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(array1.getByteArray()[0]) + ").");
- }
- } catch (HyracksDataException e) {
- throw new AlgebricksException(e);
- }
-
- byte[] b1 = array0.getByteArray();
- byte[] b2 = array1.getByteArray();
- ABoolean res = findMatch(b1, b2) ? ABoolean.TRUE : ABoolean.FALSE;
- try {
- boolSerde.serialize(res, dout);
- } catch (HyracksDataException e) {
- throw new AlgebricksException(e);
- }
- }
-
- protected abstract boolean findMatch(byte[] strBytes, byte[] patternBytes);
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
index 2740e4b..f966c1c 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
@@ -19,11 +19,10 @@
package org.apache.asterix.runtime.evaluators.functions;
import java.io.DataOutput;
-import java.util.Arrays;
import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
import org.apache.asterix.om.base.ABoolean;
-import org.apache.asterix.om.base.AString;
+import org.apache.asterix.om.base.ANull;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.EnumDeserializer;
@@ -33,6 +32,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -50,9 +50,16 @@ public abstract class AbstractTripleStringBoolEval implements ICopyEvaluator {
@SuppressWarnings("rawtypes")
private ISerializerDeserializer boolSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ABOOLEAN);
+ @SuppressWarnings("unchecked")
+ private final ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+ .getSerializerDeserializer(BuiltinType.ANULL);
private final FunctionIdentifier funcID;
+ private final UTF8StringPointable strPtr1st = new UTF8StringPointable();
+ private final UTF8StringPointable strPtr2nd = new UTF8StringPointable();
+ private final UTF8StringPointable strPtr3rd = new UTF8StringPointable();
+
public AbstractTripleStringBoolEval(DataOutput dout, ICopyEvaluatorFactory eval0, ICopyEvaluatorFactory eval1,
ICopyEvaluatorFactory eval2, FunctionIdentifier funcID) throws AlgebricksException {
this.dout = dout;
@@ -73,12 +80,9 @@ public abstract class AbstractTripleStringBoolEval implements ICopyEvaluator {
eval2.evaluate(tuple);
try {
- if ((array0.getByteArray()[0] == SER_NULL_TYPE_TAG && array1.getByteArray()[0] == SER_STRING_TYPE_TAG)
- || (array1.getByteArray()[0] == SER_NULL_TYPE_TAG && array0.getByteArray()[0] == SER_STRING_TYPE_TAG)) {
- boolSerde.serialize(ABoolean.FALSE, dout);
- return;
- } else if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG && array1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
- boolSerde.serialize(ABoolean.TRUE, dout);
+ if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG || array1.getByteArray()[0] == SER_NULL_TYPE_TAG
+ || array2.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+ nullSerde.serialize(ANull.NULL, dout);
return;
}
@@ -95,19 +99,11 @@ public abstract class AbstractTripleStringBoolEval implements ICopyEvaluator {
throw new AlgebricksException(e);
}
- byte[] b0 = array0.getByteArray();
- byte[] b1 = array1.getByteArray();
- byte[] b2 = array2.getByteArray();
-
- int len0 = array0.getLength();
- int len1 = array1.getLength();
- int len2 = array2.getLength();
+ strPtr1st.set(array0.getByteArray(), array0.getStartOffset() + 1, array0.getLength());
+ strPtr2nd.set(array1.getByteArray(), array1.getStartOffset() + 1, array1.getLength());
+ strPtr3rd.set(array2.getByteArray(), array2.getStartOffset() + 1, array2.getLength());
- int s0 = array0.getStartOffset();
- int s1 = array1.getStartOffset();
- int s2 = array2.getStartOffset();
-
- ABoolean res = compute(b0, len0, s0, b1, len1, s1, b2, len2, s2, array0, array1) ? ABoolean.TRUE
+ ABoolean res = compute(strPtr1st, strPtr2nd, strPtr3rd) ? ABoolean.TRUE
: ABoolean.FALSE;
try {
boolSerde.serialize(res, dout);
@@ -116,28 +112,7 @@ public abstract class AbstractTripleStringBoolEval implements ICopyEvaluator {
}
}
- protected abstract boolean compute(byte[] b0, int l0, int s0, byte[] b1, int l1, int s1, byte[] b2, int l2, int s2,
- ArrayBackedValueStorage array0, ArrayBackedValueStorage array1) throws AlgebricksException;
+ protected abstract boolean compute(UTF8StringPointable strPtr1st, UTF8StringPointable strPtr2nd,
+ UTF8StringPointable strPtr3rd) throws AlgebricksException;
- protected String toRegex(AString pattern) {
- StringBuilder sb = new StringBuilder();
- String str = pattern.getStringValue();
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- if (c == '\\' && (i < str.length() - 1) && (str.charAt(i + 1) == '_' || str.charAt(i + 1) == '%')) {
- sb.append(str.charAt(i + 1));
- ++i;
- } else if (c == '%') {
- sb.append(".*");
- } else if (c == '_') {
- sb.append(".");
- } else {
- if (Arrays.binarySearch(StringEvaluatorUtils.reservedRegexChars, c) >= 0) {
- sb.append('\\');
- }
- sb.append(c);
- }
- }
- return sb.toString();
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
index ebedb56..9e79832 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
@@ -19,13 +19,10 @@
package org.apache.asterix.runtime.evaluators.functions;
import java.io.DataOutput;
-import java.util.Arrays;
-import java.util.regex.Pattern;
import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
import org.apache.asterix.om.base.AMutableString;
import org.apache.asterix.om.base.ANull;
-import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.BuiltinType;
import org.apache.asterix.om.types.EnumDeserializer;
@@ -35,6 +32,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -58,6 +56,10 @@ public abstract class AbstractTripleStringStringEval implements ICopyEvaluator {
private ISerializerDeserializer strSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ASTRING);
+ private final UTF8StringPointable strPtr1st = new UTF8StringPointable();
+ private final UTF8StringPointable strPtr2nd = new UTF8StringPointable();
+ private final UTF8StringPointable strPtr3rd = new UTF8StringPointable();
+
private final FunctionIdentifier funcID;
public AbstractTripleStringStringEval(DataOutput dout, ICopyEvaluatorFactory eval0, ICopyEvaluatorFactory eval1,
@@ -97,19 +99,11 @@ public abstract class AbstractTripleStringStringEval implements ICopyEvaluator {
throw new AlgebricksException(e);
}
- byte[] b0 = array0.getByteArray();
- byte[] b1 = array1.getByteArray();
- byte[] b2 = array2.getByteArray();
-
- int len0 = array0.getLength();
- int len1 = array1.getLength();
- int len2 = array2.getLength();
+ strPtr1st.set(array0.getByteArray(), array0.getStartOffset() + 1, array0.getLength());
+ strPtr2nd.set(array1.getByteArray(), array1.getStartOffset() + 1, array1.getLength());
+ strPtr3rd.set(array2.getByteArray(), array2.getStartOffset() + 1, array2.getLength());
- int s0 = array0.getStartOffset();
- int s1 = array1.getStartOffset();
- int s2 = array2.getStartOffset();
-
- String res = compute(b0, len0, s0, b1, len1, s1, b2, len2, s2, array0, array1);
+ String res = compute(strPtr1st, strPtr2nd, strPtr3rd);
resultBuffer.setValue(res);
try {
strSerde.serialize(resultBuffer, dout);
@@ -118,58 +112,6 @@ public abstract class AbstractTripleStringStringEval implements ICopyEvaluator {
}
}
- protected abstract String compute(byte[] b0, int l0, int s0, byte[] b1, int l1, int s1, byte[] b2, int l2, int s2,
- ArrayBackedValueStorage array0, ArrayBackedValueStorage array1) throws AlgebricksException;
-
- protected String toRegex(AString pattern) {
- StringBuilder sb = new StringBuilder();
- String str = pattern.getStringValue();
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- if (c == '\\' && (i < str.length() - 1) && (str.charAt(i + 1) == '_' || str.charAt(i + 1) == '%')) {
- sb.append(str.charAt(i + 1));
- ++i;
- } else if (c == '%') {
- sb.append(".*");
- } else if (c == '_') {
- sb.append(".");
- } else {
- if (Arrays.binarySearch(reservedRegexChars, c) >= 0) {
- sb.append('\\');
- }
- sb.append(c);
- }
- }
- return sb.toString();
- }
-
- protected int toFlag(AString pattern) {
- String str = pattern.getStringValue();
- int flag = 0;
- for (int i = 0; i < str.length(); i++) {
- char c = str.charAt(i);
- switch (c) {
- case 's':
- flag |= Pattern.DOTALL;
- break;
- case 'm':
- flag |= Pattern.MULTILINE;
- break;
- case 'i':
- flag |= Pattern.CASE_INSENSITIVE;
- break;
- case 'x':
- flag |= Pattern.COMMENTS;
- break;
- }
- }
- return flag;
- }
-
- private final static char[] reservedRegexChars = new char[] { '\\', '(', ')', '[', ']', '{', '}', '.', '^', '$',
- '*', '|' };
-
- static {
- Arrays.sort(reservedRegexChars);
- }
+ protected abstract String compute(UTF8StringPointable strPtr1st, UTF8StringPointable strPtr2nd,
+ UTF8StringPointable strPtr3rd) throws AlgebricksException;
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
index d7b7d0a..42c5c49 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
@@ -37,7 +37,7 @@ import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
import org.apache.hyracks.data.std.api.IDataOutputProvider;
import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-import org.apache.hyracks.dataflow.common.data.util.StringUtils;
+import org.apache.hyracks.util.string.UTF8StringUtil;
public class CodePointToStringDescriptor extends AbstractScalarFunctionDynamicDescriptor {
@@ -49,6 +49,7 @@ public class CodePointToStringDescriptor extends AbstractScalarFunctionDynamicDe
};
private final static byte[] currentUTF8 = new byte[6];
+ private final static byte[] tempStoreForLength = new byte[5];
private final byte stringTypeTag = ATypeTag.STRING.serialize();
@Override
@@ -57,44 +58,6 @@ public class CodePointToStringDescriptor extends AbstractScalarFunctionDynamicDe
private static final long serialVersionUID = 1L;
- private int codePointToUTF8(int c) {
- if (c < 0x80) {
- currentUTF8[0] = (byte) (c & 0x7F /* mask 7 lsb: 0b1111111 */);
- return 1;
- } else if (c < 0x0800) {
- currentUTF8[0] = (byte) (c >> 6 & 0x1F | 0xC0);
- currentUTF8[1] = (byte) (c & 0x3F | 0x80);
- return 2;
- } else if (c < 0x010000) {
- currentUTF8[0] = (byte) (c >> 12 & 0x0F | 0xE0);
- currentUTF8[1] = (byte) (c >> 6 & 0x3F | 0x80);
- currentUTF8[2] = (byte) (c & 0x3F | 0x80);
- return 3;
- } else if (c < 0x200000) {
- currentUTF8[0] = (byte) (c >> 18 & 0x07 | 0xF0);
- currentUTF8[1] = (byte) (c >> 12 & 0x3F | 0x80);
- currentUTF8[2] = (byte) (c >> 6 & 0x3F | 0x80);
- currentUTF8[3] = (byte) (c & 0x3F | 0x80);
- return 4;
- } else if (c < 0x4000000) {
- currentUTF8[0] = (byte) (c >> 24 & 0x03 | 0xF8);
- currentUTF8[1] = (byte) (c >> 18 & 0x3F | 0x80);
- currentUTF8[2] = (byte) (c >> 12 & 0x3F | 0x80);
- currentUTF8[3] = (byte) (c >> 6 & 0x3F | 0x80);
- currentUTF8[4] = (byte) (c & 0x3F | 0x80);
- return 5;
- } else if (c < 0x80000000) {
- currentUTF8[0] = (byte) (c >> 30 & 0x01 | 0xFC);
- currentUTF8[1] = (byte) (c >> 24 & 0x3F | 0x80);
- currentUTF8[2] = (byte) (c >> 18 & 0x3F | 0x80);
- currentUTF8[3] = (byte) (c >> 12 & 0x3F | 0x80);
- currentUTF8[4] = (byte) (c >> 6 & 0x3F | 0x80);
- currentUTF8[5] = (byte) (c & 0x3F | 0x80);
- return 6;
- }
- return 0;
- }
-
@Override
public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
return new ICopyEvaluator() {
@@ -139,17 +102,17 @@ public class CodePointToStringDescriptor extends AbstractScalarFunctionDynamicDe
int codePoint = 0;
codePoint = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(
serOrderedList, itemOffset, 1);
- utf_8_len += codePointToUTF8(codePoint);
+ utf_8_len += UTF8StringUtil.codePointToUTF8(codePoint, currentUTF8);
}
out.writeByte(stringTypeTag);
- StringUtils.writeUTF8Len(utf_8_len, out);
+ UTF8StringUtil.writeUTF8Length(utf_8_len, tempStoreForLength, out);
for (int i = 0; i < size; i++) {
int itemOffset = AOrderedListSerializerDeserializer
.getItemOffset(serOrderedList, i);
int codePoint = 0;
codePoint = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(
serOrderedList, itemOffset, 1);
- utf_8_len = codePointToUTF8(codePoint);
+ utf_8_len = UTF8StringUtil.codePointToUTF8(codePoint, currentUTF8);
for (int j = 0; j < utf_8_len; j++) {
out.writeByte(currentUTF8[j]);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodepointIterator.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodepointIterator.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodepointIterator.java
deleted file mode 100644
index bc91000..0000000
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/CodepointIterator.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.runtime.evaluators.functions;
-
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-
-public class CodepointIterator {
- public void reset(byte[] buf, int startPos) {
- this.buf = buf;
- this.curPos = startPos + 2;
- this.startPos = startPos;
- len = UTF8StringPointable.getUTFLength(buf, startPos);
- }
-
- public int size() {
- return len;
- }
-
- private byte[] buf;
- private int curPos = 0;
- private int len = 0;
- private int startPos = 0;
-
- public int getCodePoint() {
- return UTF8ToCodePoint(buf, curPos);
- }
-
- public static int UTF8ToCodePoint(byte[] b, int s) {
- if (b[s] >> 7 == 0) {
- // 1 byte
- return b[s];
- } else if ((b[s] & 0xe0) == 0xc0) { /*
- * 0xe0 = 0b1110000
- */
- // 2 bytes
- return ((int) (b[s] & 0x1f)) << 6 | /*
- * 0x3f = 0b00111111
- */((int) (b[s + 1] & 0x3f));
- } else if ((b[s] & 0xf0) == 0xe0) {
- // 3bytes
- return ((int) (b[s] & 0xf)) << 12 | ((int) (b[s + 1] & 0x3f)) << 6 | ((int) (b[s + 2] & 0x3f));
- } else if ((b[s] & 0xf8) == 0xf0) {
- // 4bytes
- return ((int) (b[s] & 0x7)) << 18 | ((int) (b[s + 1] & 0x3f)) << 12 | ((int) (b[s + 2] & 0x3f)) << 6
- | ((int) (b[s + 3] & 0x3f));
- } else if ((b[s] & 0xfc) == 0xf8) {
- // 5bytes
- return ((int) (b[s] & 0x3)) << 24 | ((int) (b[s + 1] & 0x3f)) << 18 | ((int) (b[s + 2] & 0x3f)) << 12
- | ((int) (b[s + 3] & 0x3f)) << 6 | ((int) (b[s + 4] & 0x3f));
- } else if ((b[s] & 0xfe) == 0xfc) {
- // 6bytes
- return ((int) (b[s] & 0x1)) << 30 | ((int) (b[s + 1] & 0x3f)) << 24 | ((int) (b[s + 2] & 0x3f)) << 18
- | ((int) (b[s + 3] & 0x3f)) << 12 | ((int) (b[s + 4] & 0x3f)) << 6 | ((int) (b[s + 5] & 0x3f));
- }
- return 0;
- }
-
- public void next() {
- int step = UTF8StringPointable.charSize(buf, curPos);
- if (step + curPos < len + 2 + startPos)
- curPos += step;
- }
-
- public boolean hasNext() {
- int step = UTF8StringPointable.charSize(buf, curPos);
- if (step + curPos < len + 2 + startPos)
- return true;
- return false;
- }
-
- public static int compare(CodepointIterator ls, CodepointIterator rs) {
- CodepointIterator shortString = ls.size() < rs.size() ? ls : rs;
-
- while (true) {
- int c1 = ls.getCodePoint();
- int c2 = rs.getCodePoint();
- if (c1 != c2) {
- return c1 - c2;
- }
- if (shortString.hasNext()) {
- ls.next();
- rs.next();
- } else {
- break;
- }
- }
- return ls.size() - rs.size();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ContainsDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ContainsDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ContainsDescriptor.java
deleted file mode 100644
index aeffc97..0000000
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/ContainsDescriptor.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.runtime.evaluators.functions;
-
-import java.io.DataOutput;
-
-import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.functions.IFunctionDescriptor;
-import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
-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.data.std.api.IDataOutputProvider;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-
-public class ContainsDescriptor extends AbstractScalarFunctionDynamicDescriptor {
- private static final long serialVersionUID = 1L;
-
- public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
- public IFunctionDescriptor createFunctionDescriptor() {
- return new ContainsDescriptor();
- }
- };
-
- @Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-
- return new ICopyEvaluatorFactory() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public ICopyEvaluator createEvaluator(IDataOutputProvider output) throws AlgebricksException {
-
- DataOutput dout = output.getDataOutput();
-
- return new AbstractStringContainsEval(dout, args[0], args[1], AsterixBuiltinFunctions.CONTAINS) {
-
- @Override
- protected boolean findMatch(byte[] strBytes, byte[] patternBytes) {
- int utflen1 = UTF8StringPointable.getUTFLength(strBytes, 1);
- int utflen2 = UTF8StringPointable.getUTFLength(patternBytes, 1);
-
- int s1Start = 3;
- int s2Start = 3;
-
- boolean matches = false;
- int maxStart = utflen1 - utflen2;
- int startMatch = 0;
- while (startMatch <= maxStart) {
- int c1 = startMatch;
- int c2 = 0;
- while (c1 < utflen1 && c2 < utflen2) {
- char ch1 = UTF8StringPointable.charAt(strBytes, s1Start + c1);
- char ch2 = UTF8StringPointable.charAt(patternBytes, s2Start + c2);
-
- if (ch1 != ch2) {
- break;
- }
- c1 += UTF8StringPointable.charSize(strBytes, s1Start + c1);
- c2 += UTF8StringPointable.charSize(patternBytes, s2Start + c2);
- }
- if (c2 == utflen2) {
- matches = true;
- break;
- }
- startMatch += UTF8StringPointable.charSize(strBytes, s1Start + startMatch);
- }
- return matches;
- }
-
- };
- }
- };
- }
-
- @Override
- public FunctionIdentifier getIdentifier() {
- return AsterixBuiltinFunctions.CONTAINS;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java
index e94aacf..15ce3d4 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java
@@ -89,6 +89,8 @@ public class EditDistanceStringIsFilterable extends AbstractScalarFunctionDynami
private final ISerializerDeserializer<ABoolean> booleanSerde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ABOOLEAN);
+ private final UTF8StringPointable utf8Ptr = new UTF8StringPointable();
+
public EditDistanceStringIsFilterableEvaluator(ICopyEvaluatorFactory[] args, IDataOutputProvider output)
throws AlgebricksException {
this.output = output;
@@ -110,14 +112,9 @@ public class EditDistanceStringIsFilterable extends AbstractScalarFunctionDynami
throw new AlgebricksException(AsterixBuiltinFunctions.EDIT_DISTANCE_STRING_IS_FILTERABLE.getName()
+ ": expects input type STRING as first argument, but got " + typeTag + ".");
}
- int utf8Length = UTF8StringPointable.getUTFLength(argBuf.getByteArray(), 1);
- int pos = 3;
- long strLen = 0;
- int end = pos + utf8Length;
- while (pos < end) {
- strLen++;
- pos += UTF8StringPointable.charSize(argBuf.getByteArray(), pos);
- }
+
+ utf8Ptr.set(argBuf.getByteArray(), 1, argBuf.getLength());
+ int strLen = utf8Ptr.getStringLength();
// Check type and extract edit-distance threshold.
argBuf.reset();
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EndsWithDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EndsWithDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EndsWithDescriptor.java
deleted file mode 100644
index c3bfcc1..0000000
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EndsWithDescriptor.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.runtime.evaluators.functions;
-
-import java.io.DataOutput;
-
-import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.functions.IFunctionDescriptor;
-import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
-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.data.std.api.IDataOutputProvider;
-import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
-
-public class EndsWithDescriptor extends AbstractScalarFunctionDynamicDescriptor {
- private static final long serialVersionUID = 1L;
-
- public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
- public IFunctionDescriptor createFunctionDescriptor() {
- return new EndsWithDescriptor();
- }
- };
-
- @Override
- public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-
- return new ICopyEvaluatorFactory() {
- private static final long serialVersionUID = 1L;
-
- @Override
- public ICopyEvaluator createEvaluator(IDataOutputProvider output) throws AlgebricksException {
-
- DataOutput dout = output.getDataOutput();
-
- return new AbstractStringContainsEval(dout, args[0], args[1], AsterixBuiltinFunctions.ENDS_WITH) {
-
- @Override
- protected boolean findMatch(byte[] strBytes, byte[] patternBytes) {
- int utflen1 = UTF8StringPointable.getUTFLength(strBytes, 1);
- int utflen2 = UTF8StringPointable.getUTFLength(patternBytes, 1);
-
- int s1Start = 3;
- int s2Start = 3;
-
- int startMatch = utflen1 - utflen2;
- if (startMatch < 0) {
- return false;
- }
- int c1 = 0;
- while (c1 < startMatch) {
- c1 += UTF8StringPointable.charSize(strBytes, s1Start + c1);
- }
- int c2 = 0;
- while (c1 < utflen1 && c2 < utflen2) {
- char ch1 = UTF8StringPointable.charAt(strBytes, s1Start + c1);
- char ch2 = UTF8StringPointable.charAt(patternBytes, s2Start + c2);
- if (ch1 != ch2) {
- break;
- }
- c1 += UTF8StringPointable.charSize(strBytes, s1Start + c1);
- c2 += UTF8StringPointable.charSize(patternBytes, s2Start + c2);
- }
- return (c2 == utflen2);
- }
-
- };
- }
- };
- }
-
- @Override
- public FunctionIdentifier getIdentifier() {
- return AsterixBuiltinFunctions.ENDS_WITH;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsNullDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsNullDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsNullDescriptor.java
index 15e623e..e7e90ad 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsNullDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsNullDescriptor.java
@@ -60,6 +60,7 @@ public class IsNullDescriptor extends AbstractScalarFunctionDynamicDescriptor {
private DataOutput out = output.getDataOutput();
private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ private final AObjectSerializerDeserializer aObjSerDer = new AObjectSerializerDeserializer();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -68,7 +69,7 @@ public class IsNullDescriptor extends AbstractScalarFunctionDynamicDescriptor {
boolean isNull = argOut.getByteArray()[argOut.getStartOffset()] == SER_NULL_TYPE_TAG;
ABoolean res = isNull ? ABoolean.TRUE : ABoolean.FALSE;
try {
- AObjectSerializerDeserializer.INSTANCE.serialize(res, out);
+ aObjSerDer.serialize(res, out);
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/742aba85/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsSystemNullDescriptor.java
----------------------------------------------------------------------
diff --git a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsSystemNullDescriptor.java b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsSystemNullDescriptor.java
index 83533ba..47ae0d6 100644
--- a/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsSystemNullDescriptor.java
+++ b/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IsSystemNullDescriptor.java
@@ -60,6 +60,7 @@ public class IsSystemNullDescriptor extends AbstractScalarFunctionDynamicDescrip
private DataOutput out = output.getDataOutput();
private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+ private final AObjectSerializerDeserializer aObjSerDer = new AObjectSerializerDeserializer();
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
@@ -68,7 +69,7 @@ public class IsSystemNullDescriptor extends AbstractScalarFunctionDynamicDescrip
boolean isSystemNull = argOut.getByteArray()[argOut.getStartOffset()] == SER_SYSTEM_NULL_TYPE_TAG;
ABoolean res = isSystemNull ? ABoolean.TRUE : ABoolean.FALSE;
try {
- AObjectSerializerDeserializer.INSTANCE.serialize(res, out);
+ aObjSerDer.serialize(res, out);
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}