Skip to content

Commit 24a0734

Browse files
committed
Drop copy_tuple_arg.h
Transfer the required bits to select_column_list.h
1 parent 0181639 commit 24a0734

2 files changed

Lines changed: 31 additions & 94 deletions

File tree

include/sqlpp11/detail/copy_tuple_args.h

Lines changed: 0 additions & 78 deletions
This file was deleted.

include/sqlpp11/select_column_list.h

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#define SQLPP11_SELECT_COLUMN_LIST_H
2929

3030
#include <sqlpp11/data_types/no_value.h>
31-
#include <sqlpp11/detail/copy_tuple_args.h>
31+
#include <sqlpp11/auto_alias.h>
3232
#include <sqlpp11/detail/type_set.h>
3333
#include <sqlpp11/dynamic_select_column_list.h>
3434
#include <sqlpp11/expression_fwd.h>
@@ -291,9 +291,26 @@ namespace sqlpp
291291

292292
namespace detail
293293
{
294+
template <typename T>
295+
std::tuple<auto_alias_t<T>> as_column_tuple(T t)
296+
{
297+
return std::tuple<auto_alias_t<T>>(auto_alias_t<T>{t});
298+
}
299+
300+
template <typename... Args>
301+
std::tuple<auto_alias_t<Args>...> as_column_tuple(std::tuple<Args...> t)
302+
{
303+
return t;
304+
}
305+
306+
template <typename... Columns>
307+
auto column_tuple_merge(Columns... columns) -> decltype(std::tuple_cat(as_column_tuple(columns)...))
308+
{
309+
return std::tuple_cat(as_column_tuple(columns)...);
310+
}
311+
294312
template <typename Database, typename... Columns>
295-
using make_select_column_list_t =
296-
copy_tuple_args_t<select_column_list_t, Database, decltype(column_tuple_merge(std::declval<Columns>()...))>;
313+
select_column_list_t<Database, Columns...> make_column_list(std::tuple<Columns...> columns);
297314
} // namespace detail
298315

299316
SQLPP_PORTABLE_STATIC_ASSERT(assert_selected_colums_are_selectable_t, "selected columns must be selectable");
@@ -362,43 +379,41 @@ namespace sqlpp
362379
using _database_t = typename Policies::_database_t;
363380

364381
template <typename... T>
365-
static constexpr auto _check_tuple(std::tuple<T...> /*unused*/) -> check_selected_columns_t<T...>
382+
static constexpr auto _check_args(std::tuple<T...> args) -> check_selected_columns_t<T...>
366383
{
367384
return {};
368385
}
369386

370-
template <typename... T>
371-
static constexpr auto _check_args(T... args) -> decltype(_check_tuple(detail::column_tuple_merge(args...)))
372-
{
373-
return _check_tuple(detail::column_tuple_merge(args...));
374-
}
375-
376387
template <typename Check, typename T>
377388
using _new_statement_t = new_statement_t<Check, Policies, no_select_column_list_t, T>;
378389

379390
using _consistency_check = consistent_t;
380391

381392
template <typename... Args>
382393
auto columns(Args... args) const
383-
-> _new_statement_t<decltype(_check_args(args...)), detail::make_select_column_list_t<void, Args...>>
394+
-> _new_statement_t<decltype(_check_args(detail::column_tuple_merge(args...))),
395+
decltype(detail::make_column_list<void>(detail::column_tuple_merge(args...)))>
384396
{
385397
static_assert(sizeof...(Args), "at least one selectable expression (e.g. a column) required in columns()");
386-
static_assert(decltype(_check_args(args...))::value,
398+
using check = decltype(_check_args(detail::column_tuple_merge(args...)));
399+
static_assert(check::value,
387400
"at least one argument is not a selectable expression in columns()");
388401

389-
return _columns_impl<void>(decltype(_check_args(args...)){}, detail::column_tuple_merge(args...));
402+
return _columns_impl<void>(check{}, detail::column_tuple_merge(args...));
390403
}
391404

392405
template <typename... Args>
393406
auto dynamic_columns(Args... args) const
394-
-> _new_statement_t<decltype(_check_args(args...)), detail::make_select_column_list_t<_database_t, Args...>>
407+
-> _new_statement_t<decltype(_check_args(detail::column_tuple_merge(args...))),
408+
decltype(detail::make_column_list<_database_t>(detail::column_tuple_merge(args...)))>
395409
{
396410
static_assert(not std::is_same<_database_t, void>::value,
397411
"dynamic_columns must not be called in a static statement");
398-
static_assert(decltype(_check_args(args...))::value,
412+
using check = decltype(_check_args(detail::column_tuple_merge(args...)));
413+
static_assert(check::value,
399414
"at least one argument is not a selectable expression in columns()");
400415

401-
return _columns_impl<_database_t>(decltype(_check_args(args...)){}, detail::column_tuple_merge(args...));
416+
return _columns_impl<_database_t>(check{}, detail::column_tuple_merge(args...));
402417
}
403418

404419
private:

0 commit comments

Comments
 (0)