X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql-classes.lisp;h=6cd2c46e14613f5e0533c45e657f8bf7a02adc01;hb=78049d6d96e96b173ae8b2d1b2365b1f2ac1bf10;hp=2fc138bbe8aa6dcfcfe896e9b59905128dd69d97;hpb=5a80d916816131a1d56a60790cd1e4b5e9c88810;p=umlisp.git diff --git a/sql-classes.lisp b/sql-classes.lisp index 2fc138b..6cd2c46 100644 --- a/sql-classes.lisp +++ b/sql-classes.lisp @@ -7,7 +7,7 @@ ;;;; Programmer: Kevin M. Rosenberg ;;;; Date Started: Apr 2000 ;;;; -;;;; $Id: sql-classes.lisp,v 1.4 2002/10/14 09:25:20 kevin Exp $ +;;;; $Id: sql-classes.lisp,v 1.10 2002/11/12 18:05:00 kevin Exp $ ;;;; ;;;; This file, part of UMLisp, is ;;;; Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D. @@ -183,6 +183,22 @@ ls :database db)))) +(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") + (with-sql-connection (db) + (clsql:map-query + nil + #'(lambda (cui pfstr cuilrl) + (funcall fn + (make-instance 'ucon :cui (ensure-integer cui) + :pfstr pfstr + :lrl (ensure-integer cuilrl)))) + ls + :database db)))) (defun find-udef-cui (cui &key (srl *current-srl*)) @@ -319,6 +335,7 @@ ulos)) (nreverse ulos))) +(defgeneric suistr (lo)) (defmethod suistr ((lo ulo)) "Return the string for a ulo object" (find-string-sui (sui lo))) @@ -561,6 +578,46 @@ (push (find-usty-tui (nth 0 tuple)) ustys)) (nreverse ustys))) +(defun find-usab-all () + "Find usab for a key" + (let ((results '())) + (dolist (tuple (mutex-sql-query "select VCUI,RCUI,VSAB,RSAB,SON,SF,SVER,MSTART,MEND,IMETA,RMETA,SLC,SCC,SRL,TFR,CFR,CXTY,TTYL,ATNL,LAT,CENC,CURVER,SABIN from MRSAB")) + (destructuring-bind + (vcui rcui vsab rsab son sf sver mstart mend imeta rmeta slc scc srl tfr cfr cxty ttyl atnl lat cenc curver sabin) tuple + (push + (make-instance 'usab :vcui (ensure-integer vcui) + :rcui (ensure-integer rcui) + :vsab vsab :rsab rsab :son son :sf sf :sver sver :mstart mstart + :mend mend :imeta imeta :rmeta rmeta :slc slc :scc scc + :srl (ensure-integer srl) + :tfr (ensure-integer tfr) :cfr (ensure-integer cfr) + :cxty cxty :ttyl ttyl :atnl atnl :lat lat :cenc cenc + :curver curver :sabin sabin) + results))) + (nreverse results))) + +(defun find-usab-by-key (key-name key) + "Find usab for a key" + (aif (car (mutex-sql-query + (format nil "select VCUI,RCUI,VSAB,RSAB,SON,SF,SVER,MSTART,MEND,IMETA,RMETA,SLC,SCC,SRL,TFR,CFR,CXTY,TTYL,ATNL,LAT,CENC,CURVER,SABIN from MRSAB where ~A='~A'" key-name key))) + (destructuring-bind + (vcui rcui vsab rsab son sf sver mstart mend imeta rmeta slc scc srl tfr cfr cxty ttyl atnl lat cenc curver sabin) it + (make-instance 'usab :vcui (ensure-integer vcui) + :rcui (ensure-integer rcui) + :vsab vsab :rsab rsab :son son :sf sf :sver sver :mstart mstart + :mend mend :imeta imeta :rmeta rmeta :slc slc :scc scc + :srl (ensure-integer srl) + :tfr (ensure-integer tfr) :cfr (ensure-integer cfr) + :cxty cxty :ttyl ttyl :atnl atnl :lat lat :cenc cenc + :curver curver :sabin sabin)))) + +(defun find-usab-rsab (rsab) + "Find usab for rsab" + (find-usab-by-key "RSAB" rsab)) + +(defun find-usab-vsab (vsab) + "Find usab for vsab" + (find-usab-by-key "VSAB" vsab)) (defun find-cui-max () (let ((cui (caar (mutex-sql-query "select max(CUI) from MRCON")))) @@ -631,6 +688,15 @@ ustrs)) ustrs)) +;; Special tables + +(defun find-usrl-all () + (let ((usrls '()) + (tuples (mutex-sql-query "select SAB,SRL from USRL order by SAB desc"))) + (dolist (tuple tuples) + (push (make-instance 'usrl :sab (nth 0 tuple) + :srl (ensure-integer (nth 1 tuple))) usrls)) + usrls)) ;;; Multiword lookup and score functions