use of com.yahoo.document.datatypes.FieldValue in project vespa by vespa-engine.
the class ValueUpdate method createAddAll.
/**
* Creates a new value update
* specifying an addition of all key/weight pairs in a weighted set to a weighted set. If this method
* is used on an array data type, the weights will be omitted. Note that this method is just a convenience method,
* it simply iterates through the set and creates value updates by calling createAdd() for each element.
*
* @param set a WeightedSet containing the key/weight pairs to add
* @return a ValueUpdate specifying the addition
* @throws IllegalArgumentException if the runtime type of values does not match the type required
* @throws UnsupportedOperationException if the field type is not weighted set or array
* @see ValueUpdate#createAdd(FieldValue, Integer)
*/
public static List<ValueUpdate> createAddAll(WeightedSet<? extends FieldValue> set) {
List<ValueUpdate> vupds = new ArrayList<>();
Iterator<? extends FieldValue> it = set.fieldValueIterator();
while (it.hasNext()) {
FieldValue key = it.next();
vupds.add(ValueUpdate.createAdd(key, set.get(key)));
}
return vupds;
}
use of com.yahoo.document.datatypes.FieldValue in project vespa by vespa-engine.
the class VespaDocumentDeserializer42 method read.
public <T extends FieldValue> void read(FieldBase field, WeightedSet<T> ws) {
WeightedSetDataType type = ws.getDataType();
// Have no need for type
getInt(null);
int numElements = getInt(null);
if (numElements < 0) {
throw new DeserializationException("Bad number of weighted set elements, " + numElements);
}
// Avoid resizing
ws.clearAndReserve(numElements * 2);
for (int i = 0; i < numElements; i++) {
int size = getInt(null);
FieldValue value = type.getNestedType().createFieldValue();
value.deserialize(null, this);
IntegerFieldValue weight = new IntegerFieldValue(getInt(null));
ws.putUnChecked((T) value, weight);
}
}
use of com.yahoo.document.datatypes.FieldValue in project vespa by vespa-engine.
the class VespaDocumentDeserializer42 method read.
public void read(AssignFieldPathUpdate update) {
byte flags = getByte(null);
update.setRemoveIfZero((flags & AssignFieldPathUpdate.REMOVE_IF_ZERO) != 0);
update.setCreateMissingPath((flags & AssignFieldPathUpdate.CREATE_MISSING_PATH) != 0);
if ((flags & AssignFieldPathUpdate.ARITHMETIC_EXPRESSION) != 0) {
update.setExpression(getString(null));
} else {
DataType dt = update.getFieldPath().getResultingDataType();
FieldValue fv = dt.createFieldValue();
fv.deserialize(this);
update.setNewValue(fv);
}
}
use of com.yahoo.document.datatypes.FieldValue in project vespa by vespa-engine.
the class VespaDocumentDeserializer42 method read.
public void read(AddFieldPathUpdate update) {
DataType dt = update.getFieldPath().getResultingDataType();
FieldValue fv = dt.createFieldValue();
dt.createFieldValue();
fv.deserialize(this);
if (!(fv instanceof Array)) {
throw new DeserializationException("Add only applicable to array types");
}
update.setNewValues((Array) fv);
}
use of com.yahoo.document.datatypes.FieldValue 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);
}
}
Aggregations