/ 最近 .rdf 追記 編集 設定 本棚

脳log[20060608] (すっぱいブドウ ∩ 負け惜しみ)≠φ | sqlite3-rubyのバグ。SQLite3::Database#create_aggregate()などに注意



2006年06月08日 (木)

(すっぱいブドウ ∩ 負け惜しみ)≠φ

その心は、ブドウを取りそこなったキツネは、それをすっぱいと言う。

へぇ〜へぇ〜へぇ〜

[Ruby][SQLite] sqlite3-rubyのバグ。SQLite3::Database#create_aggregate()などに注意

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のキーに普通はコロンを付けたりしないよね、多分。