         return impl.dictionary(defaultColumnNames: defaultColumnNames)
     }
     
+    // Support for array-based bindings
     private struct BindingsArrayImpl : BindingsImpl {
         let array: [SQLiteValueConvertible?]
         init(array: [SQLiteValueConvertible?]) {

        self.init(values)
    }
    
    // Supported uage: Statement.bindings property
    //
    //     let statement = db.UpdateStatement("INSERT INTO persons (name, age) VALUES (?,?)"
    //     statement.bindings = ["Arthur", 41]

    }
}


// The protocol for Bindings underlying implementation
protocol BindingsImpl {
    func bindInStatement(statement: Statement)
    func dictionary(defaultColumnNames defaultColumnNames: [String]?) -> [String: SQLiteValueConvertible?]
}


// MARK: - ArrayLiteralConvertible

extension Bindings : ArrayLiteralConvertible {
    /**
    Returns a Bindings from an array literal:

        db.selectRows("SELECT ...", bindings: ["Arthur", 41])
    */
    public init(arrayLiteral elements: SQLiteValueConvertible?...) {
        self.init(elements)
    }
}


// MARK: - DictionaryLiteralConvertible

extension Bindings : DictionaryLiteralConvertible {
    /**
    Returns a Bindings from a dictionary literal:
    
        db.selectRows("SELECT ...", bindings: ["name": "Arthur", "age": 41])
    */
    public init(dictionaryLiteral elements: (String, SQLiteValueConvertible?)...) {
        var dictionary = [String: SQLiteValueConvertible?]()
        for (key, value) in elements {
