         }
     }
     
+    // Support for dictionary-based bindings
     private struct BindingsDictionaryImpl : BindingsImpl {
         let dictionary: [String: SQLiteValueConvertible?]
         init(dictionary: [String: SQLiteValueConvertible?]) {

        self.init(values)
    }
    
    // Bindings([String: SQLiteValueConvertible?])
    //
    // Supported usage: DictionaryLiteralConvertible adoption:
    //
    //     db.execute("INSERT ... (:name, :age)",
    //                bindings: ["name"; "Arthur", "age": 41])
    public init(_ dictionary: [String: SQLiteValueConvertible?]) {
        impl = BindingsDictionaryImpl(dictionary: dictionary)
    }
    
    // Bindings(NSDictionary)
    //
    // This is a convenience initializer.
    //
    // Without it, the following code won't compile:
    //
    //    let statement = try db.updateStatement("INSERT INTO persons (name, age) VALUES (:name, :age)")
    //    let persons = [
    //        ["name": "Arthur", "age": 41],
    //        ["name": "Barbara"],
    //    ]
    //    for person in persons {
    //        statement.clearBindings()
    //        statement.bind(Bindings(person))  // Error
    //        try statement.execute()
    //    }
    public init(_ dictionary: NSDictionary) {
        var values = [String: SQLiteValueConvertible?]()
        for (key, item) in dictionary {
            if let key = key as? String {

        self.init(values)
    }
    
    
    // MARK: - Not Public
    
    let impl: BindingsImpl
    
    // Supported usage: Statement.bindings property
    //
    //     let statement = db.UpdateStatement("INSERT INTO persons (name, age) VALUES (?,?)"
    //     statement.bindings = ["Arthur", 41]
