[pgsql-jp: 31933] Re: SQLの文法チェック

ISHIDA Akio iakio @ pjam.jpweb.net
2004年 1月 8日 (木) 13:35:33 JST


こんにちは。石田@苫小牧市です。

m.matsu @ steadfast.co.jp wrote:
> 松本@SSと申します。
> 
> On Wed, 07 Jan 2004 21:29:18 +0900
> Tanaka-Qtaro-Yasuhiro <tanaq @ ca2.so-net.ne.jp> wrote:
> 
>>この資料を読むと、構文チェック自体は問い合わせ過程の最初のほうでやって
>>いるんですね。であれば、次のプランナや実行過程に行かずに構文チェックの
>>結果を返すようなオプションを作ればいいのか。ふーむ。
> 
> 
> 
> 自作を考えるのならば、libpqを使ってみても良いのでは。
> 
> ファイルからSQL文を読み込んで、トランザクションブロック内で、
> PQexecで実行し、PQresultStatusでSQL文の結果ステータス、
> PQresultErrorMessageでエラーメッセージが取得できます。
> その後、ROLLBACKすれば、後はお好みな結果出力で
> 単純なチェッカーにはなるとおもいます。
> 

であれば、もっと簡単にこんなシェルスクリプトを考えてみました。
前処理、後処理をするスクリプトも作ったり
(テスティングフレームワークで言うところの setup / teardown?)
レグレッションテストの様に結果を正解と比較して自動評価できたり
すると面白いかもしれませんね。

~$ cat testok.sql
create table t1 (i integer, t text);
~$ cat testng.sql
create table t2 (i integer  t text);

~$ cat testsql.sh
#!/bin/sh

PSQL_CMD='psql -a'

for f in $@; do
  { echo 'begin;'; cat $f; echo 'abort;'; } | $PSQL_CMD
done

~$ sh testsql.sh testok.sql testng.sql
begin;
BEGIN
create table t1 (i integer, t text);
CREATE TABLE
abort;
ROLLBACK
begin;
BEGIN
create table t2 (i integer  t text);
ERROR:  syntax error at or near "t" at character 29
abort;
ROLLBACK


-- 
ISHIDA Akio<iakio @ pjam.jpweb.net>




pgsql-jp メーリングリストの案内