[gambit-list] Oracle
Christian
christian at pflanze.mine.nu
Wed Jan 25 14:14:23 EST 2006
At 16:47 Uhr +0000 25.01.2006, Joel Reymont wrote:
>Thank you Christian!
You're welcome!
Actually, since I will need mysql connectivity relatively soon, and
to make sure I didn't promise too much, I've written a quick DBI
interface--see below.
> (use p-dbi)
> (define db (dbi.connect "DBI:mysql:EiD" "eid" "the-passwd"))
> (define sth (dbh.prepare db "select * from _Departementss"))
> (sth.execute sth)
DBD::mysql::st execute failed: Table 'EiD._Departementss' doesn't exist.
#f
> (define sth (dbh.prepare db "select * from _Departement"))
> (sth.execute sth)
26
> (sth.fetchrow-array sth)
("1" "Elektrotechnik" "2")
> (sth.fetchrow-array sth)
("2" "Werkstoffe" "2")
> (sth.fetchrow-array sth)
("3" "Architektur" "1")
> (sth.fetchrow-array sth)
("4" "Physik" "3")
> (sth.fetchrow-array sth)
("5" "Umweltnaturwissenschaften" "4")
> (dbi.errstr sth)
#f ;; no error.
;; optional (gc will take care of it too):
> (dbh.disconnect db)
DBI::db=HASH(0x84f37dc)->disconnect invalidates 1 active statement
handle (either destroy statement handles or call finish on them
before disconnecting).
#t
;; the warning is because I didn't finish reading the result set.
If you want the functions to throw exceptions instead of returning
false for errors, the natural way would be to give DBI a
RaiseError=>1 attribute. But currently gperl is missing a way to
generate perl hashes. If you need those, and don't see how to add the
necessary perl XS functions to gperl, ask me to do it.
Cheers
Christian.
;;p-dbi-module.scm------------------------------
(requires gperl)
(namespace "") ;; trick to avoid having to define an exports list, and
;; work around old bug present in chjmodule (doesn't
;; reimport bindings after module reloads (*)), helpful
;; during developement of a module.
;; (*) of course I shall fix chjmodule some time soon..
;;p-dbi.scm-------------------------------------
;; cj Wed, 25 Jan 2006 19:08:57 +0100
(gperl-activate)
(perl-use "DBI")
; (define-perl-method dbi.connect (string/sv string/sv string/sv)
; sv)
;; todo: implement hash handling for: #!optional attrs-hash
(define (dbi.connect data-source username auth #!optional attr)
(if attr
(error "attr argument not yet supported, requires perl hash
handling functions in gperl")
((perl-method (string/sv string/sv string/sv string/sv)
sv
"connect")
"DBI" data-source username auth)))
;; (implement perl-object type checking on scheme side ? (using perl
isa operation) )
(define-perl-method dbh.do (sv string/sv)
string ;;ok?
)
; (define-perl-method dbh.selectall_arrayref (sv)
; ;;todo: implement array handling
; ..)
; selectall_hashref
; selectcol_arrayref
(define-perl-method dbh.selectrow-array (sv string/sv)
(#!rest string)) ;; return a list of strings.
; selectrow_arrayref
; selectrow_hashref
(define-perl-method dbh.prepare (sv string/sv)
sv)
; (define-perl-method sth.execute (sv #!rest string/sv)
; ;; handle return value as false-or-number-of-results.
; )
; (define (sth.execute sth #!rest bind-values)
; (let ((res (apply
; (perl-method (sv #!rest string/sv)
; sv
; "execute")
; (cons sth bind-values))))
; (if (sv-true? res)
; (sv->number res)
; #f)))
;ehr actually I did take care of this already in gperl..:
(define-perl-method sth.execute (sv #!rest string/sv)
number/false)
(define-perl-method sth.fetchrow-array (sv)
(#!rest string)) ;; return a list of strings
(define-perl-method dbh.begin-work (sv)
boolean;;ok?
;string/false
)
(define-perl-method dbh.commit (sv)
boolean;;ok?
;string/false
)
(define-perl-method dbh.rollback (sv)
boolean;;ok?
;string/false
)
(define-perl-method dbh.disconnect (sv)
boolean)
(define-perl-method dbi.err (sv)
number/false)
(define-perl-method dbi.errstr (sv)
string/false)
(define-perl-method dbi.state (sv)
string)
;; eof
More information about the Gambit-list
mailing list