В настоящее время я работаю над кодом для базы данных sqlite
. Я заметил, что после подготовки запроса мне всегда нужно завершить запрос (sqlite3_finalize(statementPointer)
), прежде чем выйти из функции. Есть ли способ сделать это, кроме как заполнить все возможности?Выполнить код перед отправкой функции
Например:
func updateColumn(db: COpaquePointer, name: String, x: sqlite3_int64, y: String!=nil) -> Bool {
var statement = "UPDATE MY_TABLE SET X=?"
var statementPointer: COpaquePointer = nil
if y != nil {
statement += ", Y=?"
}
statement += " WHERE NAME=?"
if sqlite3_prepare_v2(db, statement, -1, &statementPointer, nil) != SQLITE_OK {
return false
} else if sqlite3_bind_int64(statementPointer, 1, x) != SQLITE_OK {
// Note this code here
sqlite3_finalize(statementPointer)
return false
}
if y != nil {
if sqlite3_bind_text(statementPointer, 2, y, -1, nil) != SQLITE_OK {
// Note this repetition
sqlite3_finalize(statementPointer)
return false
}
}
if sqlite3_step(statementPointer) != SQLITE_DONE {
// Note this repetition
sqlite3_finalize(statementPointer)
return false
}
// Note this repetition
sqlite3_finalize(statementPointer)
return true
}
Конечно, это только то, что я придумал, чтобы проиллюстрировать это. В реальном коде есть много других предложений if
, которые мне нужно доработать.
Я понимаю, что это что-то вроде deinit
для классов в swift, но есть deinit
s для функций, а?
Например (код, который я хотел бы, чтобы это было как, но не работает):
func updateColumn(params...) -> Bool {
// code...
deinit {
sqlite3_finalize(statementPointer)
}
}