poboiko created this revision. poboiko added reviewers: Baloo, ngraham, bruns. Herald added projects: Frameworks, Baloo. poboiko requested review of this revision.
REVISION SUMMARY AdvancedQueryParser's lexxer can actually handle double quotes: for query `a "b c" d`, it returns three tokens (`a`, `b c`, `d`). However, when building `Term`, all of them end up having `Auto` comparator, which for strings then resolves to `Contains`. Finally, inside `SearchStore::constructContainsQuery`, we simply split such multi-word term and build an `EngineQuery::StartsWith` query for `b` and `c`. This patch sets `Equal` comparator for those terms that are inside double quotes. For that we call `SearchStore::constructEqualsQuery`, which treats it as `EngineQuery::Phrase`, which is precicely what we want. Code-wise, it's more convenient to create a separate class `Token` (instead of treating tokens as `QString`), which is aware if this token is inside double quotes. This patch also moves some of the token-processing routine inside this class (see `toVariant`, `toComp`, `toOp` methods) Also, introduce various tests with double-quoted queries. TEST PLAN $ ctest $ echo "some unique phrase" > ~/test $ baloosearch '"some unique phrase"' (only `~/test` should pop up) REPOSITORY R293 Baloo BRANCH phrasesearch REVISION DETAIL https://phabricator.kde.org/D22166 AFFECTED FILES autotests/unit/lib/advancedqueryparsertest.cpp src/lib/advancedqueryparser.cpp To: poboiko, #baloo, ngraham, bruns Cc: kde-frameworks-devel, LeGast00n, fbampaloukas, domson, ashaposhnikov, michaelh, astippich, spoorun, ngraham, bruns, abrahams