X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fmetaclasses.lisp;h=c76a210f6e8c6aedc3337ca93ba48027f6717fb1;hp=a43c4acd836381ab77f928401c542aa191717e02;hb=706c29aa55b25e5b7c7f90460589a4702b1390e7;hpb=e7a214b2445830219022acb5911a3f9303d938bd diff --git a/sql/metaclasses.lisp b/sql/metaclasses.lisp index a43c4ac..c76a210 100644 --- a/sql/metaclasses.lisp +++ b/sql/metaclasses.lisp @@ -52,7 +52,7 @@ :accessor view-class-qualifier :initarg :qualifier :initform nil)) - (:documentation "VIEW-CLASS metaclass.")) + (:documentation "Metaclass for all CLSQL View Classes.")) ;;; Lispworks 4.2 and before requires special processing of extra slot and class options @@ -78,7 +78,7 @@ ((typep arg 'sql-ident) (slot-value arg 'name)) ((stringp arg) - (intern (symbol-name-default-case arg))))) + (intern arg)))) (defun column-name-from-arg (arg) (cond ((symbolp arg) @@ -167,9 +167,9 @@ (defun describe-db-layout (class) (flet ((not-db-col (col) - (not (member (nth 2 col) '(nil :base :key)))) + (not (member (nth 2 col) '(nil :base :key)))) (frob-slot (slot) - (let ((type (slot-value slot 'type))) + (let ((type (slot-definition-type slot))) (if (eq type t) (setq type nil)) (list (slot-value slot 'name) @@ -281,13 +281,13 @@ column definition in the database.") :initarg :db-constraints :initform nil :documentation - "A single constraint or list of constraints for this column") + "A keyword symbol representing a single SQL column constraint or list of such symbols.") (void-value :accessor view-class-slot-void-value :initarg :void-value :initform nil :documentation - "Value to store is the SQL value is NULL. Default is NIL.") + "Value to store if the SQL value is NULL. Default is NIL.") (db-info :accessor view-class-slot-db-info :initarg :db-info @@ -309,7 +309,7 @@ column definition in the database.") (defun parse-db-info (db-info-list) (destructuring-bind (&key join-class home-key key-join foreign-key (delete-rule nil) - (target-slot nil) (retrieval :deferred) (set nil)) + (target-slot nil) (retrieval :deferred) (set t)) db-info-list (let ((ih (make-hash-table :size 6))) (if join-class @@ -423,13 +423,15 @@ which does type checking before storing a value in a slot." (car list) list)) -(declaim (inline delistify)) +(declaim (inline delistify-dsd)) (defun delistify-dsd (list) "Some MOPs, like openmcl 0.14.2, cons attribute values in a list." (if (and (listp list) (null (cdr list))) (car list) list)) +(defvar *impl-type-attrib-name* #-clisp 'type #+clisp 'clos::$type) + (defmethod compute-effective-slot-definition ((class standard-db-class) #+kmr-normal-cesd slot-name direct-slots) @@ -442,9 +444,10 @@ which does type checking before storing a value in a slot." (null (specified-type dsd))) (setf (specified-type dsd) (slot-definition-type dsd)) - (setf (slot-value dsd 'type) - (compute-lisp-type-from-slot-specification - dsd (slot-definition-type dsd)))) + (setf #-clisp (slot-value dsd 'type) + #+clisp (slot-definition-type dsd) + (compute-lisp-type-from-slot-specification + dsd (slot-definition-type dsd)))) (let ((esd (call-next-method))) (typecase dsd @@ -508,9 +511,9 @@ which does type checking before storing a value in a slot." (t (let ((type-predicate #+openmcl (slot-value esd 'ccl::type-predicate))) #-openmcl (declare (ignore type-predicate)) - (change-class esd 'view-class-effective-slot-definition - #+allegro :name - #+allegro (slot-definition-name dsd)) + #-clisp (change-class esd 'view-class-effective-slot-definition + #+allegro :name + #+allegro (slot-definition-name dsd)) #+openmcl (setf (slot-value esd 'ccl::type-predicate) type-predicate))