diff --git a/Sources/SQLite/Typed/Coding.swift b/Sources/SQLite/Typed/Coding.swift index 3dc1e6cf..cea2565a 100644 --- a/Sources/SQLite/Typed/Coding.swift +++ b/Sources/SQLite/Typed/Coding.swift @@ -207,6 +207,8 @@ private class SQLiteEncoder: Encoder { encoder.setters.append(Expression(key.stringValue) <- data) } else if let date = value as? Date { encoder.setters.append(Expression(key.stringValue) <- date.datatypeValue) + } else if let uuid = value as? UUID { + encoder.setters.append(Expression(key.stringValue) <- uuid.datatypeValue) } else { let encoded = try JSONEncoder().encode(value) let string = String(data: encoded, encoding: .utf8) diff --git a/Tests/SQLiteTests/FoundationTests.swift b/Tests/SQLiteTests/FoundationTests.swift index cef485fc..075e755b 100644 --- a/Tests/SQLiteTests/FoundationTests.swift +++ b/Tests/SQLiteTests/FoundationTests.swift @@ -25,4 +25,5 @@ class FoundationTests: XCTestCase { let uuid = UUID.fromDatatypeValue(string) XCTAssertEqual(UUID(uuidString: "4ABE10C9-FF12-4CD4-90C1-4B429001BAD3"), uuid) } + } diff --git a/Tests/SQLiteTests/QueryTests.swift b/Tests/SQLiteTests/QueryTests.swift index f4942b88..efcbab94 100644 --- a/Tests/SQLiteTests/QueryTests.swift +++ b/Tests/SQLiteTests/QueryTests.swift @@ -310,6 +310,32 @@ class QueryTests: XCTestCase { } #endif + func test_insert_and_search_for_UUID() { + struct Test: Codable { + var uuid: UUID + var string: String + } + let testUUID = UUID() + let testValue = Test(uuid: testUUID, string: "value") + let db = try! Connection(.temporary) + try! db.run(table.create { t in + t.column(uuid) + t.column(string) + } + ) + + let iQuery = try! table.insert(testValue) + try! db.run(iQuery) + + let fQuery = table.filter(uuid == testUUID) + if let result = try! db.pluck(fQuery) { + let testValueReturned = Test(uuid: result[uuid], string: result[string]) + XCTAssertEqual(testUUID, testValueReturned.uuid) + } else { + XCTFail("Search for uuid failed") + } + } + func test_upsert_withOnConflict_compilesInsertOrOnConflictExpression() { assertSQL( """ diff --git a/Tests/SQLiteTests/TestHelpers.swift b/Tests/SQLiteTests/TestHelpers.swift index 4d8f78fa..a6efa2e7 100644 --- a/Tests/SQLiteTests/TestHelpers.swift +++ b/Tests/SQLiteTests/TestHelpers.swift @@ -95,6 +95,9 @@ let int64Optional = Expression("int64Optional") let string = Expression("string") let stringOptional = Expression("stringOptional") +let uuid = Expression("uuid") +let uuidOptional = Expression("uuidOptional") + func assertSQL(_ expression1: @autoclosure () -> String, _ expression2: @autoclosure () -> Expressible, file: StaticString = #file, line: UInt = #line) { XCTAssertEqual(expression1(), expression2().asSQL(), file: file, line: line)