Skip to content

Commit

Permalink
Correctly handle statement pointers.
Browse files Browse the repository at this point in the history
  • Loading branch information
ShikiSuen committed Nov 30, 2023
1 parent aaef423 commit 39326c0
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
8 changes: 5 additions & 3 deletions Sources/Hotenka/HotenkaChineseConverter.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,10 @@ public class HotenkaChineseConverter {
private(set) var dict: [String: [String: String]]
private var dictFiles: [String: [String]]
var ptrSQL: OpaquePointer?
var ptrStatement: OpaquePointer?

deinit {
sqlite3_finalize(ptrStatement)
sqlite3_close_v2(ptrSQL)
ptrSQL = nil
ptrStatement = nil
}

public init(sqliteDir dbPath: String) {
Expand Down Expand Up @@ -180,8 +177,13 @@ public class HotenkaChineseConverter {

public func query(dict dictType: DictType, key searchKey: String) -> String? {
guard ptrSQL != nil else { return dict[dictType.rawKeyString]?[searchKey] }
var ptrStatement: OpaquePointer?
let sqlQuery = "SELECT * FROM DATA_HOTENKA WHERE dict=\(dictType.rawValue) AND theKey='\(searchKey)';"
sqlite3_prepare_v2(ptrSQL, sqlQuery, -1, &ptrStatement, nil)
defer {
sqlite3_finalize(ptrStatement)
ptrStatement = nil
}
// 此處只需要用到第一筆結果。
while sqlite3_step(ptrStatement) == SQLITE_ROW {
guard let rawValue = sqlite3_column_text(ptrStatement, 2) else { continue }
Expand Down
7 changes: 3 additions & 4 deletions Tests/HotenkaTests/HotenkaTests_SQLite.swift
Original file line number Diff line number Diff line change
Expand Up @@ -69,11 +69,10 @@ extension HotenkaTests {

assert(sqlite3_exec(ptrSQL, "begin;", nil, nil, nil) == SQLITE_OK)

var ptrStatement: OpaquePointer?

testInstance.dict.forEach { dictName, subDict in
guard let dictID = DictType.match(rawKeyString: dictName)?.rawValue else { return }
subDict.forEach { key, value in
var ptrStatement: OpaquePointer?
let sqlInsertion = "INSERT INTO DATA_HOTENKA (dict, theKey, theValue) VALUES (\(dictID), '\(key)', '\(value)')"
assert(
sqlite3_prepare_v2(
Expand All @@ -85,11 +84,11 @@ extension HotenkaTests {
sqlite3_step(ptrStatement) == SQLITE_DONE,
"HOTENKA: Failed from stepping: \(sqlInsertion)"
)
sqlite3_finalize(ptrStatement)
ptrStatement = nil
}
}
sqlite3_finalize(ptrStatement)
assert(sqlite3_exec(ptrSQL, "commit;", nil, nil, nil) == SQLITE_OK)

sqlite3_close_v2(ptrSQL)
}

Expand Down

0 comments on commit 39326c0

Please sign in to comment.