Skip site navigation (1) Skip section navigation (2)

Re: libpq++: suggested patches for PgTransaction

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: "J(dot) T(dot) Vermeulen" <jtv(at)cistron-office(dot)nl>
Cc: pgsql-interfaces(at)postgresql(dot)org
Subject: Re: libpq++: suggested patches for PgTransaction
Date: 2001-02-28 17:14:54
Message-ID: 200102281714.MAA02741@candle.pha.pa.us (view raw or flat)
Thread:
Lists: pgsql-interfaces
I will keep this for 7.2.  Thanks.

> The original PgTransaction, apparently having been written without exceptions
> in mind, didn't know how to abort a transaction.  The suggested change makes
> it abort if the transaction object is destroyed without an explicit commit,
> as would happen if the program fell out of the transaction code through an
> unhandled exception (plus the patch makes constructors explicit where 
> appropriate).
> 
> Actually this still isn't very effective; I think it would be more useful to
> have a separate transaction object "latch onto" an existing connection and
> represent a single transaction delimited by the object's entire lifetime.
> That would make it easier to perform multiple independent (but presumably
> non-overlapping) transactions over the lifetime of a single connection in 
> an exception-safe manner.
> 
> 
> --- postgresql-7.0.3/src/interfaces/libpq++/pgtransdb.cc	Sun May 30 17:17:58 1999
> +++ postgresql-7.0.3-jtv/src/interfaces/libpq++/pgtransdb.cc	Wed Feb 28 13:34:20 2001
> @@ -25,7 +25,8 @@
>  // Make a connection to the specified database with default environment
>  // See PQconnectdb() for conninfo usage. 
>  PgTransaction::PgTransaction(const char* conninfo)
> -   : PgDatabase(conninfo)
> +   : PgDatabase(conninfo),
> +     pgCommitted(true)
>  {
>  	BeginTransaction();
>  }
> @@ -33,17 +34,20 @@
>  // Destructor: End the transaction block
>  PgTransaction::~PgTransaction()
>  {
> -	EndTransaction();
> +	if (!pgCommitted) Exec("ABORT");
>  }
>  
>  // Begin the transaction block
>  ExecStatusType PgTransaction::BeginTransaction()
>  {
> +        pgCommitted = false;
>  	return Exec("BEGIN");
>  } // End BeginTransaction()
>  
>  // Begin the transaction block
>  ExecStatusType PgTransaction::EndTransaction()
>  {
> +        pgCommitted = true;
>  	return Exec("END");
>  } // End EndTransaction()
> +
> 
> 
> 
> --- postgresql-7.0.3/src/interfaces/libpq++/pgtransdb.h	Sun Apr 23 00:39:15 2000
> +++ postgresql-7.0.3-jtv/src/interfaces/libpq++/pgtransdb.h	Wed Feb 28 13:34:42 2001
> @@ -36,9 +36,9 @@
>  // the object is destroyed.
>  class PgTransaction : public PgDatabase {
>  public:
> -  PgTransaction(const char* conninfo);	// use reasonable & environment defaults
> +  explicit PgTransaction(const char conninfo[]);	// use reasonable & environment defaults
>    // connect to the database with given environment and database name
> -  // PgTransaction(const PgConnection&);
> +  // explicit PgTransaction(const PgConnection&);
>    ~PgTransaction();	// close connection and clean up
>    
>  protected:
> @@ -46,9 +46,11 @@
>    ExecStatusType EndTransaction();
>    
>  protected:
> -  PgTransaction() : PgDatabase() {}	// Do not connect
> +  PgTransaction() : PgDatabase(), pgCommitted(true) {}	// Do not connect
>  
>  private:
> +  bool pgCommitted;
> +
>  // We don't support copying of PgTransaction objects,
>  // so make copy constructor and assignment op private.
>     PgTransaction(const PgTransaction&);
> 
> 
> 
> Jeroen
> 
> 


-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman(at)candle(dot)pha(dot)pa(dot)us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

In response to

pgsql-interfaces by date

Next:From: Bruce MomjianDate: 2001-02-28 17:32:25
Subject: Re: Double newline bug with DBD::Pg: Where best to fix?
Previous:From: Peter EisentrautDate: 2001-02-28 17:11:06
Subject: Re: Double newline bug with DBD::Pg: Where best to fix?

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group