// // Database.mm // // Created by Robert on 20/07/2009. // Copyright 2009 Electric TopHat Ltd. All rights reserved. // #import "Database.h" #define LOG_DB_ERRORS 1 #pragma mark --------------------------------------------------------- #pragma mark === Constructor / Destructor Functions === #pragma mark --------------------------------------------------------- // --------------------------------------------------------------- // Constructor // --------------------------------------------------------------- Database::Database(NSString* _name, NSString * _createString) { m_error = nil; m_database = nil; if ( !createWithBundleDatabaseWithName(_name) ) { if ( !createAnEmptyDatabaseWithName(_name, _createString) ) { m_error = @"Error : Failed to create the database."; #if LOG_DB_ERRORS NSLog( @"%@", m_error ); #endif } } } // --------------------------------------------------------------- // Destructor // --------------------------------------------------------------- Database::~Database() { if ( m_database ) { // Close the database. if (sqlite3_close(m_database) != SQLITE_OK) { m_error = [NSString stringWithFormat:@"Error : failed to close database with message '%s'.", sqlite3_errmsg(m_database)]; #if LOG_DB_ERRORS NSLog( @"%@", m_error); #endif } m_database = nil; } } #pragma mark --------------------------------------------------------- #pragma mark === End Constructor / Destructor Functions === #pragma mark --------------------------------------------------------- #pragma mark --------------------------------------------------------- #pragma mark === Public Functions === #pragma mark --------------------------------------------------------- // --------------------------------------------------------------- // execute a single sql statement // --------------------------------------------------------------- Boolean Database::execute( NSString * _sql, NSMutableArray * _results ) { if ( m_database ) { sqlite3_stmt * sqlStatement = nil; if (sqlite3_prepare_v2(m_database, [_sql UTF8String], -1, &sqlStatement, NULL) != SQLITE_OK) { m_error = [NSString stringWithFormat:@"Error : in Sql %@, failed to prepare statement with message '%s'.", _sql, sqlite3_errmsg(m_database)]; #if LOG_DB_ERRORS NSLog( @"%@", m_error); #endif } else { // step over each of the rows and grab the data. while (sqlite3_step(sqlStatement) == SQLITE_ROW) { if ( _results ) { int count = sqlite3_data_count(sqlStatement); // grab the row data and place it into a dictionary. NSMutableDictionary * row = [NSMutableDictionary dictionaryWithCapacity:count]; for ( int i=0; i