summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/SameElementItem.java27
1 files changed, 25 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;