use of com.yahoo.document.ArrayDataType in project vespa by vespa-engine.
the class VespaDocumentDeserializer42 method getValueUpdate.
public ValueUpdate getValueUpdate(DataType superType, DataType subType) {
int vuTypeId = getInt(null);
ValueUpdate.ValueUpdateClassID op = ValueUpdate.ValueUpdateClassID.getID(vuTypeId);
if (op == null) {
throw new IllegalArgumentException("Read type " + vuTypeId + " of bytebuffer, but this is not a legal value update type.");
}
switch(op) {
case ADD:
{
FieldValue fval = subType.createFieldValue();
fval.deserialize(this);
int weight = getInt(null);
return new AddValueUpdate(fval, weight);
}
case ARITHMETIC:
int opId = getInt(null);
ArithmeticValueUpdate.Operator operator = ArithmeticValueUpdate.Operator.getID(opId);
double operand = getDouble(null);
return new ArithmeticValueUpdate(operator, operand);
case ASSIGN:
{
byte contents = getByte(null);
FieldValue fval = null;
if (contents == (byte) 1) {
fval = superType.createFieldValue();
fval.deserialize(this);
}
return new AssignValueUpdate(fval);
}
case CLEAR:
return new ClearValueUpdate();
case MAP:
if (superType instanceof ArrayDataType) {
CollectionDataType type = (CollectionDataType) superType;
IntegerFieldValue index = new IntegerFieldValue();
index.deserialize(this);
ValueUpdate update = getValueUpdate(type.getNestedType(), null);
return new MapValueUpdate(index, update);
} else if (superType instanceof WeightedSetDataType) {
CollectionDataType type = (CollectionDataType) superType;
FieldValue fval = type.getNestedType().createFieldValue();
fval.deserialize(this);
ValueUpdate update = getValueUpdate(DataType.INT, null);
return new MapValueUpdate(fval, update);
} else {
throw new DeserializationException("MapValueUpdate only works for arrays and weighted sets");
}
case REMOVE:
FieldValue fval = ((CollectionDataType) superType).getNestedType().createFieldValue();
fval.deserialize(this);
return new RemoveValueUpdate(fval);
default:
throw new DeserializationException("Could not deserialize ValueUpdate, unknown valueUpdateClassID type " + vuTypeId);
}
}
use of com.yahoo.document.ArrayDataType in project vespa by vespa-engine.
the class VespaDocumentDeserializer42 method read.
public <T extends FieldValue> void read(FieldBase field, Array<T> array) {
int numElements = getNumCollectionElems();
ArrayList<T> list = new ArrayList<T>(numElements);
ArrayDataType type = array.getDataType();
for (int i = 0; i < numElements; i++) {
if (version < 7) {
// We don't need size for anything
getInt(null);
}
FieldValue fv = type.getNestedType().createFieldValue();
fv.deserialize(null, this);
list.add((T) fv);
}
array.clear();
array.addAll(list);
}
use of com.yahoo.document.ArrayDataType in project vespa by vespa-engine.
the class ArrayTestCase method testToArray.
public void testToArray() {
ArrayDataType dt = new ArrayDataType(DataType.STRING);
Array<StringFieldValue> arr = new Array<>(dt);
arr.add(new StringFieldValue("a"));
arr.add(new StringFieldValue("b"));
arr.add(new StringFieldValue("c"));
StringFieldValue[] tooSmall = new StringFieldValue[0];
StringFieldValue[] bigEnough = new StringFieldValue[3];
StringFieldValue[] a = arr.toArray(tooSmall);
assertNotSame(tooSmall, a);
assertEquals(new StringFieldValue("a"), a[0]);
assertEquals(new StringFieldValue("b"), a[1]);
assertEquals(new StringFieldValue("c"), a[2]);
StringFieldValue[] b = arr.toArray(bigEnough);
assertSame(bigEnough, b);
assertEquals(new StringFieldValue("a"), b[0]);
assertEquals(new StringFieldValue("b"), b[1]);
assertEquals(new StringFieldValue("c"), b[2]);
}
use of com.yahoo.document.ArrayDataType in project vespa by vespa-engine.
the class JoinExpression method doVerify.
@Override
protected void doVerify(VerificationContext context) {
DataType input = context.getValue();
if (!(input instanceof ArrayDataType)) {
throw new VerificationException(this, "Expected Array input, got " + input.getName() + ".");
}
context.setValue(createdOutputType());
}
use of com.yahoo.document.ArrayDataType in project vespa by vespa-engine.
the class ToArrayExpression method doExecute.
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected void doExecute(ExecutionContext ctx) {
FieldValue input = ctx.getValue();
DataType inputType = input.getDataType();
ArrayDataType outputType = DataType.getArray(inputType);
Array output = outputType.createFieldValue();
output.add(input);
ctx.setValue(output);
}
Aggregations