Segmentation faultが起こったり起こらなかったり、起こったとしても(特定のパターンはあるにせよ)違う場所だったりとはっきりしないエラーに困らされた。
原因が create_aggregateで独自に定義した集約関数を使ってるからだということはわかってる。RubyForgeに関連のありそうな投稿を見つけた。
原因はリファレンスが切れて GCに回収されてしまったオブジェクトを参照しようとしてることにある、ということで良いか? 何ともヘタレな回避策は↓。
GC.disable; db.execute(sql); GC.enable
sqlite3-rubyはもうメンテされないのかね。名前付きプレースホルダの問題も解決されないし。
sql = 'SELECT * FROM Books WHERE Title = :title;' db.execute(sql, {'title'=>'惑星をつぐ者'}) #=> no such bind parameter 'title' とかなんとか db.execute(sql, {':title'=>'星を継ぐもの'}) #=>(゜Д゜ )ウマー
bind_parameterのキーに普通はコロンを付けたりしないよね、多分。