Extract Metadata About A Column Of A Table
提取关于表的列的元数据
int sqlite3_table_column_metadata(
sqlite3 *db, /* Connection handle */
const char *zDbName, /* Database name or NULL */
const char *zTableName, /* Table name */
const char *zColumnName, /* Column name */
char const **pzDataType, /* OUTPUT: Declared data type */
char const **pzCollSeq, /* OUTPUT: Collation sequence name */
int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */
int *pPrimaryKey, /* OUTPUT: True if column part of PK */
int *pAutoinc /* OUTPUT: True if column is auto-increment */
sqlite3_table_column_metadata(X,D,T,C,....)例程返回关于数据库连接X上的数据库D中表T的C列的信息.sqlite3_table_column_metadata()接口返回SQLITE_OK,并填充表中的非NULL指针如果指定的列存在,则具有适当值的最后五个参数。如果指定的列不存在,sqlite3_table_column_metadata()接口将返回SQLITE_ERROR。如果sqlite3_table_column_metadata()的column-name参数是一个NULL指针,那么这个例程只是检查表的存在,如果表存在则返回SQLITE_OK,如果不存在则返回SQLITE_ERROR。如果sqlite3_table_column_metadata(X,D,T,C,...)调用中的表名参数T为NULL,那么结果是未定义的行为。
该列由该函数的第二,第三和第四个参数标识。第二个参数是包含指定表或NULL的数据库名称(即“main”,“temp”或附加数据库)。如果它为NULL,则使用数据库引擎使用的相同算法来搜索所有附加的数据库以解析非限定表引用。
该函数的第三个和第四个参数分别是所需列的表名和列名。
通过写入作为第5个参数和后续参数传递给此函数的内存位置来返回元数据。这些参数中的任何一个都可以是NULL,在这种情况下,元数据的对应元素被省略。
参数OutputType说明5th const char *数据类型6th const char *默认排序顺序的名称7th int如果列有NOT NULL约束,则为真8th int如果列是PRIMARY KEY的一部分,则为True 9th int如果列为AUTOINCREMENT,则为True
由字符指针指向的内存为声明类型返回,并且排序顺序有效,直到下一次调用任何SQLite API函数为止。
如果指定的表实际上是一个视图,则返回一个错误代码。
如果指定的列是“rowid”,“oid”或“_rowid_”,并且该表不是一个WITHOUT ROWID表,并且显式声明了INTEGER PRIMARY KEY列,那么将为明确声明的列设置输出参数。如果没有INTEGER PRIMARY KEY列,那么rowid的输出设置如下:
data type: "INTEGER"
collation sequence: "BINARY"
not null: 0
primary key: 1
auto increment: 0
此函数会导致从磁盘读取所有数据库模式并进行分析(如果尚未完成),并在加载模式时遇到任何错误时返回错误。