File indexing completed on 2024-05-12 16:59:21

0001 /*
0002  *   SPDX-FileCopyrightText: 2013-2016 Ivan Cukic <ivan.cukic@kde.org>
0003  *
0004  *   SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #ifndef UTILS_QSQLQUERYITERATOR_H
0008 #define UTILS_QSQLQUERYITERATOR_H
0009 
0010 #include <QSqlQuery>
0011 #include <QVariant>
0012 
0013 template<typename ResultSet>
0014 class NextValueIterator
0015 {
0016 public:
0017     enum Type {
0018         NormalIterator,
0019         EndIterator,
0020     };
0021 
0022     NextValueIterator(ResultSet &query, Type type = NormalIterator)
0023         : m_query(query)
0024         , m_type(type)
0025     {
0026         if (type != EndIterator) {
0027             m_query.next();
0028         }
0029     }
0030 
0031     inline bool operator!=(const NextValueIterator<ResultSet> &other) const
0032     {
0033         Q_UNUSED(other);
0034         return m_query.isValid();
0035     }
0036 
0037     inline NextValueIterator<ResultSet> &operator*()
0038     {
0039         return *this;
0040     }
0041 
0042     inline QVariant operator[](int index) const
0043     {
0044         return m_query.value(index);
0045     }
0046 
0047     inline QVariant operator[](const QString &name) const
0048     {
0049         return m_query.value(name);
0050     }
0051 
0052     inline NextValueIterator<ResultSet> &operator++()
0053     {
0054         m_query.next();
0055         return *this;
0056     }
0057 
0058 private:
0059     ResultSet &m_query;
0060     Type m_type;
0061 };
0062 
0063 NextValueIterator<QSqlQuery> begin(QSqlQuery &query);
0064 NextValueIterator<QSqlQuery> end(QSqlQuery &query);
0065 
0066 #endif /* UTILS_QSQLQUERYITERATOR_H */