Re: C++: PgDatabase or PgConnection and lifetime of the objects?

From: jtv <jtv(at)xs4all(dot)nl>
To: Carlos Moreno <moreno(at)mochima(dot)com>
Cc: pgsql-interfaces(at)postgresql(dot)org
Subject: Re: C++: PgDatabase or PgConnection and lifetime of the objects?
Date: 2002-01-21 12:18:13
Message-ID: 20020121131813.C15575@xs4all.nl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-interfaces

On Sat, Jan 19, 2002 at 05:53:15PM -0500, Carlos Moreno wrote:
>
> I'm still not sure I've grasped what are (if any) the
> important differences between the classes PgDatabase and
> PgConnection -- some of the descriptions in the docs are
> identical for both classes, so I'm never sure when to use
> each (I kind of use PgDatabase by default, but maybe I'm
> missing something?)

The existing libpq++ is somewhat braindead when it comes to
this. Basically, you use the simplest one that has all the
methods you need--typically PgDatabase. I honestly have no
idea why the two classes were separated in this way.

What I usually tell people is to take a look at my alternative
C++ frontend, libpqxx:

http://members.ams.chello.nl/j.vermeulen31/proj-libpqxx.html

And I intend to keep plugging this until it's included as the
standard C++ API. :-)

> Also, I'm quite unsure about what should be the lifetime
> of the objects: should I create one database object when
> the application starts, and every time I need to execute
> an SQL statement, I call Exec? Or should I create a local
> database object whenever I need it?

In libpq++, you create your PgDatabase object and use that to
do all your work. Or even better, make it a PgTransaction.
Unfortunately this means you've got to open a new connection
for every transaction.

> What approach could you recommend concerning the two
> details mentioned in the subject?

With libpq++, create one PgDatabase object for the lifetime
of your connection and build your own exception-safe wrapper
to begin/abort/commit transactions.

With libpqxx, create one Pg::Connection object for the
lifetime of your connection and create Transactor classes
for the transactions you need to do. Then, have your
program invoke them in a robust, restartable manner using
Connection::Perform(Transactor).


Jeroen

In response to

Browse pgsql-interfaces by date

  From Date Subject
Next Message Jules Alberts 2002-01-21 13:32:57 using the same name for a related table, function, trigger
Previous Message jtv 2002-01-21 12:04:25 Re: libpq++