From 8c483aa805eb3da25be685ee875555662cab1038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?louiz=E2=80=99?= Date: Sat, 17 Mar 2018 17:33:29 +0100 Subject: Re-apply "Use if constexpr to make things a lot more readable" This reverts commit d0e3c71b91f1a1c1780158789fd42b8ac7209495. --- src/database/select_query.hpp | 77 ++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 45 deletions(-) (limited to 'src/database/select_query.hpp') diff --git a/src/database/select_query.hpp b/src/database/select_query.hpp index cd9943c..f7496a4 100644 --- a/src/database/select_query.hpp +++ b/src/database/select_query.hpp @@ -15,48 +15,37 @@ using namespace std::string_literals; template -typename std::enable_if::value, std::int64_t>::type -extract_row_value(Statement& statement, const int i) +auto extract_row_value(Statement& statement, const int i) { - return statement.get_column_int64(i); -} - -template -typename std::enable_if::value, T>::type -extract_row_value(Statement& statement, const int i) -{ - return statement.get_column_text(i); -} - -template -typename std::enable_if, T>::value, T>::type -extract_row_value(Statement& statement, const int i) -{ - const auto integer = statement.get_column_int(i); - if (integer > 0) - return true; - else if (integer < 0) - return false; - return std::nullopt; + if constexpr(std::is_integral::value) + return statement.get_column_int64(i); + else if constexpr (std::is_same::value) + return statement.get_column_text(i); + else if (std::is_same, T>::value) + { + const auto integer = statement.get_column_int(i); + if (integer > 0) + return std::optional{true}; + else if (integer < 0) + return std::optional{false}; + return std::optional{}; + } } template -typename std::enable_if::type -extract_row_values(Row& row, Statement& statement) +void extract_row_values(Row& row, Statement& statement) { - using ColumnType = typename std::remove_reference(row.columns))>::type; + if constexpr(N < sizeof...(T)) + { + using ColumnType = typename std::remove_reference(row.columns))>::type; - auto&& column = std::get(row.columns); - column.value = static_cast(extract_row_value(statement, N)); + auto&& column = std::get(row.columns); + column.value = static_cast(extract_row_value(statement, N)); - extract_row_values(row, statement); + extract_row_values(row, statement); + } } -template -typename std::enable_if::type -extract_row_values(Row&, Statement&) -{} - template struct SelectQuery: public Query { @@ -69,23 +58,21 @@ struct SelectQuery: public Query } template - typename std::enable_if::type - insert_col_name() + void insert_col_name() { - using ColumnsType = std::tuple; - using ColumnType = typename std::remove_reference(std::declval()))>::type; + if constexpr(N < sizeof...(T)) + { + using ColumnsType = std::tuple; + using ColumnType = typename std::remove_reference(std::declval()))>::type; - this->body += " " + std::string{ColumnType::name}; + this->body += " " + std::string{ColumnType::name}; - if (N < (sizeof...(T) - 1)) - this->body += ", "; + if (N < (sizeof...(T) - 1)) + this->body += ", "; - this->insert_col_name(); + this->insert_col_name(); + } } - template - typename std::enable_if::type - insert_col_name() - {} SelectQuery& where() { -- cgit v1.2.3