use of org.apache.hyracks.data.std.util.UTF8StringBuilder in project asterixdb by apache.
the class SubstringAfterDescriptor method createEvaluatorFactory.
@Override
public IScalarEvaluatorFactory createEvaluatorFactory(final IScalarEvaluatorFactory[] args) {
return new IScalarEvaluatorFactory() {
private static final long serialVersionUID = 1L;
@Override
public IScalarEvaluator createScalarEvaluator(final IHyracksTaskContext ctx) throws HyracksDataException {
return new IScalarEvaluator() {
private ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
private DataOutput out = resultStorage.getDataOutput();
private IPointable array0 = new VoidPointable();
private IPointable array1 = new VoidPointable();
private IScalarEvaluator evalString = args[0].createScalarEvaluator(ctx);
private IScalarEvaluator evalPattern = args[1].createScalarEvaluator(ctx);
private final GrowableArray array = new GrowableArray();
private final UTF8StringBuilder builder = new UTF8StringBuilder();
private final UTF8StringPointable stringPtr = new UTF8StringPointable();
private final UTF8StringPointable patternPtr = new UTF8StringPointable();
@Override
public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
resultStorage.reset();
evalString.evaluate(tuple, array0);
byte[] src = array0.getByteArray();
int srcOffset = array0.getStartOffset();
int srcLen = array0.getLength();
evalPattern.evaluate(tuple, array1);
byte[] pattern = array1.getByteArray();
int patternOffset = array1.getStartOffset();
int patternLen = array1.getLength();
if (src[srcOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
throw new TypeMismatchException(getIdentifier(), 0, src[srcOffset], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
if (pattern[patternOffset] != ATypeTag.SERIALIZED_STRING_TYPE_TAG) {
throw new TypeMismatchException(getIdentifier(), 1, pattern[patternOffset], ATypeTag.SERIALIZED_STRING_TYPE_TAG);
}
try {
stringPtr.set(src, srcOffset + 1, srcLen - 1);
patternPtr.set(pattern, patternOffset + 1, patternLen - 1);
array.reset();
UTF8StringPointable.substrAfter(stringPtr, patternPtr, builder, array);
out.writeByte(ATypeTag.SERIALIZED_STRING_TYPE_TAG);
out.write(array.getByteArray(), 0, array.getLength());
} catch (IOException e) {
throw new HyracksDataException(e);
}
result.set(resultStorage);
}
};
}
};
}
use of org.apache.hyracks.data.std.util.UTF8StringBuilder in project asterixdb by apache.
the class UTF8StringPointableTest method testTrimWithPattern.
@Test
public void testTrimWithPattern() throws Exception {
UTF8StringBuilder builder = new UTF8StringBuilder();
GrowableArray storage = new GrowableArray();
UTF8StringPointable result = new UTF8StringPointable();
UTF8StringPointable input = generateUTF8Pointable(" this is it.i am;here. ");
// Trims both sides.
input.trim(builder, storage, true, true, CharSet.getInstance(" hert."));
result.set(storage.getByteArray(), 0, storage.getLength());
UTF8StringPointable expected = generateUTF8Pointable("is is it.i am;");
assertEquals(0, expected.compareTo(result));
// Only trims the right side.
storage.reset();
input.trim(builder, storage, false, true, CharSet.getInstance(" hert."));
result.set(storage.getByteArray(), 0, storage.getLength());
expected = generateUTF8Pointable(" this is it.i am;");
assertEquals(0, expected.compareTo(result));
// Only trims the left side.
storage.reset();
input.trim(builder, storage, true, false, CharSet.getInstance(" hert."));
result.set(storage.getByteArray(), 0, storage.getLength());
expected = generateUTF8Pointable("is is it.i am;here. ");
assertEquals(0, expected.compareTo(result));
}
use of org.apache.hyracks.data.std.util.UTF8StringBuilder in project asterixdb by apache.
the class UTF8StringPointableTest method testInitCap.
@Test
public void testInitCap() throws Exception {
UTF8StringBuilder builder = new UTF8StringBuilder();
GrowableArray storage = new GrowableArray();
UTF8StringPointable result = new UTF8StringPointable();
UTF8StringPointable input = generateUTF8Pointable("this is it.i am;here.");
input.initCap(builder, storage);
result.set(storage.getByteArray(), 0, storage.getLength());
UTF8StringPointable expected = generateUTF8Pointable("This Is It.I Am;Here.");
assertEquals(0, expected.compareTo(result));
}
use of org.apache.hyracks.data.std.util.UTF8StringBuilder in project asterixdb by apache.
the class UTF8StringPointableTest method testTrim.
@Test
public void testTrim() throws Exception {
UTF8StringBuilder builder = new UTF8StringBuilder();
GrowableArray storage = new GrowableArray();
UTF8StringPointable result = new UTF8StringPointable();
UTF8StringPointable input = generateUTF8Pointable(" this is it.i am;here. ");
// Trims both sides.
input.trim(builder, storage, true, true, CharSet.getInstance(" "));
result.set(storage.getByteArray(), 0, storage.getLength());
UTF8StringPointable expected = generateUTF8Pointable("this is it.i am;here.");
assertEquals(0, expected.compareTo(result));
// Only trims the right side.
storage.reset();
input.trim(builder, storage, false, true, CharSet.getInstance(" "));
result.set(storage.getByteArray(), 0, storage.getLength());
expected = generateUTF8Pointable(" this is it.i am;here.");
assertEquals(0, expected.compareTo(result));
// Only trims the left side.
storage.reset();
input.trim(builder, storage, true, false, CharSet.getInstance(" "));
result.set(storage.getByteArray(), 0, storage.getLength());
expected = generateUTF8Pointable("this is it.i am;here. ");
assertEquals(0, expected.compareTo(result));
}
use of org.apache.hyracks.data.std.util.UTF8StringBuilder in project asterixdb by apache.
the class UTF8StringPointableTest method testSubstr.
@Test
public void testSubstr() throws Exception {
GrowableArray storage = new GrowableArray();
UTF8StringBuilder builder = new UTF8StringBuilder();
STRING_LEN_128.substr(1, 127, builder, storage);
UTF8StringPointable result = new UTF8StringPointable();
result.set(storage.getByteArray(), 0, storage.getLength());
assertEquals(0, STRING_LEN_127.compareTo(result));
storage.reset();
STRING_UTF8_MIX.substr(0, UTF8StringSample.STRING_UTF8_MIX.length(), builder, storage);
result.set(storage.getByteArray(), 0, storage.getLength());
assertEquals(0, STRING_UTF8_MIX.compareTo(result));
}
Aggregations