X-Git-Url: http://git.kpe.io/?p=umlisp.git;a=blobdiff_plain;f=sql.lisp;h=27f6c4d3926eb1af43e6c380ef84419bb04b34b0;hp=86f689328f0b2925819c5285874d993ebc6fe4fc;hb=HEAD;hpb=aeade16272b79115d3f307906c7a3e9597137e97 diff --git a/sql.lisp b/sql.lisp index 86f6893..97874c7 100644 --- a/sql.lisp +++ b/sql.lisp @@ -7,10 +7,8 @@ ;;;; Author: Kevin M. Rosenberg ;;;; Created: Apr 2000 ;;;; -;;;; $Id$ -;;;; ;;;; This file, part of UMLisp, is -;;;; Copyright (c) 2000-2004 by Kevin M. Rosenberg, M.D. +;;;; Copyright (c) 2000-2012 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. @@ -18,12 +16,15 @@ (in-package #:umlisp) -(defvar +umls-sql-map+ - '((:2002AD . "KUMLS2002AD") (:2003AA . "KUMLS2003AA") - (:2003AB . "KUMLS2003AB") (:2003AC . "KUMLS2003AC") - (:2004AA . "KUMLS2004AA"))) -(defvar +default-umls-db+ :2003AC) - +(defparameter +umls-sql-map+ + '((:2004aa . "KUMLS2004AA") + (:2006ac . "KUMLS2006AC") + (:2006ad . "MTS2006AD") + (:2009ab . "MTS2009AB") + (:2010aa . "MTS2010AA") + (:2012ab_all . "MTS2012AB_ALL") + (:2020ab_all . "MTS2020AB_ALL"))) +(defvar +default-umls-db+ "MTS2020AB_ALL") (defun lookup-db-name (db) (cdr (assoc (ensure-keyword db) +umls-sql-map+))) @@ -32,42 +33,57 @@ (defun umls-sql-db () *umls-sql-db*) -(defun umls-sql-db! (db) - (setq *umls-sql-db* db)) +(defun set-umls-sql-db (db) + (etypecase db + (string + (setq *umls-sql-db* db)) + (keyword + (setq *umls-sql-db* (lookup-db-name db))))) -(defvar *umls-sql-user* "secret") +(defvar *umls-sql-user* "mts") (defun umls-sql-user () *umls-sql-user*) -(defun umls-sql-user! (u) +(defun set-umls-sql-user (u) (sql-disconnect-pooled) (setq *umls-sql-user* u)) -(defvar *umls-sql-passwd* "secret") +(defvar *umls-sql-passwd* "_mts") (defun umls-sql-passwd () *umls-sql-passwd*) -(defun umls-sql-passwd! (p) +(defun set-umls-sql-passwd (p) (sql-disconnect-pooled) (setq *umls-sql-passwd* p)) -(defvar *umls-sql-host* "localhost") +(defvar *umls-sql-host* "mysql.med-info.com") (defun umls-sql-host () *umls-sql-host*) -(defun umls-sql-host! (h) +(defun set-umls-sql-host (h) (sql-disconnect-pooled) (setq *umls-sql-host* h)) (defvar *umls-sql-type* :mysql) (defun umls-sql-type () *umls-sql-type*) -(defun umls-sql-type! (h) +(defun set-umls-sql-type (h) (sql-disconnect-pooled) (setq *umls-sql-type* h)) +(defun umls-connection-spec () + (if (eql *umls-sql-type* :mysql) + (list *umls-sql-host* *umls-sql-db* + *umls-sql-user* *umls-sql-passwd* + nil '((:local-infile . 1)) + ) + (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)) + (let ((db (clsql:connect (umls-connection-spec) + :database-type *umls-sql-type* + :encoding :utf-8 + :pool t))) + db)) (defun sql-disconnect (conn) "Disconnect from UMLS database, but put connection back into pool" @@ -79,20 +95,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 (stmt conn) - (if (string-equal "SELECT" (subseq stmt 0 6)) - (sql-query stmt conn) - (sql-execute stmt conn))) - (defun sql-query (cmd conn &key (result-types :auto)) - (clsql:query cmd :database conn :result-types result-types)) + (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 umls-sql (stmt) (check-type stmt string) (with-sql-connection (conn) @@ -103,7 +119,7 @@ (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)