非常教程

Sqlite参考手册

C界面 | C Interface

Virtual Table Indexing Information

struct sqlite3_index_info {
  /* Inputs */
  int nConstraint;           /* Number of entries in aConstraint */
  struct sqlite3_index_constraint {
     int iColumn;              /* Column constrained.  -1 for ROWID */
     unsigned char op;         /* Constraint operator */
     unsigned char usable;     /* True if this constraint is usable */
     int iTermOffset;          /* Used internally - xBestIndex should ignore */
  } *aConstraint;            /* Table of WHERE clause constraints */
  int nOrderBy;              /* Number of terms in the ORDER BY clause */
  struct sqlite3_index_orderby {
     int iColumn;              /* Column number */
     unsigned char desc;       /* True for DESC.  False for ASC. */
  } *aOrderBy;               /* The ORDER BY clause */
  /* Outputs */
  struct sqlite3_index_constraint_usage {
    int argvIndex;           /* if >0, constraint is part of argv to xFilter */
    unsigned char omit;      /* Do not code a test for this constraint */
  } *aConstraintUsage;
  int idxNum;                /* Number used to identify the index */
  char *idxStr;              /* String, possibly obtained from sqlite3_malloc */
  int needToFreeIdxStr;      /* Free idxStr using sqlite3_free() if true */
  int orderByConsumed;       /* True if output is already ordered */
  double estimatedCost;           /* Estimated cost of using this index */
  /* Fields below are only available in SQLite 3.8.2 and later */
  sqlite3_int64 estimatedRows;    /* Estimated number of rows returned */
  /* Fields below are only available in SQLite 3.9.0 and later */
  int idxFlags;              /* Mask of SQLITE_INDEX_SCAN_* flags */
  /* Fields below are only available in SQLite 3.10.0 and later */
  sqlite3_uint64 colUsed;    /* Input: Mask of columns used by statement */
};

sqlite3_index_info结构及其子结构被用作虚拟表接口的一部分,以便将信息传递到虚拟表模块的xBestIndex方法中并从中接收答复。** Inputs **下的字段是xBestIndex的输入并且是只读的。xBestIndex将其结果插入** Outputs **字段。

aConstraint []数组记录窗体的WHERE子句约束:

column OP expr

其中OP是=,<,<=,>或> =。使用SQLITE_INDEX_CONSTRAINT_值之一将特定运算符存储在aConstraint []。op中。该列的索引存储在aConstraint []。iColumn中。aConstraint []。如果可以评估右侧的expr(因此约束可用),则可用值为TRUE,否则为false。

优化程序自动将表达式“expr OP列”的条件反转,并对WHERE子句进行其他简化操作,试图将尽可能多的WHERE子句条目转换为上面显示的形式。aConstraint []数组仅报告与正在查询的特定虚拟表相关的WHERE子句条款。

有关ORDER BY子句的信息存储在aOrderBy []中。aOrderBy的每一项记录ORDER BY子句的一列。

colUsed字段指示当前扫描可能需要虚拟表的哪些列。虚拟表列按照它们在传递给sqlite3_declare_vtab()的CREATE TABLE语句中出现的顺序从零开始编号。对于前63列(列0-62),如果列可能被SQLite需要,则在colUsed掩码内设置相应的位。如果该表至少有64列,并且需要第63列右侧的任何列,那么colUsed的第63位也被设置。换句话说,如果表达式(colUsed&((sqlite3_uint64)1 <<(iCol> = 63?63:iCol)))的计算结果为非零,则可能需要列iCol。

xBestIndex方法必须使用有关传递给xFilter的参数的信息来填充aConstraintUsage []。如果argvIndex> 0,则对相应的aConstraint []的右侧进行求值并且成为argv中的argvIndex-th条目。如果aConstraintUsage []。omit为true,那么假定约束完全由虚拟表处理,并且不会被SQLite再次检查。

记录idxNum和idxPtr值并将其传递给xFilter方法。当且仅当needToFreeIdxPtr为true时,才使用sqlite3_free()来释放idxPtr。

orderByConsumed表示xFilter / xNext的输出将以正确的顺序出现以满足ORDER BY子句,因此不需要单独的排序步骤。

估计成本值是特定策略成本的估计值。N的代价表明该策略的成本类似于具有N行的SQLite表的线性扫描。日志成本(N)表示该操作的开销类似于在具有N行的SQLite表的唯一索引字段上的二进制搜索的开销。

estimatedRows值是策略将返回的行数的估计值。

