r9244: Automated commit for Debian build of clsql upstream-version-2.10.11
[clsql.git] / sql / objects.lisp
index 833abd79e0510f3a47682bbea747a793fdc27b1a..fccf37dbb2a359dc854e1e31c268525af9d6f91e 100644 (file)
   (:metaclass standard-db-class)
   (:documentation "Superclass for all CLSQL View Classes."))
 
+(defvar *update-records-on-make-instance* nil
+  "When T, UPDATE-RECORDS-FROM-INSTANCE will be automatically called
+when a new instance of a view-class is created.")
+
 (defvar *db-deserializing* nil)
 (defvar *db-initializing* nil)
 
               (setf (slot-value instance slot-name) nil))))))
   (call-next-method))
 
+#+ignore ;; not currently used
 (defmethod (setf slot-value-using-class) (new-value (class standard-db-class)
                                          instance slot)
   (declare (ignore new-value instance slot))
   (call-next-method))
 
-(defmethod initialize-instance :around ((object standard-db-object)
+(defmethod initialize-instance ((object standard-db-object)
                                        &rest all-keys &key &allow-other-keys)
   (declare (ignore all-keys))
   (let ((*db-initializing* t))
     (call-next-method)
-    (unless *db-deserializing*
+    (when (and *update-records-on-make-instance*
+              (not *db-deserializing*))
       #+nil (created-object object)
       (update-records-from-instance object))))
 
@@ -712,6 +718,19 @@ superclass of the newly-defined View Class."
         (res (fault-join-slot-raw class object slot-def)))
     (when res
       (cond
+       ((and ts (gethash :target-slot dbi) (gethash :set dbi))
+       (mapcar (lambda (obj)
+                 (let* ((target-name (gethash :target-slot dbi))
+                        (target-class (find-class target-name)))
+                   (cons 
+                    (car
+                     (fault-join-slot-raw 
+                      target-class
+                      obj
+                      (find target-name (class-slots (class-of obj))
+                            :key #'slot-definition-name)))
+                    obj)))
+                res))
        ((and ts (gethash :set dbi))
         (mapcar (lambda (obj)
                   (cons obj (slot-value obj ts))) res))
@@ -763,10 +782,10 @@ superclass of the newly-defined View Class."
 
 (defun find-all (view-classes &rest args &key all set-operation distinct from
                  where group-by having order-by order-by-descending offset limit
-                refresh flatp (database *default-database*))
+                refresh flatp result-types (database *default-database*))
   "Called by SELECT to generate object query results when the
   View Classes VIEW-CLASSES are passed as arguments to SELECT."
-  (declare (ignore all set-operation group-by having offset limit)
+  (declare (ignore all set-operation group-by having offset limit result-types)
            (optimize (debug 3) (speed 1)))
   (remf args :from)
   (remf args :flatp)