query-builder: Remove deprecated code
authorSangwan Kwon <sangwan.kwon@samsung.com>
Tue, 4 Feb 2020 10:11:11 +0000 (19:11 +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/client/virtual-table.cpp
src/vist/query-builder/crud.hpp
src/vist/query-builder/database.hpp
src/vist/query-builder/table.hpp
src/vist/query-builder/tests/database.cpp
src/vist/query-builder/tests/schema.hpp [new file with mode: 0644]
src/vist/query-builder/tests/table.cpp

index f845a58..0423516 100644 (file)
@@ -80,7 +80,9 @@ Member VirtualRow<T>::at(Member Struct::* field) const
        if (this->data.size() == 0)
                THROW(ErrCode::RuntimeError) << "Data is not exist.";
 
-       std::string key = metaDB.getColumnName(field);
+       /// TODO: Refactor
+       Column anonymous("anonymous", field);
+       std::string key = metaDB.getColumnName(anonymous);
        if (key.empty())
                THROW(ErrCode::RuntimeError) << "Column is not exist.";
 
index ae4b578..72805cf 100644 (file)
@@ -65,8 +65,8 @@ T& Crud<T>::select(ColumnTypes&&... cts)
 {
        static_cast<T*>(this)->cache.clear();
 
-       auto columnNames = static_cast<T*>(this)->_getColumnNames(std::forward<ColumnTypes>(cts)...);
-       auto tableNames = static_cast<T*>(this)->_getTableNames(std::forward<ColumnTypes>(cts)...);
+       auto columnNames = static_cast<T*>(this)->getColumnNames(std::forward<ColumnTypes>(cts)...);
+       auto tableNames = static_cast<T*>(this)->getTableNames(std::forward<ColumnTypes>(cts)...);
 
        std::stringstream ss;
        ss << "SELECT ";
@@ -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 << " ";
@@ -153,7 +153,7 @@ T& Crud<T>::insert(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 << "INSERT INTO " << static_cast<T*>(this)->name << " (";
@@ -237,7 +237,7 @@ template<typename Expr>
 std::string Crud<T>::processWhere(Expr expr)
 {
        std::stringstream ss;
-       ss << static_cast<T*>(this)->getColumnName(expr.l.type);
+       ss << static_cast<T*>(this)->getColumnName(expr.l);
        ss << " " << std::string(expr) << " ?";
 
        return ss.str();
index b8b0199..6de1be0 100644 (file)
@@ -55,18 +55,12 @@ public:
 public: // CRTP(Curiously Recurring Template Pattern) for CRUD
        template<typename... Cs>
        std::vector<std::string> getTableNames(Cs&& ...columns) const noexcept;
+       template<typename Table>
+       std::string getTableName(Table&& table) const noexcept;
        template<typename... Cs> 
        std::vector<std::string> getColumnNames(Cs&& ...columns) const noexcept;
-       template<typename TableType>
-       std::string getTableName(TableType&& type) const noexcept;
-       template<typename ColumnType>
-       std::string getColumnName(ColumnType&& type) const noexcept;
-       template<typename... Cs>
-       std::vector<std::string> _getTableNames(Cs&& ...columns) const noexcept;
-       template<typename... Cs> 
-       std::vector<std::string> _getColumnNames(Cs&& ...columns) const noexcept;
-       template<typename ColumnType> // remove_cv or ref
-       std::string _getColumnName(ColumnType&& type) const noexcept;
+       template<typename Column>
+       std::string getColumnName(Column&& column) const noexcept;
 
        std::vector<std::string> cache;
 
@@ -123,29 +117,6 @@ std::vector<std::string> Database<Tables...>::getTableNames(Cs&& ...columns) con
 {
        std::set<std::string> names;
 
-       auto predicate = [this, &names](const auto& type) {
-               Column anonymous("anonymous", type);
-               using TableType = typename decltype(anonymous)::Table;
-               auto name = this->getTableName(TableType());
-               if (!name.empty())
-                               names.emplace(name);
-       };
-
-       auto closure = [&predicate](const auto&... iter) {
-               (predicate(iter), ...);
-       };
-
-       std::apply(closure, std::tuple(columns...));
-
-       return std::vector<std::string>(names.begin(), names.end());
-}
-
-template<typename... Tables>
-template<typename... Cs>
-std::vector<std::string> Database<Tables...>::_getTableNames(Cs&& ...columns) const noexcept
-{
-       std::set<std::string> names;
-
        auto predicate = [this, &names](const auto& column) {
                using ColumnType = std::remove_reference_t<decltype(column)>;
                using TableType = typename ColumnType::Table;
@@ -168,28 +139,8 @@ template<typename... Cs>
 std::vector<std::string> Database<Tables...>::getColumnNames(Cs&& ...columns) const noexcept
 {
        std::vector<std::string> names;
-       auto predicate = [this, &names](const auto& iter) {
-               auto name = this->getColumnName(iter);
-               if (!name.empty())
-                       names.emplace_back(name);
-       };
-
-       auto closure = [&predicate](const auto&... iter) {
-               (predicate(iter), ...);
-       };
-
-       std::apply(closure, std::tuple(columns...));
-
-       return names;
-}
-
-template<typename... Tables>
-template<typename... Cs>
-std::vector<std::string> Database<Tables...>::_getColumnNames(Cs&& ...columns) const noexcept
-{
-       std::vector<std::string> names;
        auto predicate = [this, &names](const auto& column) {
-               auto name = this->_getColumnName(column);
+               auto name = this->getColumnName(column);
                if (!name.empty())
                        names.emplace_back(name);
        };
@@ -223,33 +174,8 @@ std::string Database<Tables...>::getTableName(Table&& table) const noexcept
 }
 
 template<typename... Tables>
-template<typename ColumnType>
-std::string Database<Tables...>::getColumnName(ColumnType&& column) const noexcept
-{
-       Column anonymous("anonymous", column);
-       using TableType = typename decltype(anonymous)::Table;
-       TableType table;
-
-       std::string name;
-       auto predicate = [&name, &table, &column](const auto& iter) {
-               if (iter.compare(table)) {
-                       auto cname = iter.getColumnName(column);
-                       name = iter.name + "." + cname;
-               }
-       };
-
-       auto closure = [&predicate](const auto&... iter) {
-               (predicate(iter), ...);
-       };
-
-       std::apply(closure, this->tables);
-
-       return name;
-}
-
-template<typename... Tables>
 template<typename Column>
-std::string Database<Tables...>::_getColumnName(Column&& column) const noexcept
+std::string Database<Tables...>::getColumnName(Column&& column) const noexcept
 {
        using ColumnType = std::remove_reference_t<decltype(column)>;
        using TableType = typename ColumnType::Table;
@@ -258,7 +184,7 @@ std::string Database<Tables...>::_getColumnName(Column&& column) const noexcept
        std::string name;
        auto predicate = [&name, &table, &column](const auto& iter) {
                if (iter.compare(table)) {
-                       auto cname = iter._getColumnName(column);
+                       auto cname = iter.getColumnName(column);
                        name = iter.name + "." + cname;
                }
        };
index dc0b929..a8ce677 100644 (file)
@@ -52,19 +52,13 @@ public:
 
 public: // CRTP(Curiously Recurring Template Pattern) for CRUD
        template<typename... Cs>
-       std::vector<std::string> getTableNames(Cs&& ...coulmns) const noexcept;
+       std::vector<std::string> getTableNames(Cs&& ...) const noexcept;
        template<typename That>
-       std::string getTableName(That&& type) const noexcept;
+       std::string getTableName(That&&) const noexcept;
        template<typename... Cs>
        std::vector<std::string> getColumnNames(Cs&& ...columns) const noexcept;
        template<typename Column>
-       std::string getColumnName(const Column& column) const noexcept;
-       template<typename... Cs>
-       std::vector<std::string> _getTableNames(Cs&& ...) const noexcept;
-       template<typename... Cs>
-       std::vector<std::string> _getColumnNames(Cs&& ...columns) const noexcept;
-       template<typename Column>
-       std::string _getColumnName(const Column& column) const noexcept;
+       std::string getColumnName(Column&& column) const noexcept;
 
        std::vector<std::string> cache;
 
@@ -80,13 +74,6 @@ std::string Table<Columns...>::getName() const noexcept
 
 template<typename... Columns>
 template<typename... Cs>
-std::vector<std::string> Table<Columns...>::getTableNames(Cs&& ...) const noexcept
-{
-       return {this->name};
-}
-
-template<typename... Columns>
-template<typename... Cs>
 std::vector<std::string> Table<Columns...>::getColumnNames(Cs&& ...columns) const noexcept
 {
        std::vector<std::string> names;
@@ -105,27 +92,6 @@ std::vector<std::string> Table<Columns...>::getColumnNames(Cs&& ...columns) cons
        return names;
 }
 
-
-template<typename... Columns>
-template<typename... Cs>
-std::vector<std::string> Table<Columns...>::_getColumnNames(Cs&& ...columns) const noexcept
-{
-       std::vector<std::string> names;
-       auto predicate = [this, &names](const auto& type) {
-               auto name = this->_getColumnName(type);
-               if (!name.empty())
-                       names.emplace_back(name);
-       };
-
-       auto closure = [&predicate](const auto&... iter) {
-               (predicate(iter), ...);
-       };
-
-       std::apply(closure, std::tuple(columns...));
-
-       return names;
-}
-
 template<typename... Columns>
 template<typename That>
 std::string Table<Columns...>::getTableName(That&&) const noexcept
@@ -147,34 +113,15 @@ std::vector<std::string> Table<Columns...>::getColumnNames(void) const noexcept
 }
 
 template<typename... Columns>
-template<typename Column>
-std::string Table<Columns...>::getColumnName(const Column& column) const noexcept
-{
-       std::string name;
-       auto predicate = [&name, &column](const auto& iter) {
-               if (type::cast_compare(column, iter.type)) 
-                       name = iter.name;
-       };
-
-       auto closure = [&predicate](const auto&... iter) {
-               (predicate(iter), ...);
-       };
-
-       std::apply(closure, this->columns);
-
-       return name;
-}
-
-template<typename... Columns>
 template<typename... Cs>
-std::vector<std::string> Table<Columns...>::_getTableNames(Cs&& ...) const noexcept
+std::vector<std::string> Table<Columns...>::getTableNames(Cs&& ...) const noexcept
 {
        return {this->name};
 }
 
 template<typename... Columns>
 template<typename Column>
-std::string Table<Columns...>::_getColumnName(const Column& column) const noexcept
+std::string Table<Columns...>::getColumnName(Column&& column) const noexcept
 {
        std::string name;
        auto predicate = [&name, &column](const auto& iter) {
index 745e5cb..15b500f 100644 (file)
 #include <vist/query-builder/database.hpp>
 #include <vist/query-builder/table.hpp>
 
-using namespace vist::tsqb;
-
-namespace {
-
-struct Table1 {
-       int column1;
-       std::string column2;
-       bool column3;
-
-       inline static Column Column1 = { "column1", &Table1::column1 };
-       inline static Column Column2 = { "column2", &Table1::column2 };
-};
-
-struct Table2 {
-       int column1;
-       std::string column2;
-       bool column3;
-       float column4;
-       double column5;
-};
-
-Table table1 { "table1", Column("column1", &Table1::column1),
-                                                Column("column2", &Table1::column2),
-                                                Column("column3", &Table1::column3) };
+#include "schema.hpp"
 
-Table table2 { "table2", Column("column1", &Table2::column1),
-                                                Column("column2", &Table2::column2),
-                                                Column("column3", &Table2::column3),
-                                                Column("column4", &Table2::column4),
-                                                Column("column5", &Table2::column5) };
-
-Database database { "database", table1, table2 };
-
-} // anonymous namespace
+using namespace vist::tsqb;
+using namespace vist::test;
 
 TEST(QueryBuilderDatabaseTests, size)
 {
@@ -67,27 +37,20 @@ TEST(QueryBuilderDatabaseTests, get_name)
        EXPECT_EQ(database.getTableName(Table1()), "table1");
        EXPECT_EQ(database.getTableName(Table2()), "table2");
 
-       EXPECT_EQ(database._getColumnName(Table1::Column1), "table1.column1");
-       EXPECT_EQ(database.getColumnName(&Table1::column2), "table1.column2");
-       EXPECT_EQ(database.getColumnName(&Table1::column3), "table1.column3");
+       EXPECT_EQ(database.getColumnName(Table1::Column2), "table1.column2");
+       EXPECT_EQ(database.getColumnName(Table1::Column3), "table1.column3");
 
-       EXPECT_EQ(database.getColumnName(&Table2::column1), "table2.column1");
-       EXPECT_EQ(database.getColumnName(&Table2::column2), "table2.column2");
-       EXPECT_EQ(database.getColumnName(&Table2::column3), "table2.column3");
-       EXPECT_EQ(database.getColumnName(&Table2::column4), "table2.column4");
-       EXPECT_EQ(database.getColumnName(&Table2::column5), "table2.column5");
+       EXPECT_EQ(database.getColumnName(Table2::Column1), "table2.column1");
+       EXPECT_EQ(database.getColumnName(Table2::Column2), "table2.column2");
+       EXPECT_EQ(database.getColumnName(Table2::Column3), "table2.column3");
+       EXPECT_EQ(database.getColumnName(Table2::Column4), "table2.column4");
+       EXPECT_EQ(database.getColumnName(Table2::Column5), "table2.column5");
 }
 
 TEST(QueryBuilderDatabaseTests, get_names)
 {
-       {
-               auto columns = database._getColumnNames(Table1::Column1, Table1::Column2);
-               EXPECT_EQ(columns[0], "table1.column1");
-               EXPECT_EQ(columns[1], "table1.column2");
-       }
-
-       auto columns = database.getColumnNames(&Table1::column1, &Table2::column3);
-       auto tables = database.getTableNames(&Table1::column1, &Table2::column1, &Table2::column1);
+       auto columns = database.getColumnNames(Table1::Column1, Table2::Column3);
+       auto tables = database.getTableNames(Table1::Column1, Table2::Column1, Table2::Column1);
        if (columns.size() == 2 && tables.size() == 2) {
                EXPECT_EQ(columns[0], "table1.column1");
                EXPECT_EQ(columns[1], "table2.column3");
diff --git a/src/vist/query-builder/tests/schema.hpp b/src/vist/query-builder/tests/schema.hpp
new file mode 100644 (file)
index 0000000..25dd111
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ *  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 <vist/query-builder.hpp>
+
+using namespace vist::tsqb;
+
+namespace vist {
+namespace test {
+
+struct Table1 {
+       int column1;
+       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 };
+};
+
+struct Table2 {
+       int column1;
+       std::string column2;
+       bool column3;
+       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 };
+};
+
+inline Table table1 { "table1", Table1::Column1, Table1::Column2, Table1::Column3 };
+inline Table table2 { "table2", Table2::Column1,
+                                                               Table2::Column2,
+                                                               Table2::Column3,
+                                                               Table2::Column4,
+                                                               Table2::Column5 };
+
+inline Database database { "database", table1, table2 };
+
+} // namespace test
+} // namespace vist
index 6e7e86d..3d58f32 100644 (file)
 #include <vist/query-builder/column.hpp>
 #include <vist/query-builder/table.hpp>
 
-using namespace vist::tsqb;
-
-namespace {
-
-struct Table1 {
-       int column1;
-       std::string column2;
-       bool column3;
-
-       inline static Column Column1 = { "column1", &Table1::column1 };
-};
+#include "schema.hpp"
 
-struct Table2 {
-       int column1;
-       std::string column2;
-       bool column3;
-       float column4;
-       double column5;
-};
-
-Table table1 { "table1", Column("column1", &Table1::column1),
-                                                Column("column2", &Table1::column2),
-                                                Column("column3", &Table1::column3) };
-
-Table table2 { "table2", Column("column1", &Table2::column1),
-                                                Column("column2", &Table2::column2),
-                                                Column("column3", &Table2::column3),
-                                                Column("column4", &Table2::column4),
-                                                Column("column5", &Table2::column5) };
-
-} // anonymous namespace
+using namespace vist::tsqb;
+using namespace vist::test;
 
 TEST(QueryBuilderTableTests, size)
 {
@@ -62,16 +35,15 @@ TEST(QueryBuilderTableTests, get_name)
        EXPECT_EQ(table1.getName(), "table1");
        EXPECT_EQ(table2.name, "table2");
 
-       EXPECT_EQ(table1._getColumnName(Table1::Column1), "column1");
-       EXPECT_EQ(table1.getColumnName(&Table1::column1), "column1");
-       EXPECT_EQ(table1.getColumnName(&Table1::column2), "column2");
-       EXPECT_EQ(table1.getColumnName(&Table1::column3), "column3");
+       EXPECT_EQ(table1.getColumnName(Table1::Column1), "column1");
+       EXPECT_EQ(table1.getColumnName(Table1::Column2), "column2");
+       EXPECT_EQ(table1.getColumnName(Table1::Column3), "column3");
 
-       EXPECT_EQ(table2.getColumnName(&Table2::column1), "column1");
-       EXPECT_EQ(table2.getColumnName(&Table2::column2), "column2");
-       EXPECT_EQ(table2.getColumnName(&Table2::column3), "column3");
-       EXPECT_EQ(table2.getColumnName(&Table2::column4), "column4");
-       EXPECT_EQ(table2.getColumnName(&Table2::column5), "column5");
+       EXPECT_EQ(table2.getColumnName(Table2::Column1), "column1");
+       EXPECT_EQ(table2.getColumnName(Table2::Column2), "column2");
+       EXPECT_EQ(table2.getColumnName(Table2::Column3), "column3");
+       EXPECT_EQ(table2.getColumnName(Table2::Column4), "column4");
+       EXPECT_EQ(table2.getColumnName(Table2::Column5), "column5");
 }
 
 TEST(QueryBuilderTableTests, get_names)