# Linux switches
-CFLAGS=-g -O0 -Wall -pedantic -Wextra
+CFLAGS=-g -Ofast -Wall -pedantic -Wextra
# Mac OS: We don't use pedantic as Mac OS version of MySQL (5.5.24) does use long long (not part of ISO C++)
#CFLAGS=-g -O0 -Wall -Wextra -I/opt/local/include
}
+void MySQL_uBenchmark::stmt_failure(MYSQL_STMT * stmt, const char* operation) {
+ stringstream tmp;
+ tmp << "Error " << mysql_stmt_errno(stmt) << " during " << operation
+ << ": " << mysql_stmt_error(stmt);
+ throw tmp.str();
+}
+
+
+
void MySQL_uBenchmark::failure(const char* operation) {
stringstream tmp;
tmp << "Error " << mysql_errno(conn_) << " during " << operation
// 4th parameter: Client-id
response[3].buffer_type = MYSQL_TYPE_STRING;
response[3].buffer = &client_id;
+ response[3].buffer_length = sizeof(client_id);
// 5th parameter: valid-lifetime
response[4].buffer_type = MYSQL_TYPE_LONG;
}
int num_rows = 0;
- if (!mysql_stmt_fetch(stmt)) {
+ int result = mysql_stmt_fetch(stmt);
+ switch (result) {
+ case 0: {
if (lease_addr != addr) {
failure("Returned data is bogus!");
}
num_rows++;
+ break;
+ }
+ case MYSQL_NO_DATA:
+ {
+ // that's ok. We randomized non-existing address
+ break;
+
+ }
+ default: {
+ stmt_failure(stmt, "RETRIEVE (mysql_stmt_fetch())");
+ }
}
// we could call mysql_stmt_fetch again to check that there are no
/// Compared to its base version in uBenchmark class, this one logs additional
/// MySQL specific information using mysql_errno() and mysql_error() functions.
/// The outcome is the same: exception is thrown.
+ ///
+ /// @param operation brief description of the operation that caused error
+ ///
+ /// @sa stmt_failure()
void failure(const char* operation);
+ /// @brief Used to report compiled statement failures.
+ ///
+ /// Compared to its base version in uBenchmark class, this one logs additional
+ /// MySQL specific information using mysql_stmt_errno() and mysql_stmt_error()
+ /// functions that are used for compiled statements error reporting.
+ ///
+ /// @param stmt MySQL compiled statement structure
+ /// @param operation brief description of the operation that caused error
+ ///
+ /// @sa failure()
+ void stmt_failure(MYSQL_STMT * stmt, const char* operation);
+
+
/// Handle to MySQL database connection.
MYSQL* conn_;
};