diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2018-06-01 20:42:59 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2018-06-01 20:42:59 +0200 |
commit | f73e3f48e27320f3ab13c7a77bdfd7504f516112 (patch) | |
tree | 896de045c59f79c212a28ade6652255635ccf824 /container-search | |
parent | 14d0d1525fe517a87fe6ff598aec9707c7d50012 (diff) |
Do not validate on clone
Diffstat (limited to 'container-search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java | 27 | ||||
-rw-r--r-- | container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java | 10 |
2 files changed, 35 insertions, 2 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 70e9357e7cf..3d596cc7d34 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 @@ -52,9 +52,32 @@ public class SameElementItem extends CompositeItem { Validator.ensureNonEmpty("Struct fieldname", asTerm.getIndexName()); Validator.ensureNonEmpty("Query term", asTerm.getIndexedString()); Validator.ensure("Struct fieldname starts with '" + getFieldName() + ".'", - !asTerm.getIndexName().startsWith(fieldName+".")); - item.setIndexName(fieldName + '.' + asTerm.getIndexName()); + !asTerm.getIndexName().startsWith(fieldName+".") || (item.getParent() != null)); + super.adding(item); } + + private void expandChild(Item item) { + item.setIndexName(fieldName + '.' + ((TermItem)item).getIndexName()); + } + @Override + public void addItem(int index, Item item) { + super.addItem(index, item); + expandChild(item); + } + + @Override + public void addItem(Item item) { + super.addItem(item); + expandChild(item); + } + + @Override + public Item setItem(int index, Item item) { + Item prev = super.setItem(index, item); + expandChild(item); + return prev; + } + @Override public ItemType getItemType() { return ItemType.SAME_ELEMENT; 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 01c03fcd802..0e4b994fe99 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 @@ -16,6 +16,16 @@ public class SameElementItemTestCase { s.addItem(new WordItem("d", "f3")); assertEquals("structa:{f1:b f2:c f3:d}", s.toString()); } + @Test + public void testClone() { + SameElementItem s = new SameElementItem("structa"); + s.addItem(new WordItem("b", "f1")); + s.addItem(new WordItem("c", "f2")); + s.addItem(new WordItem("d", "f3")); + assertEquals("structa:{f1:b f2:c f3:d}", s.toString()); + SameElementItem c = (SameElementItem)s.clone(); + assertEquals("structa:{f1:b f2:c f3:d}", c.toString()); + } @Test(expected = IllegalArgumentException.class) public void requireAllChildrenHaveStructMemberNameSet() { SameElementItem s = new SameElementItem("structa"); |