1 ;;;; -*- Mode: Lisp; Syntax: ANSI-Common-Lisp; Base: 10; Package: umlisp -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
5 ;;;; Name: connect.lisp
6 ;;;; Purpose: Low-level SQL routines data for UMLisp
7 ;;;; Programmer: Kevin M. Rosenberg
8 ;;;; Date Started: Apr 2000
10 ;;;; $Id: connect.lisp,v 1.4 2003/06/06 21:59:29 kevin Exp $
12 ;;;; This file is Copyright (c) 2000-2003 by Kevin M. Rosenberg
13 ;;;; *************************************************************************
15 (in-package #:hyperobject)
17 (defvar *ho-sql-db* "ho")
20 (defun ho-sql-db! (dbname)
21 (sql-disconnect-pooled)
22 (setq *ho-sql-db* dbname))
24 (defvar *ho-sql-user* "secret")
27 (defun ho-sql-user! (u)
28 (sql-disconnect-pooled)
29 (setq *ho-sql-user* u))
31 (defvar *ho-sql-passwd* "secret")
32 (defun ho-sql-passwd ()
34 (defun ho-sql-passwd! (p)
35 (sql-disconnect-pooled)
36 (setq *ho-sql-passwd* p))
38 (defvar *ho-sql-host* "localhost")
41 (defun ho-sql-host! (h)
42 (sql-disconnect-pooled)
43 (setq *ho-sql-host* h))
45 (defvar *ho-sql-type* :mysql)
48 (defun ho-sql-type! (h)
49 (sql-disconnect-pooled)
50 (setq *ho-sql-type* h))
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))
57 (defun sql-disconnect (conn)
58 "Disconnect from HO database, but put connection back into pool"
59 (clsql:disconnect :database conn))
61 (defun sql-disconnect-pooled ()
62 (clsql:disconnect-pooled))
64 (defmacro with-sql-connection ((conn) &body body)
65 `(let ((,conn (sql-connect)))
68 (when ,conn (clsql:disconnect :database ,conn)))))
70 (defun sql-query (cmd conn &key (types :auto))
71 (clsql:query cmd :database conn :types types))
73 (defun sql-execute (cmd conn)
74 (clsql:execute-command cmd :database conn))
76 ;;; Pool of open connections
78 (defmacro with-mutex-sql ((conn) &body body)
79 `(let ((,conn (sql-connect)))
82 (when ,conn (sql-disconnect ,conn)))))
84 (defun mutex-sql-execute (cmd)
85 (with-mutex-sql (conn)
86 (sql-execute cmd conn)))
88 (defun mutex-sql-query (cmd &key (types :auto))
89 (with-mutex-sql (conn)
90 (sql-query cmd conn :types types)))