query-builder: Add macros
authorSangwan Kwon <sangwan.kwon@samsung.com>
Tue, 4 Feb 2020 11:04:33 +0000 (20:04 +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.hpp
src/vist/query-builder/macro.hpp [new file with mode: 0644]
src/vist/query-builder/tests/schema.hpp

index 092d494..516a5fe 100644 (file)
@@ -30,8 +30,8 @@ struct Admin {
        std::string name;
        int activated = -1;
 
-       inline static Column Name = { "name", &Admin::name };
-       inline static Column Activated = { "activated", &Admin::activated };
+       DECLARE_COLUMN(Name, "name", &Admin::name);
+       DECLARE_COLUMN(Activated, "activated", &Admin::activated);
 };
 
 struct PolicyManaged {
@@ -39,36 +39,25 @@ struct PolicyManaged {
        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 };
+       DECLARE_COLUMN(Admin, "admin", &PolicyManaged::admin);
+       DECLARE_COLUMN(Policy, "policy", &PolicyManaged::policy);
+       DECLARE_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 };
+       DECLARE_COLUMN(Name, "name", &PolicyDefinition::name);
+       DECLARE_COLUMN(Ivalue, "policy", &PolicyDefinition::ivalue);
 };
 
-inline Table AdminTable { "ADMIN", Admin::Name, Admin::Activated };
-inline Table PolicyManagedTable { "POLICY_MANAGED", PolicyManaged::Admin,
+DECLARE_TABLE(AdminTable, "ADMIN", Admin::Name, Admin::Activated);
+DECLARE_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) };
-
-inline Table policyManaged { "POLICY_MANAGED", Column("admin", &PolicyManaged::admin),
-                                                                                          Column("policy", &PolicyManaged::policy),
-                                                                                          Column("value", &PolicyManaged::value) };
-
-inline Table policyDefinition { "POLICY_DEFINITION",
-                                                               Column("name", &PolicyDefinition::name),
-                                                               Column("ivalue", &PolicyDefinition::ivalue) };
+                                                                                                       PolicyManaged::Value);
+DECLARE_TABLE(PolicyDefinitionTable, "POLICY_DEFINITION", PolicyDefinition::Name,
+                                                                                                                 PolicyDefinition::Ivalue);
 
 } // namespace schema
 } // namespace policy
index 2d0305f..d5cae2c 100644 (file)
@@ -57,7 +57,7 @@ void PolicyStorage::sync()
 void PolicyStorage::syncPolicyDefinition()
 {
        this->definitions.clear();
-       std::string query = schema::policyDefinition.selectAll();
+       std::string query = schema::PolicyDefinitionTable.selectAll();
        database::Statement stmt(*database, query);
 
        while (stmt.step()) {
@@ -72,7 +72,7 @@ void PolicyStorage::syncPolicyDefinition()
 void PolicyStorage::syncAdmin()
 {
        this->admins.clear();
-       std::string query = schema::admin.selectAll();
+       std::string query = schema::AdminTable.selectAll();
        database::Statement stmt(*database, query);
 
        while (stmt.step()) {
@@ -86,7 +86,7 @@ void PolicyStorage::syncAdmin()
 void PolicyStorage::syncPolicyManaged()
 {
        this->managedPolicies.clear();
-       std::string query = schema::policyManaged.selectAll();
+       std::string query = schema::PolicyManagedTable.selectAll();
        database::Statement stmt(*database, query);
 
        while (stmt.step()) {
@@ -177,7 +177,7 @@ void PolicyStorage::disenroll(const std::string& name)
                this->admins.erase(name);
        }
 
-       std::string query = schema::admin.remove().where(expr(&Admin::name) == name);
+       std::string query = schema::AdminTable.remove().where(expr(&Admin::name) == name);
        database::Statement stmt(*database, query);
        stmt.bind(1, name);
        if (!stmt.exec())
index 35a918e..50963d8 100644 (file)
@@ -23,5 +23,6 @@
 #include "query-builder/condition.hpp"
 #include "query-builder/database.hpp"
 #include "query-builder/expression.hpp"
+#include "query-builder/macro.hpp"
 #include "query-builder/table.hpp"
 #include "query-builder/util.hpp"
diff --git a/src/vist/query-builder/macro.hpp b/src/vist/query-builder/macro.hpp
new file mode 100644 (file)
index 0000000..564b5b5
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ *  Copyright (c) 2020-present Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+
+#pragma once
+
+#include "column.hpp" 
+#include "database.hpp" 
+#include "table.hpp" 
+
+#define DECLARE_COLUMN(instance, name, type) \
+       inline static vist::tsqb::Column instance = { name, type }
+#define DECLARE_TABLE(instance, name, ...) \
+       inline vist::tsqb::Table instance { name, __VA_ARGS__ }
+#define DECLARE_DATABASE(instance, name, ...)  \
+       inline vist::tsqb::Database instance { name, __VA_ARGS__ }
index 25dd111..620eed3 100644 (file)
@@ -27,9 +27,9 @@ struct Table1 {
        std::string column2;
        bool column3;
 
-       inline static Column Column1 = { "column1", &Table1::column1 };
-       inline static Column Column2 = { "column2", &Table1::column2 };
-       inline static Column Column3 = { "column3", &Table1::column3 };
+       DECLARE_COLUMN(Column1, "column1", &Table1::column1);
+       DECLARE_COLUMN(Column2, "column2", &Table1::column2);
+       DECLARE_COLUMN(Column3, "column3", &Table1::column3);
 };
 
 struct Table2 {
@@ -39,21 +39,21 @@ struct Table2 {
        float column4;
        double column5;
 
-       inline static Column Column1 = { "column1", &Table2::column1 };
-       inline static Column Column2 = { "column2", &Table2::column2 };
-       inline static Column Column3 = { "column3", &Table2::column3 };
-       inline static Column Column4 = { "column4", &Table2::column4 };
-       inline static Column Column5 = { "column5", &Table2::column5 };
+       DECLARE_COLUMN(Column1, "column1", &Table2::column1);
+       DECLARE_COLUMN(Column2, "column2", &Table2::column2);
+       DECLARE_COLUMN(Column3, "column3", &Table2::column3);
+       DECLARE_COLUMN(Column4, "column4", &Table2::column4);
+       DECLARE_COLUMN(Column5, "column5", &Table2::column5);
 };
 
-inline Table table1 { "table1", Table1::Column1, Table1::Column2, Table1::Column3 };
-inline Table table2 { "table2", Table2::Column1,
+DECLARE_TABLE(table1, "table1", Table1::Column1, Table1::Column2, Table1::Column3);
+DECLARE_TABLE(table2, "table2", Table2::Column1,
                                                                Table2::Column2,
                                                                Table2::Column3,
                                                                Table2::Column4,
-                                                               Table2::Column5 };
+                                                               Table2::Column5);
 
-inline Database database { "database", table1, table2 };
+DECLARE_DATABASE(database, "database", table1, table2);
 
 } // namespace test
 } // namespace vist