template<typename T> T fetch_result_long_internal_(MYSQL_STMT* stmt, const std::string& sql)
{
T result;
my_bool is_null;
MYSQL_BIND result_bind[1] = { make_bind(result, &is_null) };
if(mysql_stmt_bind_result(stmt, result_bind) != 0)
throw sql_error(mysql_stmt_error(stmt), sql);
BOOST_SCOPE_EXIT(&stmt) {
mysql_stmt_free_result(stmt);
} ;
int res = mysql_stmt_fetch(stmt);
if(res == MYSQL_NO_DATA)
throw sql_error("no data returned", sql);
if(is_null)
throw sql_error("null value returned", sql);
if(res != 0)
throw sql_error(mysql_stmt_error(stmt), sql);
return result;
}
template<> int fetch_result<int>(MYSQL_STMT* stmt, const std::string& sql)
{
return fetch_result_long_internal_<int>(stmt, sql);
}
template<> unsigned int fetch_result<unsigned int>(MYSQL_STMT* stmt, const std::string& sql)
{
return fetch_result_long_internal_<unsigned int>(stmt, sql);
}
Comments