Re-animated prepared statements

This commit is contained in:
rbock
2014-06-14 17:44:22 +02:00
parent e775e6165e
commit 3d26f9a686
11 changed files with 60 additions and 82 deletions
+7 -9
View File
@@ -114,16 +114,14 @@ namespace sqlpp
return db.insert(*this);
}
/*
template<typename Db>
auto _prepare(Db& db) const
-> prepared_insert_t<Db, insert_t>
{
_statement_t::_check_consistency();
template<typename Db>
auto _prepare(Db& db) const
-> prepared_insert_t<Db, _statement_t>
{
_statement_t::_check_consistency();
return {{}, db.prepare_insert(*this)};
}
*/
return {{}, db.prepare_insert(*this)};
}
};
};
+1 -33
View File
@@ -64,40 +64,8 @@ namespace sqlpp
}
};
namespace detail
{
template<typename Exp, typename Enable = void>
struct get_parameter_tuple
{
using type = std::tuple<>;
};
template<typename Exp>
struct get_parameter_tuple<Exp, typename std::enable_if<is_parameter_t<Exp>::value, void>::type>
{
using type = std::tuple<Exp>;
};
template<typename... Param>
struct get_parameter_tuple<std::tuple<Param...>, void>
{
// cat together parameter tuples
using type = decltype(std::tuple_cat(std::declval<typename get_parameter_tuple<Param>::type>()...));
};
template<typename Exp>
struct get_parameter_tuple<Exp, typename std::enable_if<not std::is_same<typename Exp::_parameter_tuple_t, void>::value, void>::type>
{
using type = typename get_parameter_tuple<typename Exp::_parameter_tuple_t>::type;
};
}
template<typename Exp>
struct make_parameter_list_t
{
using type = parameter_list_t<typename detail::get_parameter_tuple<Exp>::type>;
};
using make_parameter_list_t = parameter_list_t<parameters_of<Exp>>;
}
+1 -1
View File
@@ -36,7 +36,7 @@ namespace sqlpp
struct prepared_select_t
{
using _result_row_t = typename Select::template _result_row_t<Database>;
using _parameter_list_t = typename Select::_parameter_list_t;
using _parameter_list_t = parameters_of<Select>;
using _dynamic_names_t = typename Select::_dynamic_names_t;
using _prepared_statement_t = typename Database::_prepared_statement_t;
+3 -5
View File
@@ -65,16 +65,14 @@ namespace sqlpp
return db.remove(*this);
}
/*
template<typename Db>
auto _prepare(Db& db) const
-> prepared_remove_t<Db, remove_t>
-> prepared_remove_t<Db, _statement_t>
{
_check_consistency();
_check_consistency();
return {{}, db.prepare_remove(*this)};
return {{}, db.prepare_remove(*this)};
}
*/
};
};
+1 -3
View File
@@ -294,18 +294,16 @@ namespace sqlpp
return {db.select(_get_statement()), get_dynamic_names()};
}
#if 0
// Prepare
template<typename Db>
auto _prepare(Db& db) const
-> prepared_select_t<Db, select_t>
-> prepared_select_t<Db, _statement_t>
{
_statement_t::_check_consistency();
return {{}, get_dynamic_names(), db.prepare_select(*this)};
}
#endif
};
};
+3 -5
View File
@@ -133,16 +133,14 @@ namespace sqlpp
return db.insert(*this);
}
/*
template<typename Db>
auto _prepare(Db& db) const
-> prepared_insert_t<Db, insert_t>
-> prepared_insert_t<Db, _statement_t>
{
_check_consistency();
_check_consistency();
return {{}, db.prepare_insert(*this)};
return {{}, db.prepare_insert(*this)};
}
*/
};
};
+1 -1
View File
@@ -112,10 +112,10 @@ namespace sqlpp
struct _recursive_traits
{
using _parameters = std::tuple<>; // FIXME
using _required_tables = _required_tables;
using _provided_tables = detail::type_set<>;
using _extra_tables = detail::type_set<>;
using _parameters = detail::make_parameter_list_t<parameters_of<Policies>...>;
};
};
}
+20
View File
@@ -178,6 +178,22 @@ namespace sqlpp
{
using type = typename T::_recursive_traits::_extra_tables;
};
template<typename T>
struct parameters_of_impl
{
using type = typename T::_recursive_traits::_parameters;
};
template<typename... T>
struct make_parameter_list_impl
{
using type = decltype(std::tuple_cat(std::declval<T>()...));
};
#warning this will lead to confusion with ::sqlpp::make_parameter_list_t in parameter_list.h
template<typename... T>
using make_parameter_list_t = typename make_parameter_list_impl<T...>::type;
}
template<typename T>
using value_type_of = typename detail::value_type_of_impl<T>::type;
@@ -191,6 +207,9 @@ namespace sqlpp
template<typename T>
using extra_tables_of = typename detail::extra_table_of_impl<T>::type;
template<typename T>
using parameters_of = typename detail::parameters_of_impl<T>::type;
template<typename ValueType, typename... Tags>
struct make_traits
{
@@ -203,6 +222,7 @@ namespace sqlpp
using _required_tables = detail::make_joined_set_t<required_tables_of<Arguments>...>;
using _provided_tables = detail::make_joined_set_t<provided_tables_of<Arguments>...>;
using _extra_tables = detail::make_joined_set_t<extra_tables_of<Arguments>...>;
using _parameters = detail::make_parameter_list_t<parameters_of<Arguments>...>;
};
}
+3 -5
View File
@@ -65,16 +65,14 @@ namespace sqlpp
return db.update(*this);
}
/*
template<typename Db>
auto _prepare(Db& db) const
-> prepared_update_t<Db, update_t>
-> prepared_update_t<Db, _statement_t>
{
_statement_t::_check_consistency();
_statement_t::_check_consistency();
return {{}, db.prepare_update(*this)};
return {{}, db.prepare_update(*this)};
}
*/
};
};