diff options
author | Jon Bratseth <bratseth@oath.com> | 2019-08-13 11:33:01 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-13 11:33:01 +0200 |
commit | e15d87688f4da812e93500598fa653164b47b9bd (patch) | |
tree | 191b1a79d8789d0ea1fc3fd73193ec5ee01c6a2d | |
parent | db2ad3b597472a2473c3fd956134181e2fdbdeaa (diff) | |
parent | 67ea34ceba6ac6496f583d3e1457fd6c1c77538e (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.java | 3 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java | 29 |
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()); + } + } |