久保@茅ヶ崎市です。

KUBO Takehiro <kubo / jiubao.org> writes:

>> 具体的には、src/oraconf.rb の 94-96行目
>>
>>       unless have_func("OCIInitialize", "oci.h")
>>         raise 'cannot compile OCI' 
>>       end
>>
>> 
>>
>>       unless have_func("OCIInitialize", "oci.h")
>>         @libs = " -L#{@oracle_home}/lib -lclntsh"
>>         $libs += " -L#{CONFIG["libdir"]} " + @libs
>
> この1行は
>          $libs = "#{original_libs} -L#{CONFIG["libdir"]} #{@libs}"
> です。
>
>>         puts 'try again'
>>         unless have_func("OCIInitialize", "oci.h")
>>           raise 'cannot compile OCI'
>>         end
>>       end
>>
>> に変えてもう一度やってみてください。
>> # 手元に Oracle がないのでテストしてません。

ruby-talk のほうで別解が出ました。

------------------------- ここから -------------------------
--- ruby-oci8-0.1.1.orig/src/oraconf.rb Sat Feb  1 13:57:15 2003
+++ ruby-oci8-0.1.1/src/oraconf.rb      Fri Feb 14 15:15:32 2003
@@ -185,7 +185,7 @@
          print("Running make for $ORACLE_HOME/rdbms/demo/demo_rdbms.mk ...")
          STDOUT.flush
 
-         command = "|make -f #{@oracle_home}/rdbms/demo/demo_rdbms.mk build\
+         command = "|make KPIC_OPTION= NOKPIC_CCFLAGS= -f #{@oracle_home}/rdbms/demo/demo_rdbms.mk build\
  CC='echo MARKER' EXE=/dev/null ECHODO=echo ECHO=echo\
  GENCLNTSH='echo genclntsh'"
          marker = /^\s*MARKER/                  
------------------------- ここまで -------------------------

の変更で Solaris & gcc でうまくコンパイルできたそうです。

あとそれ以外にかなり重大なバグのレポートを受けました。

------------------------- ここから -------------------------
--- src/oranumber.c.old	2002-09-12 23:14:16.000000000 +0900
+++ src/oranumber.c	2003-02-15 13:21:59.000000000 +0900
@@ -180,10 +180,11 @@
       }
       if (i != 0 || j / 10 != 0)
 	buf[len++] = j / 10 + '0';
-      if (i != mentissa_size - 1 || j % 10 != 0)
+      if ((i < exponent + 1) /* integer part */
+	  || (i != mentissa_size - 1 || j % 10 != 0)  /* decimal fraction */)
 	buf[len++] = j % 10 + '0';
     }
-    for (;i < exponent;i++) {
+    for (;i <= exponent;i++) {
       buf[len++] = '0';
       buf[len++] = '0';
     }
--- test/test_oranumber.rb.old	2002-09-12 23:15:30.000000000 +0900
+++ test/test_oranumber.rb	2003-02-15 13:20:39.000000000 +0900
@@ -33,6 +33,12 @@
     "-0.0000000000000000000000000000000000001",
     "-0.000000000000000000000000000000000001",
     "-0.00000000000000000000000000000000001",
+	"1",
+	"20",
+	"300",
+	"-1",
+	"-20",
+	"-300",
   ]
 
   def setup
------------------------- ここまで -------------------------
の変更も行ってください。NUMBER(10) を越える精度のカラムを使用するとき
は必須です。

数日中に 0.1.2 を出します。

余談:
ruby-talk でのバグレポートで思ったのだけど、自分で使わない拡張モジュー
ルには手を出さないのが良かったかなぁ。最近、Oracle から完全に離れてい
るので、Ruby/OCI8 を作っても簡単なスクリプトで試験するだけで、実際のア
プリケーションで試験することができない。実際に使ってみないと表面化しな
いバグもあるし、このままだと一生 alpha version のままなんだよなぁ。

現在の実装は OCI のフルスペックにしようとして無意味に複雑になっている
し、ある程度決め打ちにして単純化させたのが良いかも。
特に、Oracle のデータディクショナリから取って来れる情報は、OCI で直接
取得しようとしなくてもなんとかなる情報だし。というか、OCI で直接取得で
きることを知っている人は少なくて、普通はデータディクショナリを参照する
ものだし、使う人もいないだろう。

うーむ、設計し直して、もっと単純にして、他の人に引き継いでもらうべきか。

では、再見
-- 
神奈川県茅ヶ崎市在住 久保 健洋
email: kubo / jiubao.org
web:   http://www.jiubao.org
GnuPG fingerprint = 5F7B C8EF CA16 57D0 FDE1  9F47 C001 1F93 AC08 2262