10bet网址
MySQL内部手册


23.5创建句柄

handlerton(handler singleton的缩写)定义了存储引擎,并包含了指向那些应用于存储引擎整体的方法的方法指针,而不是针对每个表工作的方法。这类方法的一些示例包括处理提交和回滚的事务方法。

这里有一个例子例子存储引擎:

handlerton example_hton= {"EXAMPLE", SHOW_OPTION_YES, "示例存储引擎",DB_TYPE_EXAMPLE_DB, NULL, /*初始化*/ 0,/* slot */ 0, /*保存点大小。* /空,/ * close_connection * /空,零,/ *保存点* / / *保存点回滚* /空,/ * release savepoint * /空,/ *提交* /空,/ *滚* /空,/ * * /空,准备/ * * /空恢复,/ * commit_by_xid * /空,/ * rollback_by_xid * /空,/ * create_cursor_read_view * /空,/ * set_cursor_read_view * /空,/ * close_cursor_read_view * / example_create_handler,零,/ *创建一个新的处理程序* / / *删除一个数据库* /空,/ *恐慌调用* /空,/*释放临时锁存*/ NULL, /*更新统计*/ NULL, /*启动一致性快照*/ NULL, /*刷新日志*/ NULL, /*显示状态*/ NULL, /*复制报告发送Binlog */ hton_can_create};

这就是定义handlertonhandler.h

Typedef结构{const char *name;SHOW_COMP_OPTION状态;const char *注释;enum db_type db_type;bool (* init) ();使用uint槽;使用uint savepoint_offset;int (* close_connection) (THD) * (THD);int (*savepoint_set)(THD * THD, void *sv);int (*savepoint_rollback)(THD * THD, void *sv); int (*savepoint_release)(THD *thd, void *sv); int (*commit)(THD *thd, bool all); int (*rollback)(THD *thd, bool all); int (*prepare)(THD *thd, bool all); int (*recover)(XID *xid_list, uint len); int (*commit_by_xid)(XID *xid); int (*rollback_by_xid)(XID *xid); void *(*create_cursor_read_view)(); void (*set_cursor_read_view)(void *); void (*close_cursor_read_view)(void *); handler *(*create)(TABLE *table); void (*drop_database)(char* path); int (*panic)(enum ha_panic_function flag); int (*release_temporary_latches)(THD *thd); int (*update_statistics)(); int (*start_consistent_snapshot)(THD *thd); bool (*flush_logs)(); bool (*show_status)(THD *thd, stat_print_fn *print, enum ha_stat_type stat); int (*repl_report_sent_binlog)(THD *thd, char *log_file_name, my_off_t end_offset); uint32 flags; } handlerton;

一共有30个handlerton元素,其中只有少数是强制的(特别是前四个元素和create ()方法)。

  1. 存储引擎的名称。这是创建表(创建表……引擎= FOO;).

  2. 中要显示的值状态字段时,用户发出显示存储引擎命令。

  3. 的存储引擎注释,即使用时显示的存储引擎的描述显示存储引擎命令。

  4. 在MySQL服务器中唯一标识存储引擎的整数。中定义了内置存储引擎使用的常量handler.h文件。定制引擎应该使用DB_TYPE_UNKOWN

  5. 指向存储引擎初始化器的方法指针。当服务器开始允许存储引擎类在实例化处理程序之前执行任何必要的内务处理时,此方法只被调用一次。

  6. 槽。中的每个存储引擎都有自己的内存区域(实际上是一个指针),用于存储每个连接的信息。通过以下方式访问它螺纹- > ha_data [foo_hton.slot].槽位号由MySQL初始化后foo_init ()被称为。有关的更多信息,请参阅#执行回滚

  7. 保存点偏移量。为了存储每个保存点的数据,存储引擎提供了一个指定大小的区域(0,如果不需要保存点内存)。

保存点偏移量必须静态初始化为存储每个保存点信息所需内存的大小。后foo_init它被更改为保存点存储区域的偏移量,存储引擎不需要使用它。有关更多信息,请参见#指定保存点偏移量

  1. 由事务性存储引擎使用,清除其插槽中分配的所有内存。

  2. 指向处理程序的方法指针savepoint_set ()方法。这用于创建一个保存点并将其存储在请求大小的内存中。

有关更多信息,请参见#实现savepoint_set方法

  1. 指向处理程序的方法指针rollback_to_savepoint ()方法。这用于在事务期间返回保存点。它只用于支持保存点的存储引擎。

有关更多信息,请参见#实现savepoint_rollback()方法

  1. 指向处理程序的方法指针release_savepoint ()方法。这用于在事务期间释放保存点的资源。对于支持保存点的存储引擎,它是可选填充的。

有关更多信息,请参见实现savepoint_release()方法

  1. 指向处理程序的方法指针commit ()方法。这用于提交事务。它仅为支持事务的存储引擎填充。

有关更多信息,请参见#实现承诺

  1. 指向处理程序的方法指针rollback ()方法。这用于回滚事务。它仅为支持事务的存储引擎填充。

有关更多信息,请参见#执行回滚

  1. XA事务性存储引擎必需。准备提交事务。

  2. XA事务性存储引擎必需。返回处于准备状态的事务的列表。

  3. XA事务性存储引擎必需。提交由XID标识的事务。

  4. XA事务性存储引擎必需。由XID标识的回滚事务。

  5. 在创建游标时调用,以允许存储引擎创建一致的读视图。

  6. 调用以切换到特定的一致性读视图。

  7. 调用以关闭特定的读视图。

  8. 强制性的-构造并返回一个处理程序实例。

有关更多信息,请参见处理处理程序实例化

  1. 当删除模式时(例如在使用表空间的存储引擎中),存储引擎需要执行特殊步骤时使用。

  2. 在服务器关闭和崩溃期间调用的清理方法。

  3. InnoDB特殊技能的方法。

  4. InnoDB在开始时调用的特定方法显示引擎InnoDB状态

  5. 方法以开始一致的读取。

  6. 调用此函数以指示应将日志刷新到可靠存储中。

  7. 提供关于存储引擎的人类可读的状态信息显示引擎foo状态

  8. InnoDB用于复制的特定方法。

  9. 指示存储引擎功能的Handlerton标志。中定义了可能的值sql / handler.h和复制:

#define HTON_NO_FLAGS 0 #define HTON_CLOSE_CURSORS_AT_COMMIT (1 << 0) #define HTON_ALTER_NOT_SUPPORTED (1 << 1) #define hton_can_create (1 << 2) #define HTON_FLUSH_AFTER_RENAME (1 << 3) #define HTON_NOT_USER_SELECTABLE (1 << 4)

HTON_ALTER_NOT_SUPPORTED表示存储引擎不能接受ALTER TABLE语句。的联邦以存储引擎为例。HTON_FLUSH_AFTER_RENAME表明刷新日志必须在表重命名后调用。HTON_NOT_USER_SELECTABLE指示用户调用时不应显示存储引擎显示存储引擎.用于系统存储引擎,如二进制日志虚拟存储引擎。