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

Added more specific static asserts for the consistency checks

This commit is contained in:
rbock 2014-11-25 21:46:09 +01:00
parent 7ba973d9af
commit 935baebedb
8 changed files with 86 additions and 7 deletions

View File

@ -120,6 +120,7 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
// FIXME: We might want to check if we have too many tables define in the FROM
using _consistency_check = consistent_t; using _consistency_check = consistent_t;
}; };
}; };

View File

@ -55,6 +55,17 @@ namespace sqlpp
interpretable_list_t<Database> _dynamic_expressions; interpretable_list_t<Database> _dynamic_expressions;
}; };
struct assert_no_unknown_tables_in_group_by_t
{
using type = std::false_type;
template<typename T = void>
static void _()
{
static_assert(wrong_t<T>::value, "at least one group-by expression requires a table which is otherwise not known in the statement");
}
};
// GROUP BY // GROUP BY
template<typename Database, typename... Expressions> template<typename Database, typename... Expressions>
struct group_by_t struct group_by_t
@ -128,7 +139,9 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
using _consistency_check = consistent_t; using _consistency_check = typename std::conditional<Policies::template _no_unknown_tables<group_by_t>::value,
consistent_t,
assert_no_unknown_tables_in_group_by_t>::type;
}; };
}; };

View File

@ -54,6 +54,17 @@ namespace sqlpp
interpretable_list_t<Database> _dynamic_expressions; interpretable_list_t<Database> _dynamic_expressions;
}; };
struct assert_no_unknown_tables_in_having_t
{
using type = std::false_type;
template<typename T = void>
static void _()
{
static_assert(wrong_t<T>::value, "at least one having-expression requires a table which is otherwise not known in the statement");
}
};
// HAVING // HAVING
template<typename Database, typename... Expressions> template<typename Database, typename... Expressions>
struct having_t struct having_t
@ -126,7 +137,9 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
using _consistency_check = consistent_t; using _consistency_check = typename std::conditional<Policies::template _no_unknown_tables<having_t>::value,
consistent_t,
assert_no_unknown_tables_in_having_t>::type;
}; };
}; };

View File

@ -236,6 +236,17 @@ namespace sqlpp
std::vector<_value_tuple_t> _insert_values; std::vector<_value_tuple_t> _insert_values;
}; };
struct assert_no_unknown_tables_in_column_list_t
{
using type = std::false_type;
template<typename T = void>
static void _()
{
static_assert(wrong_t<T>::value, "at least one column requires a table which is otherwise not known in the statement");
}
};
template<typename... Columns> template<typename... Columns>
struct column_list_t struct column_list_t
{ {
@ -301,7 +312,9 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
using _consistency_check = consistent_t; using _consistency_check = typename std::conditional<Policies::template _no_unknown_tables<column_list_t>::value,
consistent_t,
assert_no_unknown_tables_in_column_list_t>::type;
}; };
}; };

View File

@ -55,6 +55,17 @@ namespace sqlpp
interpretable_list_t<Database> _dynamic_expressions; interpretable_list_t<Database> _dynamic_expressions;
}; };
struct assert_no_unknown_tables_in_order_by_t
{
using type = std::false_type;
template<typename T = void>
static void _()
{
static_assert(wrong_t<T>::value, "at least one order-by expression requires a table which is otherwise not known in the statement");
}
};
// ORDER BY // ORDER BY
template<typename Database, typename... Expressions> template<typename Database, typename... Expressions>
struct order_by_t struct order_by_t
@ -128,7 +139,9 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
using _consistency_check = consistent_t; using _consistency_check = typename std::conditional<Policies::template _no_unknown_tables<order_by_t>::value,
consistent_t,
assert_no_unknown_tables_in_order_by_t>::type;
}; };
}; };

View File

@ -52,6 +52,17 @@ namespace sqlpp
interpretable_list_t<Database> _dynamic_assignments; interpretable_list_t<Database> _dynamic_assignments;
}; };
struct assert_no_unknown_tables_in_update_assignments_t
{
using type = std::false_type;
template<typename T = void>
static void _()
{
static_assert(wrong_t<T>::value, "at least one update assignment requires a table which is otherwise not known in the statement");
}
};
// UPDATE ASSIGNMENTS // UPDATE ASSIGNMENTS
template<typename Database, typename... Assignments> template<typename Database, typename... Assignments>
struct update_list_t struct update_list_t
@ -124,7 +135,9 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
using _consistency_check = consistent_t; using _consistency_check = typename std::conditional<Policies::template _no_unknown_tables<update_list_t>::value,
consistent_t,
assert_no_unknown_tables_in_update_assignments_t>::type;
}; };
}; };

View File

@ -121,6 +121,7 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
// FIXME: Maybe check for unused tables, similar to from
using _consistency_check = consistent_t; using _consistency_check = consistent_t;
}; };
}; };

View File

@ -55,6 +55,17 @@ namespace sqlpp
interpretable_list_t<Database> _dynamic_expressions; interpretable_list_t<Database> _dynamic_expressions;
}; };
struct assert_no_unknown_tables_in_where_t
{
using type = std::false_type;
template<typename T = void>
static void _()
{
static_assert(wrong_t<T>::value, "at least one expression in where() requires a table which is otherwise not known in the statement");
}
};
// WHERE(EXPR) // WHERE(EXPR)
template<typename Database, typename... Expressions> template<typename Database, typename... Expressions>
struct where_t struct where_t
@ -128,8 +139,9 @@ namespace sqlpp
template<typename Policies> template<typename Policies>
struct _methods_t struct _methods_t
{ {
#warning: here and elsewhere: add check for missing tables (see select columns, for instance) using _consistency_check = typename std::conditional<Policies::template _no_unknown_tables<where_t>::value,
using _consistency_check = consistent_t; consistent_t,
assert_no_unknown_tables_in_where_t>::type;
}; };
}; };