SQLite binding for Clean

というわけで、完成しました。
いまのところWindows専用だけど、ちょっとコードを修正するだけで他のOSでも動くようになるはず。
Sourceforge.netにプロジェクト申請しておいたので、準備が出来次第、そっちに登録しておきます。
急いで使ってみたいという人が、もしもいたなら(いないと思うけど)、コメントしてもらえれば、どこかに暫定的にアップします。

      • -

こんなDBに対して、

sqlite> .schema tbl1
CREATE TABLE tbl1 (i INTEGER, r REAL, t TEXT);
sqlite> select i,r,t from tbl1;
1|1.1|aaa
2|2.2|bbb
3|3.3|ccc

こんなプログラムでアクセスできます。

Start w # (c,w) = sql_open "db" w
          (s,c) = sql_connection_status c
        | s <> SQL_OK = trace (toString s +++ "\n") ({},[],w)
        # (mst,c) = sql_prepare "SELECT i,r,t FROM tbl1" c
          (nml,rsl,c) = case mst of
                          Nothing # (st,c) = sql_connection_status c
                                  = trace (toString st +++ "\n") ({},[],c)
                          Just st # (nml,st) = sql_column_names st
                                    (rsl,st) = each st
                                    c = sql_finalize st c
                                  = (nml,rsl,c)
          w = sql_close c w
        = (nml,rsl,w)
  where
    each st # st = sql_step st
              (mrs,st) = sql_column_values st
            = case mrs of
                Nothing = ([],st)
                Just rs # (rsl,st) = each st
                        = ([rs:rsl],st)

実行結果は、こうなります。(整形済み)

({"i","r","t"},
 [{(SQL_INT 1),(SQL_DOUBLE 1.1),(SQL_TEXT "aaa")},
  {(SQL_INT 2),(SQL_DOUBLE 2.2),(SQL_TEXT "bbb")},
  {(SQL_INT 3),(SQL_DOUBLE 3.3),(SQL_TEXT "ccc")}],
 65536)