SQLiteVersion.cpp (2151B)
1 // Copyright (c) Microsoft Corporation. 2 // Licensed under the MIT License. 3 #include "pch.h" 4 #include "Public/winget/SQLiteVersion.h" 5 #include "Public/winget/SQLiteMetadataTable.h" 6 7 #include <limits> 8 9 namespace AppInstaller::SQLite 10 { 11 Version Version::GetSchemaVersion(Connection& connection) 12 { 13 int major = MetadataTable::GetNamedValue<int>(connection, s_MetadataValueName_MajorVersion); 14 int minor = MetadataTable::GetNamedValue<int>(connection, s_MetadataValueName_MinorVersion); 15 16 return { static_cast<uint32_t>(major), static_cast<uint32_t>(minor) }; 17 } 18 19 void Version::SetSchemaVersion(Connection& connection) const 20 { 21 Savepoint savepoint = Savepoint::Create(connection, "version_setschemaversion"); 22 23 MetadataTable::SetNamedValue(connection, s_MetadataValueName_MajorVersion, static_cast<int>(MajorVersion)); 24 MetadataTable::SetNamedValue(connection, s_MetadataValueName_MinorVersion, static_cast<int>(MinorVersion)); 25 26 savepoint.Commit(); 27 } 28 29 std::ostream& operator<<(std::ostream& out, const Version& version) 30 { 31 if (version.IsLatest()) 32 { 33 return out << "Latest"; 34 } 35 else if (version.IsLatestForMajor(version.MajorVersion)) 36 { 37 return out << version.MajorVersion << ".Latest"; 38 } 39 else 40 { 41 return out << version.MajorVersion << '.' << version.MinorVersion; 42 } 43 } 44 45 Version Version::Latest() 46 { 47 return { std::numeric_limits<uint32_t>::max(), std::numeric_limits<uint32_t>::max() }; 48 } 49 50 Version Version::LatestForMajor(uint32_t majorVersion) 51 { 52 return { majorVersion, std::numeric_limits<uint32_t>::max() }; 53 } 54 55 bool Version::IsLatest() const 56 { 57 return (MajorVersion == std::numeric_limits<uint32_t>::max() && MinorVersion == std::numeric_limits<uint32_t>::max()); 58 } 59 60 bool Version::IsLatestForMajor(uint32_t majorVersion) const 61 { 62 return (MajorVersion == majorVersion && MinorVersion == std::numeric_limits<uint32_t>::max()); 63 } 64 }