15class Akonadi::Search::TermPrivate
18 Term::Operation m_op = Term::None;
19 Term::Comparator m_comp = Term::Auto;
24 bool m_isNegated =
false;
27 QVariantHash m_userData;
35Term::Term(
const Term &t)
36 : d(new TermPrivate(*t.d))
77Term::Term(Term::Operation op)
83Term::Term(Term::Operation op,
const Term &t)
97Term::Term(
const Term &lhs, Term::Operation op,
const Term &rhs)
101 d->m_subTerms << lhs;
102 d->m_subTerms << rhs;
105Term::~Term() =
default;
107bool Term::isValid()
const
109 if (d->m_property.isEmpty()) {
110 if (d->m_op == Term::None) {
114 return d->m_property.isEmpty() && d->m_value.isNull();
122 d->m_isNegated = isNegated;
125bool Term::isNegated()
const
127 return d->m_isNegated;
130bool Term::negated()
const
132 return d->m_isNegated;
135void Term::addSubTerm(
const Term &term)
137 d->m_subTerms << term;
142 d->m_subTerms = terms;
147 if (!d->m_subTerms.isEmpty()) {
148 return d->m_subTerms.first();
156 return d->m_subTerms;
159void Term::setOperation(Term::Operation op)
164Term::Operation Term::operation()
const
169bool Term::empty()
const
174bool Term::isEmpty()
const
176 return d->m_property.isEmpty() && d->m_value.isNull() && d->m_subTerms.isEmpty();
181 return d->m_property;
184void Term::setProperty(
const QString &property)
189void Term::setValue(
const QVariant &value)
199Term::Comparator Term::comparator()
const
204void Term::setComparator(Term::Comparator c)
211 d->m_userData.insert(name, value);
216 return d->m_userData.value(name);
219QVariantMap Term::toVariantMap()
const
222 if (d->m_op != None) {
223 QVariantList variantList;
224 variantList.reserve(d->m_subTerms.count());
225 for (
const Term &term :
std::as_const(d->m_subTerms)) {
226 variantList <<
QVariant(term.toVariantMap());
229 if (d->m_op == And) {
230 map[QStringLiteral(
"$and")] = variantList;
232 map[QStringLiteral(
"$or")] = variantList;
241 map[d->m_property] = d->m_value;
245 op = QStringLiteral(
"$ct");
249 op = QStringLiteral(
"$gt");
253 op = QStringLiteral(
"$gte");
257 op = QStringLiteral(
"$lt");
261 op = QStringLiteral(
"$lte");
296Term Term::fromVariantMap(
const QVariantMap &map)
298 if (
map.size() != 1) {
305 if (
map.contains(QStringLiteral(
"$and"))) {
306 andOrString = QStringLiteral(
"$and");
307 term.setOperation(And);
308 }
else if (
map.contains(QStringLiteral(
"$or"))) {
309 andOrString = QStringLiteral(
"$or");
310 term.setOperation(Or);
313 if (andOrString.
size()) {
316 const QVariantList
list =
map[andOrString].toList();
319 subTerms << Term::fromVariantMap(var.
toMap());
322 term.setSubTerms(subTerms);
327 term.setProperty(prop);
332 if (
map.size() != 1) {
337 Term::Comparator com;
352 term.setComparator(com);
353 term.setValue(tryConvert(
map.value(op)));
358 term.setComparator(Equal);
359 term.setValue(tryConvert(value));
364bool Term::operator==(
const Term &rhs)
const
366 if (d->m_op != rhs.d->m_op || d->m_comp != rhs.d->m_comp || d->m_isNegated != rhs.d->m_isNegated || d->m_property != rhs.d->m_property
367 || d->m_value != rhs.d->m_value) {
371 if (d->m_subTerms.size() != rhs.d->m_subTerms.size()) {
375 if (d->m_subTerms.isEmpty()) {
379 for (
const Term &t :
std::as_const(d->m_subTerms)) {
380 if (!rhs.d->m_subTerms.contains(t)) {
388Term &Term::operator=(
const Term &rhs)
396QString comparatorToString(Term::Comparator c)
400 return QStringLiteral(
"Auto");
402 return QStringLiteral(
"=");
404 return QStringLiteral(
":");
406 return QStringLiteral(
"<");
407 case Term::LessEqual:
408 return QStringLiteral(
"<=");
410 return QStringLiteral(
">");
411 case Term::GreaterEqual:
412 return QStringLiteral(
">=");
418QString operationToString(Term::Operation op)
422 return QStringLiteral(
"NONE");
424 return QStringLiteral(
"AND");
426 return QStringLiteral(
"OR");
435 if (t.subTerms().isEmpty()) {
436 d << QStringLiteral(
"(%1 %2 %3 (%4))")
441 d <<
"(" << operationToString(t.operation()).toUtf8().constData();
443 for (
const Term &term :
std::as_const(subterms)) {
void setNegation(bool isNegated)
Negate this term.
QString property() const
Return the property this term is targeting.
Term subTerm() const
Returns the first subTerm in the list of subTerms.
Akonadi search infrastructure.
KIOCORE_EXPORT QStringList list(const QString &fileClass)
QDebug operator<<(QDebug dbg, const PerceptualColor::LchaDouble &value)
bool isValid() const const
qsizetype count() const const
void reserve(qsizetype size)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString fromLatin1(QByteArrayView str)
qsizetype size() const const
QFuture< void > map(Iterator begin, Iterator end, MapFunctor &&function)
bool canConvert() const const
QDate toDate() const const
QDateTime toDateTime() const const
QMap< QString, QVariant > toMap() const const
QString toString() const const
const char * typeName() const const
int userType() const const