From 783a79a99f38169db68f1ded95aa507b0c964daa Mon Sep 17 00:00:00 2001 From: "Kevin M. Rosenberg" Date: Sun, 4 May 2003 08:52:13 +0000 Subject: [PATCH] r4799: Auto commit for Debian build --- sql-create.lisp | 74 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 68 insertions(+), 6 deletions(-) diff --git a/sql-create.lisp b/sql-create.lisp index 5b7794b..4d10d3d 100644 --- a/sql-create.lisp +++ b/sql-create.lisp @@ -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) @@ -36,11 +36,27 @@ (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) @@ -66,8 +82,27 @@ (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)) @@ -79,6 +114,18 @@ 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 -- 2.34.1