Skip to content

Commit 0b7f510

Browse files
committed
Merge remote-tracking branch 'origin/main' into cloudkit
2 parents 543684b + b8bbdc5 commit 0b7f510

File tree

7 files changed

+57
-19
lines changed

7 files changed

+57
-19
lines changed

Examples/Examples.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.resolved

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ let package = Package(
4848
.package(url: "https://github.com/pointfreeco/swift-snapshot-testing", from: "1.18.4"),
4949
.package(
5050
url: "https://github.com/pointfreeco/swift-structured-queries",
51-
from: "0.16.0",
51+
from: "0.19.0",
5252
traits: [
5353
.trait(name: "StructuredQueriesTagged", condition: .when(traits: ["SharingGRDBTagged"])),
5454
]

[email protected]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ let package = Package(
3939
.package(url: "https://github.com/pointfreeco/xctest-dynamic-overlay", from: "1.5.0"),
4040
.package(url: "https://github.com/pointfreeco/swift-sharing", from: "2.3.0"),
4141
.package(url: "https://github.com/pointfreeco/swift-snapshot-testing", from: "1.18.4"),
42-
.package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.16.0"),
42+
.package(url: "https://github.com/pointfreeco/swift-structured-queries", from: "0.19.0"),
4343
],
4444
targets: [
4545
.target(

Sources/StructuredQueriesGRDBCore/CustomFunctions.swift

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,26 @@ extension [QueryBinding] {
9898
extension QueryBinding {
9999
fileprivate func result(db: OpaquePointer?) {
100100
switch self {
101-
case .blob(let value):
102-
sqlite3_result_blob(db, Array(value), Int32(value.count), SQLITE_TRANSIENT)
103-
case .double(let value):
104-
sqlite3_result_double(db, value)
105-
case .date(let value):
106-
sqlite3_result_text(db, value.iso8601String, -1, SQLITE_TRANSIENT)
107-
case .int(let value):
108-
sqlite3_result_int64(db, value)
101+
case .blob(let blob):
102+
sqlite3_result_blob(db, Array(blob), Int32(blob.count), SQLITE_TRANSIENT)
103+
case .bool(let bool):
104+
sqlite3_result_int64(db, bool ? 1 : 0)
105+
case .double(let double):
106+
sqlite3_result_double(db, double)
107+
case .date(let date):
108+
sqlite3_result_text(db, date.iso8601String, -1, SQLITE_TRANSIENT)
109+
case .int(let int):
110+
sqlite3_result_int64(db, int)
109111
case .null:
110112
sqlite3_result_null(db)
111-
case .text(let value):
112-
sqlite3_result_text(db, value, -1, SQLITE_TRANSIENT)
113-
case .uuid(let value):
114-
sqlite3_result_text(db, value.uuidString.lowercased(), -1, SQLITE_TRANSIENT)
113+
case .text(let text):
114+
sqlite3_result_text(db, text, -1, SQLITE_TRANSIENT)
115+
case .uint(let uint) where uint <= UInt64(Int64.max):
116+
sqlite3_result_int64(db, Int64(uint))
117+
case .uint(let uint):
118+
sqlite3_result_error(db, "Unsigned integer \(uint) overflows Int64.max", -1)
119+
case .uuid(let uuid):
120+
sqlite3_result_text(db, uuid.uuidString.lowercased(), -1, SQLITE_TRANSIENT)
115121
case .invalid(let error):
116122
sqlite3_result_error(db, error.underlyingError.localizedDescription, -1)
117123
}

Sources/StructuredQueriesGRDBCore/QueryCursor.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ extension QueryBinding {
150150
switch self {
151151
case let .blob(blob):
152152
return Data(blob).databaseValue
153+
case let .bool(bool):
154+
return (bool ? 1 : 0).databaseValue
153155
case let .date(date):
154156
return date.iso8601String.databaseValue
155157
case let .double(double):
@@ -160,6 +162,10 @@ extension QueryBinding {
160162
return .null
161163
case let .text(text):
162164
return text.databaseValue
165+
case let .uint(uint) where uint <= UInt64(Int64.max):
166+
return uint.databaseValue
167+
case let .uint(uint):
168+
throw Int64OverflowError(unsignedInteger: uint)
163169
case let .uuid(uuid):
164170
return uuid.uuidString.lowercased().databaseValue
165171
case let .invalid(error):
@@ -168,3 +174,12 @@ extension QueryBinding {
168174
}
169175
}
170176
}
177+
178+
@usableFromInline
179+
struct Int64OverflowError: Error {
180+
let unsignedInteger: UInt64
181+
@usableFromInline
182+
init(unsignedInteger: UInt64) {
183+
self.unsignedInteger = unsignedInteger
184+
}
185+
}

Sources/StructuredQueriesGRDBCore/SQLiteQueryDecoder.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,13 @@ struct SQLiteQueryDecoder: QueryDecoder {
6868
return String(cString: sqlite3_column_text(statement, currentIndex))
6969
}
7070

71+
@inlinable
72+
mutating func decode(_ columnType: UInt64.Type) throws -> UInt64? {
73+
guard let n = try decode(Int64.self) else { return nil }
74+
guard n >= 0 else { throw UInt64OverflowError(signedInteger: n) }
75+
return UInt64(n)
76+
}
77+
7178
@inlinable
7279
mutating func decode(_ columnType: UUID.Type) throws -> UUID? {
7380
guard let uuidString = try decode(String.self) else { return nil }
@@ -81,3 +88,13 @@ struct InvalidUUID: Error {
8188
@usableFromInline
8289
init() {}
8390
}
91+
92+
@usableFromInline
93+
struct UInt64OverflowError: Error {
94+
let signedInteger: Int64
95+
96+
@usableFromInline
97+
init(signedInteger: Int64) {
98+
self.signedInteger = signedInteger
99+
}
100+
}

0 commit comments

Comments
 (0)