     // Call this method before calling sqlite3_prepare_v2()
     func start() {
         let observerPointer = unsafeBitCast(self, to: UnsafeMutableRawPointer.self)
-        sqlite3_set_authorizer(database.sqliteConnection, { (observerPointer, actionCode, CString1, CString2, CString3, CString4) -> Int32 in
+        sqlite3_set_authorizer(database.sqliteConnection, { (observerPointer, actionCode, cString1, cString2, cString3, cString4) -> Int32 in
             switch actionCode {
             case SQLITE_DROP_TABLE, SQLITE_DROP_TEMP_TABLE, SQLITE_DROP_TEMP_VIEW, SQLITE_DROP_VIEW, SQLITE_DETACH, SQLITE_ALTER_TABLE, SQLITE_DROP_VTABLE, SQLITE_CREATE_INDEX, SQLITE_CREATE_TEMP_INDEX, SQLITE_DROP_INDEX, SQLITE_DROP_TEMP_INDEX:
                 let observer = unsafeBitCast(observerPointer, to: StatementCompilationObserver.self)

        // As a matter of fact, without this default authorizer, the truncate
        // optimization prevents transaction observers from observing
        // individual deletions.
        sqlite3_set_authorizer(sqliteConnection, { (_, actionCode, CString1, CString2, CString3, CString4) -> Int32 in
            if actionCode == SQLITE_DELETE && String(cString: CString1!) != "sqlite_master" {
                // Prevent [truncate optimization](https://www.sqlite.org/lang_delete.html#truncateopt)
                // so that transaction observers can observe individual deletions.
                return SQLITE_IGNORE

                observer.invalidatesDatabaseSchemaCache = true
            case SQLITE_READ:
                let observer = unsafeBitCast(observerPointer, to: StatementCompilationObserver.self)
                observer.selectionInfo.insert(column: String(cString: cString2!), ofTable: String(cString: cString1!))
            case SQLITE_INSERT:
                let observer = unsafeBitCast(observerPointer, to: StatementCompilationObserver.self)
                observer.databaseEventKinds.append(.insert(tableName: String(cString: cString1!)))
            case SQLITE_DELETE:
                let observer = unsafeBitCast(observerPointer, to: StatementCompilationObserver.self)
                let tableName = String(cString: cString1!)
                if tableName != "sqlite_master" && !observer.isDropTableStatement {
                    observer.databaseEventKinds.append(.delete(tableName: tableName))
                    // Prevent [truncate optimization](https://www.sqlite.org/lang_delete.html#truncateopt)
