FetchableRecordDecoder

An object that decodes fetchable records from database rows.

FetchableRecord+Decodable.swift:68
class FetchableRecordDecoder

The example below shows how to decode an instance of a simple Player type, that conforms to both FetchableRecord and Decodable, from a database row.

struct Player: FetchableRecord, Decodable {
    var id: Int64
    var name: String
    var score: Int
}

try dbQueue.read { db in
    if let row = try Row.fetchOne(db, sql: "SELECT * FROM player WHERE id = 42") {
        let decoder = FetchableRecordDecoder()
        let player = try decoder.decode(Player.self, from: row)
        print(player.name)
    }
}

You will generally not need to create an instance of FetchableRecordDecoder. The above sample code is correct, but you will generally write instead:

try dbQueue.read { db in
    // Prefer the init(row:) initializer:
    if let row = try Row.fetchOne(db, sql: "SELECT * FROM player WHERE id = 42") {
        let player = try Player(row: row)
        print(player.name)
    }

    // OR just directly fetch a player:
    if let player = try Player.fetchOne(db, sql: "SELECT * FROM player WHERE id = 42") {
        print(player.name)
    }
}

The behavior of the decoder depends on the decoded type. See: