[Gauche-devel-jp] Gauche-0.7.3のクラス再定義機構とpgドライバーの動作

Zurück zum Archiv-Index

yasuy****@javao***** yasuy****@javao*****
2003年 12月 19日 (金) 20:20:24 JST


えんどうです。

http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aPackages#7

上記の pg ドライバーは Gauche-0.7.3 で make & make install が可能でした。

ですが、実際のデータベースに接続してテストしてみたところ、
下記のようなエラーが発生します。

*** ERROR: cannot redefine class #<class <pg-result>>, which is not a Scheme-defined class
Stack Trace:
_______________________________________
  0  (%start-class-redefinition! old)
        At line 54 of "/usr/local/share/gauche/0.7.3/lib/gauche/redefutil.scm"
  1  (redefine-class! <pg-result> G238)
        [unknown location]
  2  (let ((G238 (make <pg-meta> :name '<pg-result> :supers (list) :slo ...
        [unknown location]
  3  (%require feature)
        At line 52 of "/usr/local/share/gauche/0.7.3/lib/gauche-init.scm"

クラス再定義機構に関連したエラーだと思うのですが、pg.stub で、

(define-type <pg-result> "PGresult*"  #f ;"box for the postgresql result"
  "SCM_PG_RESULT_P" "SCM_PG_RESULT" "new_pg_result")

と <pg-result> 型を定義してあって、pg.scm で、

(define-class <pg-result> ()
  ((result       :accessor pg-result-of :initform #f)
   ;(query       :init-keyword :path)
   ;(rw-mode    :init-keyword :rw-mode    :initform :write)
   ;(file-mode  :init-keyword :file-mode  :initform #o664)
   ;(key-convert   :init-keyword :key-convert :initform #f)
   ;(value-convert :init-keyword :value-convert :initform #f)
   ;; internal.  set up by dbm-open
   )
  :metaclass <pg-meta>)

と定義してあるのがいけないんでしょうか。

Gauche-0.7.2 では正常に動作しました。

テストは以下を行いました。

postgres 権限で createuser yasuyuki を実行、
yasuyuki 権限で createdb yasuyuki を実行、
yasuyuki 権限で psql で以下を実行

create table test (id integer, name varchar);
insert into test (id, name) values (10, 'yasuyuki');
insert into test (id, name) values (20, 'nubsun');

上記を準備して以下を実行。

#!/bin/exec gosh
(use pg)
(define (main args)
  (define connection (pg-connect "dbname=yasuyuki user=yasuyuki"))
  (define result (pg-exec connection "select * from test"))
  (define status (pg-result-status result))
  (define error (pg-result-error-message result))
  (define nrows (pg-ntuples result))
  (define ncols (pg-nfields result))
  (define (fetch-rows s r)
    (if (< r 0)
	s
	(fetch-rows (fetch-cols s r (- ncols 1)) (- r 1))))
  (define (fetch-cols s r c)
    (if (< c 0)
	s
	(fetch-cols (cons (pg-get-value result r c) s) r (- c 1))))
  (display (fetch-rows '() (- nrows 1)))
  (newline)
  (pg-finish connection)
)

Gauche-0.7.2 でのテスト結果

(10 yasuyuki 20 nobsun)

-- 
ENDO Yasuyuki <yasuy****@javao*****>
http://www.javaopen.org/~yasuyuki/ (Personal/Japanese Only)
http://www.javaopen.org/jfriends/ (Japanese Only)





Gauche-devel-jp メーリングリストの案内
Zurück zum Archiv-Index