 }
 
 
+/// MARK: - ShortDictionary
+
+struct ShortDictionary<Key, Value>: SequenceType {
+    let pairs: [(Key, Value)]
+    
+    init<Sequence: SequenceType where Sequence.Generator.Element == (Key, Value)>(_ sequence: Sequence) {
+        pairs = Array(sequence)
+    }
+    
+    var isEmpty: Bool {
+        return pairs.isEmpty
+    }
+    
+    func generate() -> IndexingGenerator<[(Key, Value)]> {
+        return pairs.generate()
+    }
+}
+
+extension ShortDictionary where Key: Hashable /* Require Hashable to that ShortDictionary can be replaced with Dictionary */ {
+    subscript(key: Key) -> Value? {
+        for (k, value) in pairs {
+            if key == k {
+                return value
+            }
+        }
+        return nil
+    }
+}
+
+
 // MARK: - SQLite identifier quoting
 
 extension String {

            case .NamedValues(let namedValues):
                return sqliteArgumentNames.map { argumentName in
                    if let argumentName = argumentName {
                        for (name, value) in namedValues where name == argumentName {
                            return (argumentName, value?.databaseValue ?? .Null)
                        }
                        return (argumentName, nil)
                    }
                    return (nil, nil)
                }

    
    enum Kind {
        case Values([DatabaseValueConvertible?])
        case NamedValues(ShortDictionary<String, DatabaseValueConvertible?>)
    }
    
    let kind: Kind
