mirror of
https://github.com/tutao/tutanota.git
synced 2025-12-08 06:09:50 +00:00
[ios] Enable DELETE and UPDATE with LIMIT
Enable the DELETE/UPDATE with LIMIT feature. This updates SQLCipher to 4.10 as 4.6 had issues with its configure script due to not properly detecting common crypto. Closes #9370
This commit is contained in:
parent
a9ae27ef87
commit
15f67dabaf
5 changed files with 13538 additions and 7345 deletions
|
|
@ -1,6 +1,7 @@
|
|||
/// Swift wrapper around sqlite
|
||||
open class SqliteDb {
|
||||
public private(set) var db: OpaquePointer?
|
||||
private var signalTokenizerLoaded: Bool = false
|
||||
|
||||
public init(dbPath: String) {
|
||||
let rc_open = sqlite3_open_v2(
|
||||
|
|
@ -13,21 +14,6 @@ open class SqliteDb {
|
|||
let errmsg = self.getLastErrorMessage()
|
||||
fatalError("Error opening database: \(errmsg)")
|
||||
}
|
||||
var api = UsefulSqlite3ApiRoutines(
|
||||
malloc64: sqlite3_malloc64,
|
||||
prepare: sqlite3_prepare,
|
||||
bind_pointer: sqlite3_bind_pointer,
|
||||
finalize: sqlite3_finalize,
|
||||
step: sqlite3_step,
|
||||
libversion_number: sqlite3_libversion_number
|
||||
)
|
||||
var errMsg: UnsafeMutablePointer<CChar>?
|
||||
let extensionLoadResult = signal_fts5_tokenizer_init_static(self.db, &errMsg, &api)
|
||||
if extensionLoadResult != SQLITE_OK {
|
||||
let error: String? = if let errMsg = sqlite3_errmsg(self.db) { String(cString: errMsg) } else { nil }
|
||||
let swiftErrorMsg: String? = if let errMsg { String(cString: errMsg) } else { nil }
|
||||
fatalError("Could not load fts5 extension \(swiftErrorMsg ?? "") \(error ?? "")")
|
||||
}
|
||||
}
|
||||
deinit {
|
||||
close()
|
||||
|
|
@ -42,6 +28,7 @@ open class SqliteDb {
|
|||
try self.exec(sql: "COMMIT")
|
||||
}
|
||||
private func exec(sql: String) throws {
|
||||
self.setupSignalTokenizer()
|
||||
let rc = sqlite3_exec(self.db, sql, nil, nil, nil)
|
||||
if rc != SQLITE_OK {
|
||||
let errmsg = self.getLastErrorMessage()
|
||||
|
|
@ -50,6 +37,7 @@ open class SqliteDb {
|
|||
}
|
||||
|
||||
public func prepare(query: String) throws -> SqliteStatement {
|
||||
self.setupSignalTokenizer()
|
||||
var stmt: OpaquePointer?
|
||||
let sqlCStr = UnsafeMutablePointer<CChar>(mutating: (query as NSString).utf8String)
|
||||
// db pointer, query, max query length, OUT statement handle, OUT pointer to unused portion of query (?)
|
||||
|
|
@ -73,4 +61,26 @@ open class SqliteDb {
|
|||
print("Error closing database: \(errmsg): \(self.getLastErrorMessage())") // ignore
|
||||
}
|
||||
}
|
||||
|
||||
private func setupSignalTokenizer() {
|
||||
// have to initialize signal tokenizer late because we need to setup sqlite3_key before we can do any queries
|
||||
|
||||
if signalTokenizerLoaded { return }
|
||||
var api = UsefulSqlite3ApiRoutines(
|
||||
malloc64: sqlite3_malloc64,
|
||||
prepare: sqlite3_prepare,
|
||||
bind_pointer: sqlite3_bind_pointer,
|
||||
finalize: sqlite3_finalize,
|
||||
step: sqlite3_step,
|
||||
libversion_number: sqlite3_libversion_number
|
||||
)
|
||||
var errMsg: UnsafeMutablePointer<CChar>?
|
||||
let extensionLoadResult = signal_fts5_tokenizer_init_static(self.db, &errMsg, &api)
|
||||
if extensionLoadResult != SQLITE_OK {
|
||||
let error: String? = if let errMsg = sqlite3_errmsg(self.db) { String(cString: errMsg) } else { nil }
|
||||
let swiftErrorMsg: String? = if let errMsg { String(cString: errMsg) } else { nil }
|
||||
fatalError("Could not load fts5 extension \(swiftErrorMsg ?? "") \(error ?? "")")
|
||||
}
|
||||
signalTokenizerLoaded = true
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -105,6 +105,8 @@ targets:
|
|||
"-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT",
|
||||
"-DSQLITE_TEMP_STORE=3",
|
||||
"-DSQLITE_THREADSAFE=1",
|
||||
"-DSQLITE_EXTRA_INIT=sqlcipher_extra_init",
|
||||
"-DSQLITE_EXTRA_SHUTDOWN=sqlcipher_extra_shutdown"
|
||||
]
|
||||
IPHONEOS_DEPLOYMENT_TARGET: "16.0"
|
||||
preBuildScripts:
|
||||
|
|
|
|||
|
|
@ -1,9 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "group:calendar/CalendarApp11Years.storekit">
|
||||
</FileRef>
|
||||
<FileRef
|
||||
location = "group:../tuta-sdk/ios/tutasdk.xcodeproj">
|
||||
</FileRef>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue