winget-cli

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

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 }