Describing the engine
We already know a great deal about storage engine plugins and can write the basic skeleton fairly quickly:
#include "ha_tocab.h" static handler* tocab_create_handler(handlerton *hton, TABLE_SHARE *table, MEM_ROOT *mem_root) { return new (mem_root) ha_tocab(hton, table); } static int tocab_init(void *p) { handlerton *tocab_hton = (handlerton *)p; tocab_hton->create = tocab_create_handler; return 0; } struct st_mysql_storage_engine tocab_storage_engine = {MYSQL_HANDLERTON_INTERFACE_VERSION }; mysql_declare_plugin(tocab) { MYSQL_STORAGE_ENGINE_PLUGIN, &tocab_storage_engine, "TOCAB", "Sergei Golubchik", "An example storage engine that uses Tokyo Cabinet library", PLUGIN_LICENSE_GPL, tocab_init, NULL, 0x0001, NULL, NULL, NULL } mysql_declare_plugin_end;
This declares a plugin and provides an initialization function. As usual, we need a function to create a share:
static TOCAB_SHARE *find_or_create_share( const char *table_name, TABLE *table) { TOCAB_SHARE *share;...