Hi,
I am trying to use CLSQL with CFFI and I bumped into an error while trying to connect to an Oracle 9i database.
I am using clisp but the same error ocurred with allegro 7 (trial).
Basically, issuing the command:
(asdf:oos 'asdf:load-op :clsql-oracle)
yields this at the debugger:
APPLY: too few arguments given to #<compiled-function #:|150 152 (cffi:define-foreign-type uffi-char (base-type) ...)-10-1-1|> [Condition of type system::simple-program-error]
I found out that making the following changes to the code seems to solve the problem...
computador:~/lib/cffi$ darcs diff diff -rN old-cffi/uffi-compat/uffi-compat.lisp new-cffi/uffi-compat/uffi-compat.lisp 112,113c112,113 < (:char '(uffi-char :char)) < (:unsigned-char '(uffi-char :unsigned-char)) ---
(:char :char) (:unsigned-char :unsigned-char)
...but since I am new to lisp (and to cffi...and to clsql...;-) I really have no idea of what I am doing. :-)
Thanks very much.
[]s, Ricardo Boccato Alves.
"Ricardo Boccato" boccato@gmail.com writes:
I am using clisp but the same error ocurred with allegro 7 (trial).
Basically, issuing the command:
(asdf:oos 'asdf:load-op :clsql-oracle)
yields this at the debugger:
APPLY: too few arguments given to #<compiled-function #:|150 152 (cffi:define-foreign-type uffi-char (base-type) ...)-10-1-1|> [Condition of type system::simple-program-error]
Thanks, I've pushed a fix for this to the Darcs repository.
The problem was that the CFFI::UNPARSE generic function wasn't specialized for the parameterized UFFI-CHAR type, leading the MAKE-LOAD-FORM method on CFFI type instances to dump the UFFI-CHAR type without its parameter. This leads to an error when the resulting FASL file is loaded...
I found out that making the following changes to the code seems to solve the problem...
computador:~/lib/cffi$ darcs diff diff -rN old-cffi/uffi-compat/uffi-compat.lisp new-cffi/uffi-compat/uffi-compat.lisp 112,113c112,113 < (:char '(uffi-char :char))
< (:unsigned-char '(uffi-char :unsigned-char))
(:char :char) (:unsigned-char :unsigned-char)
This will cause problems because the UFFI :char types are defined to convert between C chars and Lisp CHARACTERs, which the CFFI :char and :unsigned-char types do not do.
I don't think anyone has ever tried Oracle with CLISP and UFFI-COMPAT before---with this patch it works for me now, very cool!
Thanks, James