通常のPrepared Statementを少し使いやすくする処理系 eps
を作りました。
epsはExtended Prepared Statementの略です。
簡単に言うと、こんな感じでPrepared Statementを記述したくて作ったものです。
prepare foo(age:int, name:text="no name!") as select * from people where name={name} and age={age};
ようするに
- ラベル付き引数を使いたい
- デフォルト引数を使いたい
- ついでに型を考慮した呼び出し側のコードが出力したい
わけでした。
使い方
上のSQLをtest.sql
というファイルで保存したとして、
eps.exe -input test.sql -format sql
とすると
prepare foo(int, text) as select * from people where name = $2 and age = $1;
が出力されます。また
eps.exe -input test.sql -format ocaml
とすると
let prep_foo = "prepare foo(int, text) as select * from people where age = $1 and name = $2;" let exec_foo ~age ?(name="no name!") () = Printf.sprintf "execute foo(%d, '%s');" age name
のように、デフォルト引数、ラベル付き引数、型制限が付いたコードが出力されます。