2010-05-27 109 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