Pulled a flet out into a method (select-table-sql-expr) which can be
authorRuss Tyndall <russ@acceleration.net>
Thu, 3 Sep 2009 21:34:38 +0000 (17:34 -0400)
committerRuss Tyndall <russ@acceleration.net>
Thu, 3 Sep 2009 21:34:38 +0000 (17:34 -0400)
overridden to supply a different implementation. The impetus for this
is that I wanted to select from a function's results aliased as the
table instead of the table directly.

sql/oodml.lisp

index 2a5b0510b849d5e92c84b626b110630588fc1c35..9aff2c8dab99a36b930d09c103340b1125961abe 100644 (file)
@@ -874,6 +874,10 @@ maximum of MAX-LEN instances updated in each query."
           (car objects)
         objects))))
 
+(defmethod select-table-sql-expr ((table T))
+  "Turns an object representing a table into the :from part of the sql expression that will be executed "
+  (sql-expression :table (view-table table)))
+
 (defun find-all (view-classes
                  &rest args
                  &key all set-operation distinct from where group-by having
@@ -887,8 +891,6 @@ maximum of MAX-LEN instances updated in each query."
   (flet ((ref-equal (ref1 ref2)
            (string= (sql-output ref1 database)
                     (sql-output ref2 database)))
-         (table-sql-expr (table)
-           (sql-expression :table (view-table table)))
          (tables-equal (table-a table-b)
            (when (and table-a table-b)
              (string= (string (slot-value table-a 'name))
@@ -914,15 +916,15 @@ maximum of MAX-LEN instances updated in each query."
            (fullsels (apply #'append (mapcar #'append sels immediate-join-sels)))
            (sel-tables (collect-table-refs where))
            (tables (remove-if #'null
-                              (remove-duplicates
-                               (append (mapcar #'table-sql-expr sclasses)
-                                       (mapcan #'(lambda (jc-list)
-                                                   (mapcar
-                                                    #'(lambda (jc) (when jc (table-sql-expr jc)))
-                                                    jc-list))
-                                               immediate-join-classes)
-                                       sel-tables)
-                               :test #'tables-equal)))
+                             (remove-duplicates
+                              (append (mapcar #'select-table-sql-expr sclasses)
+                                      (mapcan #'(lambda (jc-list)
+                                                  (mapcar
+                                                   #'(lambda (jc) (when jc (select-table-sql-expr jc)))
+                                                   jc-list))
+                                              immediate-join-classes)
+                                      sel-tables)
+                              :test #'tables-equal)))
            (order-by-slots (mapcar #'(lambda (ob) (if (atom ob) ob (car ob)))
                                    (listify order-by)))
            (join-where nil))