2012/04/15

Ruby 1.9.3でfirebirdクライアントを使ってみた

FireBirdはファイルベースで扱えるのでFast-CGIなどで組む場合には非常に便利です。 SQLite3の機能では型が不足していたり、ストアドプロシージャーを使いたい場合などには良い代替案になると思います。

xstowで管理しているrubyのバージョンを1.9.3-p125に更新してから、firebirdに接続するためにfbパッケージをgemから導入しようとしたところエラーが発生しました。

Gitから最新版を入手しましたが、1.9.2で非推奨となっていたSTR2CSTRが本格的に使えなくなったので、コードを書き換えたのでログを残しておきます。

Githubからのコードの取得

作業環境がUbuntu 10.04 LTSなので、gitコマンドを使って作業領域にfbディレクトリを作成します。

$ git clone https://github.com/wishdev/fb.git
$ cd fb
$ ruby extconf.rb
$ make

ここでとりあえずコンパイラは通りますが、make installをしてrubyからDBを作成しようとするとエラーが出て作業を続ける事ができなくなります。

ここはfb.cからSTR2CSTRマクロを使っている個所を一括置換で修正しました。 そうすると今度は沢山あったワーニングの中にエラーが1つ増えて、途中でコンパイルが終了してしまいます。

コンパイル時のエラー

Githubからfbの最新版を取得して、STR2CSTRをStringValuePtrに機械的に置き換えてコンパイルしましたが、次のようなエラーが表示されました。

STR2CSTRをStringValuePtrに書き換えた後のコンパイルエラー

fb.c:2185: error: lvalue required as unary ‘&’ operand

解決策

ここのコードは以前でもSafeStringValueを通すべきなんじゃないかなと思いましたが、 STR2CSTRの他に、以下のような修正を1個所で行なえばruby 1.9.3でfirebirdが使えるようになります。

エラー発生個所の変更前のコード


    sql = StringValuePtr(rb_ary_shift(args));

エラー発生個所の変更後のコード


    VALUE r_sql = rb_ary_shift(args);
    SafeStringValue(r_sql);
    sql = StringValuePtr(r_sql);

0 件のコメント: