From 6aac36c56f32f940454e529f5e103218060c9fbf Mon Sep 17 00:00:00 2001 From: jmigual Date: Mon, 11 Jul 2016 19:59:01 +0200 Subject: [PATCH] Add is null search query integrated with tree --- src/library/librarytreemodel.cpp | 7 +++++-- src/library/searchqueryparser.cpp | 6 ++++++ src/library/searchqueryparser.h | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/library/librarytreemodel.cpp b/src/library/librarytreemodel.cpp index e36d2a047fa..1533f7898e0 100644 --- a/src/library/librarytreemodel.cpp +++ b/src/library/librarytreemodel.cpp @@ -97,8 +97,11 @@ QString LibraryTreeModel::getQuery(TreeItem* pTree) const { pAux = pTree; while (depth >= 0) { QString value = pAux->dataPath().toString(); - - result << m_sortOrder[depth] % ":\"" % value % "\""; + if (value == "") { + result << "\\+" + m_sortOrder[depth]; + } else { + result << m_sortOrder[depth] % ":\"" % value % "\""; + } pAux = pAux->parent(); --depth; } diff --git a/src/library/searchqueryparser.cpp b/src/library/searchqueryparser.cpp index f261088d805..f5bdaf4b8b1 100644 --- a/src/library/searchqueryparser.cpp +++ b/src/library/searchqueryparser.cpp @@ -54,6 +54,7 @@ SearchQueryParser::SearchQueryParser(QSqlDatabase& database) m_allFilters.append(m_specialFilters); m_fuzzyMatcher = QRegExp(QString("^~(%1)$").arg(m_allFilters.join("|"))); + m_isNullMatcher = QRegExp(QString("^\\\\\\+(%1)$").arg(m_allFilters.join("|"))); m_textFilterMatcher = QRegExp(QString("^-?(%1):(.*)$").arg(m_textFilters.join("|"))); m_numericFilterMatcher = QRegExp(QString("^-?(%1):(.*)$").arg(m_numericFilters.join("|"))); m_specialFilterMatcher = QRegExp(QString("^[~-]?(%1):(.*)$").arg(m_specialFilters.join("|"))); @@ -116,6 +117,11 @@ void SearchQueryParser::parseTokens(QStringList tokens, if (m_fuzzyMatcher.indexIn(token) != -1) { // TODO(XXX): implement this feature. + } else if (m_isNullMatcher.indexIn(token) != -1) { + QString field = m_isNullMatcher.cap(1); + std::unique_ptr pNode(std::make_unique( + field + " IS NULL")); + pQuery->addNode(std::move(pNode)); } else if (m_textFilterMatcher.indexIn(token) != -1) { bool negate = token.startsWith(kNegatePrefix); QString field = m_textFilterMatcher.cap(1); diff --git a/src/library/searchqueryparser.h b/src/library/searchqueryparser.h index f505abcb335..1358d52432b 100644 --- a/src/library/searchqueryparser.h +++ b/src/library/searchqueryparser.h @@ -34,6 +34,7 @@ class SearchQueryParser { QStringList m_allFilters; QHash m_fieldToSqlColumns; + QRegExp m_isNullMatcher; QRegExp m_fuzzyMatcher; QRegExp m_textFilterMatcher; QRegExp m_numericFilterMatcher;