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的未来版本中。