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 @@ -285,7 +285,6 @@ qDebug() << " result term" << testTerm; qDebug() << "expected term" << expectedTerm; - QEXPECT_FAIL("", "no optimization", Continue); QCOMPARE(testTerm, expectedTerm); } diff --git a/src/lib/term.h b/src/lib/term.h --- a/src/lib/term.h +++ b/src/lib/term.h @@ -136,10 +136,7 @@ else if (rhs.isEmpty()) return lhs; - Term t(Term::And); - t.addSubTerm(lhs); - t.addSubTerm(rhs); - return t; + return {lhs, Term::And, rhs}; } inline Term operator ||(const Term& lhs, const Term& rhs) @@ -149,10 +146,7 @@ else if (rhs.isEmpty()) return lhs; - Term t(Term::Or); - t.addSubTerm(lhs); - t.addSubTerm(rhs); - return t; + return {lhs, Term::Or, rhs}; } inline Term operator !(const Term& rhs) diff --git a/src/lib/term.cpp b/src/lib/term.cpp --- a/src/lib/term.cpp +++ b/src/lib/term.cpp @@ -117,8 +117,18 @@ : d(new Private) { d->m_op = op; - d->m_subTerms << lhs; - d->m_subTerms << rhs; + + if (lhs.operation() == op) { + d->m_subTerms << lhs.subTerms(); + } else { + d->m_subTerms << lhs; + } + + if (rhs.operation() == op) { + d->m_subTerms << rhs.subTerms(); + } else { + d->m_subTerms << rhs; + } } Term::~Term()