きりかノート 3冊め

おあそびプログラミング

うすうす 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