(2009.5.11 新規作成。)
(2013.4更新.)
(2013.4更新.)
HaskellからRDBMSを操作するライブラリには, 次のものがあります。
hsqlとHDBCは、直接SQLを書くもので、似ています。見たところ、hsqlは placeholder の書き方が分からなかったため、HDBCのほうがよさそうです。
HaskellDB と Persistent は, Haskell の文法で書くので, Haskellソースのコンパイル時にSQLの誤りを検出できます。ただし, SQLのすべてを記述できるわけではありません。
Webアプリフレームワーク Yesod で使われている O/Rマッパ. 2017年1月現在の最新版は, バージョン 2.6.
別ページで解説します; 型安全な Persistent を使う
データベースに接続し、テーブルを作って行を挿入するサンプルを書いてみます。コンパイルは次のようにします。
$ ghc -package HDBC-sqlite3 db.hs
SQL文に埋め込む値は, それぞれtoSqlを付けます。
Haskellではリストの要素は同じ型でなければなりませんが、SQLの引数として埋め込む値はそれぞれ違う型ですし、SQLにはナル値があったりもします。
toSqlは次の型を持ち、SqlValue型に揃えます。
型を実行時にしか見ないスクリプト言語に比べるとちょっと面倒ではあります。
(2013.4更新)
Haskellでは演算子を自由に定義できることを活かして、HaskellのコードをSQLにマップするライブラリです。
Haskellソースのコンパイル時に, SQLのエラーも検出できます。
root になって, 次のようにしてインストールします;
# cabal install --global haskelldb
(2017.1) しかし、書き方が SQL とギャップがあるのと、演算子を拡張 (定義) しまくりで、あまり自然ではない。というかやり過ぎ。ActiveRecord のように、条件式は文字列でいいじゃないか。
今なら persistent + esqueleto か。
(2017.1 ここまで)
RDBMS への接続。
演算子 | 意味 |
---|---|
(.==.) | |
(.<>.) | |
(.<.) | |
(.<=.) (.>.) (.>=.) (.&&.) (.||.) (.*.) 乗算 (./.) (.+.) (.-.) (.%.) (.++.) 文字列の連結 _not | |
like | SQL LIKEキーワード. "%"はワイルドカード, "_"は1文字 _in _length isNull notNull _sum _max _min |