有没有办法检查SQLite3脚本的语法而不运行它?
基本上,我正在寻找等同于ruby -c script.rb
,perl -c script.pl
,php --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”(或类似的东西)。这可能吗?
答案 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关键字,它将返回有关如何执行语句的信息。