From 5f504f2e89e95e70d9551ae9c99009d93af157f5 Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Sun, 10 Jan 2010 21:43:49 +0100 Subject: added sqlite3_prepare_v2 wrapper with propper logging --- src/base/database.cpp | 36 ++++++++++++++++++------------------ src/base/database.hpp | 12 ++++++++++++ 2 files changed, 30 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/base/database.cpp b/src/base/database.cpp index 36971bd4..3d1580e2 100644 --- a/src/base/database.cpp +++ b/src/base/database.cpp @@ -62,6 +62,19 @@ namespace usdx return instance; } + sqlite3_stmt *StatDatabase::sqlite_prepare(const std::string sqlStatement) + { + sqlite3_stmt *sqliteStatement; + if (SQLITE_OK != sqlite3_prepare_v2(database, sqlStatement.c_str(), sqlStatement.length(), &sqliteStatement, NULL)) { + sqlite3_finalize(sqliteStatement); + + LOG4CXX_ERROR(log, "Error '" << sqlite3_errmsg(database) << "' in SQL '" << sqlStatement << "'"); + throw "Error preparing statement."; + } + + return sqliteStatement; + } + void StatDatabase::init(const std::string filename) { LOG4CXX_DEBUG(log, "Initializing Database: " << filename); @@ -167,16 +180,8 @@ namespace usdx int StatDatabase::get_version(void) { - char sqlStatement[] = "PRAGMA user_version;"; - sqlite3_stmt *sqliteStatement; int result = -1; - - if (SQLITE_OK != sqlite3_prepare_v2(database, sqlStatement, strlen(sqlStatement), &sqliteStatement, NULL)) { - sqlite3_finalize(sqliteStatement); - - LOG4CXX_ERROR(log, "Error '" << sqlite3_errmsg(database) << "' in SQL '" << sqlStatement << "'"); - throw "Error preparing statement."; - } + sqlite3_stmt *sqliteStatement = sqlite_prepare("PRAGMA user_version;"); int rc = sqlite3_step(sqliteStatement); if (rc == SQLITE_DONE || rc == SQLITE_ROW) { @@ -395,18 +400,13 @@ namespace usdx */ time_t StatDatabase::get_stat_reset(void) { - std::string sqlStatement = "SELECT [ResetTime] FROM ["; - sqlStatement += usdx_statistics_info + std::string("];"); - - sqlite3_stmt *sqliteStatement; int result = -1; - if (SQLITE_OK != sqlite3_prepare_v2(database, sqlStatement.c_str(), sqlStatement.length(), &sqliteStatement, NULL)) { - sqlite3_finalize(sqliteStatement); + std::string sqlStatement = "SELECT [ResetTime] FROM ["; + sqlStatement += usdx_statistics_info; + sqlStatement += "];"; - LOG4CXX_ERROR(log, "Error '" << sqlite3_errmsg(database) << "' in SQL '" << sqlStatement << "'"); - throw "Error preparing statement."; - } + sqlite3_stmt *sqliteStatement = sqlite_prepare(sqlStatement); int rc = sqlite3_step(sqliteStatement); if (rc == SQLITE_DONE || rc == SQLITE_ROW) { diff --git a/src/base/database.hpp b/src/base/database.hpp index 8e589feb..c984fcfd 100644 --- a/src/base/database.hpp +++ b/src/base/database.hpp @@ -54,6 +54,18 @@ namespace usdx */ sqlite3 *database; + /** + * Wrapper arround the sqlite_prepare_v2 function with propper + * logging and exception throwing on error. + * + * @param sqlStatement SQL Statement for preparing to + * sqlite3_stmt + * @return Pointner to a sqlite3_stmt used for binding + * parameters and excuting the statement. Need to be freed + * with sqlite3_finalize. + */ + sqlite3_stmt *sqlite_prepare(const std::string sqlStatement); + // Singleton StatDatabase(std::string filename); -- cgit v1.2.3