summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-07-12 12:49:22 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-07-12 12:49:22 +0000
commitbde1959a8972e6c7410d6155dd1468deb54df5be (patch)
tree6cc1f76443fb143ade3dc9d5fefd77f9ae1cddbc
parent162330a00e6c5a3ed0a0567a99aaa340bb6bd347 (diff)
Add validation of attribute fields using bool type, ensuring the collection type is supported.
Currently, only the single value bool type is supported by the search backend.
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/BoolAttributeValidator.java36
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java1
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/BoolAttributeValidatorTestCase.java49
3 files changed, 86 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/BoolAttributeValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/BoolAttributeValidator.java
new file mode 100644
index 00000000000..7ee22c3fd23
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/BoolAttributeValidator.java
@@ -0,0 +1,36 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.config.application.api.DeployLogger;
+import com.yahoo.searchdefinition.RankProfileRegistry;
+import com.yahoo.searchdefinition.Search;
+import com.yahoo.searchdefinition.document.Attribute;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
+
+/**
+ * Validates attribute fields using bool type, ensuring the collection type is supported.
+ *
+ * Currently, only the single value bool type is supported.
+ *
+ * @author geirst
+ */
+public class BoolAttributeValidator extends Processor {
+
+ public BoolAttributeValidator(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
+ super(search, deployLogger, rankProfileRegistry, queryProfiles);
+ }
+
+ @Override
+ public void process(boolean validate, boolean documentsOnly) {
+ for (var field : search.allConcreteFields()) {
+ var attribute = field.getAttribute();
+ if (attribute == null) {
+ continue;
+ }
+ if (attribute.getType().equals(Attribute.Type.BOOL) &&
+ !attribute.getCollectionType().equals(Attribute.CollectionType.SINGLE)) {
+ fail(search, field, "Only single value bool attribute fields are supported");
+ }
+ }
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
index 136d352ece7..750842d398c 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java
@@ -78,6 +78,7 @@ public class Processing {
OnnxModelConfigGenerator::new,
OnnxModelTypeResolver::new,
RankingExpressionTypeResolver::new,
+ BoolAttributeValidator::new,
// These should be last:
IndexingValidation::new,
IndexingValues::new);
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoolAttributeValidatorTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoolAttributeValidatorTestCase.java
new file mode 100644
index 00000000000..663aace7b79
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/BoolAttributeValidatorTestCase.java
@@ -0,0 +1,49 @@
+// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.searchdefinition.processing;
+
+import com.yahoo.searchdefinition.parser.ParseException;
+import org.junit.Test;
+
+import static com.yahoo.searchdefinition.SearchBuilder.createFromString;
+import static com.yahoo.config.model.test.TestUtil.joinLines;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * @author geirst
+ */
+public class BoolAttributeValidatorTestCase {
+
+ @Test
+ public void array_of_bool_attribute_is_not_supported() throws ParseException {
+ try {
+ createFromString(getSd("field b type array<bool> { indexing: attribute }"));
+ fail("Expected exception");
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("For search 'test', field 'b': Only single value bool attribute fields are supported",
+ e.getMessage());
+ }
+ }
+
+ @Test
+ public void weigtedset_of_bool_attribute_is_not_supported() throws ParseException {
+ try {
+ createFromString(getSd("field b type weightedset<bool> { indexing: attribute }"));
+ fail("Expected exception");
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("For search 'test', field 'b': Only single value bool attribute fields are supported",
+ e.getMessage());
+ }
+ }
+
+ private String getSd(String field) {
+ return joinLines("search test {",
+ " document test {",
+ " " + field,
+ " }",
+ "}");
+ }
+
+}