sqlite3源码分析

sqlite3源码分析

1
2
3
4
SQLITE_API int sqlite3_initialize(void);
SQLITE_API int sqlite3_shutdown(void);
SQLITE_API int sqlite3_os_init(void);
SQLITE_API int sqlite3_os_end(void);

sqlite_initialize(void),会初始化SQLite的库,sqlite_shutdown(void),会关闭任何由sqlite_initialize(void)开启的资源。会调用一个生命周期的进程。sqlite_initialize(void)是线程安全的,而sqlite_shutdown(void)不是,所以sqlite_shutdown(void)必须在单线程中调用。sqlite_shutdown(void)在最后一次调用sqlite_initialize(void)后调用。sqlite_initialize(void)可以被其他接口调用所以不需要直接调用,当sqlite_open(void)
调用时,sqlite_initialize(void)也会随即调用。sqlite_os_init(void)会调用系统的制定的SQLite库。而sqlite_os_end(void)会撤销刚才的操作。程序不应该直接调用sqlite_os_init(void)sqlite_os_end(void)。程序应当只调用sqlite_initialize(void)sqlite_shutdown(void)sqlite_os_init(void)会被sqlite_initialize(void)自动调用,而sqlite_os_end(void)会被sqlite_shutdown(void)自动调用。返回相应的状态码。

1
SQLITE_API int sqlite3_config(int, ...);

sqlite3_config(int, …)全局配置,会在sqlite3_initialize()之后调用,非线程安全。

1
SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);

sqlite3_config(int, …)与sqlite3_config区别在于,这可以制定任意一个连接的数据库,单独配置。第二个参数是确保那个部分的数据库会被配置。