activerecord-oracle_enhanced-adapterの正体

前回のエントリのまとめ

ここで解せないのはrubyforgeから見えているactiverecord-oracle_enhanced-adapterという「いかにも」な名前を持つgemの正体だ。
名前からして、元々あるactiverecord-oracle-adapterを拡張していると思われるが、gems/activerecord/lib/active_records/connection_adapters/にはコピーされず、単独のgemとしてインストールされるので正体が分からない、がしかし頂いたコメントによると、activerecord-oracle-adapterの代わりに使うものだという。

この辺か
ActiveRecord Oracle enhanced adapter « ray_apps_blog

このBlogの作者でもあるRaimonds Simanovskis氏が、Acriverecordをoracleで使う際の問題を解決するためにいくつかの"モンキーパッチ"※を充てていたのだが、それだとメンテナンスにも限界があるし、Rails2.0からOracleのconnection adapterがインストールベースでは提供されなくなったのを機会にRubyForgeとgithubにアップしたから使ってね、ということらしい。

  • パッチ1
//blog.rayapps.com/2008/01/26/make-rails-database-migrations-faster-on-oracle/">Make Rails database migrations faster on Oracle

データベースにOracleを使用した場合に、rake db:schema:dumpで現在の対象ユーザを超えて全てのスキーマを読み込もうとするため、結果が返るのが遅くなる問題の回避のためのようだ。

  • パッチ2
//blog.rayapps.com/2008/01/08/fix-for-rails-20-on-oracle-with-database-session-store/">Fix for Rails 2.0 on Oracle with database session store

同様にOracleを使った場合、セッションストアにデータベースを指定する際に発生する不具合(select_rowsメソッドが実装されていない、セッションが保存されない等)の回避らしい。
また、この時点でRails2.0ではデフォルトでOracle用のアダプタが配布されなかったことにも触れている。

  • パッチ3
//blog.rayapps.com/2007/11/16/some-issues-with-oracle-views-as-activerecord-

source/">Some issues with Oracle views as ActiveRecord source

OracleのカラムのNUMBER型をActiverecordの型のマッピングする際の諸問題(特定の条件(桁数)で、意図せず:decimalにマップされてしまう等)の回避。


なるほど、確かにクリティカルな問題ばかりだ。本格的にOracleを使おうとするとパッチを充てる必要があると思われるが、であれば、どこかでアナウンス、引継ぎが必要なのも確か。
これだけのパッチを充てることのできる作者は識者であることは間違い無いのだし、activerecord-oracle_enhanced-adapterという新しい名前ではなく、元々のactiverecord-oracle-adapterをそのまま置き換えても良いと思うのだが。(Blogによると、作者はOracle ACE Director認定者だ)

rubyforge ActiveRecord Oracle enhanced adapter ファイルリスト
プロジェクトリストを見ると最新のgemは200-01-03に更新されている。確かに"enhanced"なアダプタは更新も盛んなようだ。

自分が使う場合を考えても、スティッキーなセッションをデータベースに待避するケースは必ずあるし、やはり"拡張版"を使うだろう。


※モンキーパッチとは、悪く言えば自分たちの都合の良い振る舞いに処理を書き換えてしまうようなパッチの事を指す。動的な言語はランタイムに処理系を書き換えることができるので、このようなパッチが可能になる。特に、Rubyは(Rubyだけではないが)組み込みの型の殆どの振る舞いを再定義できてしまうため、今回のケースのようなちょっとしたバグフィクスやプラグインなどで多用される傾向にある。