うすうす SQLite3 Cocoa ラッパー OmniSQLite
OmniGraffle 5 が出たときに、Omni の公開しているフレームワーク の新しいバージョンがでていた。
で、ながめてみると OmniSQLite という新しいフレームワークが追加されていた。面白そうなので 調べて書いた。かなりシンプルな実装で、今どきのものとしてはかなり機能が少ない。詳しくはリンク先を参照のこと。
まーある程度ややこしいものなら、Core Data 使えばよいからね。
prepared statement が動かない
サンプルを実装していて気づいたんだけど、[OSLPreparedStatement step] がぜんぜん動作しない。sqlite3_step() で SQLITE_OK が返ってくるとかなにがなんだか(SQLITE_ROW か SQLITE_DONE もしくはエラーコードが期待されている)。で、調べてみると sqlite3_prepare() の文字列のサイズに0を渡しているために、statement が NULL になってしまい、正しく動作しないということになっている。
SQLite のドキュメント 見る限りでは、
- "less than zero" -> \0まで文字列を読む
- "non-negative" -> 指定した長さまで
だから 0 ではだめなはず。
これを -1 にすれば正しく動くみたいなので、OmniGroupのフォーラムにパッチを投げておいた。
Google Code Search で 他のコードを調べてみる と、-1 のほうが多数派のようだけど、0 もいくつかある。バージョンかなあ。
(2008.03.20 追記:修正が反映された 2008-03-20 版がダウンロードできるようになっています。仕事早いぞ!)
Omni Source License が変わっていた
今回気づいたのだけど、Omni Source License が 2007 年に変わったようで、「ほぼ」MIT 相当のかなりゆるいライセンスになっていた。2005 年ごろは改変したソースの再配布に制限があったり(「Cocoa Life Vol.1」によれば)、ちょっとめんどうなライセンスだったのだけど、今のものならずいぶん使いやすくなったと思う。GJ だよ Omni。