Creating classes from tables

Knut Olav Bøhmer <[email protected]>
Newsgroups gmane.lisp.clsql.general
Message-ID <[email protected]>
Hi,

Why does not DEF-VIEW-CLASS seam to create the db-class?
(list-classes) gives nil.

I have the flowing code:

(defpackage #:db-test
  (:nicknames #:dbt)
  (:use #:cl #:clsql))

(in-package #:db-test)


(clsql:connect '("localhost" "mydb" "myuser" "mypasswd") :database-type :mysql)


(defun convert-mysql-type (type)
  (case type
    ((DECIMAL NUMERIC) 'RATIO)
    ((INT TINYINT SMALLINT MEDIUMINT BIGINT YEAR) 'INTEGER)
    ((FLOAT REAL DOUBLE PRECISION ) 'DOUBLE-FLOAT)
    ((DATE DATETIME TIMESTAMP) 'INTEGER)	
    ((TIME) 'INTEGER)
    ((CHAR VARCHAR TEXT TINYTEXT MEDIUMTEXT LONGTEXT) 'STRING)
    ((BIT BLOB MEDIUMBLOB LONGBLOB TINYBLOB GEOMETRY) 'SIMPLE-ARRAY)))

(defun make-class-desc (table-name)
 (let ((desc (clsql:query (format nil "describe ~a;" table-name)))
       (types (clsql:list-attribute-types table-name)))
   (flet ((keyp (name) (equalp "PRI" (fourth (find name desc :key
'first :test 'equalp))))
	  (slot-name (name) (intern (string-upcase (substitute #\- #\_ name
:test 'char-equal)))))
     `(clsql:def-view-class ,(slot-name table-name) ()
	,(loop for (name type scale null) in types
	    collect `(,(slot-name name)
		       :column ,name
		       :type ,(convert-mysql-type (intern (symbol-name type)))
		       :db-kind ,(if (keyp name) :key :base)
		       :initarg ,(intern (symbol-name (slot-name name)) :keyword)))
	(:base-table table-name)))))
;;
;;
;;

;;
;; (make-class-desc "wp_posts") Gives =>
;;

(DEF-VIEW-CLASS WP-POSTS NIL
  ((ID :COLUMN "ID" :TYPE INTEGER :DB-KIND :KEY :INITARG :ID)
   (POST-AUTHOR :COLUMN "post_author" :TYPE INTEGER :DB-KIND
		:BASE :INITARG :POST-AUTHOR)
   (POST-DATE :COLUMN "post_date" :TYPE INTEGER :DB-KIND :BASE
	      :INITARG :POST-DATE)
   (POST-DATE-GMT :COLUMN "post_date_gmt" :TYPE INTEGER :DB-KIND
                  :BASE :INITARG :POST-DATE-GMT)
   (POST-CONTENT :COLUMN "post_content" :TYPE STRING :DB-KIND
		 :BASE :INITARG :POST-CONTENT)
   (POST-TITLE :COLUMN "post_title" :TYPE STRING :DB-KIND :BASE
	       :INITARG :POST-TITLE)
   (POST-EXCERPT :COLUMN "post_excerpt" :TYPE STRING :DB-KIND
		 :BASE :INITARG :POST-EXCERPT)
   (POST-STATUS :COLUMN "post_status" :TYPE STRING :DB-KIND :BASE
		:INITARG :POST-STATUS)
   (COMMENT-STATUS :COLUMN "comment_status" :TYPE STRING :DB-KIND
		   :BASE :INITARG :COMMENT-STATUS)
   (PING-STATUS :COLUMN "ping_status" :TYPE STRING :DB-KIND :BASE
		:INITARG :PING-STATUS)
   (POST-PASSWORD :COLUMN "post_password" :TYPE STRING :DB-KIND
                  :BASE :INITARG :POST-PASSWORD)
   (POST-NAME :COLUMN "post_name" :TYPE STRING :DB-KIND :BASE
	      :INITARG :POST-NAME)
   (TO-PING :COLUMN "to_ping" :TYPE STRING :DB-KIND :BASE
	    :INITARG :TO-PING)
   (PINGED :COLUMN "pinged" :TYPE STRING :DB-KIND :BASE :INITARG
	   :PINGED)
   (POST-MODIFIED :COLUMN "post_modified" :TYPE INTEGER :DB-KIND
                  :BASE :INITARG :POST-MODIFIED)
   (POST-MODIFIED-GMT :COLUMN "post_modified_gmt" :TYPE INTEGER
		      :DB-KIND :BASE :INITARG :POST-MODIFIED-GMT)
   (POST-CONTENT-FILTERED :COLUMN "post_content_filtered" :TYPE
			  STRING :DB-KIND :BASE :INITARG :POST-CONTENT-FILTERED)
   (POST-PARENT :COLUMN "post_parent" :TYPE INTEGER :DB-KIND
		:BASE :INITARG :POST-PARENT)
   (GUID :COLUMN "guid" :TYPE STRING :DB-KIND :BASE :INITARG
	 :GUID)
   (MENU-ORDER :COLUMN "menu_order" :TYPE INTEGER :DB-KIND :BASE
	       :INITARG :MENU-ORDER)
   (POST-TYPE :COLUMN "post_type" :TYPE STRING :DB-KIND :BASE
	      :INITARG :POST-TYPE)
   (POST-MIME-TYPE :COLUMN "post_mime_type" :TYPE STRING :DB-KIND
		   :BASE :INITARG :POST-MIME-TYPE)
   (COMMENT-COUNT :COLUMN "comment_count" :TYPE INTEGER :DB-KIND
                  :BASE :INITARG :COMMENT-COUNT))
  (:BASE-TABLE "wp_posts"))

;;
;; Gives => #<CLSQL-SYS::STANDARD-DB-CLASS WP-POSTS>
;;

(list-classes)

;;
;; gives => nil
;;





--
Knut Olav Bøhmer
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.