From 8f46e0fa45fc54bccceb5a0e86f596dd8e480853 Mon Sep 17 00:00:00 2001 From: Ryszard Szopa Date: Sun, 4 Jan 2009 01:23:07 +0100 Subject: [PATCH] Make it possible to pass functional expression to :order-by in select. Also prevent errors when setting table qualifiers prev: Ryszard Szopa 0c4d66aaaf81025974508a4e7b5d10205e4db7f7 9aafcb72bd7ca1d7e908938b6a5319753b3371d9 --- sql/oodml.lisp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/sql/oodml.lisp b/sql/oodml.lisp index 466e86a..b2f16a6 100644 --- a/sql/oodml.lisp +++ b/sql/oodml.lisp @@ -1261,15 +1261,19 @@ 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)))) - - (loop for i from 0 below (length order-by-list) - do (etypecase (nth i order-by-list) - (sql-ident-attribute - (unless (slot-value (nth i order-by-list) 'qualifier) - (setf (slot-value (nth i order-by-list) 'qualifier) table-name))) - (cons - (unless (slot-value (car (nth i order-by-list)) 'qualifier) - (setf (slot-value (car (nth i order-by-list)) 'qualifier) table-name))))) + (labels ((set-table-if-needed (val) + (typecase val + (sql-ident-attribute + (handler-case + (unless (slot-value val 'qualifier) + (setf (slot-value val '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))) (setf (getf qualifier-args :order-by) order-by-list))) (cond -- 2.34.1