佐藤と申します。

Linux上のRails 1.0で、Ruby-ODBC/iodbc/FreeTDS経由でSQLServerへつないでいます。
sqlserverアダプタでmode: odbcとしています。

普通にfind(:all)したのですが、下記のようなエラーが出ました。

ArgumentError: time out of range: SELECT * FROM .......
/usr/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/connection_adapters/abstract_adapter.rb:88:in `log' /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/connection_adapters/sqlserver_adapter.rb:467:in `select' /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/connection_adapters/sqlserver_adapter.rb:227:in `select_all' /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/base.rb:431:in `find_by_sql' /usr/lib/ruby/gems/1.8/gems/activerecord-1.13.2/lib/active_record/base.rb:395:in `find'

"out of range" time rubyとGoogleしてみましたが、Epochより前のTimeオブジェクトは
作れない、などというのがありました。

abstract_adapter.rbのlogを見ましたが、このメソッドの中で例外が投げられている
ようですが、logメソッドの中でTimeに関係しそうなのはBenchmarkモジュールくらいかと
思うのですが、まさかBenchmarkモジュールがそんなバグを含んでいるとは思いにくく。

ログレベルを:debugにして実行したところ、実際にモデルのオブジェクトをロード
するところ(ログメッセージで言うと、[モデルクラス名] Load (0.000000) Argument
Error: time out of range: SELECT * FROM ...と表示されています)で例外が起きて
いるようです。

これはやはりBenchmarkモジュールではなく、ロードしようとしているデータベースの
行にEpochより前の時刻を表すTimeオブジェクトを作ろうとしたための例外と考える
ほうが良いでしょうか?

これは、そういうデータを含むデータベースが悪いのか、sqlserver_adapter.rbの
問題か、はたまたBenchmarkモジュールに何かあるのか、どこをどういう風に見て
行けば良いか、アドバイスいただけましたらと思います。

よろしくお願いいたします。

--
佐藤