5

有没有办法在不运行 SQLite3 脚本的情况下检查它的语法?

基本上,我正在寻找 SQLite3 等价的ruby -c script.rb, perl -c script.pl,php --syntax-check script.php等。

我曾考虑过使用explain,但我想检查的大多数脚本都保留下来以供参考(不一定有关联的数据库)。使用explain也会使其难以与Syntastic 之类的东西一起使用。(也就是说,我只想检查语法,而不是语义。)

更新:

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

select * from foo;

我可以做类似的事情:

echo 'explain select * from foo;' | sqlite3

但后来我得到:

SQL error near line 1: no such table: foo

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

4

3 回答 3

2

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

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

它于 2015 年问世,也就是这个问题提出 5 年后

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

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

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

于 2016-06-29T12:37:31.530 回答
1

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

于 2010-05-27T18:38:17.093 回答
0

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

于 2010-05-27T18:36:32.867 回答