+(defun %delete-item (item)
+ (clsql:with-default-database (clsql:*default-database*)
+ (ignore-errors
+ (clsql:delete-instance-records item))))
+
+(defaction delete-item ((self component) instance)
+ (multiple-value-bind (res err) (%delete-item instance)
+ (if (not err)
+ (call 'info-message :message "Removed Instance")
+ (call 'info-message :message (format nil "Could not remove item. Try removing associated items first. ~A" instance)))))
+
+(defaction delete-relationship ((slot many-to-many-slot-presentation) rel instance)
+ (delete-item (ucw::parent self) rel)
+ (sync-instance instance)
+ (answer-component (ucw::parent self) t))
+
+
+(defun find-many-to-many-join-class (slot instance)
+ (let* ((imd (getf (meta-model::find-slot-metadata instance (slot-name slot))
+ :db-info))
+ (jc (make-instance (getf imd :join-class)))
+ (jcmd (getf (meta-model::find-slot-metadata jc (getf imd :target-slot))
+ :db-info)))
+ (getf jcmd :join-class)))
+
+(defmethod find-all-instances ((slot many-to-many-slot-presentation) instance)
+ (clsql:select (find-many-to-many-join-class slot instance) :flatp t))
+
+(defmethod present-slot ((slot many-to-many-slot-presentation) instance)
+ (let ((instances (slot-value instance (slot-name slot)))
+ new-instance)