Life Goes On

まあまあだけど楽しんでる方です

HaskellDB

HaskellDBを触っています。
基本が射影と制限と直積(関係代数 - Wikipedia)で、INNER JOIN ましてや OUTER JOIN なんて完全に無視してるところとか、NULL可の列とNULL不可の列をそのままでは比較できないところとか、とにかく理論派です。現場の都合なんて考えちゃいない。
実装もちょっとアヤしくて、timestamp型の列とかdate型の列とか参照しようとしただけでエラーになります。どうも型変換に失敗してるっぽい(データベースは PostgreSQLMySQL とか HSQL なら上手くいくかも)。あとは複数のテーブルに同じ名前の列があったとき、テーブルをきちんと指定しても片方のテーブルのデータしか取り出せませんでした。どっちもバグじゃないかなぁ。
でも、こういうの大好き。

test = do
  pet <- table pets
  owner <- table owners
  -- ownerId が NULL可だと、Int 型と Maybe Int 型なので、そのままでは比較できない
  restrict (owner!xid .==. pet!ownerId)
  project (
    name << pet!name
    -- ↓の行がエラーになる
    -- birthDate << pet!birthDate
    -- ownerName が name だと、テーブルを指定してもpet!nameが返ってしまう
    ownerName << owner!ownerName
    )