r9357: initial update-object-joins
[clsql.git] / sql / objects.lisp
index ce6022c131130cc7ced8137419c468c8ee77c071..523ff6164973b7d1e778993927eaf9a0dcfeda67 100644 (file)
@@ -806,15 +806,28 @@ superclass of the newly-defined View Class."
 
 (defun update-object-joins (objects &key (slots t) (force-p t)
                            class-name (max-len *default-update-objects-max-len*))
-  "Updates the remote join slots, that is those slots defined without :retrieval :immediate."
+  "Updates the remote join slots, that is those slots defined without
+:retrieval :immediate."
   (when objects
     (unless class-name
-      (class-name (class-of (first objects))))
+      (setq class-name (class-name (class-of (first objects)))))
     (let* ((class (find-class class-name))
           (deferred-joins (generate-retrieval-joins-list class :deferred)))
-      (when deferred-joins
-       (warn "not yet implemented.")
-       ))))
+      (cond
+       (deferred-joins
+           (mapcar
+            #'(lambda (slotdef)
+                ;; FIXME: Rather than simply reading the values for each
+                ;; object, to meet CommonSQL spec need to generate a single
+                ;; query to read values for all objects, up to max-len count
+                (mapcar
+                 #'(lambda (object)
+                     (slot-value object (slot-definition-name slotdef)))
+                 objects))
+            deferred-joins))
+       (t
+        (warn "Class ~A does not have any deferred join slots." class-name)))
+      )))
 
   
 (defun fault-join-slot-raw (class object slot-def)