mirror of
https://github.com/rbock/sqlpp11.git
synced 2026-05-09 12:49:55 -05:00
Make result methods templates of their statement, not their statement's policies
This commit is contained in:
@@ -46,10 +46,10 @@ namespace sqlpp
|
||||
using _traits = make_traits<no_value_t, tag::is_return_value>;
|
||||
struct _name_t {};
|
||||
|
||||
template<typename Policies>
|
||||
template<typename Statement>
|
||||
struct _result_methods_t
|
||||
{
|
||||
using _statement_t = derived_statement_t<Policies>;
|
||||
using _statement_t = Statement;
|
||||
|
||||
const _statement_t& _get_statement() const
|
||||
{
|
||||
|
||||
@@ -40,7 +40,7 @@ namespace sqlpp
|
||||
|
||||
struct _name_t {};
|
||||
|
||||
template<typename Policies>
|
||||
template<typename Statement>
|
||||
struct _result_methods_t
|
||||
{};
|
||||
};
|
||||
|
||||
@@ -46,10 +46,10 @@ namespace sqlpp
|
||||
using _traits = make_traits<no_value_t, tag::is_return_value>;
|
||||
struct _name_t {};
|
||||
|
||||
template<typename Policies>
|
||||
template<typename Statement>
|
||||
struct _result_methods_t
|
||||
{
|
||||
using _statement_t = derived_statement_t<Policies>;
|
||||
using _statement_t = Statement;
|
||||
|
||||
const _statement_t& _get_statement() const
|
||||
{
|
||||
|
||||
@@ -235,10 +235,10 @@ namespace sqlpp
|
||||
};
|
||||
|
||||
// Result methods
|
||||
template<typename Policies>
|
||||
template<typename Statement>
|
||||
struct _result_methods_t
|
||||
{
|
||||
using _statement_t = derived_statement_t<Policies>;
|
||||
using _statement_t = Statement;
|
||||
|
||||
const _statement_t& _get_statement() const
|
||||
{
|
||||
@@ -277,7 +277,7 @@ namespace sqlpp
|
||||
template<typename AliasProvider>
|
||||
_alias_t<AliasProvider> as(const AliasProvider& aliasProvider) const
|
||||
{
|
||||
static_assert(Policies::_can_be_used_as_table::value, "statement cannot be used as table, e.g. due to missing tables");
|
||||
static_assert(_statement_t::_can_be_used_as_table(), "statement cannot be used as table, e.g. due to missing tables");
|
||||
static_assert(detail::none_t<is_multi_column_t<Columns>::value...>::value, "cannot use multi-columns in sub selects");
|
||||
return _table_t<AliasProvider>(_get_statement()).as(aliasProvider);
|
||||
}
|
||||
|
||||
@@ -79,18 +79,19 @@ namespace sqlpp
|
||||
|
||||
using _result_type_provider = detail::get_last_if<is_return_value_t, noop, Policies...>;
|
||||
|
||||
struct _result_methods_t: public _result_type_provider::template _result_methods_t<statement_policies_t>
|
||||
struct _result_methods_t: public _result_type_provider::template _result_methods_t<_statement_t>
|
||||
{};
|
||||
|
||||
|
||||
// A select can be used as a pseudo table if
|
||||
// - at least one column is selected
|
||||
// - the select is complete (leaks no tables)
|
||||
using _can_be_used_as_table = typename std::conditional<
|
||||
is_select_column_list_t<_result_type_provider>::value and _required_tables::size::value == 0,
|
||||
std::true_type,
|
||||
std::false_type
|
||||
>::type;
|
||||
static constexpr bool _can_be_used_as_table()
|
||||
{
|
||||
return is_select_column_list_t<_result_type_provider>::value and _required_tables::size::value == 0
|
||||
? true
|
||||
: false;
|
||||
}
|
||||
|
||||
using _value_type = typename std::conditional<
|
||||
detail::none_t<is_missing_t<Policies>::value...>::value,
|
||||
@@ -173,6 +174,11 @@ namespace sqlpp
|
||||
return _get_static_no_of_parameters();
|
||||
}
|
||||
|
||||
static constexpr bool _can_be_used_as_table()
|
||||
{
|
||||
return _policies_t::_can_be_used_as_table();
|
||||
}
|
||||
|
||||
static void _check_consistency()
|
||||
{
|
||||
static_assert(not required_tables_of<_policies_t>::size::value, "one sub expression requires tables which are otherwise not known in the statement");
|
||||
|
||||
@@ -46,10 +46,10 @@ namespace sqlpp
|
||||
using _traits = make_traits<no_value_t, tag::is_return_value>;
|
||||
struct _name_t {};
|
||||
|
||||
template<typename Policies>
|
||||
template<typename Statement>
|
||||
struct _result_methods_t
|
||||
{
|
||||
using _statement_t = derived_statement_t<Policies>;
|
||||
using _statement_t = Statement;
|
||||
|
||||
const _statement_t& _get_statement() const
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user