0
0
mirror of https://github.com/rbock/sqlpp11.git synced 2024-11-15 20:31:16 +08:00

SQLite3: Enable execute() to run prepared_statements

Limit execute to run only non-select statements.
(Note: Does not apply to raw sql string select queries).
This commit is contained in:
Marcell Egyed 2024-09-11 09:03:00 +02:00 committed by Roland Bock
parent fc23782369
commit b99e1b0e7d

View File

@ -372,14 +372,28 @@ namespace sqlpp
return static_cast<size_t>(sqlite3_changes(native_handle())); return static_cast<size_t>(sqlite3_changes(native_handle()));
} }
template < template <
typename Execute, typename Execute,
typename Enable = typename std::enable_if<not std::is_convertible<Execute, std::string>::value, void>::type> typename std::enable_if<not std::is_convertible<Execute, std::string>::value
size_t execute(const Execute& x) and not sqlpp::is_prepared_statement_t<Execute>::value, int>::type = 0>
{ size_t execute(const Execute& x)
_context_t context{*this}; {
serialize(x, context); static_assert(not sqlpp::is_select_t<Execute>::value, "argument must not be a select statement - use operator() instead");
return execute(context.str());
_context_t context{*this};
serialize(x, context);
return execute(context.str());
}
template <
typename Execute,
typename std::enable_if<sqlpp::is_prepared_statement_t<Execute>::value, int>::type = 0>
size_t execute(const Execute& x)
{
static_assert(not sqlpp::is_select_t<Execute>::value, "argument must not be a select statement - use operator() instead");
operator()(x);
return static_cast<size_t>(sqlite3_changes(native_handle()));
} }
template <typename Execute> template <typename Execute>