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)