File indexing completed on 2024-04-28 04:57:42

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 { NormalIterator, EndIterator };
0018 
0019     NextValueIterator(ResultSet &query, Type type = NormalIterator)
0020         : m_query(query)
0021         , m_type(type)
0022     {
0023         if (type != EndIterator) {
0024             m_query.next();
0025         }
0026     }
0027 
0028     inline bool operator!=(const NextValueIterator<ResultSet> &other) const
0029     {
0030         Q_UNUSED(other);
0031         return m_query.isValid();
0032     }
0033 
0034     inline NextValueIterator<ResultSet> &operator*()
0035     {
0036         return *this;
0037     }
0038 
0039     inline QVariant operator[](int index) const
0040     {
0041         return m_query.value(index);
0042     }
0043 
0044     inline QVariant operator[](const QString &name) const
0045     {
0046         return m_query.value(name);
0047     }
0048 
0049     inline NextValueIterator<ResultSet> &operator++()
0050     {
0051         m_query.next();
0052         return *this;
0053     }
0054 
0055 private:
0056     ResultSet &m_query;
0057     Type m_type;
0058 };
0059 
0060 NextValueIterator<QSqlQuery> begin(QSqlQuery &query);
0061 NextValueIterator<QSqlQuery> end(QSqlQuery &query);
0062 
0063 #endif /* UTILS_QSQLQUERYITERATOR_H */