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 }