IConfigurationDatabase.cpp (5156B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "Database/Schema/IConfigurationDatabase.h" 5 6 #include "Database/Schema/0_1/Interface.h" 7 #include "Database/Schema/0_2/Interface.h" 8 #include "Database/Schema/0_3/Interface.h" 9 10 namespace winrt::Microsoft::Management::Configuration::implementation 11 { 12 namespace 13 { 14 std::unique_ptr<IConfigurationDatabase> CreateForVersion(const AppInstaller::SQLite::Version& version, const std::shared_ptr<AppInstaller::SQLite::SQLiteDynamicStorage>& storage) 15 { 16 using StorageT = std::shared_ptr<AppInstaller::SQLite::SQLiteDynamicStorage>; 17 18 if (version.MajorVersion == 0) 19 { 20 constexpr std::array<std::unique_ptr<IConfigurationDatabase>(*)(const StorageT& s), 3> versionCreatorMap = 21 { 22 [](const StorageT& s) { return std::unique_ptr<IConfigurationDatabase>(std::make_unique<Database::Schema::V0_1::Interface>(s)); }, 23 [](const StorageT& s) { return std::unique_ptr<IConfigurationDatabase>(std::make_unique<Database::Schema::V0_2::Interface>(s)); }, 24 [](const StorageT& s) { return std::unique_ptr<IConfigurationDatabase>(std::make_unique<Database::Schema::V0_3::Interface>(s)); }, 25 }; 26 27 size_t minorVersion = static_cast<size_t>(version.MinorVersion); 28 if (minorVersion >= 1 && minorVersion <= versionCreatorMap.size()) 29 { 30 return versionCreatorMap[minorVersion - 1](storage); 31 } 32 } 33 34 // We do not have the capacity to operate on this schema version 35 THROW_WIN32(ERROR_NOT_SUPPORTED); 36 } 37 } 38 39 AppInstaller::SQLite::Version IConfigurationDatabase::GetLatestVersion() 40 { 41 return { 0, 3 }; 42 } 43 44 std::unique_ptr<IConfigurationDatabase> IConfigurationDatabase::CreateFor(const std::shared_ptr<AppInstaller::SQLite::SQLiteDynamicStorage>& storage, bool allowMigration) 45 { 46 using StorageT = std::shared_ptr<AppInstaller::SQLite::SQLiteDynamicStorage>; 47 const AppInstaller::SQLite::Version& version = storage->GetVersion(); 48 49 std::unique_ptr<IConfigurationDatabase> result = CreateForVersion(version, storage); 50 51 AppInstaller::SQLite::Version latestVersion = GetLatestVersion(); 52 if (allowMigration && version < latestVersion) 53 { 54 // Always migrate to the latest version until a reason comes along to not do that 55 std::unique_ptr<IConfigurationDatabase> latest = CreateForVersion(latestVersion, storage); 56 THROW_WIN32_IF(ERROR_NOT_SUPPORTED, !latest->MigrateFrom(result.get())); 57 result = std::move(latest); 58 } 59 60 return result; 61 } 62 63 void IConfigurationDatabase::AddQueueItem(const GUID&, const std::string&) 64 { 65 } 66 67 void IConfigurationDatabase::SetActiveQueueItem(const std::string&) 68 { 69 } 70 71 std::vector<std::tuple<GUID, std::string, std::chrono::system_clock::time_point, DWORD, bool>> IConfigurationDatabase::GetQueueItems() 72 { 73 return {}; 74 } 75 76 void IConfigurationDatabase::RemoveQueueItem(const std::string&) 77 { 78 } 79 80 std::vector<IConfigurationDatabase::StatusItemTuple> IConfigurationDatabase::GetStatusSince(int64_t) 81 { 82 return {}; 83 } 84 85 std::tuple<int64_t, std::vector<IConfigurationDatabase::StatusItemTuple>> IConfigurationDatabase::GetStatusBaseline() 86 { 87 return { 0, {} }; 88 } 89 90 void IConfigurationDatabase::AddListener(const std::string&) 91 { 92 } 93 94 void IConfigurationDatabase::RemoveListener(const std::string&) 95 { 96 } 97 98 std::vector<std::tuple<std::string, std::chrono::system_clock::time_point, DWORD>> IConfigurationDatabase::GetChangeListeners() 99 { 100 return {}; 101 } 102 103 void IConfigurationDatabase::UpdateSetState(const guid&, ConfigurationSetState) 104 { 105 } 106 107 void IConfigurationDatabase::UpdateSetInQueue(const guid&, bool) 108 { 109 } 110 111 void IConfigurationDatabase::UpdateUnitState(const guid&, const ConfigurationSetChangeDataPtr&) 112 { 113 } 114 115 ConfigurationSetState IConfigurationDatabase::GetSetState(const guid&) 116 { 117 return ConfigurationSetState::Unknown; 118 } 119 120 std::chrono::system_clock::time_point IConfigurationDatabase::GetSetFirstApply(const guid&) 121 { 122 return {}; 123 } 124 125 std::chrono::system_clock::time_point IConfigurationDatabase::GetSetApplyBegun(const guid&) 126 { 127 return {}; 128 } 129 130 std::chrono::system_clock::time_point IConfigurationDatabase::GetSetApplyEnded(const guid&) 131 { 132 return {}; 133 } 134 135 ConfigurationUnitState IConfigurationDatabase::GetUnitState(const guid&) 136 { 137 return ConfigurationUnitState::Unknown; 138 } 139 140 std::optional<std::tuple<HRESULT, std::string, std::string, ConfigurationUnitResultSource>> IConfigurationDatabase::GetUnitResultInformation(const guid&) 141 { 142 return std::nullopt; 143 } 144 }