[elephant-devel] Re: Mixing "logical" layers in an elephant application

Alain Picard Alain.Picard at memetrics.com
Sat Dec 15 00:11:34 UTC 2007


"Alex Mizrahi" <killerstorm at newmail.ru> writes:

>  AP> When I tried the above, it blew up when I added the
> ENSURE-TRANSACTION
>  AP> clause; because all of a sudden the DOQUERY found itself querying
>  AP> on the "wrong" database.  (I'm assuming ENSURE-TRANSACTION binds
>  AP> something like a *DATABASE* var which got mistakenly inherited by
>  AP> the postmodern layer)
>
> so you have two postmodern connections?

At least.  By which I mean that I want to use connection pools,
both at the elephant and "raw" postmodern levels.

Adding a WITH-CONNECTION in the judicious place:

    (defun map-visits (fn thing-id &key (from 0) (to 9999999999)
collect)
      (let ((results '()))
        (flet ((collector (thing)
                 (push (funcall fn thing) results)))
          (let ((fn (if collect #'collector fn)))
           (pomo:with-connection ("otherdb" "postgres" "" "localhost" :pooled-p t)
             (doquery (:select thing-id
                              :from :visit
                              :where (:and (:= thing-id id)
                                           (:< from 'timestamp)
                                           (:<= 'timestamp to)))
                (arg)
              (funcall fn arg)))))
        results))

Does indeed allow the calling code to MAP-VISIT on "otherdb"
while the FN being passed in is a closure which uses elephant
to perform operations on "elephantdb" in the meantime.

It _seems_ to me that if FN throws, it's transaction should unroll,
and since MAP-VISITS is just doing a select, it doesn't need to be
in a transaction, but if it were, it would also unroll correctly.

I'll go with this for now and report problems if I find any.

Thanks for the advice!

                --Alain


-- 
Please read about why Top Posting
is evil at: http://en.wikipedia.org/wiki/Top-posting
and http://www.dickalba.demon.co.uk/usenet/guide/faq_topp.html

Please read about why HTML in email is evil at: http://www.birdhouse.org/etc/evilmail.html



More information about the elephant-devel mailing list