X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=sql%2Foodml.lisp;h=d61c58a59971c31b304aaf1f703328247ae9e9b2;hb=ba3a0f54ddd51bc3a45acace5a410565e023d71a;hp=d38d3b94ded9ad1b3fb03c3944173bc0540115e5;hpb=bab5e8056e3850cd9fb0582f73955aee5abf010b;p=clsql.git diff --git a/sql/oodml.lisp b/sql/oodml.lisp index d38d3b9..d61c58a 100644 --- a/sql/oodml.lisp +++ b/sql/oodml.lisp @@ -1267,19 +1267,26 @@ as elements of a list." (when (and order-by (= 1 (length target-args))) (let ((table-name (view-table (find-class (car target-args)))) (order-by-list (copy-seq (listify order-by)))) - (labels ((set-table-if-needed (val) + (labels ((sv (val name) (ignore-errors (slot-value val name))) + (set-table-if-needed (val) (typecase val (sql-ident-attribute (handler-case - (unless (slot-value val 'qualifier) - (setf (slot-value val 'qualifier) table-name)) + (if (sv val 'qualifier) + val + (make-instance 'sql-ident-attribute + :name (sv val 'name) + :qualifier table-name)) (simple-error () ;; TODO: Check for a specific error we expect ))) - (cons (set-table-if-needed (car val)))))) - (loop for i from 0 below (length order-by-list) - for id = (nth i order-by-list) - do (set-table-if-needed id))) + (cons (cons (set-table-if-needed (car val)) + (cdr val))) + (t val)))) + (setf order-by-list + (loop for i from 0 below (length order-by-list) + for id in order-by-list + collect (set-table-if-needed id)))) (setf (getf qualifier-args :order-by) order-by-list)))) (cond