Skip to content

Commit c7bbebc

Browse files
committed
Change the way we count changes in order to support INSTEAD OF triggers
Database.changesCount calls sqlite3_changes(), whose documentation says: > https://sqlite.org/c3ref/changes.html > Changes to a view that are intercepted by INSTEAD OF triggers are not counted. Since we want to support INSTEAD OF triggers well, so that record types can be based on views, we switch to sqlite3_total_changes().
1 parent 38f5226 commit c7bbebc

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

GRDB/QueryInterface/Request/QueryInterfaceRequest.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -635,8 +635,9 @@ extension QueryInterfaceRequest {
635635
@discardableResult
636636
public func deleteAll(_ db: Database) throws -> Int {
637637
let statement = try SQLQueryGenerator(relation: relation).makeDeleteStatement(db)
638+
let prevCount = db.totalChangesCount
638639
try statement.execute()
639-
return db.changesCount
640+
return db.totalChangesCount - prevCount
640641
}
641642
}
642643

@@ -1135,8 +1136,9 @@ extension QueryInterfaceRequest {
11351136
// database not hit
11361137
return 0
11371138
}
1139+
let prevCount = db.totalChangesCount
11381140
try updateStatement.execute()
1139-
return db.changesCount
1141+
return db.totalChangesCount - prevCount
11401142
}
11411143

11421144
/// Updates matching rows, and returns the number of updated rows.

GRDB/Record/MutablePersistableRecord+Delete.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ extension MutablePersistableRecord {
5353
// Nil primary key
5454
return false
5555
}
56+
let prevCount = db.totalChangesCount
5657
try statement.execute()
57-
return db.changesCount > 0
58+
return (db.totalChangesCount - prevCount) > 0
5859
}
5960
}

GRDB/Record/MutablePersistableRecord+Update.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -956,8 +956,10 @@ extension MutablePersistableRecord {
956956
// Nil primary key
957957
try dao.recordNotFound()
958958
}
959+
let prevCount = db.totalChangesCount
959960
let returned = try fetch(statement)
960-
if db.changesCount == 0 {
961+
let changesCount = db.totalChangesCount - prevCount
962+
if changesCount == 0 {
961963
// No row was updated
962964
try dao.recordNotFound()
963965
}

0 commit comments

Comments
 (0)