From cf29ab81b1bfac70a653e75019499fc5008d9a63 Mon Sep 17 00:00:00 2001 From: Sangwan Kwon Date: Tue, 4 Feb 2020 19:11:11 +0900 Subject: [PATCH] query-builder: Remove deprecated code Signed-off-by: Sangwan Kwon --- src/vist/client/virtual-table.cpp | 4 +- src/vist/query-builder/crud.hpp | 10 +-- src/vist/query-builder/database.hpp | 88 ++--------------------- src/vist/query-builder/table.hpp | 63 ++-------------- src/vist/query-builder/tests/database.cpp | 61 ++++------------ src/vist/query-builder/tests/schema.hpp | 59 +++++++++++++++ src/vist/query-builder/tests/table.cpp | 50 +++---------- 7 files changed, 102 insertions(+), 233 deletions(-) create mode 100644 src/vist/query-builder/tests/schema.hpp diff --git a/src/vist/client/virtual-table.cpp b/src/vist/client/virtual-table.cpp index f845a58..0423516 100644 --- a/src/vist/client/virtual-table.cpp +++ b/src/vist/client/virtual-table.cpp @@ -80,7 +80,9 @@ Member VirtualRow::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."; diff --git a/src/vist/query-builder/crud.hpp b/src/vist/query-builder/crud.hpp index ae4b578..72805cf 100644 --- a/src/vist/query-builder/crud.hpp +++ b/src/vist/query-builder/crud.hpp @@ -65,8 +65,8 @@ T& Crud::select(ColumnTypes&&... cts) { static_cast(this)->cache.clear(); - auto columnNames = static_cast(this)->_getColumnNames(std::forward(cts)...); - auto tableNames = static_cast(this)->_getTableNames(std::forward(cts)...); + auto columnNames = static_cast(this)->getColumnNames(std::forward(cts)...); + auto tableNames = static_cast(this)->getTableNames(std::forward(cts)...); std::stringstream ss; ss << "SELECT "; @@ -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 << " "; @@ -153,7 +153,7 @@ T& Crud::insert(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 << "INSERT INTO " << static_cast(this)->name << " ("; @@ -237,7 +237,7 @@ template std::string Crud::processWhere(Expr expr) { std::stringstream ss; - ss << static_cast(this)->getColumnName(expr.l.type); + ss << static_cast(this)->getColumnName(expr.l); ss << " " << std::string(expr) << " ?"; return ss.str(); diff --git a/src/vist/query-builder/database.hpp b/src/vist/query-builder/database.hpp index b8b0199..6de1be0 100644 --- a/src/vist/query-builder/database.hpp +++ b/src/vist/query-builder/database.hpp @@ -55,18 +55,12 @@ public: public: // CRTP(Curiously Recurring Template Pattern) for CRUD template std::vector getTableNames(Cs&& ...columns) const noexcept; + template + std::string getTableName(Table&& table) const noexcept; template std::vector getColumnNames(Cs&& ...columns) const noexcept; - template - std::string getTableName(TableType&& type) const noexcept; - template - std::string getColumnName(ColumnType&& type) const noexcept; - template - std::vector _getTableNames(Cs&& ...columns) const noexcept; - template - std::vector _getColumnNames(Cs&& ...columns) const noexcept; - template // remove_cv or ref - std::string _getColumnName(ColumnType&& type) const noexcept; + template + std::string getColumnName(Column&& column) const noexcept; std::vector cache; @@ -123,29 +117,6 @@ std::vector Database::getTableNames(Cs&& ...columns) con { std::set 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(names.begin(), names.end()); -} - -template -template -std::vector Database::_getTableNames(Cs&& ...columns) const noexcept -{ - std::set names; - auto predicate = [this, &names](const auto& column) { using ColumnType = std::remove_reference_t; using TableType = typename ColumnType::Table; @@ -166,30 +137,10 @@ std::vector Database::_getTableNames(Cs&& ...columns) co template template std::vector Database::getColumnNames(Cs&& ...columns) const noexcept -{ - std::vector 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 -template -std::vector Database::_getColumnNames(Cs&& ...columns) const noexcept { std::vector 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); }; @@ -222,34 +173,9 @@ std::string Database::getTableName(Table&& table) const noexcept return name; } -template -template -std::string Database::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 template -std::string Database::_getColumnName(Column&& column) const noexcept +std::string Database::getColumnName(Column&& column) const noexcept { using ColumnType = std::remove_reference_t; using TableType = typename ColumnType::Table; @@ -258,7 +184,7 @@ std::string Database::_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; } }; diff --git a/src/vist/query-builder/table.hpp b/src/vist/query-builder/table.hpp index dc0b929..a8ce677 100644 --- a/src/vist/query-builder/table.hpp +++ b/src/vist/query-builder/table.hpp @@ -52,19 +52,13 @@ public: public: // CRTP(Curiously Recurring Template Pattern) for CRUD template - std::vector getTableNames(Cs&& ...coulmns) const noexcept; + std::vector getTableNames(Cs&& ...) const noexcept; template - std::string getTableName(That&& type) const noexcept; + std::string getTableName(That&&) const noexcept; template std::vector getColumnNames(Cs&& ...columns) const noexcept; template - std::string getColumnName(const Column& column) const noexcept; - template - std::vector _getTableNames(Cs&& ...) const noexcept; - template - std::vector _getColumnNames(Cs&& ...columns) const noexcept; - template - std::string _getColumnName(const Column& column) const noexcept; + std::string getColumnName(Column&& column) const noexcept; std::vector cache; @@ -78,13 +72,6 @@ std::string Table::getName() const noexcept return this->name; } -template -template -std::vector Table::getTableNames(Cs&& ...) const noexcept -{ - return {this->name}; -} - template template std::vector Table::getColumnNames(Cs&& ...columns) const noexcept @@ -105,27 +92,6 @@ std::vector Table::getColumnNames(Cs&& ...columns) cons return names; } - -template -template -std::vector Table::_getColumnNames(Cs&& ...columns) const noexcept -{ - std::vector 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 template std::string Table::getTableName(That&&) const noexcept @@ -146,35 +112,16 @@ std::vector Table::getColumnNames(void) const noexcept return names; } -template -template -std::string Table::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 template -std::vector Table::_getTableNames(Cs&& ...) const noexcept +std::vector Table::getTableNames(Cs&& ...) const noexcept { return {this->name}; } template template -std::string Table::_getColumnName(const Column& column) const noexcept +std::string Table::getColumnName(Column&& column) const noexcept { std::string name; auto predicate = [&name, &column](const auto& iter) { diff --git a/src/vist/query-builder/tests/database.cpp b/src/vist/query-builder/tests/database.cpp index 745e5cb..15b500f 100644 --- a/src/vist/query-builder/tests/database.cpp +++ b/src/vist/query-builder/tests/database.cpp @@ -20,40 +20,10 @@ #include #include -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 index 0000000..25dd111 --- /dev/null +++ b/src/vist/query-builder/tests/schema.hpp @@ -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 + +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 diff --git a/src/vist/query-builder/tests/table.cpp b/src/vist/query-builder/tests/table.cpp index 6e7e86d..3d58f32 100644 --- a/src/vist/query-builder/tests/table.cpp +++ b/src/vist/query-builder/tests/table.cpp @@ -19,37 +19,10 @@ #include #include -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) -- 2.34.1