おや?Elephantのようすが・・・
EmacsでLispに出会い、いろいろあってCommon Lispに出会ってから約4年。業務のちょっとした作業をCommon Lispで自動化出来る程度にはなりましたが、読んだ本の数と使うようになってからの年数を考えるとレベルが低すぎる私。考えてみるとCommon LispでDB接続すらしたことありません。そんなわけでElephantでSQLite3に接続して、ゴニョゴニョしてみようと思ったのでした。でした。
32bit LinuxのSBCLでお試し。Elephant他はCLBUILDでインストール。バックエンドのSQLite3はテキトーにインストール済み。
CL-USER> (asdf:oos 'asdf:load-op :elephant) ; エラー -> config.sexp をコピーして my-config.sexpを作って、設定書いてね!
my-config.sexpを以下の内容で作成 (libsqlite3.so, sqlite3の格納パスを:clsql-lib-paths に追加)。
RETRYしたら、今度は大丈夫っぽい。デバッガが起動することもなくload完了。
Elephant->CLSQL->SQLite3の場合は ele-clsqlと ele-sqlite3も必要なのかな?とりあえず読み込み。
CL-USER> (asdf:oos 'asdf:load-op :ele-clsql) CL-USER> (asdf:oos 'asdf:load-op :ele-sqlite3)
次は open-storeですかね。
CL-USER> (elephant:open-store '(:clsql (:sqlite3 "/home/unspeakable/test.db"))) ; エラー -> (HANDLER-CASE (QUERY select count(*) from keyvalue) ; ((SQL-DATABASE-ERROR NIL NIL))) ; のマクロ展開でエラーになってるくせー。 ; 以下展開結果 ; (HANDLER-CASE (CLSQL-SYS:QUERY "select count(*) from keyvalue") ; ((CLSQL-SYS:SQL-DATABASE-ERROR NIL NIL))) ; ((CLSQL-SYS:SQL-DATABASE-ERROR NIL NIL))云々・・・
え、なんかSQL-DATABASE-ERROR投げるところの括弧が多いような・・・?ちょっくら弄ってみようかしらね。elephant/src/db-clsql/sql-controller.lisp:299行目辺りを括弧一つ削除。
CL-USER> (elephant:open-store '(:clsql (:sqlite3 "/home/unspeakable/test.db")))
あ、通った。どうしてこうなった。とりあえず、これでいいのかな。Elephantのチュートリアル見ながら、いろいろ試してみよう。
という先週末の記録。