summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2019-08-13 11:33:01 +0200
committerGitHub <noreply@github.com>2019-08-13 11:33:01 +0200
commite15d87688f4da812e93500598fa653164b47b9bd (patch)
tree191b1a79d8789d0ea1fc3fd73193ec5ee01c6a2d
parentdb2ad3b597472a2473c3fd956134181e2fdbdeaa (diff)
parent67ea34ceba6ac6496f583d3e1457fd6c1c77538e (diff)
Merge pull request #10246 from vespa-engine/bratseth/generalize-sameItem-reduction
Allow any simple term and gard against non-terms
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java3
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java29
2 files changed, 31 insertions, 1 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java b/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
index d2c19339298..4a13d24d953 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
@@ -50,6 +50,7 @@ public class SameElementItem extends NonReducibleCompositeItem {
@Override
protected void adding(Item item) {
super.adding(item);
+ //TODO See if we can require only SimpleIndexedItem instead of TermItem
Validator.ensureInstanceOf("Child item", item, TermItem.class);
TermItem asTerm = (TermItem) item;
Validator.ensureNonEmpty("Struct fieldname", asTerm.getIndexName());
@@ -59,7 +60,7 @@ public class SameElementItem extends NonReducibleCompositeItem {
@Override
public Optional<Item> extractSingleChild() {
if (getItemCount() == 1) {
- WordItem child = (WordItem) getItem(0);
+ SimpleIndexedItem child = (SimpleIndexedItem)getItem(0);
child.setIndexName(getFieldName() + "." + child.getIndexName());
return Optional.of(child);
}
diff --git a/container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java b/container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java
index ae9960f6c7c..1382c106ae3 100644
--- a/container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java
+++ b/container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java
@@ -2,11 +2,17 @@
package com.yahoo.prelude.query.test;
import com.yahoo.prelude.query.AndItem;
+import com.yahoo.prelude.query.IntItem;
+import com.yahoo.prelude.query.Item;
import com.yahoo.prelude.query.SameElementItem;
+import com.yahoo.prelude.query.TermItem;
import com.yahoo.prelude.query.WordItem;
import org.junit.Test;
+import java.util.Optional;
+
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
public class SameElementItemTestCase {
@@ -85,4 +91,27 @@ public class SameElementItemTestCase {
}
}
+ private void verifyExtractSingle(TermItem term) {
+ String subFieldName = term.getIndexName();
+ SameElementItem s = new SameElementItem("structa");
+ s.addItem(term);
+ Optional<Item> single =s.extractSingleChild();
+ assertTrue(single.isPresent());
+ assertEquals(((TermItem)single.get()).getIndexName(), s.getFieldName() + "." + subFieldName);
+ }
+
+ @Test
+ public void requireExtractSingleItemToExtractSingles() {
+ verifyExtractSingle(new WordItem("b", "f1"));
+ verifyExtractSingle(new IntItem("7", "f1"));
+ }
+
+ @Test
+ public void requireExtractSingleItemToExtractSinglesOnly() {
+ SameElementItem s = new SameElementItem("structa");
+ s.addItem(new WordItem("b", "f1"));
+ s.addItem(new WordItem("c", "f2"));
+ assertTrue(s.extractSingleChild().isEmpty());
+ }
+
}