diff --git a/autotests/unit/lib/advancedqueryparsertest.cpp b/autotests/unit/lib/advancedqueryparsertest.cpp --- a/autotests/unit/lib/advancedqueryparsertest.cpp +++ b/autotests/unit/lib/advancedqueryparsertest.cpp @@ -257,22 +257,6 @@ Term{QString(), QStringLiteral("c"), Term::Contains}, Term{QString(), QStringLiteral("d"), Term::Contains}, }} - << QStringLiteral("Fails to optimize for unknown reason, but output is semantically correct") - ; - // This test verifies that the above test is semantically correct - QTest::newRow("(a AND (b AND (c AND d))) semantic") - << QStringLiteral("(a AND (b AND (c AND d)))") - << Term{Term::And, QList{ - Term{QString(), QStringLiteral("a"), Term::Contains}, - Term{Term::And, QList{ - Term{QString(), QStringLiteral("b"), Term::Contains}, - Term{Term::And, QList{ - Term{QString(), QStringLiteral("c"), Term::Contains}, - Term{QString(), QStringLiteral("d"), Term::Contains} - - }} - }} - }} << QString() ; // Test 1 for BUG: 392620 diff --git a/src/lib/advancedqueryparser.cpp b/src/lib/advancedqueryparser.cpp --- a/src/lib/advancedqueryparser.cpp +++ b/src/lib/advancedqueryparser.cpp @@ -94,15 +94,7 @@ return; } - if (tos.subTerms().count() == 0 || tos.operation() != op) { - // Top of stack is a "literal" term or a logical term of the wrong operation - Term tmp = stack.pop(); - - stack.push(Term(op)); - stack.top().addSubTerm(tmp); - } - - stack.top().addSubTerm(termInConstruction); + tos = Term(tos, op, termInConstruction); } static QVariant tokenToVariant(const QString& token)