;;;; Programmer: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: sql-classes.lisp,v 1.15 2003/05/02 07:09:07 kevin Exp $
+;;;; $Id: sql-classes.lisp,v 1.16 2003/05/02 18:47:53 kevin Exp $
;;;;
;;;; This file, part of UMLisp, is
;;;; Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D.
;;;; *************************************************************************
(in-package :umlisp)
-(declaim (optimize (speed 3) (safety 1) (compilation-speed 0) (debug 3)))
+(declaim (optimize (compilation-speed 0) (debug 3)))
(defvar *current-srl* nil)
(setq found-ustr ustr))))))
found-ustr))
+(defun umlisp-query (table fields srl where-name where-value
+ &key (lrlname "KCUILRL") final)
+ "Query the UMLisp database. Return a list of umlisp objects whose name
+is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS"
+ (when where-value
+ (mutex-sql-query
+ (query-string table fields srl where-name where-value lrlname final))))
+
+
+(defun query-string (table fields &optional srl where-name where-value
+ (lrlname "KCUILRL") final)
+ (let ((qs (format nil "select ~{~:@(~A~)~^,~} from ~:@(~A~)" fields table)))
+ (when where-name
+ (setq qs (concatenate 'string qs
+ (format nil
+ (if (stringp where-value)
+ " where ~A='~A'"
+ " where ~A=~A")
+ where-name where-value))))
+ (when srl
+ (setq qs (concatenate 'string qs (format nil " and ~:@(~A~) <= ~D"
+ lrlname srl))))
+ (when final
+ (setq qs (concatenate 'string qs " " final)))
+ qs))
(defun find-ucon-cui (cui &key (srl *current-srl*))
+ "Find ucon for a cui"
+ (loop
+ (for tuple in (umlisp-query 'mrcon '(kpfstr kcuilrl) srl
+ 'cui (parse-cui cui) :final "limit 1")
+ collect
+ (make-instance 'ucon :cui (parse-cui cui)
+ :pfstr (car tuple)
+ :lrl (ensure-integer (cadr tuple))))))
+
+(defun find-ucon-cui-old (cui &key (srl *current-srl*))
"Find ucon for a cui"
(when (stringp cui) (setq cui (parse-cui cui)))
(when cui
- (let ((ls (format nil "select KPFSTR,KCUILRL from MRCON where CUI=~d" cui)))
- (when srl
- (string-append ls (format nil " and KCUILRL <= ~d" srl)))
- (string-append ls " limit 1")
+ (let ((ls
+ (maybe-add-srl
+ (format nil "select KPFSTR,KCUILRL from MRCON where CUI=~d" cui)
+ srl :final "limit 1")))
(awhen (car (mutex-sql-query ls))
(make-instance 'ucon :cui cui :pfstr (car it)
:lrl (ensure-integer (cadr it)))))))
"Find ucon for a cui"
(when (stringp cui) (setq cui (parse-cui cui)))
(when cui
- (let ((ls (format nil "select KCUILRL from MRCON where CUI=~d" cui)))
- (when srl
- (string-append ls (format nil " and KCUILRL <= ~d" srl)))
- (string-append ls " limit 1")
+ (let ((ls (maybe-add-srl
+ (format nil "select KCUILRL from MRCON where CUI=~d" cui)
+ srl :final "limit 1")))
(awhen (car (mutex-sql-query ls))
(make-instance 'ucon :cui cui
:lrl (ensure-integer (car it))
(defun find-pfstr-cui (cui &key (srl *current-srl*))
"Find preferred string for a cui"
- (when (stringp cui)
- (setq cui (parse-cui cui)))
+ (when (stringp cui) (setq cui (parse-cui cui)))
(when cui
- (let ((ls (format nil "select KPFSTR from MRCON where CUI=~d" cui)))
- (when srl
- (string-append ls (format nil " and KCUILRL <= ~d" srl)))
- (string-append ls " limit 1")
+ (let ((ls (maybe-add-srl
+ (format nil "select KPFSTR from MRCON where CUI=~d" cui)
+ srl :final "limit 1")))
(awhen (car (mutex-sql-query ls))
(car it)))))
(when (stringp lui) (setq lui (parse-lui lui)))
(when lui
(let ((ucons '())
- (ls (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where LUI=~d" lui)))
- (if srl
- (string-append ls (format nil " and KCUILRL <= ~d" srl)))
+ (ls
+ (maybe-add-srl
+ (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where LUI=~d" lui)
+ srl)))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (cui pfstr lrl) tuple
(push (make-instance 'ucon :cui (ensure-integer cui)
(when (stringp sui) (setq sui (parse-sui sui)))
(when sui
(let ((ucons '())
- (ls (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where SUI=~d" sui)))
- (when srl
- (string-append ls (format nil " and KCUILRL <= ~d" srl)))
+ (ls (maybe-add-srl
+ (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where SUI=~d" sui)
+ srl)))
(let ((tuples (mutex-sql-query ls)))
(dolist (tuple tuples)
(destructuring-bind (cui pfstr lrl) tuple
(when (stringp cui) (setq cui (parse-cui cui)))
(when (stringp sui) (setq sui (parse-sui sui)))
(when (and cui sui)
- (let ((ls (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where KCUISUI=~d"
- (make-cuisui cui sui))))
- (when srl
- (string-append ls (format nil " and KCUILRL <= ~d" srl)))
+ (let ((ls
+ (maybe-add-srl
+ (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where KCUISUI=~d"
+ (make-cuisui cui sui))
+ srl)))
(awhen (car (mutex-sql-query ls))
(destructuring-bind (cui pfstr lrl) it
(make-instance 'ucon :cui (ensure-integer cui)
"Find ucon that are exact match for str"
(when str
(let ((ucons '())
- (ls (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where STR='~a'" str)))
- (when srl
- (string-append ls " and KCUILRL <= ~d" srl))
+ (ls (maybe-add-srl
+ (format nil "select distinct CUI,KPFSTR,KCUILRL from MRCON where STR='~a'" str)
+ srl)))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (cui pfstr lrl) tuple
(push (make-instance 'ucon :cui (ensure-integer cui)
(defun find-ucon-all (&key (srl *current-srl*))
"Return list of all ucon's"
- (let ((ls "select distinct CUI,KPFSTR,KCUILRL from MRCON"))
- (when srl
- (string-append ls (format nil " where KCUILRL <= ~d" srl)))
+ (let ((ls (maybe-add-srl "select distinct CUI,KPFSTR,KCUILRL from MRCON"
+ srl)))
(string-append ls " order by CUI asc")
(with-sql-connection (db)
(clsql:map-query
(defun map-ucon-all (fn &key (srl *current-srl*))
"Return list of all ucon's"
- (let ((ls "select distinct CUI,KPFSTR,KCUILRL from MRCON"))
- (when srl
- (string-append ls (format nil " where KCUILRL <= ~d" srl)))
- (string-append ls " order by CUI asc")
+ (let ((ls (maybe-add-srl "select distinct CUI,KPFSTR,KCUILRL from MRCON"
+ srl :final "order by CUI asc")))
(with-sql-connection (db)
(clsql:map-query
nil
(defun find-udef-cui (cui &key (srl *current-srl*))
"Return a list of udefs for cui"
(let ((udefs '())
- (ls (format nil "select SAB,DEF from MRDEF where CUI=~d" cui)))
- (when srl
- (string-append ls (format nil " and KSRL <= ~d" srl)))
+ (ls (maybe-add-srl
+ (format nil "select SAB,DEF from MRDEF where CUI=~d" cui)
+ srl :var "KSRL")))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (sab def) tuple
(push (make-instance 'udef :sab sab :def def) udefs)))
(defun find-usty-cui (cui &key (srl *current-srl*))
"Return a list of usty for cui"
(let ((ustys '())
- (ls (format nil "select TUI,STY from MRSTY where CUI=~d" cui)))
- (when srl
- (string-append ls (format nil " and KLRL <= ~d" srl)))
+ (ls (maybe-add-srl
+ (format nil "select TUI,STY from MRSTY where CUI=~d" cui)
+ srl :var "KLRL")))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (tui sty) tuple
(push (make-instance 'usty :tui (ensure-integer tui) :sty sty) ustys)))
(defun find-usty-word (word &key (srl *current-srl*))
"Return a list of usty that match word"
(let ((ustys '())
- (ls (format nil "select distinct TUI,STY from MRSTY where STY like '%~a%'" word)))
- (when srl
- (string-append ls (format nil " and KLRL <= ~d" srl)))
+ (ls (maybe-add-srl
+ (format nil "select distinct TUI,STY from MRSTY where STY like '%~a%'" word)
+ srl :var "KLRL")))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (tui sty) tuple
(push (make-instance 'usty :tui (ensure-integer tui) :sty sty) ustys)))
(defun find-urel-cui (cui &key (srl *current-srl*))
"Return a list of urel for cui"
(let ((urels '())
- (ls (format nil "select REL,CUI2,RELA,SAB,SL,MG,KPFSTR2 from MRREL where CUI1=~d" cui)))
- (when srl
- (string-append ls (format nil " and KSRL <= ~d" srl)))
+ (ls (maybe-add-srl
+ (format nil "select REL,CUI2,RELA,SAB,SL,MG,KPFSTR2 from MRREL where CUI1=~d" cui)
+ srl :var "KSRL")))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (rel cui2 rela sab sl mg pfstr2) tuple
(push (make-instance 'urel
(defun find-urel-cui2 (cui2 &key (srl *current-srl*))
"Return a list of urel for cui2"
(let ((urels '())
- (ls (format nil "select REL,CUI1,RELA,SAB,SL,MG,KPFSTR2 from MRREL where CUI2=~d" cui2)))
- (when srl
- (string-append ls (format nil " and SRL <= ~d" srl)))
+ (ls (maybe-add-srl
+ (format nil "select REL,CUI1,RELA,SAB,SL,MG,KPFSTR2 from MRREL where CUI2=~d" cui2)
+ srl :var "SRL")))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (rel cui1 rela sab sl mg pfstr2) tuple
(push (make-instance 'urel
(defun find-ucoc-cui (cui &key (srl *current-srl*))
"Return a list of ucoc for cui"
(let ((ucocs '())
- (ls (format nil "select CUI2,SOC,COT,COF,COA,KPFSTR2 from MRCOC where CUI1=~d" cui)))
- (when srl
- (string-append ls (format nil " and KLRL <= ~d" srl)))
- (string-append ls " order by COF asc")
+ (ls (maybe-add-srl
+ (format nil "select CUI2,SOC,COT,COF,COA,KPFSTR2 from MRCOC where CUI1=~d" cui)
+ srl :var "KLRL" :final "order by COF asc")))
(dolist (tuple (mutex-sql-query ls))
(destructuring-bind (cui2 soc cot cof coa pfstr2) tuple
(setq cui2 (ensure-integer cui2))
;;;;
;;;; Name: umlisp.asd
;;;; Purpose: ASDF system definition file for UMLisp
-;;;; Programmer: Kevin M. Rosenberg
+;;;; Author: Kevin M. Rosenberg
;;;; Date Started: Apr 2000
;;;;
-;;;; $Id: umlisp.asd,v 1.14 2003/03/27 21:56:07 kevin Exp $
+;;;; $Id: umlisp.asd,v 1.15 2003/05/02 18:47:53 kevin Exp $
;;;;
;;;; This file, part of UMLisp, is
;;;; Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D.
;;;; as governed by the terms of the GNU General Public License.
;;;; *************************************************************************
-(in-package :asdf)
+(defpackage #:umlisp-system (:use #:asdf #:cl))
+(in-package #:umlisp-system)
#+(or allegro lispworks cmu sbcl openmcl scl)
-(defsystem :umlisp
- :perform (load-op :after (op umlisp)
- (pushnew :umlisp cl:*features*))
-
+(defsystem umlisp
:components
- ((:file "package")
- (:file "data-structures" :depends-on ("package"))
- (:file "sql" :depends-on ("data-structures"))
- (:file "utils" :depends-on ("data-structures"))
- (:file "parse-macros" :depends-on ("sql"))
- (:file "parse-2002" :depends-on ("parse-macros"))
- (:file "parse-common" :depends-on ("parse-2002"))
- (:file "sql-create" :depends-on ("parse-common"))
- (:file "classes" :depends-on ("utils"))
- (:file "class-support" :depends-on ("classes"))
- (:file "sql-classes" :depends-on ("class-support" "sql"))
- (:file "composite" :depends-on ("sql-classes")))
- :depends-on (:clsql
- :clsql-mysql
- :kmrcl
- :hyperobject))
+ ((:file "package")
+ (:file "data-structures" :depends-on ("package"))
+ (:file "sql" :depends-on ("data-structures"))
+ (:file "utils" :depends-on ("data-structures"))
+ (:file "parse-macros" :depends-on ("sql"))
+ (:file "parse-2002" :depends-on ("parse-macros"))
+ (:file "parse-common" :depends-on ("parse-2002"))
+ (:file "sql-create" :depends-on ("parse-common"))
+ (:file "classes" :depends-on ("utils"))
+ (:file "class-support" :depends-on ("classes"))
+ (:file "sql-classes" :depends-on ("class-support" "sql"))
+ (:file "composite" :depends-on ("sql-classes")))
+ :depends-on (:clsql :clsql-mysql :kmrcl :hyperobject))
+#+(or allegro lispworks cmu sbcl openmcl scl)
+(defmethod perform ((o test-op) (c (eql (find-system :umlisp))))
+ (oos 'load-op 'umlisp-tests)
+ (oos 'test-op 'umlisp-tests))
+
+(defsystem umlisp-tests
+ :depends-on (rt)
+ :components ((:file "tests")))
+
+(defmethod perform ((o test-op) (c (eql (find-system :umlisp-tests))))
+ (or (funcall (intern (symbol-name '#:do-tests) (find-package '#:rtest)))
+ (error "test-op failed")))