Changeset version,0.1,2


Ignore:
Timestamp:
10/03/2007 05:22:12 AM (19 years ago)
Author:
David Owen <dsowen@…>
branch-nick:
xbase
revision id:
dsowen@fugue88.ws-20071003052212-1hkdi6br2hfdiyzl
Message:

Generates SQL to create tables.
Doesn't handle memos yet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • version/0.1/xbase.lisp

    r1 r2  
    3131                            :initial-element 0)))
    3232      (read-sequence v stream)
    33       (string-trim '(#\Nul) (map 'string #'code-char v))))
     33      (string-trim '(#\Nul #\Space) (map 'string #'code-char v))))
    3434  (:method ((type (eql 'date)) stream &optional format)
    3535    (assert (stringp format))
     
    130130     ,@(mapcar #'slot-from-field descs)))
    131131
     132(defun sql-column (desc)
     133  (with-slots (name type size precision) desc
     134    (format nil "~A ~A"
     135            name
     136            (cond
     137              ((string= type "C")
     138               (format nil "VARCHAR(~A)" size))
     139              ((string= type "N")
     140               (if (= precision 0)
     141                   (cond
     142                     ((< size 10) "INTEGER")
     143                     ((< size 19) "BIGINT")
     144                     (t "NUMERIC(~A)" size))
     145                   (format nil "NUMERIC(~A,~A)" (1- size) precision)))
     146              ((string= type "D")
     147               "DATE")
     148              ((string= type "M")
     149               (warn "MEMOs aren't implemented yet.")
     150               "NUMERIC(10)")
     151              (t (error "Bad type ~S." type))))))
     152
     153(defun sql-create (name descs)
     154  (format nil "CREATE TABLE ~A(~{~A~@{,~A~}~});"
     155          name
     156          (mapcar 'sql-column descs)))
     157
     158(defstruct dbf-desc
     159  name
     160  filename
     161  sql-create)
     162
    132163(defvar *dbfs* (make-hash-table :test 'eq))
    133164
     
    135166  (let ((descs (nth-value 1 (read-dbf-structure filename))))
    136167    `(progn
    137        (setf (gethash ',name *dbfs*) ,filename)
     168       (setf (gethash ',name *dbfs*)
     169             (make-dbf-desc :name ',name
     170                            :filename ,filename
     171                            :sql-create ,(sql-create name descs)))
    138172       ,(struct-from-field-descs name descs))))
    139173
     
    141175
    142176;;; Now file stuff.
    143 
    144 
    145177
    146178(defun read-records (in type &optional records)
     
    156188      (read-records in type))))
    157189
    158 (define-dbf-struct unit-type "/home/dsowen/scott/main/db/brisutyp.dbf")
    159 (define-dbf-struct vendor "/home/dsowen/scott/main/db/brisvend.dbf")
     190(define-dbf-struct unit-type "/home/dsowen/scott/local/bent-data/bentutyp.dbf")
     191(define-dbf-struct vendor "/home/dsowen/scott/local/bent-data/bentvend.dbf")
     192(define-dbf-struct phone "/home/dsowen/scott/local/bent-data/bentphon.dbf")
     193(define-dbf-struct tenent-change "/home/dsowen/scott/local/bent-data/benttchg.dbf")
Note: See TracChangeset for help on using the changeset viewer.