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,则不创建新的模块,并且任何具有相同名称的现有模块都将被删除。