docstrings and small rewrite of chain-primary-keys to be iterative instead of recursive
authorRuss Tyndall <russ@acceleration.net>
Tue, 20 Nov 2012 22:19:02 +0000 (17:19 -0500)
committerNathan Bird <nathan@acceleration.net>
Wed, 5 Dec 2012 22:10:33 +0000 (17:10 -0500)
sql/oodml.lisp

index 3b3ef5748c9ead8ddc77c5871a860049f2900f11..26a0f747892ca00272d11e0224a6efc62506ab40 100644 (file)
   (sql-expression :table (view-table o)))
 
 (defmethod attribute-references ((o class-and-slots))
   (sql-expression :table (view-table o)))
 
 (defmethod attribute-references ((o class-and-slots))
+  "build sql-ident-attributes for a given class-and-slots"
   (loop
     with class = (view-class o)
     for sd in (slot-defs o)
   (loop
     with class = (view-class o)
     for sd in (slot-defs o)
     rtns))
 
 (defun update-auto-increments-keys (class obj database)
     rtns))
 
 (defun update-auto-increments-keys (class obj database)
-  ;; handle pulling any autoincrement values into the object
+  " handle pulling any autoincrement values into the object
+   if normalized and we now that all the "
   (let ((pk-slots (keyslots-for-class class))
         (table (view-table class))
         new-pk-value)
   (let ((pk-slots (keyslots-for-class class))
         (table (view-table class))
         new-pk-value)
                "This seems kindof wrong, but this is mostly how it was working, so
                   its here to keep the normalized code path working"
                (when (typep in-class 'standard-db-class)
                "This seems kindof wrong, but this is mostly how it was working, so
                   its here to keep the normalized code path working"
                (when (typep in-class 'standard-db-class)
-                 (loop for slot in (keyslots-for-class in-class)
-                       do (do-update slot))
-                 (loop for c in (class-direct-superclasses in-class)
-                       do (chain-primary-keys c)))))
+                 (loop for slot in (ordered-class-slots in-class)
+                       when (key-slot-p slot)
+                       do (do-update slot)))))
       (loop for slot in pk-slots do (do-update slot))
       (let ((direct-class (to-class obj)))
         (when (and new-pk-value (normalizedp direct-class))
       (loop for slot in pk-slots do (do-update slot))
       (let ((direct-class (to-class obj)))
         (when (and new-pk-value (normalizedp direct-class))
 (defmethod %update-instance-helper
     (class-and-slots obj database
      &aux (avps (attribute-value-pairs class-and-slots obj database)))
 (defmethod %update-instance-helper
     (class-and-slots obj database
      &aux (avps (attribute-value-pairs class-and-slots obj database)))
-  ;; we dont actually need to update anything on this particular parent class
+  "A function to help us update a given table (based on class-and-slots)
+   with values from an object"
+  ;; we dont actually need to update anything on this particular
+  ;; class / parent class
   (unless avps (return-from %update-instance-helper))
 
   (let* ((view-class (view-class class-and-slots))
   (unless avps (return-from %update-instance-helper))
 
   (let* ((view-class (view-class class-and-slots))
 
 (defmethod update-record-from-slots ((obj standard-db-object) slots
                                      &key (database *default-database*))
 
 (defmethod update-record-from-slots ((obj standard-db-object) slots
                                      &key (database *default-database*))
+  "For a given list of slots, update all records associated with those slots
+   and classes.
+
+   Generally this will update the single record associated with this object,
+   but for normalized classes might update as many records as there are
+   inheritances "
   (setf slots (listify slots))
   (let* ((classes-and-slots (view-classes-and-slots-by-name obj slots))
          (database (choose-database-for-instance obj database)))
   (setf slots (listify slots))
   (let* ((classes-and-slots (view-classes-and-slots-by-name obj slots))
          (database (choose-database-for-instance obj database)))
 
 (defmethod update-record-from-slot
     ((obj standard-db-object) slot &key (database *default-database*))
 
 (defmethod update-record-from-slot
     ((obj standard-db-object) slot &key (database *default-database*))
+  "just call update-records-from-slots which now handles this.
+
+   This function is only here to maintain backwards compatibility in
+   the public api"
   (update-record-from-slots obj slot :database database))
 
 (defun view-classes-and-storable-slots (class)
   (update-record-from-slots obj slot :database database))
 
 (defun view-classes-and-storable-slots (class)
 
 (defmethod primary-key-slot-values ((obj standard-db-object)
                                     &key class slots )
 
 (defmethod primary-key-slot-values ((obj standard-db-object)
                                     &key class slots )
+  "Returns the values of all key-slots for a given class"
   (defaulting class (class-of obj)
               slots (keyslots-for-class class))
   (loop for slot in slots
   (defaulting class (class-of obj)
               slots (keyslots-for-class class))
   (loop for slot in slots
     (primary-key-slot-values obj)))
 
 (defmethod delete-instance-records ((instance standard-db-object) &key database)
     (primary-key-slot-values obj)))
 
 (defmethod delete-instance-records ((instance standard-db-object) &key database)
+  "Removes the records associated with a given instance
+   (as determined by key-qualifier-for-instance)
+
+   TODO: Doesnt handle normalized classes at all afaict"
   (let ((database (choose-database-for-instance instance database))
         (vt (sql-expression :table (view-table (class-of instance)))))
     (if database
   (let ((database (choose-database-for-instance instance database))
         (vt (sql-expression :table (view-table (class-of instance)))))
     (if database
 
 (defmethod update-slot-from-record ((instance standard-db-object)
                                     slot &key (database *default-database*))
 
 (defmethod update-slot-from-record ((instance standard-db-object)
                                     slot &key (database *default-database*))
+  "Pulls the value of a given slot form the database and stores that in the
+   appropriate slot on instance"
   (multiple-value-bind (res slot-def)
       (get-slot-value-from-record instance slot :database database)
     (let ((vd (choose-database-for-instance instance database)))
   (multiple-value-bind (res slot-def)
       (get-slot-value-from-record instance slot :database database)
     (let ((vd (choose-database-for-instance instance database)))