aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-06-01 20:42:59 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-06-01 20:42:59 +0200
commitf73e3f48e27320f3ab13c7a77bdfd7504f516112 (patch)
tree896de045c59f79c212a28ade6652255635ccf824 /container-search
parent14d0d1525fe517a87fe6ff598aec9707c7d50012 (diff)
Do not validate on clone
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java27
-rw-r--r--container-search/src/test/java/com/yahoo/prelude/query/test/SameElementItemTestCase.java10
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");