 	/// - parameter sql: The SQL statement to execute
 	/// - parameter values: A sequence of name/value pairs to bind to named SQL parameters
 	/// - throws: `DatabaseError`
-	public func execute<S: Sequence, T: StatementBindable>(sql: String, parameters values: S) throws where S.Iterator.Element == (String, T) {
+	public func execute<S: Sequence, T: ParameterBindable>(sql: String, parameters values: S) throws where S.Iterator.Element == (String, T) {
 		let statement = try prepare(sql: sql)
 		try statement.bind(parameters: values)
 		try statement.execute()

	return dateFormatter
}()

extension Date: StatementBindable {
	public func bind(toRawSQLiteStatement stmt: SQLitePreparedStatement, parameter idx: Int32) throws {
		guard sqlite3_bind_text(stmt, idx, iso8601DateFormatter.string(from: self), -1, SQLITE_TRANSIENT) == SQLITE_OK else {
			#if DEBUG
				print("Error binding Date \"\(self)\" to parameter \(idx): \(String(cString: sqlite3_errmsg(sqlite3_db_handle(stmt))))")

	}
}

extension Int8: ParameterBindable {
	public func bind(to stmt: SQLitePreparedStatement, parameter idx: Int32) throws {
		guard sqlite3_bind_int64(stmt, idx, Int64(self)) == SQLITE_OK else {
			#if DEBUG
				print("Error binding Int8 \(self) to parameter \(idx): \(String(cString: sqlite3_errmsg(sqlite3_db_handle(stmt))))")
