diff options
author | Ola Aunrønning <olaa@verizonmedia.com> | 2021-11-26 12:11:29 +0100 |
---|---|---|
committer | Ola Aunrønning <olaa@verizonmedia.com> | 2021-11-26 12:11:29 +0100 |
commit | 20f3d55bd2e1d89e75a8cae54ffed165273dcd98 (patch) | |
tree | e13084061721bd5719c22eab5a8bbee49ed660f1 /container-search/src/main/java/com/yahoo/search/query/QueryTree.java | |
parent | 2d43a0b587be09a6184ca5f978e4fa985c4bb617 (diff) |
Enforces limit of query tree size if configured
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/QueryTree.java')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/query/QueryTree.java | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/QueryTree.java b/container-search/src/main/java/com/yahoo/search/query/QueryTree.java index 2fb16ef503f..dab481dc842 100644 --- a/container-search/src/main/java/com/yahoo/search/query/QueryTree.java +++ b/container-search/src/main/java/com/yahoo/search/query/QueryTree.java @@ -7,6 +7,7 @@ import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.ListIterator; /** * The root node of a query tree. This is always present above the actual semantic root to ease query manipulation, @@ -179,4 +180,23 @@ public class QueryTree extends CompositeItem { } } + /** + * @return The total number of items in this query tree + */ + public int getTreeSize() { + if (isEmpty()) return 0; + return(countItemsRecursively(getItemIterator().next())); + } + + private int countItemsRecursively(Item item) { + int children = 0; + if (item instanceof CompositeItem) { + CompositeItem composite = (CompositeItem)item; + for (ListIterator<Item> i = composite.getItemIterator(); i.hasNext(); ) { + children += countItemsRecursively(i.next()); + } + } + return children + 1; + } + } |