@@ -534,15 +534,17 @@ internal final class SQLFavoriteStorage {
534534 return await performDatabaseWork { [ weak self] in
535535 guard let self = self else { return false }
536536
537- let inTransaction = sqlite3_exec ( self . db, " BEGIN IMMEDIATE; " , nil , nil , nil ) == SQLITE_OK
537+ guard sqlite3_exec ( self . db, " BEGIN IMMEDIATE; " , nil , nil , nil ) == SQLITE_OK else {
538+ return false
539+ }
538540
539541 let SQLITE_TRANSIENT = unsafeBitCast ( - 1 , to: sqlite3_destructor_type. self)
540542
541543 // Find the parent_id of the folder being deleted
542544 let findParentSQL = " SELECT parent_id FROM folders WHERE id = ?; "
543545 var findStatement : OpaquePointer ?
544546 guard sqlite3_prepare_v2 ( self . db, findParentSQL, - 1 , & findStatement, nil ) == SQLITE_OK else {
545- if inTransaction { sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil ) }
547+ sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
546548 return false
547549 }
548550
@@ -567,12 +569,12 @@ internal final class SQLFavoriteStorage {
567569 let moveFavResult = sqlite3_step ( moveFavStatement)
568570 sqlite3_finalize ( moveFavStatement)
569571 if moveFavResult != SQLITE_DONE {
570- if inTransaction { sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil ) }
572+ sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
571573 return false
572574 }
573575 } else {
574576 sqlite3_finalize ( moveFavStatement)
575- if inTransaction { sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil ) }
577+ sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
576578 return false
577579 }
578580
@@ -589,33 +591,31 @@ internal final class SQLFavoriteStorage {
589591 let moveSubResult = sqlite3_step ( moveSubStatement)
590592 sqlite3_finalize ( moveSubStatement)
591593 if moveSubResult != SQLITE_DONE {
592- if inTransaction { sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil ) }
594+ sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
593595 return false
594596 }
595597 } else {
596598 sqlite3_finalize ( moveSubStatement)
597- if inTransaction { sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil ) }
599+ sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
598600 return false
599601 }
600602
601603 // Delete the folder
602604 let deleteSQL = " DELETE FROM folders WHERE id = ?; "
603605 var deleteStatement : OpaquePointer ?
604606 guard sqlite3_prepare_v2 ( self . db, deleteSQL, - 1 , & deleteStatement, nil ) == SQLITE_OK else {
605- if inTransaction { sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil ) }
607+ sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
606608 return false
607609 }
608610
609611 sqlite3_bind_text ( deleteStatement, 1 , idString, - 1 , SQLITE_TRANSIENT)
610612 let result = sqlite3_step ( deleteStatement)
611613 sqlite3_finalize ( deleteStatement)
612614
613- if inTransaction {
614- if result == SQLITE_DONE {
615- sqlite3_exec ( self . db, " COMMIT; " , nil , nil , nil )
616- } else {
617- sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
618- }
615+ if result == SQLITE_DONE {
616+ sqlite3_exec ( self . db, " COMMIT; " , nil , nil , nil )
617+ } else {
618+ sqlite3_exec ( self . db, " ROLLBACK; " , nil , nil , nil )
619619 }
620620
621621 return result == SQLITE_DONE
@@ -719,11 +719,22 @@ internal final class SQLFavoriteStorage {
719719 return await performDatabaseWork { [ weak self] in
720720 guard let self = self else { return false }
721721
722- var sql = """
723- SELECT COUNT(*) FROM favorites
724- WHERE keyword = ?
725- AND (connection_id IS NULL OR connection_id = ? OR ? IS NULL)
726- """
722+ var sql : String
723+ var bindIndex : Int32 = 1
724+
725+ if connectionIdString != nil {
726+ sql = """
727+ SELECT COUNT(*) FROM favorites
728+ WHERE keyword = ?
729+ AND (connection_id IS NULL OR connection_id = ?)
730+ """
731+ } else {
732+ sql = """
733+ SELECT COUNT(*) FROM favorites
734+ WHERE keyword = ?
735+ AND connection_id IS NULL
736+ """
737+ }
727738
728739 if excludeIdString != nil {
729740 sql += " AND id != ? "
@@ -740,18 +751,16 @@ internal final class SQLFavoriteStorage {
740751
741752 let SQLITE_TRANSIENT = unsafeBitCast ( - 1 , to: sqlite3_destructor_type. self)
742753
743- sqlite3_bind_text ( statement, 1 , keyword, - 1 , SQLITE_TRANSIENT)
754+ sqlite3_bind_text ( statement, bindIndex, keyword, - 1 , SQLITE_TRANSIENT)
755+ bindIndex += 1
744756
745757 if let connId = connectionIdString {
746- sqlite3_bind_text ( statement, 2 , connId, - 1 , SQLITE_TRANSIENT)
747- sqlite3_bind_text ( statement, 3 , connId, - 1 , SQLITE_TRANSIENT)
748- } else {
749- sqlite3_bind_null ( statement, 2 )
750- sqlite3_bind_null ( statement, 3 )
758+ sqlite3_bind_text ( statement, bindIndex, connId, - 1 , SQLITE_TRANSIENT)
759+ bindIndex += 1
751760 }
752761
753762 if let excludeId = excludeIdString {
754- sqlite3_bind_text ( statement, 4 , excludeId, - 1 , SQLITE_TRANSIENT)
763+ sqlite3_bind_text ( statement, bindIndex , excludeId, - 1 , SQLITE_TRANSIENT)
755764 }
756765
757766 if sqlite3_step ( statement) == SQLITE_ROW {
0 commit comments