[ruby-list:39048] Ruby/MySQLのquery()

From: TAKAISHI Hayato <rio-t@...>
Date: 2004-01-15 16:17:25 UTC
List: ruby-list #39048
こんにちは、高石です。

Ruby/DBIのMySQL用ドライバで、MySQL/RubyのかわりにRuby/MySQL
を使えないものかと考え、試してみたところ、MySQL#query()の挙
動が違うためにエラーになってしまいました。

@field_count == 0 の時に、MySQL/Rubyでは nil を返すのに対し
て、Ruby/MySQLでは self を返すのが原因で、Ruby/DBIのMySQL用
ドライバは、query()の返り値が偽でない場合に、その値に対して
freeメソッドを実行しようとするため、MySQL#free()を実行しよう
としてNoMethodErrorになります。

とりあえず、以下のようにMySQL/Rubyと同じ挙動にしてやればよさ
そうですが、他の部分をちゃんと見てないので、別の所で何か問題
があるかもしれません。
一応、Ruby/DBI 0.0.21 と組合せて、単純なinsertやselect等を行っ
てみた限りでは問題なく動いているようです。

ruby-mysql-0.2.3a に対するパッチです。


% diff -u mysql.rb.org mysql.rb
--- mysql.rb.org	2004-01-11 22:37:44.000000000 +0900
+++ mysql.rb	2004-01-16 00:28:46.000000000 +0900
@@ -272,10 +272,13 @@
 
   def query(query)
     real_query query
-    if @query_with_result and @field_count != 0 then
-      return store_result
+    if not @query_with_result then
+      return self
     end
-    self
+    if @field_count == 0 then
+      return nil
+    end
+    store_result
   end
 
   def refresh(r)

/--------------------------------------------------------/
  高石 勇人 < rio-t@presen.to >
  PGP Key(RSA): http://rio-t.presen.to/pgp/mykey.asc
         (DSS): http://rio-t.presen.to/pgp/mykey-dss.asc
/--------------------------------------------------------/

In This Thread

Prev Next