diff options
Diffstat (limited to 'searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp')
-rw-r--r-- | searchlib/src/vespa/searchlib/queryeval/intermediate_blueprints.cpp | 9 |
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--); } } |