diff options
8 files changed, 21 insertions, 17 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java index 6c7396d607b..dc6c17e425e 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java @@ -41,17 +41,12 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro derive(search); } - private boolean hasFullIndexingDocprocRights(ImmutableSDField field) { - Attribute self = field.getAttributes().get(field.getName()); - return (!field.isExtraField() || ((self != null) && self.isMutable())); - } - @Override protected void derive(ImmutableSDField field, Search search) { if (field.isImportedField()) { return; } - if (hasFullIndexingDocprocRights(field)) { + if (field.hasFullIndexingDocprocRights()) { docFields.add(field.getName()); } if (field.usesStructOrMap() && @@ -93,7 +88,7 @@ public final class IndexingScript extends Derived implements IlscriptsConfig.Pro if (modifiesSelf(exp)) { later.add(exp); } else { - ilscriptBuilder.content(exp.toString()); + ilscriptBuilder.content(exp.toString()); } fieldFetcher.visit(exp); touchedFields.addAll(fieldFetcher.touchedFields()); diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java index 125e6b976b5..ff11c2fdf22 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java @@ -169,4 +169,9 @@ public class ImmutableImportedSDField implements ImmutableSDField { return new UnsupportedOperationException("'" + aspect + "' is not meaningful or relevant for an imported field."); } + @Override + public boolean hasFullIndexingDocprocRights() { + return importedField.targetField().hasFullIndexingDocprocRights(); + } + } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java index 70553d4b57c..6fe8a4da92b 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java @@ -81,4 +81,5 @@ public interface ImmutableSDField { */ Field asField(); + boolean hasFullIndexingDocprocRights(); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java index 0590027a402..e310b6b6858 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java @@ -799,4 +799,10 @@ public class SDField extends Field implements TypedKey, FieldOperationContainer, return aliasToName; } + @Override + public boolean hasFullIndexingDocprocRights() { + Attribute self = getAttributes().get(getName()); + return (!isExtraField() || ((self != null) && self.isMutable())); + } + } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java index aeab2bb6638..b0129c0a836 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java @@ -97,13 +97,11 @@ public class IndexingInputs extends Processor { @Override protected void doVisit(Expression exp) { if ( ! (exp instanceof InputExpression)) return; - - SDDocumentType docType = search.getDocument(); String inputField = ((InputExpression)exp).getFieldName(); - if (docType.getField(inputField) != null) return; + if (search.getField(inputField).hasFullIndexingDocprocRights()) return; fail(search, field, "Indexing script refers to field '" + inputField + "' which does not exist " + - "in document type '" + docType.getName() + "'."); + "in document type '" + search.getDocument().getName() + "', and is not a mutable attribute."); } } } diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java index cadb2cda324..71db60065aa 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java @@ -165,7 +165,7 @@ public class AttributeSettingsTestCase extends SearchDefinitionTestCase { " }\n" + " }\n" + " field m type long {\n" + - " indexing: 0 | to_long | attribute\n" + + " indexing: attribute\n" + " attribute: mutable\n" + " }\n" + " field f type long {\n" + diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java index 8fb40a73f0a..582f5b08517 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java @@ -18,27 +18,27 @@ public class IndexingInputsTestCase { assertBuildFails("src/test/examples/indexing_extra_field_input_extra_field.sd", "For search 'indexing_extra_field_input_extra_field', field 'bar': Indexing script refers " + "to field 'bar' which does not exist in document type " + - "'indexing_extra_field_input_extra_field'."); + "'indexing_extra_field_input_extra_field', and is not a mutable attribute."); } @Test public void requireThatExtraFieldInputImplicitThrows() throws IOException, ParseException { assertBuildFails("src/test/examples/indexing_extra_field_input_implicit.sd", "For search 'indexing_extra_field_input_implicit', field 'foo': Indexing script refers to " + - "field 'foo' which does not exist in document type 'indexing_extra_field_input_implicit'."); + "field 'foo' which does not exist in document type 'indexing_extra_field_input_implicit', and is not a mutable attribute."); } @Test public void requireThatExtraFieldInputNullThrows() throws IOException, ParseException { assertBuildFails("src/test/examples/indexing_extra_field_input_null.sd", "For search 'indexing_extra_field_input_null', field 'foo': Indexing script refers to field " + - "'foo' which does not exist in document type 'indexing_extra_field_input_null'."); + "'foo' which does not exist in document type 'indexing_extra_field_input_null', and is not a mutable attribute."); } @Test public void requireThatExtraFieldInputSelfThrows() throws IOException, ParseException { assertBuildFails("src/test/examples/indexing_extra_field_input_self.sd", "For search 'indexing_extra_field_input_self', field 'foo': Indexing script refers to field " + - "'foo' which does not exist in document type 'indexing_extra_field_input_self'."); + "'foo' which does not exist in document type 'indexing_extra_field_input_self', and is not a mutable attribute."); } } diff --git a/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java b/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java index 10e3ce561d7..a2321e912e1 100644 --- a/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java +++ b/docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java @@ -9,7 +9,6 @@ import com.yahoo.document.datatypes.Array; import com.yahoo.document.datatypes.FieldValue; import com.yahoo.document.datatypes.MapFieldValue; import com.yahoo.document.datatypes.StringFieldValue; -import com.yahoo.document.datatypes.Struct; import com.yahoo.document.datatypes.StructuredFieldValue; import com.yahoo.document.datatypes.WeightedSet; import com.yahoo.document.fieldpathupdate.AssignFieldPathUpdate; |