0
0
mirror of https://github.com/rbock/sqlpp11.git synced 2024-11-16 04:47:18 +08:00

Added tags missing and return_value

missing indicates that a statement part has yet to be added (e.g.
columns in a select).

return_value indicates that a statement part can be used as a return
value.
This commit is contained in:
rbock 2014-05-19 06:42:45 +02:00
parent f314c6d070
commit e39444b0f7
4 changed files with 10 additions and 5 deletions

View File

@ -157,6 +157,9 @@ namespace sqlpp
using type = typename make_type_set_if<Predicate, Rest...>::type::template insert_if<Predicate, T>::type; using type = typename make_type_set_if<Predicate, Rest...>::type::template insert_if<Predicate, T>::type;
}; };
template<template<typename> class Predicate, typename... T>
using make_type_set_if_t = typename make_type_set_if<Predicate, T...>::type;
template<template<typename> class Predicate, typename... T> template<template<typename> class Predicate, typename... T>
struct make_type_set_if_not struct make_type_set_if_not
{ {

View File

@ -145,9 +145,9 @@ namespace sqlpp
>::type; >::type;
using _value_type = typename std::conditional< using _value_type = typename std::conditional<
is_select_column_list_t<_column_list_t>::value and is_subset_of<required_tables_of<_column_list_t>, provided_tables_of<_from_t>>::value, detail::make_type_set_if_t<is_missing_t, FlagList, ColumnList, From, ExtraTables, Where, GroupBy, Having, OrderBy, Limit, Offset>::size::value == 0,
value_type_of<_column_list_t>, value_type_of<_column_list_t>,
no_value_t // If something is selected that requires a table, then we require a from for this to be a value no_value_t // if a required statement part is missing (columns in a select), then the statement cannot be used as a value
>::type; >::type;
using _traits = make_traits<_value_type>; using _traits = make_traits<_value_type>;

View File

@ -106,6 +106,8 @@ namespace sqlpp
SQLPP_IS_COLUMN_TRAIT_GENERATOR(trivial_value_is_null); SQLPP_IS_COLUMN_TRAIT_GENERATOR(trivial_value_is_null);
SQLPP_IS_VALUE_TRAIT_GENERATOR(noop); SQLPP_IS_VALUE_TRAIT_GENERATOR(noop);
SQLPP_IS_VALUE_TRAIT_GENERATOR(missing);
SQLPP_IS_VALUE_TRAIT_GENERATOR(return_value);
SQLPP_IS_VALUE_TRAIT_GENERATOR(table); SQLPP_IS_VALUE_TRAIT_GENERATOR(table);
SQLPP_IS_VALUE_TRAIT_GENERATOR(join); SQLPP_IS_VALUE_TRAIT_GENERATOR(join);
SQLPP_IS_VALUE_TRAIT_GENERATOR(pseudo_table); SQLPP_IS_VALUE_TRAIT_GENERATOR(pseudo_table);

View File

@ -47,14 +47,14 @@ namespace sqlpp
template<typename... Rest> template<typename... Rest>
struct get_first_argument_if_unique struct get_first_argument_if_unique
{ {
using _traits = make_traits<no_value_t, tag::select_column_list>; using _traits = make_traits<no_value_t, tag::select_column_list, tag::return_value>;
struct _name_t {}; struct _name_t {};
}; };
template<typename T> template<typename T>
struct get_first_argument_if_unique<T> struct get_first_argument_if_unique<T>
{ {
using _traits = make_traits<value_type_of<T>, tag::select_column_list, tag::expression, tag::named_expression>; using _traits = make_traits<value_type_of<T>, tag::select_column_list, tag::return_value, tag::expression, tag::named_expression>;
using _name_t = typename T::_name_t; using _name_t = typename T::_name_t;
}; };
} }
@ -239,7 +239,7 @@ namespace sqlpp
{ {
struct no_select_column_list_t struct no_select_column_list_t
{ {
using _traits = make_traits<no_value_t, ::sqlpp::tag::noop>; using _traits = make_traits<no_value_t, ::sqlpp::tag::noop, ::sqlpp::tag::missing>;
using _recursive_traits = make_recursive_traits<>; using _recursive_traits = make_recursive_traits<>;
template<typename Db> template<typename Db>