xBestIndex方法可以选择性地使用SQLITE_INDEX_SCAN_ *标志的掩码来填充idxFlags字段。目前只有一个这样的标志 - SQLITE_INDEX_SCAN_UNIQUE。如果xBestIndex方法设置此标志,则SQLite会假定该策略最多只能访问一行。

此外,如果xBestIndex设置了SQLITE_INDEX_SCAN_UNIQUE标志,那么SQLite还假定如果对xUpdate()方法的调用是作为删除或更新虚拟表行的同一语句的一部分进行的,并且实现返回SQLITE_CONSTRAINT,则不需要回滚任何数据库更改。换句话说,如果xUpdate()返回SQLITE_CONSTRAINT,则数据库内容必须与调用xUpdate之前的内容完全相同。相比之下,如果未设置SQLITE_INDEX_SCAN_UNIQUE并且xUpdate返回SQLITE_CONSTRAINT,则由xUpdate方法所做的任何数据库更改都将由SQLite自动回滚。

重要提示:estimatedRows字段已添加到SQLite 版本3.8.2(2013-12-06)的sqlite3_index_info结构中。如果虚拟表扩展名与早于3.8.2的SQLite版本一起使用,则试图读取或写入estimatedRows字段的结果是未定义的(但可能会包含应用程序崩溃)。仅当sqlite3_libversion_number()返回大于或等于3008002的值时,才会使用estimatedRows字段。同样,为版本3.9.0(2015-10-14)添加了idxFlags字段。因此,它只能在sqlite3_libversion_number()返回大于或等于3009000的值时使用。

 SQLite is in the Public Domain.

C界面 | C Interface相关

1.64-Bit Integer Types
2.A Handle To An Open BLOB
3.An Introduction To The SQLite C/C++ Interface
4.Application Defined Page Cache
5.Attempt To Free Heap Memory
6.Authorizer Action Codes
7.Authorizer Return Codes
8.Automatically Load Statically Linked Extensions
9.Binding Values To Prepared Statements
10.C/C++ Interface For SQLite Version 3
11.C/C++ Interface For SQLite Version 3 (old)
12.Cancel Automatic Extension Loading
13.Checkpoint a database
14.Checkpoint Mode Values
15.Close A BLOB Handle
16.Closing A Database Connection
17.Collation Needed Callbacks
18.Column Names In A Result Set
19.Commit And Rollback Notification Callbacks
20.Compare the ages of two snapshot handles
21.Compile-Time Authorization Callbacks
22.Compile-Time Library Version Numbers
23.Compiling An SQL Statement
24.Configuration Options
25.Configure an auto-checkpoint
26.Configure database connections
27.Configuring The SQLite Library
28.Conflict resolution modes
29.Constants Defining Special Destructor Behavior
30.Convenience Routines For Running Queries
31.Copy And Free SQL Values
32.Count The Number Of Rows Modified
33.Create Or Redefine SQL Functions
34.Custom Page Cache Object
35.Data Change Notification Callbacks
36.Database Connection Configuration Options
37.Database Connection For Functions
38.Database Connection Handle
39.Database Connection Status
40.Database Snapshot
41.Declare The Schema Of A Virtual Table
42.Declared Datatype Of A Query Result
43.Define New Collating Sequences
44.Deprecated Functions
45.Deprecated Soft Heap Limit Interface
46.Destroy A Prepared Statement Object
47.Destroy a snapshot
48.Determine if a database is read-only
49.Determine If A Prepared Statement Has Been Reset
50.Determine If An SQL Statement Is Complete
51.Determine If An SQL Statement Writes The Database
52.Determine The Virtual Table Conflict Policy
53.Device Characteristics
54.Dynamically Typed Value Object
55.Enable Or Disable Extended Result Codes
56.Enable Or Disable Extension Loading
57.Enable Or Disable Shared Pager Cache
58.Error Codes And Messages
59.Error Logging Interface
60.Evaluate An SQL Statement
61.Experimental Interfaces
62.Extended Result Codes
63.Extract Metadata About A Column Of A Table
64.File Locking Levels
65.Find The Database Handle Of A Prepared Statement
66.Find the next prepared statement
67.Finding The Subtype Of SQL Values
68.Flags For File Open Operations
69.Flags for the xAccess VFS method
70.Flags for the xShmLock VFS method
71.Flush caches to disk mid-transaction
72.Formatted String Printing Functions
73.Free Memory Used By A Database Connection
74.Function Auxiliary Data
75.Function Flags
76.Fundamental Datatypes
77.Impose A Limit On Heap Size
78.Index Of A Parameter With A Given Name
79.Initialize The SQLite Library
80.Interrupt A Long-Running Query
81.Introduction
82.Last Insert Rowid
83.List Of SQLite Constants
84.List Of SQLite Functions
85.List Of SQLite Objects
86.Load An Extension
87.Loadable Extension Thunk
88.Low-Level Control Of Database Files
89.Low-level system error code
90.Maximum xShmLock index
91.Memory Allocation Routines
92.Memory Allocation Subsystem
93.Memory Allocator Statistics
94.Move a BLOB Handle to a New Row
95.Mutex Handle
96.Mutex Methods Object
97.Mutex Types
98.Mutex Verification Routines
99.Mutexes
100.Name Of A Host Parameter
Sqlite

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来

