aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp')
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp
index c43335a6fdf..364602cba03 100644
--- a/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp
@@ -133,7 +133,14 @@ AndNotBlueprint::optimize_self(OptimizePass pass)
while (grand_child->childCnt() > 1) {
addChild(grand_child->removeLastChild());
}
- child->addChild(grand_child->removeChild(0));
+ auto orphan = grand_child->removeChild(0);
+ if (auto *orphan_and = orphan->asAnd()) {
+ while (orphan_and->childCnt() > 0) {
+ child->addChild(orphan_and->removeLastChild());
+ }
+ } else {
+ child->addChild(std::move(orphan));
+ }
child->removeChild(i--);
}
}