winget-cli

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

Interface_0_2.cpp (2504B)


      1 // Copyright (c) Microsoft Corporation.
      2 // Licensed under the MIT License.
      3 #include "pch.h"
      4 #include "Interface.h"
      5 #include "QueueTable.h"
      6 #include <winget/SQLiteMetadataTable.h>
      7 
      8 using namespace AppInstaller::SQLite;
      9 using namespace AppInstaller::Utility;
     10 
     11 namespace winrt::Microsoft::Management::Configuration::implementation::Database::Schema::V0_2
     12 {
     13     static constexpr AppInstaller::SQLite::Version s_InterfaceVersion{ 0, 2 };
     14 
     15     const AppInstaller::SQLite::Version& Interface::GetSchemaVersion()
     16     {
     17         return s_InterfaceVersion;
     18     }
     19 
     20     void Interface::InitializeDatabase()
     21     {
     22         V0_1::Interface::InitializeDatabase();
     23 
     24         Savepoint savepoint = Savepoint::Create(*m_storage, "InitializeDatabase_0_2");
     25         MigrateFrom0_1();
     26         savepoint.Commit();
     27     }
     28 
     29     bool Interface::MigrateFrom(IConfigurationDatabase* current)
     30     {
     31         auto currentSchemaVersion = current->GetSchemaVersion();
     32         if (currentSchemaVersion < s_InterfaceVersion)
     33         {
     34             if (V0_1::Interface::MigrateFrom(current))
     35             {
     36                 Savepoint savepoint = Savepoint::Create(*m_storage, "MigrateFrom0_1");
     37 
     38                 MigrateFrom0_1();
     39                 s_InterfaceVersion.SetSchemaVersion(*m_storage);
     40 
     41                 savepoint.Commit();
     42 
     43                 return true;
     44             }
     45         }
     46         else if (currentSchemaVersion == s_InterfaceVersion)
     47         {
     48             return true;
     49         }
     50 
     51         return false;
     52     }
     53 
     54     void Interface::AddQueueItem(const GUID& instanceIdentifier, const std::string& objectName)
     55     {
     56         QueueTable queueTable(*m_storage);
     57         queueTable.AddQueueItemWithoutProcess(instanceIdentifier, objectName);
     58     }
     59 
     60     void Interface::SetActiveQueueItem(const std::string& objectName)
     61     {
     62         QueueTable queueTable(*m_storage);
     63         queueTable.SetActiveQueueItem(objectName);
     64     }
     65 
     66     std::vector<std::tuple<GUID, std::string, std::chrono::system_clock::time_point, DWORD, bool>> Interface::GetQueueItems()
     67     {
     68         QueueTable queueTable(*m_storage);
     69         return queueTable.GetQueueItemsWithoutProcess();
     70     }
     71 
     72     void Interface::RemoveQueueItem(const std::string& objectName)
     73     {
     74         QueueTable queueTable(*m_storage);
     75         queueTable.RemoveQueueItem(objectName);
     76     }
     77 
     78     void Interface::MigrateFrom0_1()
     79     {
     80         QueueTable queueTable(*m_storage);
     81         queueTable.Create();
     82     }
     83 }