勇芳软件工作室.汉化:  Constants >

Standard File Control Opcodes

Previous pageReturn to chapter overviewNext page

%SQLITE_FCNTL_LOCKSTATE           = 1

%SQLITE_GET_LOCKPROXYFILE         = 2

%SQLITE_SET_LOCKPROXYFILE         = 3

%SQLITE_LAST_ERRNO                = 4

%SQLITE_FCNTL_SIZE_HINT           = 5

%SQLITE_FCNTL_CHUNK_SIZE          = 6

%SQLITE_FCNTL_FILE_POINTER        = 7

%SQLITE_FCNTL_SYNC_OMITTED        = 8

%SQLITE_FCNTL_WIN32_AV_RETRY      = 9

%SQLITE_FCNTL_PERSIST_WAL         = 10

%SQLITE_FCNTL_OVERWRITE           = 11

%SQLITE_FCNTL_VFSNAME             = 12

%SQLITE_FCNTL_POWERSAFE_OVERWRITE = 13

%SQLITE_FCNTL_PRAGMA              = 14

 

这些整数常量是sqlite3_io_methods对象和sqlite3_file_control接口的xFileControl方法的操作码。

 

SQLITE_FCNTL_LOCKSTATE操作码用于调试。此操作码导致xFileControl方法将锁的当前状态(SQLITE_LOCK_NONE,SQLITE_LOCK_SHARED,SQLITE_LOCK_RESERVED,SQLITE_LOCK_PENDING或SQLITE_LOCK_EXCLUSIVE之一)写入pArg参数指向的整数。此函数在测试期间使用,仅在定义SQLITE_TEST时才需要支持此函数。

 

SQLite使用SQLITE_FCNTL_SIZE_HINT操作码来给VFS层提供数据库文件在当前事务中增长的大小。这个提示不能保证是准确的,但它往往很接近。基础VFS可能会选择根据此提示预先分配数据库文件空间,以帮助写入数据库文件运行更快。

 

SQLITE_FCNTL_CHUNK_SIZE操作码用于请求VFS以大小指定的大小扩展和截断数据库文件。sqlite3_file_control的第四个参数应该指向一个整数(类型int),其中包含用于指定数据库的新块大小。以大块(一次1MB)分配数据库文件空间可能会减少文件系统碎片并提高某些系统的性能。

 

SQLITE_FCNTL_FILE_POINTER操作码用于获取指向与特定数据库连接相关联的sqlite3_file对象的指针。有关其他信息,请参阅sqlite3_file_control文档。

 

SQLite_FCNTL_SYNC_OMITTED操作码由SQLite内部生成,并在数据库连接的PRAGMA同步设置为OFF时发送到所有VFS,代替对xSync方法的调用。当PRAGMA同步= OFF被设置时,一些专门的VFS需要这个信号才能正常运行,但大多数VFS不需要这个信号,应该默认地忽略这个操作码。应用程序不应该使用此操作码调用sqlite3_file_control,因为这样做可能会中断需要它的专用VFS的操作。

 

SQLITE_FCNTL_WIN32_AV_RETRY操作码用于为Windows VFS的某些磁盘I / O操作配置自动重试计数和间隔,以便在存在防病毒程序的情况下提供稳定性。默认情况下,Windows VFS将重试文件读取,文件写入和文件删除操作最多10次,在第一次重试之前延迟25毫秒,延迟每次后续重试增加25毫秒。此操作码允许调整这两个值(10次重试和25毫秒的延迟)。对同一进程中的所有数据库连接的值进行更改。参数是一个指向两个整数的数组的指针,其中第一整数i是新的重试计数,第二个整数是延迟。如果任一整数为负数,则该设置不会更改,但该设置的先前值将写入阵列条目,从而允许询问当前的重试设置。zDbName参数被忽略。

 

SQLITE_FCNTL_PERSIST_WAL操作码用于设置或查询持续写入前置日志设置。默认情况下,当与数据库的最新连接关闭时,用于事务控制的辅助写入日志和共享内存文件将自动删除。设置持久的WAL模式会导致这些文件在关闭后持续存在。当包含数据库文件的目录中没有写入权限的其他进程想要读取数据库文件时,持久化文件是有用的,因为WAL和共享内存文件必须存在才能使数据库可读。此操作码的sqlite3_file_control的第四个参数应为指向整数的指针。该整数为0以禁用持久WAL模式或1以启用持久WAL模式。如果整数为-1,则用当前的WAL持久设置覆盖。

 

SQLITE_FCNTL_POWERSAFE_OVERWRITE操作码用于设置或查询持久的“powersafe-overwrite”或“PSOW”设置。PSOW设置确定xDeviceCharacteristics方法的SQLITE_IOCAP_POWERSAFE_OVERWRITE位。此操作码的sqlite3_file_control的第四个参数应为指向整数的指针。该整数为0以禁用零损伤模式或1使能零损伤模式。如果整数为-1,则用当前零损伤模式设置覆盖。

 

打开写事务后,SQLite会调用SQLITE_FCNTL_OVERWRITE操作码,以指示除非由于某种原因回滚,否则整个数据库文件将被当前事务覆盖。这是由VACUUM操作使用的。

 

SQLITE_FCNTL_VFSNAME操作码可用于获取VFS堆栈中所有VFS的名称。名称是所有VFS垫片,最后的底层VFS写入从sqlite3_malloc获得的内存中,结果存储在sqlite3_file_control第四个参数指向的char *变量中。调用者在完成后负责释放内存。与所有文件控制操作一样,不能保证实际上会做任何事情。调用者应将char *变量初始化为NULL指针,以防此文件控制未被实现。此文件控制仅供诊断使用。

 

无论何时解析PRAGMA语句,都会将SQLITE_FCNTL_PRAGMA文件控件发送到与pragma语句所参考的数据库文件对应的open sqlite3_file对象。SQLITE_FCNTL_PRAGMA文件控件的参数是一个指向字符串(char **)的指针数组,其中数组的第二个元素是编译指示的名称,第三个元素是编译指示的参数,如果编译指示没有论据。SQLITE_FCNTL_PRAGMA文件控件的处理程序可以选择性地使char **参数的第一个元素指向从sqlite3_mprintf()获取的字符串或等效项,并且如果编译指示失败,该字符串将成为pragma或错误消息的结果。如果SQLITE_FCNTL_PRAGMA文件控件返回SQLITE_NOTFOUND,那么正常的PRAGMA处理将继续。如果SQLITE_FCNTL_PRAGMA文件控件返回SQLITE_OK,则解析器假定VFS已经处理了PRAGMA本身,并且解析器生成了一个无操作的准备语句。如果SQLITE_FCNTL_PRAGMA文件控件返回除SQLITE_OK或SQLITE_NOTFOUND之外的任何结果代码,那意味着VFS在处理PRAGMA时遇到错误,并且PRAGMA的编译失败并出现错误。SQLite_FCNTL_PRAGMA文件控件发生在pragma语句分析开始时,因此可以覆盖内置的PRAGMA语句。