query-builder: Refactor update interface
authorSangwan Kwon <sangwan.kwon@samsung.com>
Tue, 4 Feb 2020 09:32:09 +0000 (18:32 +0900)
committer권상완/Security 2Lab(SR)/Engineer/삼성전자 <sangwan.kwon@samsung.com>
Mon, 17 Feb 2020 11:16:16 +0000 (20:16 +0900)
Signed-off-by: Sangwan Kwon <sangwan.kwon@samsung.com>
src/vist/policy/db-schema.hpp
src/vist/policy/policy-storage.cpp
src/vist/query-builder/crud.hpp
src/vist/query-builder/tests/query-builder.cpp

index 5482504..092d494 100644 (file)
@@ -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) };
 
index 430d180..2dd390c 100644 (file)
@@ -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<int>(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());
index dfbb001..6fd4a34 100644 (file)
@@ -128,7 +128,7 @@ T& Crud<T>::update(ColumnTypes&&... cts)
 {
        static_cast<T*>(this)->cache.clear();
 
-       auto columnNames = static_cast<T*>(this)->getColumnNames(std::forward<ColumnTypes>(cts)...);
+       auto columnNames = static_cast<T*>(this)->_getColumnNames(std::forward<ColumnTypes>(cts)...);
 
        std::stringstream ss;
        ss << "UPDATE " << static_cast<T*>(this)->name << " ";
index 8eb899f..23a75b1 100644 (file)
@@ -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 = ?");