4 ;;; This is copyrighted software. See documentation for terms.
6 ;;; oracle-sql.lisp --- SQL-Interface implementation for Oracle
8 ;;; derived from postgresql.lisp
10 (in-package :clsql-oracle)
12 (declaim (optimize (speed 3)
15 (defparameter *alien-resource-hash* (make-hash-table :test #'equal))
17 (defun %get-resource (type sizeof)
18 (let ((resources (gethash type *alien-resource-hash*)))
21 (and (= (alien-resource-sizeof res) sizeof)
22 (not (alien-resource-in-use res))))
25 (defun %insert-alien-resource (type res)
26 (let ((resource (gethash type *alien-resource-hash*)))
27 (setf (gethash type *alien-resource-hash*)
28 (cons res (gethash type *alien-resource-hash*)))))
30 (defmacro acquire-alien-resource (type &optional size)
31 `(let ((res (%get-resource ',type ,size)))
33 (setf res (make-alien-resource
34 :type ',type :sizeof ,size
35 :buffer (make-alien ,type ,size)))
36 (%insert-alien-resource ',type res))
37 (claim-alien-resource res)))
39 (defstruct (alien-resource)
40 (type (error "Missing TYPE.")
42 (sizeof (error "Missing SIZEOF.")
44 (buffer (error "Missing BUFFER.")
46 (in-use nil :type boolean))
48 (defun free-alien-resource (ares)
49 (setf (alien-resource-in-use ares) nil)
52 (defun claim-alien-resource (ares)
53 (setf (alien-resource-in-use ares) t)