winget-cli

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

SQLiteMetadataTable.cpp (2302B)


      1 // Copyright (c) Microsoft Corporation.
      2 // Licensed under the MIT License.
      3 #include "pch.h"
      4 #include "Public/winget/SQLiteMetadataTable.h"
      5 
      6 
      7 using namespace std::literals;
      8 
      9 namespace AppInstaller::SQLite
     10 {
     11     // Table data [note that this table is not versioned, and thus *cannot change*]
     12     static constexpr std::string_view s_MetadataTable_Table_Name = "metadata"sv;
     13     static constexpr std::string_view s_MetadataTable_Column_Name = "name"sv;
     14     static constexpr std::string_view s_MetadataTable_Column_Value = "value"sv;
     15 
     16     static constexpr std::string_view s_MetadataTable_Table_Create = R"(
     17 CREATE TABLE [metadata](
     18     [name] TEXT PRIMARY KEY NOT NULL,
     19     [value] TEXT NOT NULL) WITHOUT ROWID
     20 )"sv;
     21 
     22     // Statements
     23     static constexpr std::string_view s_MetadataTableStmt_GetNamedValue = "select [value] from [metadata] where [name] = ?"sv;
     24     static constexpr std::string_view s_MetadataTableStmt_SetNamedValue = "insert or replace into [metadata] ([name], [value]) values (?, ?)"sv;
     25 
     26     void MetadataTable::Create(Connection& connection)
     27     {
     28         Statement create = Statement::Create(connection, s_MetadataTable_Table_Create);
     29         create.Execute();
     30     }
     31 
     32     Statement MetadataTable::GetNamedValueStatement(const Connection& connection, std::string_view name)
     33     {
     34         std::optional<Statement> result = TryGetNamedValueStatement(connection, name);
     35         THROW_HR_IF(E_NOT_SET, !result);
     36         return std::move(result).value();
     37     }
     38 
     39     std::optional<Statement> MetadataTable::TryGetNamedValueStatement(const Connection& connection, std::string_view name)
     40     {
     41         THROW_HR_IF(E_INVALIDARG, name.empty());
     42 
     43         Statement result = Statement::Create(connection, s_MetadataTableStmt_GetNamedValue);
     44         result.Bind(1, name);
     45 
     46         if (result.Step())
     47         {
     48             return result;
     49         }
     50         else
     51         {
     52             return std::nullopt;
     53         }
     54     }
     55 
     56     Statement MetadataTable::SetNamedValueStatement(const Connection& connection, std::string_view name)
     57     {
     58         THROW_HR_IF(E_INVALIDARG, name.empty());
     59         Statement result = Statement::Create(connection, s_MetadataTableStmt_SetNamedValue);
     60         result.Bind(1, name);
     61         return result;
     62     }
     63 }