             self.sqliteDictionary = sqliteDictionary
         }
         
+        var count: Int {
+            return columnNames.count
+        }
+        
         func sqliteValueAtIndex(index: Int) -> SQLiteValue {
             return sqliteValues[index]
         }
         
+        func columnNameAtIndex(index: Int) -> String {
+            return columnNames[index]
+        }
+        
         func indexForColumnNamed(name: String) -> Int? {
             return columnNames.indexOf(name)
         }
     }
+    
+    
+    // MARK: - UnsafeRowImpl
     
     // UnsafeRowImpl can not be safely accessed after sqlite3_step() or sqlite3_finalize() has been called.
     // It preserves the column ordering of the statement.

            return dic
        }
    }
    
    private struct DictionaryRowImpl: RowImpl {
        let sqliteDictionary: [String: SQLiteValue]
        
        init (sqliteDictionary: [String: SQLiteValue]) {
            self.sqliteDictionary = sqliteDictionary
        }
        
        func sqliteValueAtIndex(index: Int) -> SQLiteValue {
            return sqliteDictionary[advance(sqliteDictionary.startIndex, index)].1
        }
        
        func indexForColumnNamed(name: String) -> Int? {
            if let index = sqliteDictionary.indexForKey(name) {
                return distance(sqliteDictionary.startIndex, index)
            } else {
                return nil
            }
        }
    }
}

            self.statement = statement
        }
        
        var count: Int {
            return statement.columnCount
        }
        
        func sqliteValueAtIndex(index: Int) -> SQLiteValue {
            return statement.sqliteValueAtIndex(index)
        }
        
        func columnNameAtIndex(index: Int) -> String {
            return statement.columnNames[index]
        }
        
        func indexForColumnNamed(name: String) -> Int? {
