r11151: make RUI a int4eger (unique identifier) field, add MRREL indices
authorKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 14 Sep 2006 13:29:43 +0000 (13:29 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 14 Sep 2006 13:29:43 +0000 (13:29 +0000)
class-support.lisp
classes.lisp
package.lisp
parse-rrf.lisp
sql-classes.lisp
utils.lisp

index dd969038bc87ee7e65396631be22e207d85c1d2c..2b94e91a93c2451f861100aa3446168d3686f837 100644 (file)
       aui
       (fmt-aui (parse-integer aui))))
 
+(defgeneric fmt-rui (rui))
+(when *has-fixnum-class*
+  (defmethod fmt-rui ((rui fixnum))
+    (prefixed-fixnum-string aui #\A 8)))
+
+(defmethod fmt-rui ((rui integer))
+  (prefixed-integer-string rui #\A 8))
+
+(defmethod fmt-rui ((rui string))
+  (if (eql (aref rui 0) #\R)
+      rui
+    (fmt-rui (parse-integer rui))))
+
 (defgeneric fmt-eui (e))
 (when *has-fixnum-class*
   (defmethod fmt-eui ((e fixnum))
index aed5b64b2ccc98a3365f3ae622e36b21c399ac61..cee2fcd3b8db1569c77bf39a97d5713f336a58c8 100644 (file)
    (pfstr2 :value-type cdata :initarg :pfstr2 :reader pfstr2)
    (stype2 :value-type string  :initarg :stype2 :reader stype2)
    (rela :value-type string :initarg :rela :reader rela)
-   (rui :value-type string  :initarg :rui :reader rui)
+   (rui :value-type fixnum  :initarg :rui :reader rui :print-formatter fmt-rui)
    (srui :value-type string  :initarg :srui :reader srui)
    (sab :value-type string :initarg :sab :reader sab :hyperlink find-usab-rsab)
    (sl :value-type string  :initarg :sl :reader sl)
index f426ca445ff1c2d75b8ac432bc2cbf53cf094d6b..d8fbe3f6734f5630af63da58b02a16889a3fe225 100644 (file)
@@ -33,7 +33,7 @@
        #:ltyp #:lwd #:sdef #:sstr #:sstre1 #:sstre2
        #:sty #:tui #:def #:sab #:srl #:tty #:rank #:supres #:atn #:atv #:vcui
        #:rcui #:vsab #:code #:saui :scui :sdui
-       #:rl #:sty2 #:ui #:ui2 #:ui3 #:eui #:bas #:eui2 #:bas2
+       #:rl #:sty2 #:ui #:ui2 #:ui3 #:eui #:bas #:eui2 #:bas2 #:rui
        #:cui #:aui #:lui #:sui #:wd #:lat #:nstr :cuilist
        #:rsab #:lat
        #:s#def #:s#sty #:s#term #:s#str #:s#lo #:s#sat #:s#rel #:s#coc
index 960653e5a9982960212966a699eef61f2df058ab..2e744ad9764cc5979c2234977002f5729aba108d 100644 (file)
 (defparameter +col-datatypes+
     '(("AV" sql-f) ("BTS" sql-i) ("CLS" sql-i) ("COF" sql-i) ("CUI1" sql-u)
       ("AUI" sql-u) ("AUI1" sql-u) ("AUI2" sql-u) ("PCUI" sql-u)
-      ("PLUI" sql-u) ("PAUI" sql-u)
+      ("PLUI" sql-u) ("PAUI" sql-u) ("RUI" sql-u)
       ("CUI2" sql-u) ("CUI" sql-u) ("CXN" sql-s) ("FR" sql-i) ("LRL" sql-s)
       ("LUI" sql-u) ("MAX" sql-s) ("MIN" sql-s) ("RANK" sql-s) ("REF" sql-c)
       ("PTR" sql-c)
 (defparameter +index-cols+
     '(("CUI1" "MRCOC") ("CUI" "MRCONSO") ("LUI" "MRCONSO")
       ("SRL" "MRCONSO") ("AUI" "MRCONSO") ("KPFENG" "MRCONSO")
-      ("SUI" "MRCONSO") ("CUI" "MRDEF")
-      ("CUI1" "MRREL") ("CUI" "MRSAT") ("LUI" "MRSAT") ("SUI" "MRSAT")
-      ("CUI" "MRSTY")
-      ("TUI" "MRSTY") ("CUI" "MRXNS_ENG")
+      ("SUI" "MRCONSO") ("SAUI" "MRCONSO") ("CODE" "MRCONSO")
+      ("SCUI" "MRCONSO")
+      ("CUI" "MRDEF")
+      ("CUI1" "MRREL") ("CUI2" "MRREL")
+      ("RUI" "MRREL") ("AUI" "MRREL") ("AUI2" "MRREL")
+      ("CUI" "MRSAT") ("LUI" "MRSAT") ("SUI" "MRSAT")
+      ("METAUI" "MRSAT") ("ATN" "MRSAT")
+      ("CUI" "MRSTY")  ("TUI" "MRSTY") ("CUI" "MRXNS_ENG")
       ("AUI" "MRHIER") ("PTR" "MRHIER" 255) ("CUI" "MRHIER") ("CXN" "MRHIER") ("RELA" "MRHIER") ("PAUI" "MRHIER")
       ("SAB" "MRHIER")
       #+ignore ("NSTR" "MRXNS_ENG" 10)
index c91ee8a11b6144b77d769d6af515606d3b282197..5543d58d5e4babd3db812ad744afd4ff48a4bfa5 100644 (file)
@@ -204,6 +204,16 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS"
     (setq ,sui (parse-sui ,sui))
     ,sui))
 
+(defmacro ensure-aui-integer (aui)
+  `(if (stringp ,aui)
+    (setq ,aui (parse-aui ,aui))
+    ,aui))
+
+(defmacro ensure-rui-integer (rui)
+  `(if (stringp ,rui)
+    (setq ,rui (parse-rui ,rui))
+    ,rui))
+
 (defmacro ensure-tui-integer (tui)
   `(if (stringp ,tui)
     (setq ,tui (parse-tui ,tui))
@@ -274,7 +284,7 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS"
 
 (defun find-ucon-aui (aui &key (srl *current-srl*))
   "Find list of ucon for aui"
-  (ensure-sui-integer aui)
+  (ensure-aui-integer aui)
   (collect-umlisp-query (mrconso (cui kcuilrl) srl aui aui :distinct t)
     (make-instance 'ucon :cui (ensure-integer cui) :pfstr (find-pfstr-cui cui)
                   :lrl (ensure-integer kcuilrl))))
@@ -383,7 +393,17 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS"
                               srl cui1 cui :lrl "KSRL")
     (make-instance 'urel :cui1 cui :aui1 (ensure-integer aui1) :stype1 stype1 :rel rel
                   :cui2 (ensure-integer cui2) :aui2 (ensure-integer aui2) :stype2 stype2
-                  :rui rui :srui srui :rela rela :sab sab :sl sl :rg rg :dir dir
+                  :rui (ensure-integer rui) :srui srui :rela rela :sab sab :sl sl :rg rg :dir dir
+                  :suppress suppress :cvf cvf :pfstr2 (find-pfstr-cui cui2))))
+
+(defun find-urel-rui (rui &key (srl *current-srl*))
+  "Return the urel for a rui"
+  (ensure-rui-integer rui)
+  (collect-umlisp-query (mrrel (aui1 rel stype1 cui2 aui2 stype2 rela rui srui sab sl rg dir suppress cvf)
+                              srl rui rui :lrl "KSRL" :single t)
+    (make-instance 'urel :cui1 cui :aui1 (ensure-integer aui1) :stype1 stype1 :rel rel
+                  :cui2 (ensure-integer cui2) :aui2 (ensure-integer aui2) :stype2 stype2
+                  :rui (ensure-integer rui) :srui srui :rela rela :sab sab :sl sl :rg rg :dir dir
                   :suppress suppress :cvf cvf :pfstr2 (find-pfstr-cui cui2))))
 
 (defun find-cui2-urel-cui (cui &key (srl *current-srl*))
@@ -398,8 +418,10 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS"
   (ensure-cui-integer cui2)
   (collect-umlisp-query (mrrel (rel cui1 aui1 stype1 aui2 stype2 rela rui srui sab sl rg dir suppress cvf)
                               srl cui2 cui2 :lrl "KSRL")
-    (make-instance 'urel :cui2 cui2 :rel rel :aui2 (ensure-integer aui2) :stype2 stype2 :rui rui :srui srui
-                  :stype1 stype1 :cui1 (ensure-integer cui1) :aui1 (ensure-integer aui1)
+    (make-instance 'urel :cui2 cui2 :rel rel :aui2 (ensure-integer aui2) 
+                   :stype2 stype2 :rui (ensure-integer rui) :srui srui
+                  :stype1 stype1 :cui1 (ensure-integer cui1)
+                   :aui1 (ensure-integer aui1)
                   :rela rela :sab sab :sl sl :rg rg :dir dir :suppress suppress :cvf cvf
                   :pfstr2 (find-pfstr-cui cui2))))
 
@@ -533,8 +555,8 @@ is OBJNAME from TABLE where WHERE-NAME field = WHERE-VALUE with FIELDS"
 (defun find-uso-cuisui (cui sui &key (srl *current-srl*))
   (ensure-sui-integer sui)
   (ensure-cui-integer cui)
-  (collect-umlisp-query (mrconso (aui sab code srl tty saui sdui scui lat str) srl kcuisui
-                          (make-cuisui cui sui) :lrl srl)
+  (collect-umlisp-query (mrconso (aui sab code srl tty saui sdui scui lat str)
+                                 srl kcuisui (make-cuisui cui sui) :lrl srl)
     (make-instance 'uso :aui aui :sab sab :code code :srl srl :tty tty
                   :cui cui :sui sui :saui saui :sdui sdui :scui scui
                    :lat lat :str str)))
index 7fa3395f2ca870887c308b0c920f5854d4c88e4b..9fc23e4b8befa07d6a6a60c3819f1076d4009a51 100644 (file)
            (nth-value 0 (parse-integer aui))))
     aui))
 
+(defun parse-rui (rui)
+  (declare (optimize (speed 3) (safety 0)))
+  (if (stringp rui)
+      (let ((ch (schar rui 0)))
+       (if (char-equal ch #\R)
+           (parse-ui rui)
+          (nth-value 0 (parse-integer rui))))
+    rui))
+
 (defun parse-eui (eui)
   (declare (optimize (speed 3) (safety 0)))
   (if (stringp eui)