如何检查SQLite3语法?

时间:2010-05-27 18:32:26

标签: sqlite syntax-checking

有没有办法检查SQLite3脚本的语法而不运行它?

基本上,我正在寻找等同于ruby -c script.rbperl -c script.plphp --syntax-check script.php等的SQLite3。

我曾考虑使用explain,但我想检查的大多数脚本都会被保留以供参考(并且不一定有相关的数据库)。使用explain也会使Syntastic之类的内容难以使用。 (也就是说,我只想检查语法,而不是语义。)

更新

我很困惑。假设我想对语法进行检查:

select * from foo;

我可以这样做:

echo 'explain select * from foo;' | sqlite3

但后来我得到了:

SQL error near line 1: no such table: foo

我希望看到的是“语法OK”(或类似的东西)。这可能吗?

3 个答案:

答案 0 :(得分:1)

到目前为止,对我来说效果很好的语法检查器是Ruby gem sqlint

它检查ANSI SQL:它不是sqlite方言特有的。

2015年,问题被提出5年后出现

它需要Ruby和C编译器(用于构建pg_query原生扩展。)

以下是输出示例: $ sqlint ex7a.sql ex7a.sql:81:10:ERROR syntax error at or near "*"

在真正的Unix传统中,如果语法正确,sqlint不会产生输出。正如提问者所问,它不会检查表格是否存在。

答案 1 :(得分:0)

您可以对内存数据库使用EXPLAIN。使用sqlite3,您可以通过将“:memory:”作为文件名传递给sqlite3_open_v2()来获取内存数据库。

答案 2 :(得分:0)

正如您所提到的,您可以使用EXPLAIN关键字。如果省略了前面的EXPLAIN关键字,它将返回有关如何执行语句的信息。