SQLite C 接口

SQL 关键字检查

int sqlite3_keyword_count(void);
int sqlite3_keyword_name(int,const char**,int*);
int sqlite3_keyword_check(const char*,int);

这些例程提供对 SQLite 识别的 SQL 语言关键字集的访问。应用程序可以使用这些例程来确定是否需要转义特定标识符(例如,通过用双引号引起来)以免混淆解析器。

sqlite3_keyword_count() 接口返回 SQLite 理解的不同关键字的数量。

sqlite3_keyword_name(N,Z,L)接口找到第N个关键字,使*Z指向该关键字,表示为UTF8,并将关键字中的字节数写入*L。*Z 指向的字符串不是以零结尾的。如果 N 在范围内,则 sqlite3_keyword_name(N,Z,L) 例程返回 SQLITE_OK,否则返回 SQLITE_ERROR。如果 Z 或 L 为 NULL 或无效指针,则调用 sqlite3_keyword_name(N,Z,L) 会导致未定义的行为。

sqlite3_keyword_check(Z,L) 接口检查 Z 指向的 L 字节 UTF8 标识符是否是关键字,如果是则返回非零,否则返回零。

SQLite 使用的解析器是宽容的。通常可以使用关键字作为标识符,只要这种使用不会导致解析歧义。例如语句“CREATE TABLE BEGIN(REPLACE,PRAGMA,END);” 被 SQLite 接受,并创建一个名为“BEGIN”的新表,其中包含名为“REPLACE”、“PRAGMA”和“END”的三列。然而,最佳做法是避免使用关键字作为标识符。用于避免关键字名称冲突的常用技术包括:

请注意,SQLite 可以理解的关键字数量取决于编译时选项。例如,如果使用-DSQLITE_OMIT_VACUUM选项编译 SQLite,则“VACUUM”不是关键字。此外,新的关键字可能会添加到 SQLite 的未来版本中。

另请参阅 对象常量函数的列表。