ImagingTools Core SDK
CSqlDatabaseObjectCollectionIterator.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtSql/QtSql>
7
8// ImtCore includes
9#include <imtbase/IObjectCollectionIterator.h>
10#include <imtdb/ISqlDatabaseObjectDelegate.h>
11
12
13namespace imtdb
14{
15
16
22{
23 typedef imtbase::IObjectCollection::DataPtr DataPtr;
24public:
25 CSqlDatabaseObjectCollectionIterator(QSqlQuery& sqlQuery, ISqlDatabaseObjectDelegate* databaseDelegate, int elementsCount = -1);
26
27 QSqlRecord GetRecord();
28 void SetElementsCount(int elementsCount);
29
30 // reimplemented (imtbase::IObjectCollectionIterator)
31 virtual bool Next() const override;
32 virtual bool Previous() const override;
33 virtual QByteArray GetObjectId() const override;
34 virtual QByteArray GetObjectTypeId() const override;
35 virtual bool GetObjectData(imtbase::IObjectCollection::DataPtr& dataPtr) const override;
36 virtual idoc::MetaInfoPtr GetDataMetaInfo() const override;
37 virtual int GetElementsCount() const override;
38 virtual idoc::MetaInfoPtr GetCollectionMetaInfo() const override;
39 virtual QVariant GetElementInfo(int infoType) const override;
40 virtual QVariant GetElementInfo(QByteArray infoId) const override;
41private:
46 struct CachedRecordData
47 {
48 QByteArray objectId;
49 QByteArray objectTypeId;
50 idoc::MetaInfoPtr objectMetaInfo;
51 idoc::MetaInfoPtr collectionMetaInfo;
52 bool metaInfoResolved = false;
53 };
54
55 void ResolveCurrentCache() const;
56 void ResolveMetaInfoCache() const;
57
58 QVector<QSqlRecord> m_records;
59 ISqlDatabaseObjectDelegate* m_databaseDelegate;
60
61 int m_elementsCount;
62 mutable int m_currentIndex;
63 mutable CachedRecordData m_cache;
64};
65
66
67} // namespace imtdb
Database Abstraction Layer (ORM Framework) for ImtCore applications.