Method: (DB-CURSOR-PGET EXT-CURSOR)

Source

(defmethod db-cursor-pget ((cursor ext-cursor) &key key pkey
			  ;;flags
			  current first get-both get-both-range
			  get-recno join-item last
			  next next-dup next-no-dup
			  prev prev-no-dup set set-range set-recno
			  multiple multiple-key rmw not-found)
  (let ((key-buffer (when key (make-get-buffer nil)))
	(pkey-buffer (when pkey (make-get-buffer nil))))
    (unwind-protect
	 (multiple-value-bind (ret-key ret-pkey ret-data)
	     (call-next-method cursor
			       :key (when key
				      (funcall (buf-writer cursor)
					       key key-buffer)
				      key-buffer)
			       :pkey (when pkey
				       (funcall (buf-writer cursor)
						pkey pkey-buffer)
				       pkey-buffer)
			       :current current :first first
			       :get-both get-both
			       :get-both-range get-both-range
			       :get-recno get-recno :join-item join-item
			       :last last :next next :next-dup next-dup
			       :next-no-dup next-no-dup :prev prev
			       :prev-no-dup prev-no-dup :set set
			       :set-range set-range :set-recno set-recno
			       :multiple multiple
			       :multiple-key multiple-key
			       :rmw rmw :not-found not-found)
	   (unwind-protect
		(values (funcall (buf-reader cursor) ret-key)
			(funcall (buf-reader cursor) ret-pkey)
			(funcall (buf-reader cursor) ret-data))
	     (progn
	       (free-cbuffer ret-key)
	       (free-cbuffer ret-pkey)
	       (free-cbuffer ret-data))))
      (progn
	(when pkey-buffer (free-cbuffer pkey-buffer))
	(when key-buffer (free-cbuffer key-buffer))))))
Source Context