X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;ds=sidebyside;f=sql%2Fobjects.lisp;fp=sql%2Fobjects.lisp;h=523ff6164973b7d1e778993927eaf9a0dcfeda67;hb=8373c592f525a394a1ff66986ad4acf50e8e11b7;hp=ce6022c131130cc7ced8137419c468c8ee77c071;hpb=8ee8fd019f504602519a38b78db018b5c1ec1e25;p=clsql.git diff --git a/sql/objects.lisp b/sql/objects.lisp index ce6022c..523ff61 100644 --- a/sql/objects.lisp +++ b/sql/objects.lisp @@ -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)