1 /*
2  *   SPDX-FileCopyrightText: 2013-2016 Ivan Cukic <ivan.cukic@kde.org>
3  *
4  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
5  */
6 
7 #ifndef UTILS_QSQLQUERYITERATOR_H
8 #define UTILS_QSQLQUERYITERATOR_H
9 
10 #include <QSqlQuery>
11 #include <QVariant>
12 
13 template <typename ResultSet>
14 class NextValueIterator {
15 public:
16     enum Type {
17         NormalIterator,
18         EndIterator
19     };
20 
21     NextValueIterator(ResultSet &query, Type type = NormalIterator)
m_query(query)22         : m_query(query)
23         , m_type(type)
24     {
25         if (type != EndIterator) {
26             m_query.next();
27         }
28     }
29 
30     inline bool operator!= (const NextValueIterator<ResultSet> &other) const
31     {
32         Q_UNUSED(other);
33         return m_query.isValid();
34     }
35 
36     inline NextValueIterator<ResultSet> &operator*()
37     {
38         return *this;
39     }
40 
41     inline QVariant operator[] (int index) const
42     {
43         return m_query.value(index);
44     }
45 
46     inline QVariant operator[] (const QString &name) const
47     {
48         return m_query.value(name);
49     }
50 
51     inline NextValueIterator<ResultSet> &operator ++()
52     {
53         m_query.next();
54         return *this;
55     }
56 
57 private:
58     ResultSet &m_query;
59     Type m_type;
60 
61 };
62 
63 NextValueIterator<QSqlQuery> begin(QSqlQuery &query);
64 NextValueIterator<QSqlQuery> end(QSqlQuery &query);
65 
66 
67 #endif /* UTILS_QSQLQUERYITERATOR_H */
68 
69