 
 /// The error that triggers JSON decoding
 private struct JSONRequiredError: Error { }
+
+/// The error for missing columns
+private struct MissingColumnError: Error {
+    var column: String
+}
 
 @available(macOS 10.12, iOS 10.0, watchOS 3.0, tvOS 10.0, *)
 fileprivate var iso8601Formatter: ISO8601DateFormatter = {

    }
    
    func singleValueContainer() throws -> SingleValueDecodingContainer {
        fatalError("single value decoding from database row is not supported")
    }
    
    struct KeyedContainer<Key: CodingKey>: KeyedDecodingContainerProtocol {

}()

private extension DatabaseDateDecodingStrategy {
    @inline(__always)
    func decodeIfPresent(fromRow row: Row, columnAtIndex index: Int) -> Date? {
        if let sqliteStatement = row.sqliteStatement {
            return decodeIfPresent(
                sqliteStatement: sqliteStatement,
                index: Int32(index))
        } else {
            return decodeIfPresent(
                from: row[index],
                conversionContext: ValueConversionContext(row).atColumn(index))
        }
    }
    
    @inline(__always)
    func decode(fromRow row: Row, columnAtIndex index: Int) -> Date {
        if let sqliteStatement = row.sqliteStatement {
            return decode(
                sqliteStatement: sqliteStatement,
                index: Int32(index))
        } else {
            return decode(
                from: row[index],
                conversionContext: ValueConversionContext(row).atColumn(index))
        }
    }
    
    @inline(__always)
    func decode(sqliteStatement: SQLiteStatement, index: Int32) -> Date {
        switch self {
