* improve large object api and extend to databases beyond postgresql
* add support for prepared statements
+
+RACE CONDITIONS
+* sql/databases.lisp: *connected-databases* is shared globally but not modified in a threadsafe manner.
CONNECT. Meaningful values are :new, :warn-new, :error, :warn-old
and :old.")
+;;TODO: this variable appears to be global, not thread specific and is
+;; not protected when modifying the list.
(defvar *connected-databases* nil
"List of active database objects.")
(setf *default-database* (car *connected-databases*)))
t))
(when (database-disconnect database)
+ ;;TODO: RACE COND: 2 threads disconnecting could stomp on *connected-databases*
(setf *connected-databases* (delete database *connected-databases*))
(when (eq database *default-database*)
(setf *default-database* (car *connected-databases*)))