X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Fmetaclasses.lisp;h=2a0b4b9b2c835c30f194c46674b4c2fe795e65b0;hb=92718807dc442b36c4ec549e63166248d6c56c39;hp=d1fba154368fdf54e9d389a77fd753f395dd4f79;hpb=e567409d9fff3f7231c2a0bb69b345e19de2b246;p=clsql.git diff --git a/sql/metaclasses.lisp b/sql/metaclasses.lisp index d1fba15..2a0b4b9 100644 --- a/sql/metaclasses.lisp +++ b/sql/metaclasses.lisp @@ -74,11 +74,13 @@ (defun table-name-from-arg (arg) (cond ((symbolp arg) - arg) + (intern (sql-escape arg))) ((typep arg 'sql-ident) - (slot-value arg 'name)) + (if (symbolp (slot-value arg 'name)) + (intern (sql-escape (slot-value arg 'name))) + (sql-escape (slot-value arg 'name)))) ((stringp arg) - (intern arg)))) + (sql-escape arg)))) (defun column-name-from-arg (arg) (cond ((symbolp arg) @@ -101,6 +103,14 @@ (pop-arg mylist)) newlist)) +(defun set-view-table-slot (class base-table) + (setf (view-table class) + (table-name-from-arg (or (and base-table + (if (listp base-table) + (car base-table) + base-table)) + (class-name class))))) + (defmethod initialize-instance :around ((class standard-db-class) &rest all-keys &key direct-superclasses base-table @@ -120,12 +130,7 @@ direct-superclasses) (remove-keyword-arg all-keys :direct-superclasses))) (call-next-method)) - (setf (view-table class) - (table-name-from-arg (sql-escape (or (and base-table - (if (listp base-table) - (car base-table) - base-table)) - (class-name class))))) + (set-view-table-slot class base-table) (register-metaclass class (nth (1+ (position :direct-slots all-keys)) all-keys)))) @@ -136,12 +141,7 @@ &allow-other-keys) (let ((root-class (find-class 'standard-db-object nil)) (vmc 'standard-db-class)) - (setf (view-table class) - (table-name-from-arg (sql-escape (or (and base-table - (if (listp base-table) - (car base-table) - base-table)) - (class-name class))))) + (set-view-table-slot class base-table) (setf (view-class-qualifier class) (car qualifier)) (if (and root-class (not (equal class root-class)))