ImagingTools Core SDK
CCompositeMigrationControllerComp.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// ACF includes
6#include <ilog/TLoggerCompWrap.h>
7#include <ifile/IFileNameParam.h>
8
9// ImtCore includes
10#include <imtdb/IMigrationController.h>
11#include <imtdb/IDatabaseEngine.h>
12
13
14namespace imtdb
15{
16
17
18class CCompositeMigrationControllerComp: public ilog::CLoggerComponentBase, virtual public imtdb::IMigrationController
19{
20public:
21 typedef ilog::CLoggerComponentBase BaseClass;
22
23 I_BEGIN_COMPONENT(CCompositeMigrationControllerComp);
24 I_REGISTER_INTERFACE(imtdb::IMigrationController)
25 I_ASSIGN_MULTI_0(m_migrationControllersCompPtr, "MigrationControllers", "Migration controllers", false);
26 I_END_COMPONENT;
27
28protected:
29 struct MigrationStep
30 {
31 int from = -1;
32 int to = -1;
33 const imtdb::IMigrationController* migrationControllerPtr = nullptr;
34 };
35
36 typedef QVector<MigrationStep> MigrationSteps;
37
38 const imtdb::IMigrationController* FindMigrationController(int migrationIndex) const;
39
40 // reimplemented (imtdb::IMigrationController)
41 virtual istd::CIntRange GetMigrationRange() const override;
42 virtual bool DoMigration(int& resultRevision, const istd::CIntRange& subRange = istd::CIntRange()) const override;
43
44private:
45 MigrationStep CreateMigrationStep(int from, int to, const imtdb::IMigrationController* migrationControllerPtr) const;
46 bool ContainsStep(const istd::CIntRange& range, const MigrationSteps steps) const;
47
48private:
49 I_MULTIREF(imtdb::IMigrationController, m_migrationControllersCompPtr);
50};
51
52
53} // namespace imtdb
54
55
Controls database schema versioning and migration execution.
Database Abstraction Layer (ORM Framework) for ImtCore applications.