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 个(从 0 开始)关键字,并使 *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 理解的关键字数量可能取决于编译时选项。例如,如果 SQLite 使用 -DSQLITE_OMIT_VACUUM 选项编译,“VACUUM”就不是关键字。此外,SQLite 的未来版本可能会添加新的关键字。