SQLite C 接口
注册一个虚拟表实现
int sqlite3_create_module( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ void *pClientData /* Client data for xCreate/xConnect */ ); int sqlite3_create_module_v2( sqlite3 *db, /* SQLite connection to register module with */ const char *zName, /* Name of the module */ const sqlite3_module *p, /* Methods for the module */ void *pClientData, /* Client data for xCreate/xConnect */ void(*xDestroy)(void*) /* Module destructor function */ );
这些例程用于注册新的虚拟表模块名称。在使用模块创建新的虚拟表之前以及为模块使用预先存在的虚拟表之前,必须注册模块名称。
模块名称注册在第一个参数指定的数据库连接上。模块的名称由第二个参数给出。第三个参数是指向虚拟表模块实现的指针。第四个参数是一个任意的客户端数据指针,当创建或重新初始化一个新的虚拟表时,它被传递到虚拟表模块的xCreate和xConnect方法中。
sqlite3_create_module_v2() 接口有第五个参数,它是指向 pClientData 析构函数的指针。当 SQLite 不再需要 pClientData 指针时,SQLite 将调用析构函数(如果它不为 NULL)。如果对 sqlite3_create_module_v2() 的调用失败,也会调用析构函数。sqlite3_create_module() 接口等同于带有 NULL 析构函数的 sqlite3_create_module_v2()。
如果第三个参数(指向 sqlite3_module 对象的指针)为 NULL,则不会创建新模块,并且会删除任何具有相同名称的现有模块。