Skip to content

Commit 7ef9e7f

Browse files
committed
Fixed all SQL operations being blocking operations - now results of operations are returned via a completion block
1 parent 9a77cf6 commit 7ef9e7f

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

SQLiteDB.swift

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)