diff options
2 files changed, 28 insertions, 6 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java index cffbd21f7c5..7296e4ce61e 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java @@ -242,7 +242,6 @@ public class FieldUpdateAdapter implements UpdateAdapter { private static class CompleteBuilder extends PartialBuilder { - static final ValueUpdate nullMap = new MapValueUpdate(null, null); static final ValueUpdate nullAssign = new AssignValueUpdate(null); CompleteBuilder() { @@ -251,11 +250,7 @@ public class FieldUpdateAdapter implements UpdateAdapter { @Override List<ValueUpdate> createValueUpdates(FieldValue val, ValueUpdate upd) { - if (val instanceof StructuredFieldValue) { - return super.createValueUpdates(val, nullMap); - } else { - return super.createValueUpdates(val, nullAssign); - } + return super.createValueUpdates(val, nullAssign); } } } diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentUpdateTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentUpdateTestCase.java index 5480e0feca7..beed3053692 100644 --- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentUpdateTestCase.java +++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentUpdateTestCase.java @@ -6,6 +6,7 @@ import com.yahoo.document.datatypes.IntegerFieldValue; import com.yahoo.document.datatypes.StringFieldValue; import com.yahoo.document.datatypes.Struct; import com.yahoo.document.update.AddValueUpdate; +import com.yahoo.document.update.AssignValueUpdate; import com.yahoo.document.update.FieldUpdate; import com.yahoo.document.update.ValueUpdate; import com.yahoo.vespa.indexinglanguage.expressions.Expression; @@ -64,4 +65,30 @@ public class DocumentUpdateTestCase { upd = Expression.execute(Expression.fromString("input my_str | index my_str"), upd); assertTrue(upd.getCreateIfNonExistent()); } + + @Test + public void assign_updates_to_structs_are_preserved() throws ParseException { + var docType = new DocumentType("my_input"); + var structType = new StructDataType("foobarstruct"); + var fooField = new Field("foo", DataType.STRING); + var barField = new Field("bar", DataType.STRING); + structType.addField(fooField); + structType.addField(barField); + docType.addField(new Field("mystruct", structType)); + + var upd = new DocumentUpdate(docType, "id:scheme:my_input::"); + var updatedStruct = new Struct(structType); + updatedStruct.setFieldValue("foo", new StringFieldValue("new groovy value")); + updatedStruct.setFieldValue("bar", new StringFieldValue("totally tubular!")); + upd.addFieldUpdate(FieldUpdate.createAssign(docType.getField("mystruct"), updatedStruct)); + + upd = Expression.execute(Expression.fromString("input mystruct | passthrough mystruct"), upd); + assertEquals(upd.fieldUpdates().size(), 1); + var fieldUpdate = upd.getFieldUpdate("mystruct"); + assertNotNull(fieldUpdate); + var valueUpdate = fieldUpdate.getValueUpdate(0); + assertTrue(valueUpdate instanceof AssignValueUpdate); + var av = (AssignValueUpdate)valueUpdate; + assertEquals(av.getValue(), updatedStruct); + } } |