winget-cli

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

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 }