@@ -226,35 +226,40 @@ let SQLITE_DATE = SQLITE_NULL + 1
226226 // Clean DB
227227 println ( " SQLiteDB - Optimize DB " )
228228 let sql = " VACUUM; ANALYZE "
229- if execute ( sql) != SQLITE_OK {
230- println ( " SQLiteDB - Error cleaning DB " )
231- }
232- sqlite3_close ( db)
229+ execute ( sql, completion: { ( result: CInt ) -> Void in
230+ if result == 0 {
231+ println ( " SQLiteDB - Error cleaning DB " )
232+ sqlite3_close ( self . db)
233+ }
234+ } )
233235 }
234236 }
235237
236238 // Execute SQL with parameters and return result code
237- func execute( sql: String , parameters: [ AnyObject ] ? = nil ) -> CInt {
238- var result : CInt = 0
239- dispatch_sync ( queue) {
239+ func execute( sql: String , parameters: [ AnyObject ] ? = nil , completion: ( CInt ) -> Void ) {
240+ dispatch_async ( queue) {
240241 let stmt = self . prepare ( sql, params: parameters)
241242 if stmt != nil {
242- result = self . execute ( stmt, sql: sql)
243+ let result = self . execute ( stmt, sql: sql)
244+ dispatch_async ( dispatch_get_main_queue ( ) ) {
245+ completion ( result)
246+ }
243247 }
244248 }
245- return result
246249 }
247250
248251 // Run SQL query with parameters
249- func query( sql: String , parameters: [ AnyObject ] ? = nil ) -> [ SQLRow ] ? {
250- var rows : [ SQLRow ] ? = nil
251- dispatch_sync ( queue ) {
252+ func query( sql: String , parameters: [ AnyObject ] ? = nil , completion : ( [ SQLRow ] ? ) -> Void ) {
253+ dispatch_async ( queue ) {
254+ var rows : [ SQLRow ] ? = nil
252255 let stmt = self . prepare ( sql, params: parameters)
253256 if stmt != nil {
254257 rows = self . query ( stmt, sql: sql)
255258 }
259+ dispatch_async ( dispatch_get_main_queue ( ) ) {
260+ completion ( rows)
261+ }
256262 }
257- return rows
258263 }
259264
260265 // Show alert with either supplied message or last error
@@ -358,10 +363,14 @@ let SQLITE_DATE = SQLITE_NULL + 1
358363 return 0
359364 }
360365 // Is this an insert
361- if sql. uppercaseString. hasPrefix ( " INSERT " ) {
366+ let upp = sql. uppercaseString
367+ if upp. hasPrefix ( " INSERT " ) {
362368 // Known limitations: http://www.sqlite.org/c3ref/last_insert_rowid.html
363369 let rid = sqlite3_last_insert_rowid ( self . db)
364370 result = CInt ( rid)
371+ } else if upp. hasPrefix ( " DELETE " ) || upp. hasPrefix ( " UPDATE " ) {
372+ let cnt = sqlite3_changes ( self . db)
373+ result = CInt ( cnt)
365374 } else {
366375 result = 1
367376 }
0 commit comments