読者です 読者をやめる 読者になる 読者になる

MySQL/Ruby 2.8.1

Ruby MySQL

Ruby 1.9.1 がリリースされました。が、MySQL/Ruby は 1.9 に対応してませんでした。気づいてませんでした… orz。

とりあえず、Ruby 1.9.1 でもコンパイルと簡単なテストを通るようにしてみたものを、MySQL/Ruby 2.8.1 としてリリースしました。

ダウンロードはこの辺から。
http://rubyforge.org/frs/?group_id=4550

Ruby 1.9 の大きな特徴である M17N についてはまったく対応してません。なので、データベースから取り出した文字列は、全部 ASCII-8BIT になります…と思います…たぶん…。

Ruby 1.9.1 と MySQL 5.1 のリリースに合わせて、Ruby/MySQL 3.0 をリリースしようとこっそりたくらんでいたのですが、全然間に合ってません… (--;

予定しているのは MySQL/Ruby ではなく Ruby/MySQL です。ややこしいのですが (^^; MySQL/RubyMySQL 付属の libmysqlclient を使用した C 言語で書かれている Ruby の拡張ライブラリですが、Ruby/MySQL はすべて Ruby で記述されたライブラリです。つまりコンパイル不要です。

C ではなく Ruby で書いてあると速度が心配なのですが、Ruby 1.9 なのでなんとかなるんじゃないかと楽観してます。うまくいったら C版の MySQL/Ruby は 2.8.x で終了です。

今のところ次のような感じになる予定です。

  • Mysql.new の引数に URI 形式 "mysql://user:pass@hostname:port/db" を受け付ける。
  • Mysql.new にブロックを渡したら、ブロックから抜ける時に Mysql#close する。
  • mysqld の charset と ruby の encoding との間で文字列を自動変換する。
  • クエリは基本的にプリペアドステートメント。Mysql#query("select ?,?,?", 1, 2, 3) のような感じで記述できる。
  • 結果セットは Enumeratable
  • サーバエラーは、エラーの種類毎に独立したクラス(今はすべて Mysql::Error)。
  • libmysqlclient を使用しないので、GPL 汚染を気にしなくてよい(たぶん現状でも問題ないはずだけど…)。
  • たぶん、たくさんの非互換 (^^;

Ruby から MySQL を使っている人でも、直接 Mysql クラスを使っている人は少ないと思うので、どう変わろうと興味がない人ばかりかもしれませんけど。