%SQLITE_CONFIG_SINGLETHREAD = 1 ' /* nil *' /
%SQLITE_CONFIG_MULTITHREAD = 2 ' /* nil *' /
%SQLITE_CONFIG_SERIALIZED = 3 ' /* nil *' /
%SQLITE_CONFIG_MALLOC = 4 ' /* sqlite3_mem_methods* *' /
%SQLITE_CONFIG_GETMALLOC = 5 ' /* sqlite3_mem_methods* *' /
%SQLITE_CONFIG_SCRATCH = 6 ' /* void*, int sz, int N *' /
%SQLITE_CONFIG_PAGECACHE = 7 ' /* void*, int sz, int N *' /
%SQLITE_CONFIG_HEAP = 8 ' /* void*, int nByte, int min *' /
%SQLITE_CONFIG_MEMSTATUS = 9 ' /* boolean *' /
%SQLITE_CONFIG_MUTEX = 10 ' /* sqlite3_mutex_methods* *' /
%SQLITE_CONFIG_GETMUTEX = 11 ' /* sqlite3_mutex_methods* *' /
'/* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */
%SQLITE_CONFIG_LOOKASIDE = 13 ' /* int int *' /
%SQLITE_CONFIG_PCACHE = 14 ' /* no-op */
%SQLITE_CONFIG_GETPCACHE = 15 ' /* no-op */
%SQLITE_CONFIG_LOG = 16 ' /* xFunc, void* */
%SQLITE_CONFIG_URI = 17 ' /* int */
%SQLITE_CONFIG_PCACHE2 = 18 ' /* sqlite3_pcache_methods2* */
%SQLITE_CONFIG_GETPCACHE2 = 19 ' /* sqlite3_pcache_methods2* */
这些常量是可用的整数配置选项,可以作为第一个参数传递给sqlite3_config函数。
在未来的SQLite版本中可能会添加新的配置选项。现有配置选项可能会停止。应用程序应检查来自sqlite3_config的返回码,以确保呼叫有效。如果调用停用或不支持的配置选项,sqlite3_config函数将返回非零错误代码。
SQLITE_CONFIG_SINGLETHREAD
这个选项没有参数。此选项将线程模式设置为单线程。换句话说,它禁用所有互斥,并将SQLite置于只能由单个线程使用的模式。如果使用SQLITE_THREADSAFE = 0编译时选项编译SQLite,则无法将线程模式从单线程的默认值更改,因此如果使用SQLITE_CONFIG_SINGLETHREAD配置选项调用,则sqlite3_config将返回SQLITE_ERROR。
SQLITE_CONFIG_MULTITHREAD
这个选项没有参数。此选项将线程模式设置为多线程。换句话说,它会禁用数据库连接和准备语句对象的互斥。该应用程序负责序列化对数据库连接和准备语句的访问。但是,其他互斥体已启用,因此只要没有两个线程同时尝试使用相同的数据库连接,SQLite将可以安全地在多线程环境中使用。如果使用SQLITE_THREADSAFE = 0编译时选项编译SQLite,则不可能设置多线程线程模式,并且如果使用SQLITE_CONFIG_MULTITHREAD配置选项调用,则sqlite3_config将返回SQLITE_ERROR。
SQLITE_CONFIG_SERIALIZED
这个选项没有参数。此选项将线程模式设置为序列化。换句话说,此选项启用所有互斥体,包括数据库连接和准备语句对象上的递归互斥体。在这种模式下(SQLite使用SQLITE_THREADSAFE = 1编译时是默认模式),SQLite库本身将对数据库连接和准备语句进行序列化,以便应用程序可以在不同线程中自由使用相同的数据库连接或相同的准备语句与此同时。如果使用SQLITE_THREADSAFE = 0编译时选项编译SQLite,则不可能设置Serialized线程模式,如果使用SQLITE_CONFIG_SERIALIZED配置选项调用,则sqlite3_config将返回SQLITE_ERROR。
SQLITE_CONFIG_MALLOC
此选项需要一个参数,它是一个指向Sklaite3_mem_methds结构实例的指针。该参数指定替代的低级内存分配函数,以代替内置于SQLite中的内存分配函数。在sqlite3_config呼叫返回之前,SQLite自己制作Sklaite3_mem_methds结构的内容的私有副本。
SQLITE_CONFIG_GETMALLOC
此选项使用一个参数,它是一个指向Sklaite3_mem_methds结构实例的指针。Sklaite3_mem_methds结构填充了当前定义的内存分配功能。此选项可用于使用模拟内存分配失败或跟踪内存使用的包装器来重载默认内存分配功能。
SQLITE_CONFIG_MEMSTATUS
此选项使用类型为int的单个参数,解释为布尔值,它启用或禁用内存分配统计信息的收集。当内存分配统计信息被禁用时,以下SQLite函数变得不可操作:
sqlite3_memory_used
sqlite3_memory_highwater
sqlite3_soft_heap_limit64
sqlite3_status
默认情况下,内存分配统计信息是启用的,除非使用SQLITE_DEFAULT_MEMSTATUS = 0编译SQLite,在这种情况下默认情况下禁用内存分配统计信息。
SQLITE_CONFIG_SCRATCH
此选项指定SQLite可用于临时内存的静态内存缓冲区。有三个参数:一个指针,一个8字节对齐的内存缓冲区,从中划分划分的数据,每个临时分配的大小(sz)和最大数量的划痕(N)。sz参数必须是16的倍数。第一个参数必须是指向至少sz * N个字节的内存的8字节对齐缓冲区的指针。SQLite将每个线程使用不超过两个临时缓冲区。所以N应该设置为预期的最大线程数的两倍。SQLite将永远不需要超过数据库页面大小的6倍的临时缓冲区。如果SQLite需要超出此配置选项提供的额外的临时内存,那么sqlite3_malloc将用于获取所需的内存。
SQLITE_CONFIG_PAGECACHE
此选项指定SQLite可以使用默认页面缓存实现的数据库页面缓存的静态内存缓冲区。如果使用SQLITE_CONFIG_PCACHE2选项加载应用程序定义页面缓存实现,则不应使用此配置。此选项有三个参数:指向8字节对齐的内存的指针,每个页面缓冲区的大小(sz)和页数(N)。sz参数应该是最大数据库页面的大小(512到32768之间的两倍),加上每个页眉的一点额外值。根据主机架构,页眉大小为20到40字节。除了浪费的记忆,使sz有点太大,这是无害的。第一个参数应该指向至少sz * N个字节的内存的分配。SQLite将使用第一个参数提供的内存来满足其添加到缓存的前N个页面的内存需求。如果需要额外的页面缓存内存超出此选项提供的内存,那么SQLite将返回到sqlite3_malloc以获得额外的存储空间。第一个参数中的指针必须与8字节边界对齐,否则SQLite的后续行为将不会被定义。
SQLITE_CONFIG_HEAP
此选项指定SQLite将用于其所有动态内存分配需求的静态内存缓冲区,但不包括由SQLITE_CONFIG_SCRATCH和SQLITE_CONFIG_PAGECACHE提供的内容。有三个参数:指向存储器的8字节对齐指针,内存缓冲区中的字节数以及最小分配大小。如果第一个指针(内存指针)为NULL,则SQLite将恢复使用其默认内存分配器(系统的malloc实现)),撤消任何先前调用的SQLITE_CONFIG_MALLOC。如果内存指针不为空,并且SQLITE_ENABLE_MEMSYS3或SQLITE_ENABLE_MEMSYS5被定义,则替代内存分配器将被用于处理所有的SQLite内存分配需求。第一个指针(存储器指针)必须与8字节边界对齐,否则SQLite的后续行为将不会被定义。最小分配大小上限为2 ** 12。最小分配大小的合理值为2 ** 5至2 ** 8。
SQLITE_CONFIG_MUTEX
该选项使用一个参数,它是一个指向sqlite3_mutex_methods结构实例的指针。该参数指定可替代的低级互斥体函数,用于将内置于SQLite中的互斥函数。在sqlite3_config返回之前,SQLite会复制sqlite3_mutex_methods结构的内容。如果使用SQLITE_THREADSAFE = 0编译时选项编译SQLite,则构建中将省略整个互斥子系统,因此使用SQLITE_CONFIG_MUTEX配置选项将调用sqlite3_config将返回SQLITE_ERROR。
SQLITE_CONFIG_GETMUTEX
该选项需要一个参数,它是一个指向sqlite3_mutex_methods结构实例的指针。sqlite3_mutex_methods结构填充了当前定义的互斥体函数。例如,此选项可用于使用用于跟踪互斥量用于性能分析或测试的包装器来重载默认互斥量分配函数。如果使用SQLITE_THREADSAFE = 0编译时选项编译SQLite,则构建中将省略整个互斥子系统,因此使用SQLITE_CONFIG_GETMUTEX配置选项将调用sqlite3_config将返回SQLITE_ERROR。
SQLITE_CONFIG_LOOKASIDE
此选项有两个参数,用于确定每个数据库连接上的后备内存分配器的默认内存分配。第一个参数是每个后备缓冲区槽的大小,第二个参数是分配给每个数据库连接的槽位数。此选项设置默认的后备大小。可以使用SQLite_DBCONFIG_LOOKASIDE动词到sqlite3_db_config来更改单个连接上的后备配置。
SQLITE_CONFIG_PCACHE2
此选项需要一个参数,它是一个指向sqlite3_pcache_methods2对象的指针。此对象指定了自定义页面缓存实现的接口。SQLite创建对象的副本,并将其用于页面缓存内存分配。
SQLITE_CONFIG_GETPCACHE2
此选项需要一个参数,它是一个指向sqlite3_pcache_methods2对象的指针。当前页面缓存实现的SQLite副本到该对象。
SQLITE_CONFIG_LOG
SQLITE_CONFIG_LOG选项有两个参数:指向具有void(*)(void *,int,const char *)的调用签名的函数的指针以及指向void的指针。如果函数指针不为NULL,它将由sqlite3_log调用来处理每个日志记录事件。如果函数指针为NULL,则sqlite3_log函数变为无操作。作为SQLITE_CONFIG_LOG的第二个参数的void指针作为第一个参数传递给应用程序定义的logger函数,无论何时调用该函数。记录器功能的第二个参数是第一个参数到相应的sqlite3_log调用的副本,旨在作为结果代码或扩展结果代码。传递给记录器的第三个参数是通过sqlite3_snprintf格式化后的日志消息。SQLite记录界面不可重入;应用程序提供的记录器功能不得调用任何SQLite接口。在多线程应用程序中,应用程序定义的记录器函数必须是线程安全的。
SQLITE_CONFIG_URI
此选项使用int类型的单个参数。如果非零,则URI处理是全局启用的。如果参数为零,则URI处理将被全局禁用。如果全局启用URI处理,则传递给sqlite3_open,sqlite3_open_v2,sqlite3_open16或作为ATTACH命令的一部分指定的所有文件名将被解释为URI,无论在打开数据库连接时是否设置了SQLITE_OPEN_URI标志。如果全局禁用,则如果在打开数据库连接时设置了SQLITE_OPEN_URI标志,则文件名仅被解释为URI。默认情况下,URI处理全局禁用。可以通过使用定义的SQLITE_USE_URI符号进行编译来更改默认值。
SQLITE_CONFIG_PCACHE和SQLITE_CONFIG_GETPCACHE
这些选项已过时,不能被新的代码使用。它们保留为向后兼容性,但现在是无操作的。