From bcbb3f5a957fbfc53dd32e5d1f1bfc09b47741cf Mon Sep 17 00:00:00 2001 From: Sangwan Kwon Date: Tue, 4 Feb 2020 18:32:09 +0900 Subject: [PATCH] query-builder: Refactor update interface Signed-off-by: Sangwan Kwon --- src/vist/policy/db-schema.hpp | 17 +++++++++++++++++ src/vist/policy/policy-storage.cpp | 9 +++++---- src/vist/query-builder/crud.hpp | 2 +- src/vist/query-builder/tests/query-builder.cpp | 6 +++--- 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/vist/policy/db-schema.hpp b/src/vist/policy/db-schema.hpp index 5482504..092d494 100644 --- a/src/vist/policy/db-schema.hpp +++ b/src/vist/policy/db-schema.hpp @@ -29,19 +29,36 @@ namespace schema { struct Admin { std::string name; int activated = -1; + + inline static Column Name = { "name", &Admin::name }; + inline static Column Activated = { "activated", &Admin::activated }; }; struct PolicyManaged { std::string admin; std::string policy; std::string value; + + inline static Column Admin = { "admin", &PolicyManaged::admin }; + inline static Column Policy = { "policy", &PolicyManaged::policy }; + inline static Column Value = { "value", &PolicyManaged::value }; }; struct PolicyDefinition { std::string name; std::string ivalue; + + inline static Column Name = { "name", &PolicyDefinition::name }; + inline static Column Ivalue = { "policy", &PolicyDefinition::ivalue }; }; +inline Table AdminTable { "ADMIN", Admin::Name, Admin::Activated }; +inline Table PolicyManagedTable { "POLICY_MANAGED", PolicyManaged::Admin, + PolicyManaged::Policy, + PolicyManaged::Value }; +inline Table PolicyDefinitionTable { "POLICY_DEFINITION", PolicyDefinition::Name, + PolicyDefinition::Ivalue }; + inline Table admin { "ADMIN", Column("name", &Admin::name), Column("activated", &Admin::activated) }; diff --git a/src/vist/policy/policy-storage.cpp b/src/vist/policy/policy-storage.cpp index 430d180..2dd390c 100644 --- a/src/vist/policy/policy-storage.cpp +++ b/src/vist/policy/policy-storage.cpp @@ -193,8 +193,9 @@ void PolicyStorage::activate(const std::string& admin, bool state) THROW(ErrCode::LogicError) << "Not exist admin: " << admin; DEBUG(VIST) << "Activate admin: " << admin; - std::string query = schema::admin.update(&Admin::activated) - .where(expr(&Admin::name) == admin); + /// Admin::Activated + std::string query = schema::AdminTable.update(Admin::Activated) + .where(expr(&Admin::name) == admin); database::Statement stmt(*this->database, query); stmt.bind(1, static_cast(state)); stmt.bind(2, admin); @@ -235,8 +236,8 @@ void PolicyStorage::update(const std::string& admin, if (this->definitions.find(policy) == this->definitions.end()) THROW(ErrCode::LogicError) << "Not exist policy: " << policy; - std::string query = schema::policyManaged.update(&PolicyManaged::value) - .where(expr(&PolicyManaged::admin) == admin && + std::string query = schema::PolicyManagedTable.update(PolicyManaged::Value) + .where(expr(&PolicyManaged::admin) == admin && expr(&PolicyManaged::policy) == policy); database::Statement stmt(*this->database, query); stmt.bind(1, value.dump()); diff --git a/src/vist/query-builder/crud.hpp b/src/vist/query-builder/crud.hpp index dfbb001..6fd4a34 100644 --- a/src/vist/query-builder/crud.hpp +++ b/src/vist/query-builder/crud.hpp @@ -128,7 +128,7 @@ T& Crud::update(ColumnTypes&&... cts) { static_cast(this)->cache.clear(); - auto columnNames = static_cast(this)->getColumnNames(std::forward(cts)...); + auto columnNames = static_cast(this)->_getColumnNames(std::forward(cts)...); std::stringstream ss; ss << "UPDATE " << static_cast(this)->name << " "; diff --git a/src/vist/query-builder/tests/query-builder.cpp b/src/vist/query-builder/tests/query-builder.cpp index 8eb899f..23a75b1 100644 --- a/src/vist/query-builder/tests/query-builder.cpp +++ b/src/vist/query-builder/tests/query-builder.cpp @@ -124,10 +124,10 @@ TEST(QueryBuilderTsqbTests, SELECT_WHERE) TEST(QueryBuilderTsqbTests, UPDATE) { int uid = 0, id = 1; - std::string update1 = admin.update(&Admin::id, &Admin::pkg, &Admin::uid, &Admin::key); - std::string update2 = admin.update(&Admin::key).where(expr(&Admin::uid) == uid && + std::string update1 = admin.update(Admin::Id, Admin::Pkg, Admin::Uid, Admin::Key); + std::string update2 = admin.update(Admin::Key).where(expr(&Admin::uid) == uid && expr(&Admin::id) == id); - std::string update3 = admin.update(&Admin::key, &Admin::pkg) + std::string update3 = admin.update(Admin::Key, Admin::Pkg) .where(expr(&Admin::uid) == 0 && expr(&Admin::id) == 1); EXPECT_EQ(update1, "UPDATE admin SET id = ?, pkg = ?, uid = ?, key = ?"); -- 2.34.1