         } else if let type = T.self as? DatabaseValueConvertible.Type {
             return type.decode(from: row, atUncheckedIndex: columnIndex) as! T
         } else {
-            return try T(from: RowSingleValueDecoder(row: row, columnIndex: columnIndex, codingPath: [column]))
+            return try T(from: RowSingleValueDecoder(row: row, columnIndex: columnIndex, codingPath: codingPath))
         }
     }
 }
 
 private struct RowDecoder: Decoder {
-    let row: Row
-    
-    init(row: Row, codingPath: [CodingKey]) {
-        self.row = row
-        self.codingPath = codingPath
-    }
-    
-    // Decoder
-    let codingPath: [CodingKey]
+    var row: Row
+    var codingPath: [CodingKey]
     var userInfo: [CodingUserInfoKey : Any] { return [:] }
     
     func container<Key>(keyedBy type: Key.Type) throws -> KeyedDecodingContainer<Key> {

    }
    
    func singleValueContainer() throws -> SingleValueDecodingContainer {
        return RowSingleValueDecodingContainer(row: row, codingPath: codingPath, column: codingPath.last!, columnIndex: columnIndex)
    }
}

private struct JSONDecodingRequiredError: Error { }

extension FetchableRecord where Self: Decodable {

}

private struct RowSingleValueDecoder: Decoder {
    var row: Row
    var columnIndex: Int
    var codingPath: [CodingKey]
    var userInfo: [CodingUserInfoKey : Any] { return [:] }
    
    func container<Key>(keyedBy type: Key.Type) throws -> KeyedDecodingContainer<Key> {
