summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java7
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/DocumentUpdateTestCase.java27
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);
+ }
}