(defmacro deref-vp (foreign-object)
`(the vp-type (uffi:deref-pointer (the vpp-type ,foreign-object) :pointer-void)))
-(defvar +unsigned-char-null-pointer+
+(uffi:def-pointer-var +unsigned-char-null-pointer+
(uffi:make-null-pointer :unsigned-char))
-(defvar +unsigned-short-null-pointer+
+(uffi:def-pointer-var +unsigned-short-null-pointer+
(uffi:make-null-pointer :unsigned-short))
-(defvar +unsigned-int-null-pointer+
+(uffi:def-pointer-var +unsigned-int-null-pointer+
(uffi:make-null-pointer :unsigned-int))
;; constants - from OCI?
(date-format
:initarg :date-format
:reader date-format
- :initform "YYYY-MM-DD HH24:MI:SS\"+00\"")
+ :initform "YYYY-MM-DD HH24:MI:SS\".0\"")
(date-format-length
:type number
:documentation
(cond
(database
(with-slots (errhp) database
- (uffi:with-foreign-objects ((errcode 'sb4)
- (errbuf '(:array :unsigned-char #.+errbuf-len+)))
+ (let ((errcode (uffi:allocate-foreign-object 'sb4))
+ (errbuf (uffi:allocate-foreign-string #.+errbuf-len+)))
;; ensure errbuf empty string
(setf (uffi:deref-array errbuf '(:array :unsigned-char) 0)
(uffi:ensure-char-storable (code-char 0)))
+errbuf-len+ +oci-htype-error+))
(let ((subcode (uffi:deref-pointer errcode 'sb4))
(errstr (uffi:convert-from-foreign-string errbuf)))
+ (uffi:free-foreign-object errcode)
+ (uffi:free-foreign-object errbuf)
(unless (and nulls-ok (= subcode +null-value-returned+))
(error 'sql-database-error
:database database
(uffi:with-foreign-strings ((c-stmt-string sql-stmt-string))
(let ((stmthp (uffi:allocate-foreign-object :pointer-void))
select-p)
-
+
(uffi:with-foreign-object (stmttype :unsigned-short)
(unwind-protect
(progn
+oci-attr-stmt-type+
(deref-vp errhp)
:database db)
-
+
(setq select-p (= (uffi:deref-pointer stmttype :unsigned-short) 1))
(let ((iters (if select-p 0 1)))
-
+
(oci-stmt-execute (deref-vp svchp)
(deref-vp stmthp)
(deref-vp errhp)
(unless select-p
(oci-handle-free (deref-vp stmthp) +oci-htype-stmt+)
(uffi:free-foreign-object stmthp))))
-
+
(cond
(select-p
(make-query-cursor db stmthp result-types field-names))
(colname '(* :unsigned-char))
(colnamelen 'ub4)
(colsize 'ub2)
- (colsizesize 'ub4)
(defnp ':pointer-void))
(let ((buffer nil)
(sizeof nil))