     func dataNoCopy(atIndex index:Int) -> NSData?
     func columnName(atIndex index: Int) -> String
     func indexForColumn(named name: String) -> Int? // This method MUST be case-insensitive.
-    func detachedRow(row: Row) -> Row               // The row argument has the receiver as an impl.
+    func copiedRow(row: Row) -> Row                 // row.impl is guaranteed to be self.
 }
 
 

            return statement.indexForColumn(named: name)
        }
        
        func detachedRow(row: Row) -> Row {
            return Row(detachedStatement: statement)
        }
    }

    /// - parameter columnName: A column name.
    /// - returns: An optional *Value*.
    public func value<Value: protocol<DatabaseValueConvertible, SQLiteStatementConvertible>>(named columnName: String) -> Value? {
        guard let index = impl.indexForColumn(named: columnName) else {
            fatalError("No such column: \(String(reflecting: columnName))")
        }
        return value(atIndex: index)
    }
    
    /// Returns the value of type `Value` at given column.
