mirror of
https://github.com/rbock/sqlpp11.git
synced 2026-01-04 20:20:59 -06:00
Added static_assert tests for dynamic from.add()
This commit is contained in:
@@ -111,9 +111,56 @@ namespace
|
||||
from_dynamic_check<sqlpp::assert_from_not_pre_join_t>(t.join(f));
|
||||
}
|
||||
|
||||
template <typename Assert, typename FromImpl, typename Expression>
|
||||
void dynamic_from_add_check(FromImpl from, const Expression& expression)
|
||||
{
|
||||
using CheckResult = sqlpp::check_from_add_t<FromImpl, Expression>;
|
||||
using ExpectedCheckResult = std::is_same<CheckResult, Assert>;
|
||||
print_type_on_error<CheckResult>(ExpectedCheckResult{});
|
||||
static_assert(ExpectedCheckResult::value, "Unexpected check result");
|
||||
|
||||
using ReturnType = decltype(from.add(expression));
|
||||
using ExpectedReturnType =
|
||||
sqlpp::logic::all_t<Assert::value xor std::is_same<ReturnType, sqlpp::bad_statement>::value>;
|
||||
print_type_on_error<ReturnType>(ExpectedReturnType{});
|
||||
static_assert(ExpectedReturnType::value, "Unexpected return type");
|
||||
}
|
||||
|
||||
void dynamic_from_add()
|
||||
{
|
||||
#warning : need to add tests for dynamic_from(xxx).add(yyy)
|
||||
static auto db = MockDb{};
|
||||
auto fromT = dynamic_select(db, t.alpha).dynamic_from(t).from;
|
||||
auto staticFrom = dynamic_select(db, t.alpha).from(t).from;
|
||||
const auto fa = f.as(sqlpp::alias::a);
|
||||
|
||||
// OK
|
||||
dynamic_from_add_check<sqlpp::consistent_t>(fromT, dynamic_join(f).on(t.alpha > f.omega));
|
||||
dynamic_from_add_check<sqlpp::consistent_t>(fromT, dynamic_inner_join(f).on(t.alpha > f.omega));
|
||||
dynamic_from_add_check<sqlpp::consistent_t>(fromT, dynamic_left_outer_join(f).on(t.alpha > f.omega));
|
||||
dynamic_from_add_check<sqlpp::consistent_t>(fromT, dynamic_right_outer_join(f).on(t.alpha > f.omega));
|
||||
dynamic_from_add_check<sqlpp::consistent_t>(fromT, dynamic_outer_join(f).on(t.alpha > f.omega));
|
||||
dynamic_from_add_check<sqlpp::consistent_t>(fromT, dynamic_cross_join(f));
|
||||
|
||||
// Try a bunch of non dynamic joins
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_dynamic>(staticFrom, 7);
|
||||
|
||||
// Try a bunch of non dynamic joins
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_dynamic_join>(fromT, 7);
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_dynamic_join>(fromT, t.gamma);
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_dynamic_join>(fromT, join(f, f.as(sqlpp::alias::a)));
|
||||
|
||||
// Try incomplete dynamic join
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_not_dynamic_pre_join>(fromT, dynamic_join(f));
|
||||
|
||||
// Try joining the same table name
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_unique_names>(fromT, dynamic_cross_join(t));
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_unique_names>(fromT, dynamic_cross_join(f.as(t)));
|
||||
|
||||
// Try joining with a condition that requires other tables
|
||||
dynamic_from_add_check<sqlpp::assert_from_add_no_required_tables>(fromT, dynamic_join(f).on(t.alpha > fa.omega));
|
||||
|
||||
// If you really think you know what you are doing, use without_table_check
|
||||
dynamic_from_add_check<sqlpp::consistent_t>(fromT, dynamic_join(f).on(t.alpha > without_table_check(fa.omega)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user