File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -60,15 +60,20 @@ extension DatabaseManager {
6060 )
6161 let statements = try generator. generate ( changes: changes)
6262
63- // Execute in transaction
64- try await driver. beginTransaction ( )
63+ let useTransaction = driver. supportsTransactions
64+
65+ if useTransaction {
66+ try await driver. beginTransaction ( )
67+ }
6568
6669 do {
6770 for stmt in statements {
6871 _ = try await driver. execute ( query: stmt. sql)
6972 }
7073
71- try await driver. commitTransaction ( )
74+ if useTransaction {
75+ try await driver. commitTransaction ( )
76+ }
7277
7378 // Record each statement in query history
7479 let connId = connectionId
@@ -87,10 +92,12 @@ extension DatabaseManager {
8792 // Post notification to refresh UI
8893 NotificationCenter . default. post ( name: . refreshData, object: nil )
8994 } catch {
90- do {
91- try await driver. rollbackTransaction ( )
92- } catch {
93- Self . logger. error ( " Rollback failed after schema change error: \( error. localizedDescription) " )
95+ if useTransaction {
96+ do {
97+ try await driver. rollbackTransaction ( )
98+ } catch {
99+ Self . logger. error ( " Rollback failed after schema change error: \( error. localizedDescription) " )
100+ }
94101 }
95102 throw DatabaseError . queryFailed ( " Schema change failed: \( error. localizedDescription) " )
96103 }
Original file line number Diff line number Diff line change @@ -35,7 +35,11 @@ extension MainContentCoordinator {
3535 throw DatabaseError . notConnected
3636 }
3737
38- try await driver. beginTransaction ( )
38+ let useTransaction = driver. supportsTransactions
39+
40+ if useTransaction {
41+ try await driver. beginTransaction ( )
42+ }
3943
4044 do {
4145 for stmt in statements {
@@ -45,12 +49,16 @@ extension MainContentCoordinator {
4549 _ = try await driver. executeParameterized ( query: stmt. sql, parameters: stmt. parameters)
4650 }
4751 }
48- try await driver. commitTransaction ( )
52+ if useTransaction {
53+ try await driver. commitTransaction ( )
54+ }
4955 } catch {
50- do {
51- try await driver. rollbackTransaction ( )
52- } catch {
53- discardLogger. error ( " Rollback failed: \( error. localizedDescription, privacy: . public) " )
56+ if useTransaction {
57+ do {
58+ try await driver. rollbackTransaction ( )
59+ } catch {
60+ discardLogger. error ( " Rollback failed: \( error. localizedDescription, privacy: . public) " )
61+ }
5462 }
5563 throw error
5664 }
Original file line number Diff line number Diff line change @@ -187,9 +187,7 @@ extension MainContentCoordinator {
187187 throw DatabaseError . notConnected
188188 }
189189
190- // Redis MULTI/EXEC is not a true transaction (no rollback on failure),
191- // so execute statements individually without wrapping.
192- let useTransaction = dbType != . redis
190+ let useTransaction = driver. supportsTransactions
193191
194192 if useTransaction {
195193 try await driver. beginTransaction ( )
You can’t perform that action at this time.
0 commit comments