r4799: Auto commit for Debian build
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 4 May 2003 08:52:13 +0000 (08:52 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 4 May 2003 08:52:13 +0000 (08:52 +0000)
sql-create.lisp

index 5b7794bec00e25bddfd3936786f714cd7e8eb907..4d10d3da4c7216fa5d7b3678369684805fe5bec5 100644 (file)
@@ -7,7 +7,7 @@
 ;;;; Programmer:    Kevin M. Rosenberg
 ;;;; Date Started:  Apr 2000
 ;;;;
-;;;; $Id: sql-create.lisp,v 1.4 2002/11/07 23:19:02 kevin Exp $
+;;;; $Id: sql-create.lisp,v 1.5 2003/05/04 08:52:13 kevin Exp $
 ;;;;
 ;;;; This file, part of UMLisp, is
 ;;;;    Copyright (c) 2000-2002 by Kevin M. Rosenberg, M.D.
@@ -20,7 +20,7 @@
 (declaim (optimize (speed 3) (safety 1) (compilation-speed 0) (debug 3)))
 
 
-(defun create-table-cmd (file)
+(defun create-table-cmd-old (file)
   "Return sql command to create a table"
   (let ((col-func 
         (lambda (c) 
            (string-trim-last-character
             (mapcar-append-string col-func (umls-cols-for-umls-file file))))))
 
+
+(defun create-table-cmd (file)
+  "Return sql command to create a table"
+  (let ((col-func 
+        (lambda (c) 
+          (let ((sqltype (umls-col-sqltype c)))
+            (concatenate 'string
+                         (umls-col-col c)
+                         " "
+                         (if (or (string-equal sqltype "VARCHAR")
+                                 (string-equal sqltype "CHAR"))
+                             (format nil "~a (~a)" sqltype (umls-col-max c))
+                             sqltype))))))
+    (format nil "CREATE TABLE ~a (~{~a~^,~})" (umls-file-table file)
+           (mapcar col-func (umls-cols-for-umls-file file))))))
+
 (defun create-custom-table-cmd (tablename sql-cmd)
   "Return SQL command to create a custom table"
   (format nil "CREATE TABLE ~a AS ~a;" tablename sql-cmd))
 
-(defun insert-values-cmd (file values)
+(defun insert-values-cmd-old (file values)
   "Return sql insert command for a row of values"  
   (let ((insert-func
         (lambda (col value)
                   (custom-col-values (custom-colstructs-for-file file) values "," t)))
      )))
 
-(defun custom-col-values (colstructs values delim doquote)
-  "Returns string of column values for SQL inserts for custom columns"
+(defun insert-col-value (col value)
+  (if (null (umls-col-parsefunc col)) 
+      value
+      (format nil "~A" (funcall (umls-col-parsefunc col) value))))
+
+(defun insert-values-cmd (file values)
+  "Return sql insert command for a row of values"  
+  (let ((insert-func
+        (lambda (col value)
+          (let ((q (umls-col-quotechar col)))
+            (concatenate 'string q (insert-col-value col value) q)))))
+    (format
+     nil "INSERT INTO ~a (~{~a~^,~}) VALUES (~{~a~^,~})"
+     (umls-file-table file)
+     (umls-file-fields file)
+     (append
+      (mapcar insert-func (remove-custom-cols (umls-file-colstructs file)) values)
+      (custom-col-values (custom-colstructs-for-file file) values t)))))
+
+(defun custom-col-values-old (colstructs values delim doquote)
+  "Returns a string of column values for SQL inserts for custom columns"
   (let ((result ""))
     (dolist (col colstructs)
       (let* ((func (umls-col-custom-value-func col))
                       delim)))
     result))
 
+(defun col-value (col doquote values)
+  (let ((custom-value (funcall (umls-col-custom-value-func col) values)))
+    (if doquote
+       (let ((q (umls-col-quotechar col)))
+         (concatenate 'string q (escape-backslashes custom-value) q))
+       (escape-backslashes custom-value))))
+
+(defun custom-col-values (colstructs values doquote)
+  "Returns a list of string column values for SQL inserts for custom columns"
+  (loop for col in colstructs collect (col-value col doquote values)))
+
+
 (defun remove-custom-cols (cols)
   "Remove custom cols from a list col umls-cols"
   (remove-if #'umls-col-custom-value-func cols))
@@ -242,7 +289,7 @@ This is much faster that using create-umls-db-insert."
   (format nil "LOAD DATA LOCAL INFILE \"~a\" INTO TABLE ~a FIELDS TERMINATED BY \"|\""
          (umls-pathname (umls-file-fil file) extension) (umls-file-table file)))
 
-(defun umls-translate (file line)
+(defun umls-translate-old (file line)
   "Translate a single line for sql output"
   (string-trim-last-character
    (concatenate 'string
@@ -257,6 +304,21 @@ This is much faster that using create-umls-db-insert."
                 (remove-custom-cols (umls-file-colstructs file)) 
                 line)
                (custom-col-values (custom-colstructs-for-file file) line "|" nil))))
+
+(defun umls-translate (file line)
+  "Translate a single line for sql output"
+  (format nil "~{~A~^|~}"
+         (append
+          (mapcar
+           (lambda (col value)
+             (concatenate
+              'string
+              (if (eq (umls-col-datatype col) 'sql-u)
+                  (format nil "~d" (parse-ui value ""))
+                  (escape-backslashes value))))
+           (remove-custom-cols (umls-file-colstructs file)) 
+           line)
+         (custom-col-values (custom-colstructs-for-file file) line nil))))
    
 
 ;;; Routines for analyzing cost of fixed size storage