[前][次][番号順一覧][スレッド一覧]

rails:905

From: Makoto Satoh <satoh.makoto@g...>
Date: Thu, 26 Jan 2006 17:55:35 +0900
Subject: [rails:905] ArgumentError: time out of range: SELECT * FROM

佐藤と申します。

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モジュールに何かあるのか、どこをどういう風に見て
行けば良いか、アドバイスいただけましたらと思います。

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

--
佐藤


添付ファイル

[前][次][番号順一覧][スレッド一覧]

-> @   905 2006-01-26 09:55 [satoh.makoto@g...   ] ArgumentError: time out of range: SELECT * FROM
       906 2006-01-27 12:43 ┗[moriq@m...          ]