SQLeleCoder 包含了 SQLele 的扩展,使您能够将 Codable 类型序列化/反序列化到/从您的 SQLite 数据库中,而无需额外的工作。
嵌套的 Codable 类型(不能编码为单值容器)通过将其编码为 JSON 字符串来支持。
struct Person: Codable {
let name: String
}
struct Task: Codable {
let id: UUID
let text: String
let assignedTo: Person?
let due: Date?
}
let db: Connection = ...
let tasks = [
Task(id: UUID(), text: "Add docs", assignedTo: Person(name: "Lukas"), due: Date() + 3600),
Task(id: UUID(), text: "Enjoy", assignedTo: Person(name: "You"), due: nil),
]
try db.insert(tasks)
let fetched = try db.fetch(Task.self, orderBy: "text")
assert(tasks == fetched)
目前不支持使用嵌套容器或超级容器的 Codable 类型。
当使用 insert(...)
时,该方法会将第一个值编码到一个编码器中,保存访问的键并构建插入查询。 这意味着类型需要为所有可能的列调用其中一个编码方法,而不管数据如何。 Swift 派生的 Codable 实现会为您执行此操作。
SQLite 整数是 64 位有符号整数。 该实现允许编码 64 位无符号整数,但如果它们溢出,将会抛出错误。 同样,解码不适合所请求整数类型的值将抛出错误。