2010-05-27 52 views
3

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

基本上,我寻找的SQLite3相当于ruby -c script.rbperl -c script.plphp --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“(或类似的东西)。那可能吗?

+0

这与我在想的很接近:http://developer.mimer.se/validator/parser200x/index.tml#parser – 2010-05-28 13:10:25

回答

0

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

0

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

1

语法检查器,它为我的作品很好,到目前为止是Ruby宝石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将不会生成输出。正如提问者所问,它不检查表是否存在。

+0

感谢分享!几周前我开始意识到'sqlint',但你的回答让我实际安装它并试用它。 – 2016-06-29 14:47:02