;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
;;;; *************************************************************************
;;;;
-;;;; $Id:
+;;;; $Id$
;;;;
;;;; The CLSQL Object Oriented Data Definitional Language (OODDL)
;;;;
:db-kind :virtual))
(:metaclass standard-db-class)
(:documentation "Superclass for all CLSQL View Classes."))
+#+clisp
+(eval-when (:compile-toplevel :load-toplevel :execute)
+ (make-instance 'standard-db-object)
+ (finalize-inheritance (find-class 'standard-db-object)))
+
+(defparameter *default-string-length* 255
+ "The length of a string which does not have a user-specified length.")
(defvar *db-auto-sync* nil
"A non-nil value means that creating View Class instances or
(let* ((slot-name (%svuc-slot-name slot-def))
(slot-object (%svuc-slot-object slot-def class))
(slot-kind (view-class-slot-db-kind slot-object)))
- (call-next-method)
- (when (and *db-auto-sync*
- (not *db-initializing*)
- (not *db-deserializing*)
- (not (eql slot-kind :virtual)))
- (update-record-from-slot instance slot-name))))
+ (prog1
+ (call-next-method)
+ (when (and *db-auto-sync*
+ (not *db-initializing*)
+ (not *db-deserializing*)
+ (not (eql slot-kind :virtual)))
+ (update-record-from-slot instance slot-name)))))
(defmethod initialize-instance ((object standard-db-object)
&rest all-keys &key &allow-other-keys)
;;
(defun create-view-from-class (view-class-name
- &key (database *default-database*))
+ &key (database *default-database*)
+ (transactions t))
"Creates a table as defined by the View Class VIEW-CLASS-NAME
in DATABASE which defaults to *DEFAULT-DATABASE*."
(let ((tclass (find-class view-class-name)))
(if tclass
(let ((*default-database* database))
- (%install-class tclass database))
+ (%install-class tclass database :transactions transactions))
(error "Class ~s not found." view-class-name)))
(values))
-(defmethod %install-class ((self standard-db-class) database &aux schemadef)
- (dolist (slotdef (ordered-class-slots self))
- (let ((res (database-generate-column-definition (class-name self)
- slotdef database)))
- (when res
- (push res schemadef))))
- (unless schemadef
- (error "Class ~s has no :base slots" self))
- (create-table (sql-expression :table (view-table self)) (nreverse schemadef)
- :database database
- :constraints (database-pkey-constraint self database))
- (push self (database-view-classes database))
+(defmethod %install-class ((self standard-db-class) database
+ &key (transactions t))
+ (let ((schemadef '()))
+ (dolist (slotdef (ordered-class-slots self))
+ (let ((res (database-generate-column-definition (class-name self)
+ slotdef database)))
+ (when res
+ (push res schemadef))))
+ (unless schemadef
+ (error "Class ~s has no :base slots" self))
+ (create-table (sql-expression :table (view-table self)) (nreverse schemadef)
+ :database database
+ :transactions transactions
+ :constraints (database-pkey-constraint self database))
+ (push self (database-view-classes database)))
t)
(defmethod database-pkey-constraint ((class standard-db-class) database)
(when keylist
(convert-to-db-default-case
(format nil "CONSTRAINT ~APK PRIMARY KEY~A"
- (database-output-sql (view-table class) database)
- (database-output-sql keylist database))
+ (sql-output (view-table class) database)
+ (sql-output keylist database))
database))))
(defmethod database-generate-column-definition (class slotdef database)
(setf cdef (append cdef (list (view-class-slot-db-type slotdef))))
(let ((const (view-class-slot-db-constraints slotdef)))
(when const
- (setq cdef (append cdef (list const)))))
+ (setq cdef (append cdef (listify const)))))
cdef)))