 	/// - parameter key: The key used to identify the statement
 	///
 	/// - returns: A compiled SQL statement or `nil` if no statement for the specified key was found
-	public func preparedStatement(forKey key: String) -> Statement? {
+	public func preparedStatement(forKey key: AnyHashable) -> Statement? {
 		return preparedStatements[key]
 	}
 

	/// - parameter key: The key used to identify the statement
	///
	/// - returns: The statement that was removed, or `nil` if the key was not present
	public func removePreparedStatement(forKey key: String) -> Statement? {
		return preparedStatements.removeValue(forKey: key)
	}


	/// - throws: An error if no statement for the specified key was found, any error thrown by `block`, or an error if the statement couldn't be reset
	///
	/// - returns: The value returned by `block`
	public func withPreparedStatement<T>(forKey key: AnyHashable, _ block: (_ statement: Statement) throws -> T) throws -> T {
		guard let statement = preparedStatements[key] else {
			throw DatabaseError("No prepared statement for key \"\(key)\"")
		}
