From 7bfbf2e98c8f4a219d0e67e44b3bfa8b12c0ba79 Mon Sep 17 00:00:00 2001 From: Sangwan Kwon Date: Tue, 4 Feb 2020 20:04:33 +0900 Subject: [PATCH] query-builder: Add macros Signed-off-by: Sangwan Kwon --- src/vist/policy/db-schema.hpp | 35 +++++++++---------------- src/vist/policy/policy-storage.cpp | 8 +++--- src/vist/query-builder.hpp | 1 + src/vist/query-builder/macro.hpp | 28 ++++++++++++++++++++ src/vist/query-builder/tests/schema.hpp | 24 ++++++++--------- 5 files changed, 57 insertions(+), 39 deletions(-) create mode 100644 src/vist/query-builder/macro.hpp diff --git a/src/vist/policy/db-schema.hpp b/src/vist/policy/db-schema.hpp index 092d494..516a5fe 100644 --- a/src/vist/policy/db-schema.hpp +++ b/src/vist/policy/db-schema.hpp @@ -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 diff --git a/src/vist/policy/policy-storage.cpp b/src/vist/policy/policy-storage.cpp index 2d0305f..d5cae2c 100644 --- a/src/vist/policy/policy-storage.cpp +++ b/src/vist/policy/policy-storage.cpp @@ -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()) diff --git a/src/vist/query-builder.hpp b/src/vist/query-builder.hpp index 35a918e..50963d8 100644 --- a/src/vist/query-builder.hpp +++ b/src/vist/query-builder.hpp @@ -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 index 0000000..564b5b5 --- /dev/null +++ b/src/vist/query-builder/macro.hpp @@ -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__ } diff --git a/src/vist/query-builder/tests/schema.hpp b/src/vist/query-builder/tests/schema.hpp index 25dd111..620eed3 100644 --- a/src/vist/query-builder/tests/schema.hpp +++ b/src/vist/query-builder/tests/schema.hpp @@ -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 -- 2.34.1