From: Benjamin Geer <ben@socialtools.net>
To: Richard Jones <rich@annexia.org>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] PostgreSQL-OCaml 1.0.1
Date: Fri, 30 Jan 2004 12:56:43 +0000 [thread overview]
Message-ID: <401A548B.2090603@socialtools.net> (raw)
In-Reply-To: <20040130122311.GA29288@redhat.com>
Richard Jones wrote:
> It throws Sql_error when it can determine an error.
Another thing I forgot to bring up about error handling. If an error
occurs, you generally want to roll back the transaction. If you're
using a connection pool, you want to make sure you close the connection
when you're done with it, regardless of whether the transaction was
committed or rolled back. Committing a transaction, rolling back a
transaction, and closing a connection are all operations that could also
throw exceptions. Writing out all those try-with expressions every time
becomes very verbose and error-prone. I think this is the sort of
problem that functional programming is really well suited to. For
example, you could have a standard function like this:
let do_f_with_error_handling f conn = ...
It would begin a transaction on the specified connection, run f, handle
any exceptions by rolling back the transaction (or else commit it if
there were no errors), then close the connection (also handling any
errors). It would return the value returned by f, or if it caught an
exception, it would throw that exception (after cleaning up).
(This is one of the annoying things about JDBC; I tend to write
pseudo-functional classes to do this sort of thing in Java, but in Caml
it would be much more straightforward.)
Ben
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2004-01-30 12:56 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-01-30 12:02 Richard Jones
2004-01-30 12:15 ` Benjamin Geer
2004-01-30 12:23 ` Richard Jones
2004-01-30 12:30 ` Richard Jones
2004-01-30 12:43 ` Benjamin Geer
2004-01-30 12:56 ` Benjamin Geer [this message]
2004-01-30 13:22 ` Richard Jones
-- strict thread matches above, loose matches on Subject: below --
2004-01-28 18:32 Markus Mottl
2004-01-28 22:44 ` Stefano Zacchiroli
2004-01-28 23:21 ` Markus Mottl
2004-01-29 9:38 ` Sven Luther
2004-01-29 18:18 ` Alain.Frisch
2004-01-29 20:06 ` Richard Jones
2004-01-29 23:36 ` Markus Mottl
2004-01-30 5:50 ` Josh Burdick
2004-01-30 7:37 ` Shawn Wagner
2004-01-30 8:21 ` Vitaly Lugovsky
2004-01-30 10:24 ` Benjamin Geer
2004-01-30 10:47 ` Richard Jones
2004-01-30 14:58 ` Gerd Stolpmann
2004-01-30 15:46 ` Richard Jones
2004-01-30 11:14 ` Markus Mottl
2004-01-30 11:25 ` Vitaly Lugovsky
2004-01-30 11:41 ` Benjamin Geer
2004-01-30 16:44 ` Alex Baretta
2004-01-30 16:49 ` Benjamin Geer
2004-01-30 8:23 ` Alain.Frisch
2004-02-01 21:03 ` Alain.Frisch
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=401A548B.2090603@socialtools.net \
--to=ben@socialtools.net \
--cc=caml-list@inria.fr \
--cc=rich@annexia.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox