summaryrefslogtreecommitdiffstats
path: root/docproc
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-06-28 13:57:16 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2019-06-28 13:57:16 +0200
commitdd3d9839635a8a68134ebfc3bf6e1e9258a17bbb (patch)
treeb2e4a96fabd27bd01777f2ca930b17086260f461 /docproc
parentb80644404a2825ee0fc2d8d47abd1d91770c9520 (diff)
Ensure that we also upgrade the struct elements in arrays.
Diffstat (limited to 'docproc')
-rw-r--r--docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java17
1 files changed, 16 insertions, 1 deletions
diff --git a/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java b/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java
index d31573c76a4..522af9e1f84 100644
--- a/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java
+++ b/docproc/src/main/java/com/yahoo/docproc/AbstractConcreteDocumentFactory.java
@@ -2,10 +2,13 @@
package com.yahoo.docproc;
import java.util.Map;
+
+import com.yahoo.document.DataType;
import com.yahoo.document.Document;
import com.yahoo.document.DocumentId;
import com.yahoo.document.Field;
import com.yahoo.document.annotation.Annotation;
+import com.yahoo.document.datatypes.Array;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.Struct;
import com.yahoo.document.datatypes.StructuredFieldValue;
@@ -30,6 +33,7 @@ public abstract class AbstractConcreteDocumentFactory extends com.yahoo.componen
*/
public abstract Document getDocumentCopy(java.lang.String type, StructuredFieldValue src, DocumentId id);
+
/**
* If the FieldValue is a StructuredFieldValue it will upgrade to the concrete type
* @param field
@@ -37,15 +41,26 @@ public abstract class AbstractConcreteDocumentFactory extends com.yahoo.componen
* @return fv or upgraded fv
*/
public FieldValue optionallyUpgrade(Field field, FieldValue fv) {
+ return optionallyUpgrade(field.getDataType(), fv);
+ }
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private FieldValue optionallyUpgrade(DataType dataType, FieldValue fv) {
if (fv instanceof StructuredFieldValue) {
try {
- return structTypes().get(field.getDataType().getName())
+ return structTypes().get(dataType.getName())
.getConstructor(StructuredFieldValue.class)
.newInstance(fv);
} catch (java.lang.Exception ex) {
throw new RuntimeException(ex);
}
+ } else if (fv instanceof Array) {
+ Array<FieldValue> array = (Array<FieldValue>) fv;
+ DataType nestedType = array.getDataType().getNestedType();
+ for (int i=0; i < array.size(); i++) {
+ array.set(i, optionallyUpgrade(nestedType, array.get(i)));
+ }
}
+ // TODO We also need specialhandling for weighted set/map. Limiting to array until verified.
return fv;
}
}