int sqlite3_complete(const char * sql); int sqlite3_complete16(const void * sql);
在命令行输入期间,这些例程非常有用,可以确定当前输入的文本似乎构成了完整的SQL语句,还是在将文本发送到SQLite进行解析之前是否需要其他输入。如果输入字符串似乎是完整的SQL语句,则这些例程将返回1。如果一条语句以分号标记结尾,并且不是格式正确的CREATE TRIGGER语句的前缀,则该语句被认为是完整的。嵌入在字符串文字或带引号的标识符名称或注释中的分号不是独立的标记(它们是嵌入它们的标记的一部分),因此不算作语句终止符。空格和最后一个分号后面的注释将被忽略。
如果语句不完整,这些例程将返回0。如果内存分配失败,则返回SQLITE_NOMEM。
这些例程不会解析SQL语句,因此不会检测语法上不正确的SQL。
如果在调用sqlite3_complete16()之前尚未使用sqlite3_initialize()初始化SQLite,则sqlite3_complete16()会自动调用sqlite3_initialize()。如果该初始化失败,则无论输入SQL是否完成,sqlite3_complete16()的返回值都将为非零。
sqlite3_complete()的输入必须是一个零终止的UTF-8字符串。
sqlite3_complete16()的输入必须是以本地字节顺序的零终止UTF-16字符串。