 struct AdapterRowImpl : RowImpl {
     let baseRow: Row
     let concreteRowAdapter: ConcreteRowAdapter
-    let adaptedColumnsDescription: AdaptedColumnsDescription
+    let concreteColumnMapping: ConcreteColumnMapping
 
     init(baseRow: Row, concreteRowAdapter: ConcreteRowAdapter) {
         self.baseRow = baseRow
         self.concreteRowAdapter = concreteRowAdapter
-        self.adaptedColumnsDescription = concreteRowAdapter.adaptedColumnsDescription
+        self.concreteColumnMapping = concreteRowAdapter.concreteColumnMapping
     }
 
     var count: Int {
-        return adaptedColumnsDescription.count
+        return concreteColumnMapping.count
     }
 
     func databaseValue(atIndex index: Int) -> DatabaseValue {
-        return baseRow.databaseValue(atIndex: adaptedColumnsDescription.baseColumIndex(adaptedIndex: index))
+        return baseRow.databaseValue(atIndex: concreteColumnMapping.baseColumIndex(adaptedIndex: index))
     }
 
     func dataNoCopy(atIndex index:Int) -> NSData? {
-        return baseRow.dataNoCopy(atIndex: adaptedColumnsDescription.baseColumIndex(adaptedIndex: index))
+        return baseRow.dataNoCopy(atIndex: concreteColumnMapping.baseColumIndex(adaptedIndex: index))
     }
 
     func columnName(atIndex index: Int) -> String {
-        return adaptedColumnsDescription.columnName(adaptedIndex: index)
+        return concreteColumnMapping.columnName(adaptedIndex: index)
     }
 
     func indexOfColumn(named name: String) -> Int? {
-        return adaptedColumnsDescription.adaptedIndexOfColumn(named: name)
+        return concreteColumnMapping.adaptedIndexOfColumn(named: name)
     }
 
     func scoped(on name: String) -> Row? {

    }
}

/// AdaptedColumnsDescription adopts ConcreteRowAdapter
extension AdaptedColumnsDescription : ConcreteRowAdapter {
    /// Part of the ConcreteRowAdapter protocol; returns self.
    public var adaptedColumnsDescription: AdaptedColumnsDescription {
        return self
    }
    

            try concreteAdapterScopes[name] = adapter.concreteRowAdapter(with: statement)
        }
        return ConcreteScopeAdapter(
            concreteColumnMapping: mainConcreteAdapter.concreteColumnMapping,
            scopes: concreteAdapterScopes)
    }
}

/// The concrete row adapter for ScopeAdapter
struct ConcreteScopeAdapter : ConcreteRowAdapter {
    let concreteColumnMapping: ConcreteColumnMapping
    let scopes: [String: ConcreteRowAdapter]
}

extension Row {
