digiKam
Loading...
Searching...
No Matches
coredbsearchxml.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2008-01-09
7 * Description : Core database searches XML queries manager
8 *
9 * SPDX-FileCopyrightText: 2008-2012 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2010-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QString>
21#include <QDateTime>
22#include <QXmlStreamReader>
23#include <QXmlStreamWriter>
24#include <QStringList>
25#include <QVariant>
26
27// Local includes
28
29#include "digikam_export.h"
30
31namespace Digikam
32{
33
34namespace SearchXml
35{
36
44
54
74
75template <typename T>
76bool testRelation(T v1, T v2, Relation rel)
77{
78 if (rel == Equal)
79 {
80 return (v1 == v2);
81 }
82 else if (rel == Unequal)
83 {
84 return (v1 != v2);
85 }
86 else if (rel == LessThan)
87 {
88 return (v1 < v2);
89 }
90 else if (rel == LessThanOrEqual)
91 {
92 return (v1 <= v2);
93 }
94 else if (rel == GreaterThan)
95 {
96 return (v1 > v2);
97 }
98 else if (rel == GreaterThanOrEqual)
99 {
100 return (v1 >= v2);
101 }
102
103 return false;
104}
105
113
118
123
124} // namespace SearchXml
125
126// ---------------------------------------------------------------------------------
127
128class DIGIKAM_DATABASE_EXPORT SearchXmlReader : public QXmlStreamReader
129{
130public:
131
132 explicit SearchXmlReader(const QString& xml);
133
136 SearchXml::Element readNext();
137
140 bool isGroupElement() const;
141
144 bool isFieldElement() const;
145
148 SearchXml::Operator groupOperator() const;
149
152 QString groupCaption() const;
153
156 SearchXml::Operator defaultFieldOperator() const;
157
161 SearchXml::Operator fieldOperator() const;
162 QString fieldName() const;
163 SearchXml::Relation fieldRelation() const;
164
169 QString value();
170 int valueToInt();
171 qlonglong valueToLongLong();
172 double valueToDouble();
173 QDateTime valueToDateTime();
174 QList<int> valueToIntList();
175 QList<qlonglong> valueToLongLongList();
176 QList<double> valueToDoubleList();
177 QStringList valueToStringList();
178 QList<QDateTime> valueToDateTimeList();
179
180 QList<int> valueToIntOrIntList();
181 QList<double> valueToDoubleOrDoubleList();
182 QList<QString> valueToStringOrStringList();
183
189 bool readToStartOfElement(const QString& name);
190
194 void readToEndOfElement();
195
199 void readToFirstField();
200
201protected:
202
203 SearchXml::Operator readOperator(const QString&, SearchXml::Operator) const;
204 SearchXml::Relation readRelation(const QString&, SearchXml::Relation) const;
205
206protected:
207
209};
210
211// ---------------------------------------------------------------------------------
212
213class DIGIKAM_DATABASE_EXPORT SearchXmlWriter : public QXmlStreamWriter
214{
215public:
216
222 explicit SearchXmlWriter();
223
226 void writeGroup();
227
231 void setGroupOperator(SearchXml::Operator op);
232
235 void setGroupCaption(const QString& caption);
236
240 void setDefaultFieldOperator(SearchXml::Operator op);
241
247 void writeField(const QString& name, SearchXml::Relation relation);
248
251 void setFieldOperator(SearchXml::Operator op);
252
255 void writeValue(const QString& value);
256 void writeValue(int value);
257 void writeValue(qlonglong value);
258 void writeValue(float value, int precision = 6);
259 void writeValue(double value, int precision = 8);
260 void writeValue(const QDateTime& dateTime);
261 void writeValue(const QList<int>& valueList);
262 void writeValue(const QList<qlonglong>& valueList);
263 void writeValue(const QList<float>& valueList, int precision = 6);
264 void writeValue(const QList<double>& valueList, int precision = 8);
265 void writeValue(const QStringList& valueList);
266 void writeValue(const QList<QDateTime>& valueList);
267
271 void finishField();
272
279 void finishGroup();
280
285 void finish();
286
289 QString xml() const;
290
294 static QString keywordSearch(const QString& keyword);
295
296protected:
297
298 void writeOperator(const QString&, SearchXml::Operator);
299 void writeRelation(const QString&, SearchXml::Relation);
300
301protected:
302
303 QString m_xml;
304};
305
306// ---------------------------------------------------------------------------------
307
308namespace KeywordSearch
309{
310
315DIGIKAM_DATABASE_EXPORT QStringList split(const QString& string);
316
320DIGIKAM_DATABASE_EXPORT QString merge(const QStringList& keywordList);
321
327DIGIKAM_DATABASE_EXPORT QString merge(const QString& previousContent, const QString& newEntry);
328
329} // namespace KeywordSearch
330
331// ---------------------------------------------------------------------------------
332
333class DIGIKAM_DATABASE_EXPORT KeywordSearchReader : public SearchXmlReader
334{
335public:
336
337 explicit KeywordSearchReader(const QString& xml);
338
340 QStringList keywords();
341
343 bool isSimpleKeywordSearch();
344
345private:
346
347 void readGroup(QStringList& list);
348 bool isSimpleKeywordSearchGroup();
349 QString readField();
350};
351
352// ---------------------------------------------------------------------------------
353
354class DIGIKAM_DATABASE_EXPORT KeywordSearchWriter : public SearchXmlWriter
355{
356public:
357
358 explicit KeywordSearchWriter();
359
360 QString xml(const QStringList& keywordList);
361};
362
363// ---------------------------------------------------------------------------------
364
365class DIGIKAM_DATABASE_EXPORT SearchXmlCachingReader : public SearchXmlReader
366{
367public:
368
376 explicit SearchXmlCachingReader(const QString& xml);
377
378 SearchXml::Element readNext();
379
380 SearchXml::Operator groupOperator() const;
381 QString groupCaption() const;
382
383 SearchXml::Operator fieldOperator() const;
384 QString fieldName() const;
385 SearchXml::Relation fieldRelation() const;
386 QString value();
387 int valueToInt();
388 qlonglong valueToLongLong();
389 double valueToDouble();
390 QDateTime valueToDateTime();
391 QList<int> valueToIntList();
392 QList<qlonglong> valueToLongLongList();
393 QList<double> valueToDoubleList();
394 QStringList valueToStringList();
395 QList<QDateTime> valueToDateTimeList();
396 QList<int> valueToIntOrIntList();
397 QList<double> valueToDoubleOrDoubleList();
398 QList<QString> valueToStringOrStringList();
399
400protected:
401
402 SearchXml::Operator m_groupOperator = SearchXml::And;
404 SearchXml::Operator m_fieldOperator = SearchXml::And;
405 QString m_fieldName;
406 SearchXml::Relation m_fieldRelation = SearchXml::Equal;
407 QVariant m_value;
408 bool m_readValue = false;
409};
410
411} // namespace Digikam
Definition coredbsearchxml.h:334
Definition coredbsearchxml.h:355
Definition coredbsearchxml.h:366
QVariant m_value
Definition coredbsearchxml.h:407
QString m_fieldName
Definition coredbsearchxml.h:405
QString m_groupCaption
Definition coredbsearchxml.h:403
Definition coredbsearchxml.h:129
SearchXml::Operator m_defaultFieldOperator
Definition coredbsearchxml.h:208
Definition coredbsearchxml.h:214
QString m_xml
Definition coredbsearchxml.h:303
qulonglong value
Definition itemviewutilities.cpp:585
#define T
DIGIKAM_DATABASE_EXPORT QStringList split(const QString &string)
Definition coredbsearchxml.cpp:903
DIGIKAM_DATABASE_EXPORT QString merge(const QStringList &keywordList)
Definition coredbsearchxml.cpp:938
SearchXml::Relation standardFieldRelation()
Definition coredbsearchxml.h:119
Relation
Definition coredbsearchxml.h:56
@ NotLike
Definition coredbsearchxml.h:60
@ AllOf
Definition coredbsearchxml.h:68
@ OneOf
Definition coredbsearchxml.h:67
@ Like
Definition coredbsearchxml.h:59
@ LessThanOrEqual
Definition coredbsearchxml.h:63
@ Near
Definition coredbsearchxml.h:71
@ InTree
Definition coredbsearchxml.h:69
@ Equal
Definition coredbsearchxml.h:57
@ IntervalOpen
Definition coredbsearchxml.h:66
@ Inside
Definition coredbsearchxml.h:72
@ LessThan
Definition coredbsearchxml.h:61
@ Unequal
Definition coredbsearchxml.h:58
@ Interval
Definition coredbsearchxml.h:65
@ GreaterThanOrEqual
Definition coredbsearchxml.h:64
@ NotInTree
Definition coredbsearchxml.h:70
@ GreaterThan
Definition coredbsearchxml.h:62
Element
Definition coredbsearchxml.h:46
@ Search
Definition coredbsearchxml.h:47
@ Field
Definition coredbsearchxml.h:50
@ End
Definition coredbsearchxml.h:52
@ Group
Definition coredbsearchxml.h:48
@ GroupEnd
Definition coredbsearchxml.h:49
@ FieldEnd
Definition coredbsearchxml.h:51
bool testRelation(T v1, T v2, Relation rel)
Definition coredbsearchxml.h:76
SearchXml::Operator standardGroupOperator()
Definition coredbsearchxml.h:109
Operator
Definition coredbsearchxml.h:38
@ Or
Definition coredbsearchxml.h:40
@ OrNot
Definition coredbsearchxml.h:42
@ AndNot
Definition coredbsearchxml.h:41
@ And
Definition coredbsearchxml.h:39
SearchXml::Operator standardFieldOperator()
Definition coredbsearchxml.h:114
Definition datefolderview.cpp:34