r9357: initial update-object-joins
authorKevin M. Rosenberg <kevin@rosenberg.net>
Fri, 14 May 2004 20:25:00 +0000 (20:25 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Fri, 14 May 2004 20:25:00 +0000 (20:25 +0000)
ChangeLog
TODO
sql/objects.lisp

index d8580efcbca1a154772e3e18ea1b9c2efa3bdc1e..42f5b2911f4785bfdcd5cf3ecd3b0fab0a452b7d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -25,7 +25,8 @@
        * db-mysql/mysql-api.lisp: Fix int vs. long slots in foreign
        structures found by testing with AllegroCL 7.0b AMD64.
        * db-*/*-loader.lisp: Load 64-bit libraries on 64-bit platorms
-       * sql/objects.lisp: Initial caching support for SELECT
+       * sql/objects.lisp: Simple implementation of UPDATE-OBJECT-JOINS.
+       Initial caching support for SELECT
        * tests/test-oodml.lisp: Avoid using cache when testing select.
        * sql/kmr-mop.lisp: Explicitly check slot order and
        store as a cl:*feature*
diff --git a/TODO b/TODO
index 0beae4cde3e4dab4a2b23f5fbfa099ecff5d5e94..8563e0a7bf3ac324d975e47d85bf4bf21c6cd864 100644 (file)
--- a/TODO
+++ b/TODO
@@ -12,10 +12,6 @@ TESTS TO ADD
 
 COMMONSQL SPEC
 
-* Missing: 
-
-  UPDATE-OBJECT-JOINS 
-
 * Incompatible 
 
  >> The functional sql interface 
@@ -34,8 +30,16 @@ COMMONSQL SPEC
 
       o variables (e.g., table identifiers) should be instantiated at runtime 
 
-OPTIMIZATIONS
 
+VARIANCES FROM COMMONSQL
+
+UPDATE-OBJECT-JOINS:
+ 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.
+
+OPTIMIZATIONS
 * Revisit result-type list creation,perhaps caching
 
 POSSIBLE EXTENSIONS
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)