/** Returns the numeric ID used to represent this field when serialized */ public final int getId(int version) { return (version > 6) ? getId() : getIdV6(); }
@Override public int hashCode() { return getId(); }
@Override public int hashCode() { return field.getId(Document.SERIALIZED_VERSION) + valueUpdates.hashCode(); }
private void buildConfig(StructDataType type, DocumenttypesConfig.Documenttype.Datatype.Builder dataTypeBuilder, DocumenttypesConfig.Documenttype.Builder documentBuilder, Set<Integer> built) { dataTypeBuilder.type(DocumenttypesConfig.Documenttype.Datatype.Type.Enum.STRUCT); DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder structBuilder = new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Builder(); dataTypeBuilder.sstruct(structBuilder); structBuilder.name(type.getName()); if (type.getCompressionConfig().type.getCode() != 0) { structBuilder.compression(new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Compression.Builder(). type(DocumenttypesConfig.Documenttype.Datatype.Sstruct.Compression.Type.Enum.valueOf(type.getCompressionConfig().type.toString())). level(type.getCompressionConfig().compressionLevel). threshold((int) type.getCompressionConfig().threshold). minsize((int) type.getCompressionConfig().minsize)); } for (com.yahoo.document.Field field : type.getFields()) { DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder builder = new DocumenttypesConfig.Documenttype.Datatype.Sstruct.Field.Builder(); builder.name(field.getName()). id(field.getId()). id_v6(field.getIdV6()). datatype(field.getDataType().getId()); if (field.getDataType() instanceof TensorDataType) { builder.detailedtype(((TensorDataType) field.getDataType()).getTensorType().toString()); } structBuilder.field(builder); buildConfig(field.getDataType(), documentBuilder, built); } }
public FieldUpdate removeFieldUpdate(Field field) { return id2FieldUpdates.remove(field.getId()); }
/** * Returns the update for a field * * @param field the field to return the update of * @return the update for the field, or null if that field has no update in this */ public FieldUpdate getFieldUpdate(Field field) { return getFieldUpdateById(field.getId()); }
@Override public FieldValue getFieldValue(Field field) { return values.get(field.getId()); }
public void addField(Field field) { if (fields.containsKey(field.getName())) { throw new IllegalArgumentException("Struct " + getName() + " already contains field with name " + field.getName()); } if (fieldIds.containsKey(field.getId(Document.SERIALIZED_VERSION))) { throw new IllegalArgumentException("Struct " + getName() + " already contains field with id " + field.getId(Document.SERIALIZED_VERSION)); } if (fieldIdsV6.containsKey(field.getId(6))) { throw new IllegalArgumentException("Struct " + getName() + " already contains a field with deprecated document serialization id " + field.getId(6)); } fields.put(field.getName(), field); fieldIds.put(field.getId(Document.SERIALIZED_VERSION), field); fieldIdsV6.put(field.getId(6), field); }
@Override public BaseStructDataType clone() { BaseStructDataType type = (BaseStructDataType) super.clone(); type.fieldIds = new LinkedHashMap<>(); type.fieldIdsV6 = new LinkedHashMap<>(); type.fields = new LinkedHashMap<>(); for (Field field : fieldIds.values()) { type.fields.put(field.getName(), field); type.fieldIds.put(field.getId(Document.SERIALIZED_VERSION), field); type.fieldIdsV6.put(field.getId(6), field); } return type; }
public boolean hasField(Field field, int version) { Field f = getField(field.getId(version), version); return f != null && f.equals(field); }
@Override protected void doSetFieldValue(Field field, FieldValue value) { if (field == null) { throw new IllegalArgumentException("Invalid null field pointer"); } Field myField = getDataType().getField(field.getId()); if (myField==null) { throw new IllegalArgumentException("No such field in "+getDataType()+" : "+field.getName()); } if (!myField .getDataType().isValueCompatible(value)) { throw new IllegalArgumentException( "Incompatible data types. Got " + value.getDataType() + ", expected " + myField.getDataType()); } if (myField.getId() != field.getId()) { throw new IllegalArgumentException( "Inconsistent field: " + field); } int index = values.getIndexOfKey(field.getId()); if (index == -1) { values.put(field.getId(), value); invalidateOrder(); } else { values.setValue(index, value); } }
@Override public FieldValue removeFieldValue(Field field) { FieldValue found = values.get(field.getId()); if (found != null) { Hashlet<Integer, FieldValue> copy = new Hashlet<>(); copy.reserve(values.size() - 1); for (int i=0; i < values.size(); i++) { if (values.key(i) != field.getId()) { copy.put(values.key(i), values.value(i)); } } values = copy; invalidateOrder(); } return found; }
/** * Adds the given {@link FieldUpdate} to this DocumentUpdate. If this DocumentUpdate already contains a FieldUpdate * for the named field, the content of the given FieldUpdate is added to the existing one. * * @param update The FieldUpdate to add to this DocumentUpdate. * @return This, to allow chaining. * @throws IllegalArgumentException If the {@link DocumentType} of this DocumentUpdate does not have a corresponding * field. */ public DocumentUpdate addFieldUpdate(FieldUpdate update) { int fieldId = update.getField().getId(); if (documentType.getField(fieldId) == null) { throw new IllegalArgumentException("Document type '" + documentType.getName() + "' does not have field '" + update.getField().getName() + "'."); } FieldUpdate prevUpdate = getFieldUpdateById(fieldId); if (prevUpdate != update) { if (prevUpdate != null) { prevUpdate.addAll(update); } else { id2FieldUpdates.put(fieldId, update); } } return this; }
@Override public void write(FieldUpdate update) { putInt(null, update.getField().getId(Document.SERIALIZED_VERSION)); putInt(null, update.getValueUpdates().size()); for (ValueUpdate vupd : update.getValueUpdates()) { putInt(null, vupd.getValueUpdateClassID().id); vupd.serialize(this, update.getField().getDataType()); } }
@Override public void write(FieldUpdate update) { putInt(null, update.getField().getId(Document.SERIALIZED_VERSION)); putInt(null, update.getValueUpdates().size()); for (ValueUpdate vupd : update.getValueUpdates()) { putInt(null, vupd.getValueUpdateClassID().id); vupd.serialize(this, update.getField().getDataType()); } }
fieldIds.add(value.getKey().getId(s.getVersion()));
fieldIds.add(value.getKey().getId(s.getVersion()));
fieldBuilder.name(field.getName()); if (field.hasForcedId()) { fieldBuilder.id(new Datatype.Structtype.Field.Id.Builder().id(field.getId()));