anchor.diff:  (defun opinion-tree-for-target (turl)
     (if (rooturl-p turl)
         (opinion-tree-for-rooturl turl)
  -      (tree-by-feature 
  +      (tree-by-feature
          (merge-query
  -	(opinion-ids-for-rooturl (get-rooturl-for-url turl))
  -	(select (colm 'opinion 'target)
  -		(colm 'opinion 'url)))
  +        (opinion-ids-for-rooturl (get-rooturl-for-url turl))
  +        (select (colm 'opinion 'target)
  +                (colm 'opinion 'url)))
          #'second
          :root turl
          :format #'car
  
positive.code:   (format nil "~a~d" (make-user-url username) opinid))
  
  (defun save-new-opinion (opinion user &key (opinurl #'make-opinion-url)
  			 (userurl #'make-user-url))
    (let ((id (next-val "opinion_id_seq")))
      (save-opinion
       (concatenate 'list
  		  (collecting 
  		    (collect (cons :author (funcall userurl user)))
  		    (collect (cons :id id))
  		    (collect (cons :url (funcall opinurl user id))))
  		  opinion))))
  
  (defun save-opinion (opin)
    (with-keys (:author :target :id :votevalue :datestamp :url :comment
  		      :reference :flag) (alist->hash opin)
      (let* ((user (assoc-cdr :author opin))
  	   (atype (author-type user))
  	   (aid (or (get-author-id user atype)
  		    (insert-new-author 
  		     (if (eq atype :string) "wf_user" atype) user)))
  	   (oid
  	    (insert-record 
  	     'opinion
  	     (collecting
  	       (collect 
  		   (cons :rooturl (find/store-root-url target)))
  	       (dolist (k '(:id :votevalue :target :datestamp :url))
  		 (awhen (assoc k opin) (collect it)))
  	       (collect (cons :flag 
  			      (apply #'format nil "~a ~a" 
  				     (mapcar (compose #'to-pascal-case
  						      #'mkstr) flag))))
  	       (collect (cons :author aid))))))
        (when (and (stringp comment) (string-true comment))
  	(insert-records :into 'comment :attributes '(:opinion :comment)
  			:values (list oid comment)))
        (when (and (stringp reference) (string-true reference))
  	(insert-records :into 'reference :attributes '(:opinion :comment)
  			:values (list oid reference)))
        (dolist (k '(:excerpt :excerpt-offset :time-excerpt :excerpt-length))
  	(awhen (aand (assoc k opin) (string-true (cdr it)))
  	  (insert-records :into 'excerpt :attributes '(:opinion :type :value)
  			  :values (list oid (to-snake-case (mkstr k)) it))))
        oid)))
   
  (defun delete-opinion (oid)
    (let ((rooturl (car (col-from-pkey (colm 'opinion 'rooturl) oid))))
      (with-transaction nil
  
negative.code:   (exists
     (unexecuted
       (select (colm 'id) :from (tabl 'opinion)
                          :where (sql-and (sql-= url (colm 'target))
                                          (sql-> 0 (colm 'votevalue)))))))
  
  ;;;
  ;;; Rooturl utilities
  