Interface_0_3.cpp (6198B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "Interface.h" 5 #include "Database/Schema/0_1/SetInfoTable.h" 6 #include "Database/Schema/0_2/QueueTable.h" 7 #include "StatusItemTable.h" 8 #include "ChangeListenerTable.h" 9 #include <winget/SQLiteMetadataTable.h> 10 11 using namespace AppInstaller::SQLite; 12 using namespace AppInstaller::Utility; 13 14 namespace winrt::Microsoft::Management::Configuration::implementation::Database::Schema::V0_3 15 { 16 static constexpr AppInstaller::SQLite::Version s_InterfaceVersion{ 0, 3 }; 17 18 const AppInstaller::SQLite::Version& Interface::GetSchemaVersion() 19 { 20 return s_InterfaceVersion; 21 } 22 23 void Interface::InitializeDatabase() 24 { 25 V0_2::Interface::InitializeDatabase(); 26 27 Savepoint savepoint = Savepoint::Create(*m_storage, "InitializeDatabase_0_3"); 28 MigrateFrom0_2(); 29 savepoint.Commit(); 30 } 31 32 void Interface::RemoveSet(AppInstaller::SQLite::rowid_t target) 33 { 34 Savepoint savepoint = Savepoint::Create(*m_storage, "RemoveSet_0_3"); 35 36 V0_2::Interface::RemoveSet(target); 37 38 StatusItemTable statusItemTable(*m_storage); 39 statusItemTable.RemoveForSet(target); 40 41 savepoint.Commit(); 42 } 43 44 bool Interface::MigrateFrom(IConfigurationDatabase* current) 45 { 46 auto currentSchemaVersion = current->GetSchemaVersion(); 47 if (currentSchemaVersion < s_InterfaceVersion) 48 { 49 if (V0_2::Interface::MigrateFrom(current)) 50 { 51 Savepoint savepoint = Savepoint::Create(*m_storage, "MigrateFrom0_2"); 52 53 MigrateFrom0_2(); 54 s_InterfaceVersion.SetSchemaVersion(*m_storage); 55 56 savepoint.Commit(); 57 58 return true; 59 } 60 } 61 else if (currentSchemaVersion == s_InterfaceVersion) 62 { 63 return true; 64 } 65 66 return false; 67 } 68 69 void Interface::AddQueueItem(const GUID& instanceIdentifier, const std::string& objectName) 70 { 71 V0_2::QueueTable queueTable(*m_storage); 72 queueTable.AddQueueItemWithProcess(instanceIdentifier, objectName); 73 } 74 75 std::vector<std::tuple<GUID, std::string, std::chrono::system_clock::time_point, DWORD, bool>> Interface::GetQueueItems() 76 { 77 V0_2::QueueTable queueTable(*m_storage); 78 return queueTable.GetQueueItemsWithProcess(); 79 } 80 81 void Interface::MigrateFrom0_2() 82 { 83 V0_2::QueueTable queueTable(*m_storage); 84 queueTable.AddProcessColumn(); 85 86 ChangeListenerTable changeListenerTable(*m_storage); 87 changeListenerTable.Create(); 88 89 StatusItemTable statusItemTable(*m_storage); 90 statusItemTable.Create(); 91 } 92 93 std::vector<IConfigurationDatabase::StatusItemTuple> Interface::GetStatusSince(int64_t changeIdentifier) 94 { 95 StatusItemTable statusItemTable(*m_storage); 96 return statusItemTable.GetStatusSince(changeIdentifier); 97 } 98 99 std::tuple<int64_t, std::vector<IConfigurationDatabase::StatusItemTuple>> Interface::GetStatusBaseline() 100 { 101 StatusItemTable statusItemTable(*m_storage); 102 return statusItemTable.GetStatusBaseline(); 103 } 104 105 void Interface::AddListener(const std::string& objectName) 106 { 107 ChangeListenerTable changeListenerTable(*m_storage); 108 changeListenerTable.AddChangeListener(objectName); 109 } 110 111 void Interface::RemoveListener(const std::string& objectName) 112 { 113 ChangeListenerTable changeListenerTable(*m_storage); 114 changeListenerTable.RemoveChangeListener(objectName); 115 } 116 117 std::vector<std::tuple<std::string, std::chrono::system_clock::time_point, DWORD>> Interface::GetChangeListeners() 118 { 119 ChangeListenerTable changeListenerTable(*m_storage); 120 return changeListenerTable.GetChangeListeners(); 121 } 122 123 void Interface::UpdateSetState(const guid& setInstanceIdentifier, ConfigurationSetState state) 124 { 125 StatusItemTable statusItemTable(*m_storage); 126 statusItemTable.UpdateSetState(setInstanceIdentifier, state); 127 } 128 129 void Interface::UpdateSetInQueue(const guid& setInstanceIdentifier, bool inQueue) 130 { 131 StatusItemTable statusItemTable(*m_storage); 132 statusItemTable.UpdateSetInQueue(setInstanceIdentifier, inQueue); 133 } 134 135 void Interface::UpdateUnitState(const guid& setInstanceIdentifier, const ConfigurationSetChangeDataPtr& changeData) 136 { 137 StatusItemTable statusItemTable(*m_storage); 138 statusItemTable.UpdateUnitState(setInstanceIdentifier, changeData); 139 } 140 141 ConfigurationSetState Interface::GetSetState(const guid& instanceIdentifier) 142 { 143 StatusItemTable statusItemTable(*m_storage); 144 return statusItemTable.GetSetState(instanceIdentifier); 145 } 146 147 std::chrono::system_clock::time_point Interface::GetSetFirstApply(const guid& instanceIdentifier) 148 { 149 V0_1::SetInfoTable setInfoTable(*m_storage); 150 return setInfoTable.GetSetFirstApply(instanceIdentifier); 151 } 152 153 std::chrono::system_clock::time_point Interface::GetSetApplyBegun(const guid& instanceIdentifier) 154 { 155 StatusItemTable statusItemTable(*m_storage); 156 return statusItemTable.GetSetApplyBegun(instanceIdentifier); 157 } 158 159 std::chrono::system_clock::time_point Interface::GetSetApplyEnded(const guid& instanceIdentifier) 160 { 161 StatusItemTable statusItemTable(*m_storage); 162 return statusItemTable.GetSetApplyEnded(instanceIdentifier); 163 } 164 165 ConfigurationUnitState Interface::GetUnitState(const guid& instanceIdentifier) 166 { 167 StatusItemTable statusItemTable(*m_storage); 168 return statusItemTable.GetUnitState(instanceIdentifier); 169 } 170 171 std::optional<std::tuple<HRESULT, std::string, std::string, ConfigurationUnitResultSource>> Interface::GetUnitResultInformation(const guid& instanceIdentifier) 172 { 173 StatusItemTable statusItemTable(*m_storage); 174 return statusItemTable.GetUnitResultInformation(instanceIdentifier); 175 } 176 }