void SqliteDatabaseConnector::openDatabase() { #if defined(HAVE_SQLITE3_H) int result = sqlite3_open(db_name.c_str(), &db); if (result != SQLITE_OK) { std::string error = sqlite3_errmsg(db); logger << ERROR << "Unable to open database: " << db_name << " : " << endl; throw SqliteDatabaseConnectorException(error); } #elif defined(HAVE_SQLITE_H) char* errormsg = 0; db = sqlite_open(db_name.c_str(), 0, &errormsg); if (db == 0) { std::string error; if (errormsg != 0) { error = errormsg; } #ifdef HAVE_STDLIB_H free(errormsg); #endif logger << ERROR << "Unable to open database: " << db_name << " : " << endl; throw SqliteDatabaseConnectorException(error); } #endif }
NgramTable SqliteDatabaseConnector::executeSql(const std::string query) const { NgramTable answer; char* sqlite_error_msg = 0; logger << DEBUG << "executing query: " << query << endl; #if defined(HAVE_SQLITE3_H) int result = sqlite3_exec( #elif defined(HAVE_SQLITE_H) int result = sqlite_exec( #endif db, query.c_str(), callback, &answer, &sqlite_error_msg ); if (result != SQLITE_OK) { std::string error; if (sqlite_error_msg != 0) { error = sqlite_error_msg; } #if defined(HAVE_SQLITE3_H) sqlite3_free(sqlite_error_msg); #elif defined(HAVE_SQLITE_H) # ifdef HAVE_STDLIB_H free(sqlite_error_msg); # endif #endif logger << ERROR << "Error executing SQL: '" << query << "' on database: '" << get_database_filename() << "' : " << error << endl; throw SqliteDatabaseConnectorException(PRESAGE_SQLITE_EXECUTE_SQL_ERROR, error); } return answer; }
void SqliteDatabaseConnector::openDatabase() { #if defined(HAVE_SQLITE3_H) int rc; if (get_read_write_mode()) { // attempt to open read-write, no create rc = sqlite3_open_v2(get_database_filename().c_str(), &db, SQLITE_OPEN_READWRITE, NULL); if (rc != SQLITE_OK) { // attempt to open read-write, create rc = sqlite3_open_v2(get_database_filename().c_str(), &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); logger << WARN << "Created new language model database: " << get_database_filename() << endl; } if (rc == SQLITE_OK) { // create n-gram tables up to specified cardinality if they // don't yet exist for (size_t cardinality = 1; cardinality <= get_cardinality (); cardinality++) { createNgramTable(cardinality); } } } else { // open read-only, no create rc = sqlite3_open_v2(get_database_filename().c_str(), &db, SQLITE_OPEN_READONLY, NULL); } // throw exception if database cannot be opened/created if (rc != SQLITE_OK) { std::string error = sqlite3_errmsg(db); logger << ERROR << "Unable to create/open database: " << get_database_filename() << endl; throw SqliteDatabaseConnectorException(PRESAGE_SQLITE_OPEN_DATABASE_ERROR, error); } #elif defined(HAVE_SQLITE_H) char* errormsg = 0; db = sqlite_open(get_database_filename().c_str(), 0, &errormsg); if (db == 0) { std::string error; if (errormsg != 0) { error = errormsg; } #ifdef HAVE_STDLIB_H free(errormsg); #endif logger << ERROR << "Unable to open database: " << get_database_filename() << " : " << endl; throw SqliteDatabaseConnectorException(error); } #endif }