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