Skip to content

Commit ca663c1

Browse files
authored
Merge pull request #64 from ChristophKaser/assert_no_failure
adds QueryableOptions.assertNoFailure to treat errors as fatalError
2 parents f279a57 + 9d4d70f commit ca663c1

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

Sources/GRDBQuery/Queryable+DatabaseContext/FetchQueryable.swift

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ extension TopLevelDatabaseReader {
5555
.eraseToAnyPublisher()
5656
}
5757
}
58+
.assertNoFailure(if: queryableOptions.contains(.assertNoFailure))
5859
.eraseToAnyPublisher()
5960
}
6061
}

Sources/GRDBQuery/Queryable+DatabaseContext/QueryableOptions.swift

+7
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
///
88
/// - ``async``
99
/// - ``constantRegion``
10+
/// - ``assertNoFailure``
1011
public struct QueryableOptions: OptionSet, Sendable {
1112
public let rawValue: Int
1213

@@ -58,6 +59,12 @@ public struct QueryableOptions: OptionSet, Sendable {
5859
/// ``PresenceObservationQueryable`` types.
5960
public static let constantRegion = QueryableOptions(rawValue: 1 << 1)
6061

62+
/// By default, any error that occurs can be accessed using ``Query/Wrapper/error``
63+
/// and is otherwise ignored.
64+
/// With this option, errors that happen while accessing the
65+
/// database terminate the app with a fatal error.
66+
public static let assertNoFailure = QueryableOptions(rawValue: 1 << 2)
67+
6168
/// The default options.
6269
public static let `default`: QueryableOptions = []
6370
}

Sources/GRDBQuery/Queryable+DatabaseContext/ValueObservationQueryable.swift

+14
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,24 @@ extension TopLevelDatabaseReader {
6868
.eraseToAnyPublisher()
6969
}
7070
}
71+
.assertNoFailure(if: queryableOptions.contains(.assertNoFailure))
7172
.eraseToAnyPublisher()
7273
}
7374
}
7475

76+
77+
extension Publisher {
78+
func assertNoFailure(if condition: Bool) -> AnyPublisher<Output, Failure> {
79+
if !condition {
80+
self.eraseToAnyPublisher()
81+
} else {
82+
self.assertNoFailure()
83+
.setFailureType(to: Failure.self)
84+
.eraseToAnyPublisher()
85+
}
86+
}
87+
}
88+
7589
#if DEBUG
7690
import SwiftUI
7791

0 commit comments

Comments
 (0)