summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-09-27 09:57:46 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-09-27 09:57:46 +0200
commit258d329a753206fc31b9680e868539292b4f5d23 (patch)
tree3bf7048b7f94b2ceb20947d2c7fd9c9230efe990
parent42b52867364e9cdf1a62b5d34e3cdcc6f757b49d (diff)
When you want to let them through, you can not only give them partial rights.
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/IndexingScript.java9
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableImportedSDField.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/ImmutableSDField.java1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/SDField.java6
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingInputs.java6
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/AttributeSettingsTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/IndexingInputsTestCase.java8
-rw-r--r--docprocs/src/main/java/com/yahoo/docprocs/indexing/DocumentScript.java1
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;