From f1ce8b6ee0cbffb2f397fe067a0d0ecc72113791 Mon Sep 17 00:00:00 2001 From: Drew Crampsie Date: Mon, 4 Jul 2005 04:20:24 -0700 Subject: [PATCH] Fixed search presentations by adding a PREPARE somthing method. too tired to explain, read the source darcs-hash:20050704112024-5417e-5f30f5ac9d0b39e9ccae4c2c0150314efceb24a0.gz --- src/backend/clsql.lisp | 4 +++ src/meta-model.lisp | 6 +++- src/mewa/presentations.lisp | 2 +- src/mewa/slot-presentations.lisp | 56 +++++++++++++++++++------------- 4 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/backend/clsql.lisp b/src/backend/clsql.lisp index a6e9c68..e4e8353 100644 --- a/src/backend/clsql.lisp +++ b/src/backend/clsql.lisp @@ -269,6 +269,10 @@ creates a clsql view-class" ,(append table-slots join-slots) ,@(when model-name (list :model-name model-name)))))) + +(defmethod prepare-slot-name-for-select ((i standard-db-object) slot-name) + (clsql:sql-expression :attribute slot-name)) + (def-compare-expr standard-db-object expr-= sql-=) (def-compare-expr standard-db-object expr-< sql-<) (def-compare-expr standard-db-object expr-> sql->) diff --git a/src/meta-model.lisp b/src/meta-model.lisp index 2fbe4b5..598debf 100644 --- a/src/meta-model.lisp +++ b/src/meta-model.lisp @@ -212,14 +212,18 @@ most of the below functions expect this method to exist" (defgeneric select-instances (instance &rest args) (:documentation "Select instances in backend dependent way")) +(defgeneric prepare-slot-name-for-select (instance slot-name) + (:method (i s) s)) + (defmacro def-compare-expr (instance-type name expr &key value-format) `(defmethod ,name ((instance ,instance-type) slot-name value) (declare (ignore instance)) - (,expr slot-name ,(typecase value-format + (,expr (prepare-slot-name-for-select instance slot-name) ,(typecase value-format (null 'value) (string `(format nil ,value-format value)) (t `(,value-format value)))))) + (defmacro def-logical-expr (instance-type name expr) `(defmethod ,name ((instance ,instance-type) &rest args) (declare (ignore instance)) diff --git a/src/mewa/presentations.lisp b/src/mewa/presentations.lisp index 39a6647..396b4d0 100644 --- a/src/mewa/presentations.lisp +++ b/src/mewa/presentations.lisp @@ -132,7 +132,7 @@ (defmethod ok ((self mewa-presentation-search) &optional arg) (declare (ignore arg)) - (setf (ucw::list-presentation self) (valid-instances self)) + (setf (ucw::instances (ucw::list-presentation self)) (valid-instances self)) (setf (display-results-p self) t)) (defmethod render-on ((res response) (self mewa-presentation-search)) diff --git a/src/mewa/slot-presentations.lisp b/src/mewa/slot-presentations.lisp index 4e69bd8..571e9dd 100644 --- a/src/mewa/slot-presentations.lisp +++ b/src/mewa/slot-presentations.lisp @@ -106,7 +106,7 @@ When T, only the default value for primary keys and the joins are updated.")) (mewa:make-presentation finstance :type :listing))))) (setf (slot-value instance (slot-name slot)) (slot-value new-instance foreign-slot-name)) - (meta-model:sync-instance instance :fill-gaps-only t)))) + (meta-model:sync-instance instance :fill-gaps-only-p (fill-gaps-only-p self))))) (defaction create-record ((slot mewa-relation-slot-presentation) instance) (multiple-value-bindf (finstance foreign-slot-name) @@ -148,18 +148,24 @@ When T, only the default value for primary keys and the joins are updated.")) (defmethod present-slot :around ((slot foreign-key-slot-presentation) instance) - (setf (foreign-instance slot) (when (presentation-slot-value slot instance) (meta-model:explode-foreign-key instance (slot-name slot)))) - (flet ((render () (call-next-method))) - (cond - ((editablep slot) - (render) - (>")) - (call-next-method) - (<:as-html "total :" (len slot))) + (if (slot-boundp slot 'place) + (progn + (>")) + (call-next-method) + (<:as-html "total :" (len slot))) + (call-next-method))) (defmethod get-foreign-instances :around ((slot has-very-many-slot-presentation) instance) (let ((f (call-next-method))) -- 2.20.1