X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql.lisp;h=985bf98900fe5334635fd08f577f2cccf91882f5;hb=90dcc29376b4e52a1ba4b7b86dd19ce9f81be4c5;hp=49ac0539d160b0091c6437d2afd230cf7c1d23b2;hpb=b00c85b41d3dbdbc9bc5b460b6d527115ecb3641;p=umlisp.git diff --git a/sql.lisp b/sql.lisp index 49ac053..985bf98 100644 --- a/sql.lisp +++ b/sql.lisp @@ -2,15 +2,15 @@ ;;;; ************************************************************************* ;;;; FILE IDENTIFICATION ;;;; -;;;; Name: sql.lisp -;;;; Purpose: Low-level SQL routines data for UMLisp -;;;; Author: Kevin M. Rosenberg -;;;; Date Started: Apr 2000 +;;;; Name: sql.lisp +;;;; Purpose: Low-level SQL routines data for UMLisp +;;;; Author: Kevin M. Rosenberg +;;;; Created: Apr 2000 ;;;; ;;;; $Id$ ;;;; ;;;; This file, part of UMLisp, is -;;;; Copyright (c) 2000-2003 by Kevin M. Rosenberg, M.D. +;;;; Copyright (c) 2000-2006 by Kevin M. Rosenberg, M.D. ;;;; ;;;; UMLisp users are granted the rights to distribute and use this software ;;;; as governed by the terms of the GNU General Public License. @@ -19,10 +19,10 @@ (in-package #:umlisp) (defvar +umls-sql-map+ - '((:2002AD . "KUMLS2002AD") (:2003AA . "KUMLS2003AA")) - (:2003AB . "KUMLS2003AB") (:2003AC . "KUMLS2003AC") - (:2004AA . "KUMLS2004AA")) -(defvar +default-umls-db+ :2003AC) + '((:2004aa . "KUMLS2004AA") + (:2006ac . "KUMLS2006AC") + (:2006ad . "MTS2006AD"))) +(defvar +default-umls-db+ "MTS2006AD") (defun lookup-db-name (db) @@ -33,9 +33,11 @@ *umls-sql-db*) (defun umls-sql-db! (db) - (setq *umls-sql-db* db)) - -(umls-sql-db! :2003AB) + (etypecase db + (string + (setq *umls-sql-db* db)) + (keyword + (setq *umls-sql-db* (lookup-db-name db))))) (defvar *umls-sql-user* "secret") (defun umls-sql-user () @@ -65,11 +67,14 @@ (sql-disconnect-pooled) (setq *umls-sql-type* h)) +(defun umls-connection-spec () + (list *umls-sql-host* *umls-sql-db* + *umls-sql-user* *umls-sql-passwd*)) + (defun sql-connect () "Connect to UMLS database, automatically used pooled connections" - (clsql:connect (list *umls-sql-host* (lookup-db-name *umls-sql-db*) - *umls-sql-user* *umls-sql-passwd*) - :database-type *umls-sql-type* :pool t)) + (clsql:connect (umls-connection-spec) + :database-type *umls-sql-type* :pool t)) (defun sql-disconnect (conn) "Disconnect from UMLS database, but put connection back into pool" @@ -81,20 +86,20 @@ (defmacro with-sql-connection ((conn) &body body) `(let ((,conn (sql-connect))) (unwind-protect - (progn ,@body) + (progn ,@body) (when ,conn (clsql:disconnect :database ,conn))))) +(defun sql-query (cmd conn &key (result-types :auto)) + (clsql:query cmd :database conn :result-types result-types :field-names nil)) + +(defun sql-execute (cmd conn) + (clsql:execute-command cmd :database conn)) + (defun sql (stmt conn) (if (string-equal "SELECT" (subseq stmt 0 6)) (sql-query stmt conn) (sql-execute stmt conn))) -(defun sql-query (cmd conn &key (types :auto)) - (clsql:query cmd :database conn :types types)) - -(defun sql-execute (cmd conn) - (clsql:execute-command cmd :database conn)) - (defun umls-sql (stmt) (check-type stmt string) (with-sql-connection (conn) @@ -105,13 +110,13 @@ (defmacro with-mutex-sql ((conn) &body body) `(let ((,conn (sql-connect))) (unwind-protect - (progn ,@body) + (progn ,@body) (when ,conn (sql-disconnect ,conn))))) (defun mutex-sql-execute (cmd) (with-mutex-sql (conn) (sql-execute cmd conn))) -(defun mutex-sql-query (cmd &key (types :auto)) +(defun mutex-sql-query (cmd &key (result-types :auto)) (with-mutex-sql (conn) - (sql-query cmd conn :types types))) + (sql-query cmd conn :result-types result-types)))