}
if ((d_stmt = mysql_stmt_init(d_db))==NULL)
- throw SSqlException("Could not initialize mysql statement, out of memory");
+ throw SSqlException("Could not initialize mysql statement, out of memory: " + d_query);
if ((err = mysql_stmt_prepare(d_stmt, query.c_str(), query.size()))) {
string error(mysql_stmt_error(d_stmt));
- throw SSqlException("Could not prepare statement: " + error);
+ throw SSqlException("Could not prepare statement: " + d_query + string(": ") + error);
}
if (static_cast<int>(mysql_stmt_param_count(d_stmt)) != nparams)
- throw SSqlException("Provided parameter count does not match statement");
+ throw SSqlException("Provided parameter count does not match statement: " + d_query);
d_parnum = nparams;
if (d_parnum>0) {
SSqlStatement* bind(const string& name, bool value) {
if (d_paridx >= d_parnum)
- throw SSqlException("Attempt to bind more parameters than query has");
+ throw SSqlException("Attempt to bind more parameters than query has: " + d_query);
d_req_bind[d_paridx].buffer_type = MYSQL_TYPE_TINY;
d_req_bind[d_paridx].buffer = new char[1];
*((char*)d_req_bind[d_paridx].buffer) = (value?1:0);
}
SSqlStatement* bind(const string& name, long value) {
if (d_paridx >= d_parnum)
- throw SSqlException("Attempt to bind more parameters than query has");
+ throw SSqlException("Attempt to bind more parameters than query has: " + d_query);
d_req_bind[d_paridx].buffer_type = MYSQL_TYPE_LONG;
d_req_bind[d_paridx].buffer = new long[1];
*((long*)d_req_bind[d_paridx].buffer) = value;
}
SSqlStatement* bind(const string& name, unsigned long value) {
if (d_paridx >= d_parnum)
- throw SSqlException("Attempt to bind more parameters than query has");
+ throw SSqlException("Attempt to bind more parameters than query has: " + d_query);
d_req_bind[d_paridx].buffer_type = MYSQL_TYPE_LONG;
d_req_bind[d_paridx].buffer = new unsigned long[1];
d_req_bind[d_paridx].is_unsigned = 1;
}
SSqlStatement* bind(const string& name, long long value) {
if (d_paridx >= d_parnum)
- throw SSqlException("Attempt to bind more parameters than query has");
+ throw SSqlException("Attempt to bind more parameters than query has: " + d_query);
d_req_bind[d_paridx].buffer_type = MYSQL_TYPE_LONGLONG;
d_req_bind[d_paridx].buffer = new long long[1];
*((long long*)d_req_bind[d_paridx].buffer) = value;
}
SSqlStatement* bind(const string& name, unsigned long long value) {
if (d_paridx >= d_parnum)
- throw SSqlException("Attempt to bind more parameters than query has");
+ throw SSqlException("Attempt to bind more parameters than query has: " + d_query);
d_req_bind[d_paridx].buffer_type = MYSQL_TYPE_LONGLONG;
d_req_bind[d_paridx].buffer = new unsigned long long[1];
d_req_bind[d_paridx].is_unsigned = 1;
}
SSqlStatement* bind(const string& name, const std::string& value) {
if (d_paridx >= d_parnum)
- throw SSqlException("Attempt to bind more parameters than query has");
+ throw SSqlException("Attempt to bind more parameters than query has: " + d_query);
d_req_bind[d_paridx].buffer_type = MYSQL_TYPE_STRING;
d_req_bind[d_paridx].buffer = new char[value.size()+1];
d_req_bind[d_paridx].length = new unsigned long[1];
}
SSqlStatement* bindNull(const string& name) {
if (d_paridx >= d_parnum)
- throw SSqlException("Attempt to bind more parameters than query has");
+ throw SSqlException("Attempt to bind more parameters than query has: " + d_query);
d_req_bind[d_paridx].buffer_type = MYSQL_TYPE_NULL;
d_paridx++;
return this;
if ((err = mysql_stmt_bind_param(d_stmt, d_req_bind))) {
string error(mysql_stmt_error(d_stmt));
- throw SSqlException("Could not bind mysql statement: " + error);
+ throw SSqlException("Could not bind mysql statement: " + d_query + string(": ") + error);
}
if ((err = mysql_stmt_execute(d_stmt))) {
string error(mysql_stmt_error(d_stmt));
- throw SSqlException("Could not execute mysql statement: " + error);
+ throw SSqlException("Could not execute mysql statement: " + d_query + string(": ") + error);
}
if ((d_fnum = static_cast<int>(mysql_stmt_field_count(d_stmt)))>0) {
// prepare for result
if ((err = mysql_stmt_store_result(d_stmt))) {
string error(mysql_stmt_error(d_stmt));
- throw SSqlException("Could not store mysql statement: " + error);
+ throw SSqlException("Could not store mysql statement: " + d_query + string(": ") + error);
}
d_resnum = mysql_stmt_num_rows(d_stmt);
if ((err = mysql_stmt_bind_result(d_stmt, d_res_bind))) {
string error(mysql_stmt_error(d_stmt));
- throw SSqlException("Could not bind parameters to mysql statement: " + error);
+ throw SSqlException("Could not bind parameters to mysql statement: " + d_query + string(": ") + error);
}
}
}
if ((err =mysql_stmt_fetch(d_stmt))) {
if (err != MYSQL_DATA_TRUNCATED) {
string error(mysql_stmt_error(d_stmt));
- throw SSqlException("Could not fetch result: " + error);
+ throw SSqlException("Could not fetch result: " + d_query + string(": ") + error);
}
}
int err;
if((err=mysql_query(&d_db,query.c_str())))
- throw sPerrorException("Failed to execute mysql_query, perhaps connection died? Err="+itoa(err));
+ throw sPerrorException("Failed to execute mysql_query '" + query + "', perhaps connection died? Err="+itoa(err));
}
void SMySQL::startTransaction() {