Automated commit for debian release 2.13-1
[hyperobject.git] / connect.lisp
1 ;;;; -- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10; Package: umlisp -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
4 ;;;;
5 ;;;; Name:          connect.lisp
6 ;;;; Purpose:       Low-level SQL routines data for UMLisp
7 ;;;; Programmer:    Kevin M. Rosenberg
8 ;;;; Date Started:  Apr 2000
9 ;;;;
10 ;;;; $Id$
11 ;;;;
12 ;;;; This file is Copyright (c) 2000-2003 by Kevin M. Rosenberg
13 ;;;; *************************************************************************
14
15 (in-package #:hyperobject)
16
17 (defvar *ho-sql-db* "ho")
18 (defun ho-sql-db ()
19   *ho-sql-db*)
20 (defun ho-sql-db! (dbname)
21   (sql-disconnect-pooled)
22   (setq *ho-sql-db* dbname))
23
24 (defvar *ho-sql-user* "secret")
25 (defun ho-sql-user ()
26   *ho-sql-user*)
27 (defun ho-sql-user! (u)
28   (sql-disconnect-pooled)
29   (setq *ho-sql-user* u))
30
31 (defvar *ho-sql-passwd* "secret")
32 (defun ho-sql-passwd ()
33   *ho-sql-passwd*)
34 (defun ho-sql-passwd! (p)
35   (sql-disconnect-pooled)
36   (setq *ho-sql-passwd* p))
37
38 (defvar *ho-sql-host* "localhost")
39 (defun ho-sql-host ()
40   *ho-sql-host*)
41 (defun ho-sql-host! (h)
42   (sql-disconnect-pooled)
43   (setq *ho-sql-host* h))
44
45 (defvar *ho-sql-type* :mysql)
46 (defun ho-sql-type ()
47   *ho-sql-type*)
48 (defun ho-sql-type! (h)
49   (sql-disconnect-pooled)
50   (setq *ho-sql-type* h))
51
52 (defun sql-connect ()
53   "Connect to HO database, automatically used pooled connections"
54   (clsql:connect `(,(ho-sql-host) ,(ho-sql-db) ,(ho-sql-user) ,(ho-sql-passwd))
55                  :database-type *ho-sql-type* :pool t))
56
57 (defun sql-disconnect (conn)
58   "Disconnect from HO database, but put connection back into pool"
59   (clsql:disconnect :database conn))
60
61 (defun sql-disconnect-pooled ()
62   (clsql:disconnect-pooled))
63
64 (defmacro with-sql-connection ((conn) &body body)
65   `(let ((,conn (sql-connect)))
66      (unwind-protect
67          (progn ,@body)
68        (when ,conn (clsql:disconnect :database ,conn)))))
69
70 (defun sql-query (cmd conn &key (types :auto))
71   (clsql:query cmd :database conn :types types))
72
73 (defun sql-execute (cmd conn)
74   (clsql:execute-command cmd :database conn))
75
76 ;;; Pool of open connections
77
78 (defmacro with-mutex-sql ((conn) &body body)
79   `(let ((,conn (sql-connect)))
80      (unwind-protect
81          (progn ,@body)
82        (when ,conn (sql-disconnect ,conn)))))
83
84 (defun mutex-sql-execute (cmd)
85   (with-mutex-sql (conn)
86     (sql-execute cmd conn)))
87
88 (defun mutex-sql-query (cmd &key (types :auto))
89   (with-mutex-sql (conn)
90     (sql-query cmd conn :types types)))