DatabaseRegion
public struct DatabaseRegion : CustomStringConvertible, Equatable
DatabaseRegion defines a region in the database. DatabaseRegion is dedicated
to help transaction observers recognize impactful database changes in their
observes(eventsOfKind:)
and databaseDidChange(with:)
methods.
A database region is the union of any number of table regions
, which can
cover a full table, or the combination of columns and rows (identified by
their rowids):
|Table1 | |Table2 | |Table3 | |Table4 | |Table5 |
|-------| |-------| |-------| |-------| |-------|
|x|x|x|x| |x| | | | |x|x|x|x| |x|x| |x| | | | | |
|x|x|x|x| |x| | | | | | | | | | | | | | | |x| | |
|x|x|x|x| |x| | | | | | | | | |x|x| |x| | | | | |
|x|x|x|x| |x| | | | | | | | | | | | | | | | | | |
You don’t create a database region directly. Instead, you use one of those methods:
SelectStatement.databaseRegion
:let statement = db.makeSelectStatement("SELECT name, score FROM player") print(statement.databaseRegion) // prints "player(name,score)"
FetchRequest.databaseRegion(_:)
let request = Player.filter(key: 1) try print(request.databaseRegion(db)) // prints "player(*)[1]"
Database regions returned by requests can be more precise than regions returned by select statements. Especially, regions returned by statements don’t know about rowids:
// A plain statement
let statement = db.makeSelectStatement("SELECT * FROM player WHERE id = 1")
statement.databaseRegion // "player(*)"
// A query interface request that executes the same statement:
let request = Player.filter(key: 1)
try request.databaseRegion(db) // "player(*)[1]"
-
Returns whether the region is empty.
Declaration
Swift
public var isEmpty: Bool { get }
-
The region that covers the full database: all columns and all rows from all tables.
Declaration
Swift
public static let fullDatabase: DatabaseRegion
-
The empty database region
Declaration
Swift
public init()
-
Returns the union of this region and the given one.
Declaration
Swift
public func union(_ other: DatabaseRegion) -> DatabaseRegion
-
Inserts the given region into this region
Declaration
Swift
public mutating func formUnion(_ other: DatabaseRegion)
-
Returns whether the content in the region would be impacted if the database were modified by an event of this kind.
Declaration
Swift
public func isModified(byEventsOfKind eventKind: DatabaseEventKind) -> Bool
-
Returns whether the content in the region is impacted by this event.
Precondition
event has been filtered by the same region in the TransactionObserver.observes(eventsOfKind:) method, by calling region.isModified(byEventsOfKind:)Declaration
Swift
public func isModified(by event: DatabaseEvent) -> Bool