主页 https://sqlite.org/
源码 https://www.sqlite.org/src/
发布版本 3.21.0

Sqlite目录

1.C界面 | C Interface
2.C Interface: Session Module
3.CLI
4.数据库文件表 | Database File Format
5.数据类 | Datatypes
6.动态内存分配 | Dynamic Memory Allocation
7.外键约束 | Foreign Key Constraints
8.全文索引 | Full-Text Search
9.损坏方式 | How To Corrupt
10.JSON
11.语言 | Language
12.局限性 | Limits
13.锁定和并发 | Locking and Concurrency
14.其他 | Miscellaneous
15.PRAGMA Statements
16.查询计划程序 | Query Planner
17.R*Tree Module
18.RBU Extension
19.语法图 | Syntax Diagrams
20.Tcl Interface
21.虚拟表机制 | Virtual Table Mechanism
22.预写日志 | Write-Ahead Logging
23.SQL 教程
24.SQL 简介
25.SQL 语法
26.SQL DELETE 语句
27.SQL UPDATE 语句
28.SQL NOT NULL 约束
29.SQL 约束
30.SQL CREATE TABLE 语句
31.SQL CREATE DATABASE 语句
32.SQL INSERT INTO SELECT 语句
33.SQL SELECT INTO 语句
34.SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
35.SQL AUTO INCREMENT 字段
36.SQL ALTER TABLE 语句
37.SQL 撤销索引、表以及数据库
38.SQL CREATE INDEX 语句
39.SQL DEFAULT 约束
40.SQL CHECK 约束
41.SQL FOREIGN KEY 约束
42.SQL PRIMARY KEY 约束
43.SQL UNIQUE 约束
44.SQL 通用数据类型
45.SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
46.SQL NULL 值 – IS NULL 和 IS NOT NULL
47.SQL Server 和 MySQL 中的 Date 函数
48.SQL MS Access、MySQL 和 SQL Server 数据类型
49.SQL 函数
50.SQL 总结
51.SQL 主机
52.SQL 快速参考
53.SQL ROUND() 函数
54.SQL Server GETDATE() 函数
55.MySQL DATE_FORMAT() 函数
56.MySQL DATEDIFF() 函数
57.MySQL DATE_SUB() 函数
58.MySQL DATE_ADD() 函数
59.MySQL EXTRACT() 函数
60.MySQL DATE() 函数
61.MySQL CURTIME() 函数
62.MySQL CURDATE() 函数
63.MySQL NOW() 函数
64.SQL Server CONVERT() 函数
65.SQL Server DATEDIFF() 函数
66.SQL Server DATEADD() 函数
67.SQL Server DATEPART() 函数
68.SQLite 命令
69.SQLite 安装
70.SQLite 简介
71.SQLite 运算符
72.SQLite Select 语句
73.SQLite 删除表
74.SQLite 创建表
75.SQLite Insert 语句
76.SQLite 分离数据库
77.SQLite 附加数据库
78.SQLite 创建数据库
79.SQLite 数据类型
80.SQLite 语法
81.SQLite Order By
82.SQLite Limit 子句
83.SQLite Glob 子句
84.SQLite Like 子句
85.SQLite Delete 语句
86.SQLite Update 语句
87.SQLite AND/OR 运算符
88.SQLite Where 子句
89.SQLite 表达式
90.SQLite Distinct 关键字
91.SQLite Having 子句
92.SQLite Group By
93.SQLite Join
94.SQLite 约束
95.SQLite PRAGMA
96.SQLite 事务
97.SQLite 视图
98.SQLite Truncate Table
99.SQLite Alter 命令
100.SQLite Indexed By