RDBI + SQL Server で NVARCHAR を SELECT するとエラーが発生する


Ruby から SQL Server を操作しようとすると、以下のエラーが出て何もできません。環境は Windows で、rdbi-driver-odbc を使用してデータベースにアクセスしようとしています。

C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/rdbi-driver-odbc-0.1.2/lib/rdbi/driver/odbc.rb:214:in `block in new_execution': undefined method `[]' for nil:NilClass (NoMethodError)
 from C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/rdbi-driver-odbc-0.1.2/lib/rdbi/driver/odbc.rb:211:in `collect'
 from C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/rdbi-driver-odbc-0.1.2/lib/rdbi/driver/odbc.rb:211:in `new_execution'
 from C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/rdbi0.9.1/lib/rdbi/statement.rb:163:in `execute'
 from C:/Ruby21-x64/lib/ruby/gems/2.1.0/gems/rdbi0.9.1/lib/rdbi/database.rb:189:in `execute'
 from C:/dbtest.rb:6:in `<main>' WARNING: #<ODBC::Statement:0x2d69000> was not dropped before garbage collection.

たしかに、Ruby から SQL Server を使うひとなんてまれなんでしょうが、この仕打ちはないんじゃないでしょうか・・・。しかしここで挫けるわけにはいかないので、解決策を調べてみました。

どうやら RDBI 0.1.2 では NVARCHAR 型に対応していない模様です。リポジトリを追っかけると、この問題を修正したコミットがあります。

https://github.com/abracon/rdbi-driver-odbc/commit/af9c80e3d5691b5c9ac38965e2ccf7f206f2636c

この修正を自分の環境に適用すると、エラーは出なくなりました。このプロジェクト、2010年から新しいバージョンが出ていないんですね。きっと安定しているんでしょう。

余談ですが、できるアプリ開発者は不安になる人がでないよう、大した変更がなくてもアプリを更新するらしいです。やはり最近更新があると、きちんと保守されている感じが出て安心ですからね。このブログも更新が滞らないようにしなければ・・・