ROOT logo
// @(#)root/pgsql:$Id$
// Author: Dennis Box (dbox@fnal.gov)  3/12/2007

/*************************************************************************
 * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
//  SQL statement class for PgSQL                                       //
//                                                                      //
//  See TSQLStatement class documentation for more details.             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TPgSQLStatement.h"
#include "TDataType.h"
#include "TDatime.h"
#include "TTimeStamp.h"

#include <stdlib.h>

ClassImp(TPgSQLStatement)

#ifdef PG_VERSION_NUM

#include "libpq/libpq-fs.h"

static const Int_t kBindStringSize = 25;

//______________________________________________________________________________
TPgSQLStatement::TPgSQLStatement(PgSQL_Stmt_t* stmt, Bool_t errout):
   TSQLStatement(errout),
   fStmt(stmt),
   fNumBuffers(0),
   fBind(0),
   fFieldName(0),
   fWorkingMode(0),
   fIterationCount(0),
   fParamLengths(0),
   fParamFormats(0),
   fNumResultRows(0),
   fNumResultCols(0)
{
   // Normal constructor.
   // Checks if statement contains parameters tags.

   // Given fRes not used, we retrieve the statement using the connection. 
   if (fStmt->fRes != NULL) {
      PQclear(fStmt->fRes);
   }

   fStmt->fRes = PQdescribePrepared(fStmt->fConn,"preparedstmt");
   unsigned long paramcount = PQnparams(fStmt->fRes);
   fNumResultCols = PQnfields(fStmt->fRes);
   fIterationCount = -1;

   if (paramcount>0) {
      fWorkingMode = 1;
      SetBuffersNumber(paramcount);
   } else {
      fWorkingMode = 2;
      SetBuffersNumber(fNumResultCols);
   }
}

//______________________________________________________________________________
TPgSQLStatement::~TPgSQLStatement()
{
   // Destructor.

   Close();
}

//______________________________________________________________________________
void TPgSQLStatement::Close(Option_t *)
{
   // Close statement.

   if (fStmt->fRes)
      PQclear(fStmt->fRes);

   fStmt->fRes = 0;

   PGresult *res=PQexec(fStmt->fConn,"DEALLOCATE preparedstmt;");
   PQclear(res);

   FreeBuffers();
   //TPgSQLServers responsibility to free connection
   fStmt->fConn=0;
   delete fStmt;
}


// Reset error and check that statement exists
#define CheckStmt(method, res)                          \
   {                                                    \
      ClearError();                                     \
      if (fStmt==0) {                                   \
         SetError(-1,"Statement handle is 0",method);   \
         return res;                                    \
      }                                                 \
   }

#define CheckErrNo(method, force, wtf)                  \
   {                                                    \
      int stmterrno = PQresultStatus(fStmt->fRes);      \
      if ((stmterrno!=0) || force) {                        \
         const char* stmterrmsg = PQresultErrorMessage(fStmt->fRes);  \
         if (stmterrno==0) { stmterrno = -1; stmterrmsg = "PgSQL statement error"; } \
         SetError(stmterrno, stmterrmsg, method);               \
         return wtf;                                    \
      }                                                 \
   }

#define CheckErrResult(method, pqresult, retVal)         \
   {                                                     \
      ExecStatusType stmterrno=PQresultStatus(pqresult); \
      if (!pgsql_success(stmterrno)) {                   \
       const char* stmterrmsg = PQresultErrorMessage(fStmt->fRes);  \
       SetError(stmterrno, stmterrmsg, method);                     \
       PQclear(res);                                     \
       return retVal;                                    \
     }                                                   \
   }

#define RollBackTransaction(method)                          \
   {                                                         \
      PGresult *resnum=PQexec(fStmt->fConn,"COMMIT");        \
      CheckErrResult("RollBackTransaction", resnum, kFALSE); \
      PQclear(res);                                          \
   }

// check last pgsql statement error code
#define CheckGetField(method, res)                      \
   {                                                    \
      ClearError();                                     \
      if (!IsResultSetMode()) {                         \
         SetError(-1,"Cannot get statement parameters",method); \
         return res;                                    \
      }                                                 \
      if ((npar<0) || (npar>=fNumBuffers)) {            \
         SetError(-1,Form("Invalid parameter number %d", npar),method); \
         return res;                                    \
      }                                                 \
   }

//________________________________________________________________________
Bool_t TPgSQLStatement::Process()
{
   // Process statement.

   CheckStmt("Process",kFALSE);

   // We create the prepared statement below, MUST delete the old one
   // from our constructor first! 
   if (fStmt->fRes != NULL) {
      PQclear(fStmt->fRes);
   }

   if (IsSetParsMode()) {
      fStmt->fRes= PQexecPrepared(fStmt->fConn,"preparedstmt",fNumBuffers,
                                 (const char* const*)fBind,
                                 0,0,0);

   } else { //result set mode

      fStmt->fRes= PQexecPrepared(fStmt->fConn,"preparedstmt",0,(const char* const*) 0,0,0,0);
   }
   ExecStatusType stat = PQresultStatus(fStmt->fRes);
   if (!pgsql_success(stat))
      CheckErrNo("Process",kTRUE, kFALSE);
   return kTRUE;
}

//________________________________________________________________________
Int_t TPgSQLStatement::GetNumAffectedRows()
{
   // Return number of affected rows after statement is processed.

   CheckStmt("GetNumAffectedRows", -1);

   return (Int_t) atoi(PQcmdTuples(fStmt->fRes));
}

//______________________________________________________________________________
Int_t TPgSQLStatement::GetNumParameters()
{
   // Return number of statement parameters.

   CheckStmt("GetNumParameters", -1);

   if (IsSetParsMode()) {
      return fNumBuffers;
   } else {
      return 0;
   }
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::StoreResult()
{
   // Store result of statement processing to access them
   // via GetInt(), GetDouble() and so on methods.

   int i;
   for (i=0;i<fNumResultCols;i++){
      fFieldName[i] = PQfname(fStmt->fRes,i);
      fParamFormats[i]=PQftype(fStmt->fRes,i);
      fParamLengths[i]=PQfsize(fStmt->fRes,i);

   }
   fNumResultRows=PQntuples(fStmt->fRes);
   ExecStatusType stat = PQresultStatus(fStmt->fRes);
   fWorkingMode = 2;
   if (!pgsql_success(stat))
      CheckErrNo("StoreResult",kTRUE, kFALSE);
   return kTRUE;
}

//______________________________________________________________________________
Int_t TPgSQLStatement::GetNumFields()
{
   // Return number of fields in result set.

   if (fWorkingMode==1)
      return fNumBuffers;
   if (fWorkingMode==2)
      return fNumResultCols;
   return -1;
}

//______________________________________________________________________________
const char* TPgSQLStatement::GetFieldName(Int_t nfield)
{
   // Returns field name in result set.

   if (!IsResultSetMode() || (nfield<0) || (nfield>=fNumBuffers)) return 0;

   return fFieldName[nfield];
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::NextResultRow()
{
   // Shift cursor to nect row in result set.

   if ((fStmt==0) || !IsResultSetMode()) return kFALSE;

   Bool_t res=kTRUE;

   fIterationCount++;
   if (fIterationCount>=fNumResultRows)
     res=kFALSE;
   return res;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::NextIteration()
{
   // Increment iteration counter for statement, where parameter can be set.
   // Statement with parameters of previous iteration
   // automatically will be applied to database.

   ClearError();

   if (!IsSetParsMode() || (fBind==0)) {
      SetError(-1,"Cannot call for that statement","NextIteration");
      return kFALSE;
   }

   fIterationCount++;

   if (fIterationCount==0) return kTRUE;

   fStmt->fRes= PQexecPrepared(fStmt->fConn,"preparedstmt",fNumBuffers,
                               (const char* const*)fBind,
                               0,//fParamLengths,
                               0,//fParamFormats,
                               0);
   ExecStatusType stat = PQresultStatus(fStmt->fRes);
   if (!pgsql_success(stat) ){
      CheckErrNo("NextIteration", kTRUE, kFALSE) ;
      return kFALSE;
   }
   return kTRUE;
}

//______________________________________________________________________________
void TPgSQLStatement::FreeBuffers()
{
   // Release all buffers, used by statement.

  //individual field names free()'ed by PQclear of fStmt->fRes
   if (fFieldName)
      delete[] fFieldName;

   if (fBind){
      for (Int_t i=0;i<fNumBuffers;i++)
         delete [] fBind[i];
      delete[] fBind;
   }

   if (fParamLengths)
      delete [] fParamLengths;

   if (fParamFormats)
      delete [] fParamFormats;

   fFieldName = 0;
   fBind = 0;
   fNumBuffers = 0;
   fParamLengths = 0;
   fParamFormats = 0;
}

//______________________________________________________________________________
void TPgSQLStatement::SetBuffersNumber(Int_t numpars)
{
   // Allocate buffers for statement parameters/ result fields.

   FreeBuffers();
   if (numpars<=0) return;

   fNumBuffers = numpars;

   fBind = new char*[fNumBuffers];
   for(int i=0; i<fNumBuffers; ++i){
      fBind[i] = new char[kBindStringSize]; //big enough to handle text rep. of 64 bit number
   }
   fFieldName = new char*[fNumBuffers];

   fParamLengths = new int[fNumBuffers];
   memset(fParamLengths, 0, sizeof(int)*fNumBuffers);

   fParamFormats = new int[fNumBuffers];
   memset(fParamFormats, 0, sizeof(int)*fNumBuffers);
}

//______________________________________________________________________________
const char* TPgSQLStatement::ConvertToString(Int_t npar)
{
   // Convert field value to string.

   const char *buf = PQgetvalue(fStmt->fRes, fIterationCount, npar);
   return buf;
}

//______________________________________________________________________________
long double TPgSQLStatement::ConvertToNumeric(Int_t npar)
{
   // Convert field to numeric.

   if (PQgetisnull(fStmt->fRes,fIterationCount,npar))
      return (long double)0;

   return (long double) atof(PQgetvalue(fStmt->fRes,fIterationCount,npar));
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::IsNull(Int_t npar)
{
   // Checks if field value is null.

   CheckGetField("IsNull", kTRUE);

   return PQgetisnull(fStmt->fRes,fIterationCount,npar);
}

//______________________________________________________________________________
Int_t TPgSQLStatement::GetInt(Int_t npar)
{
   // Get integer.

   if (PQgetisnull(fStmt->fRes,fIterationCount,npar))
      return (Int_t)0;

   return (Int_t) atoi(PQgetvalue(fStmt->fRes,fIterationCount,npar));
}

//______________________________________________________________________________
UInt_t TPgSQLStatement::GetUInt(Int_t npar)
{
   // Get unsigned integer.

   if (PQgetisnull(fStmt->fRes,fIterationCount,npar))
      return (UInt_t)0;

   return (UInt_t) atoi(PQgetvalue(fStmt->fRes,fIterationCount,npar));
}

//______________________________________________________________________________
Long_t TPgSQLStatement::GetLong(Int_t npar)
{
   // Get long.

   if (PQgetisnull(fStmt->fRes,fIterationCount,npar))
      return (Long_t)0;

   return (Long_t) atol(PQgetvalue(fStmt->fRes,fIterationCount,npar));
}

//______________________________________________________________________________
Long64_t TPgSQLStatement::GetLong64(Int_t npar)
{
   // Get long64.

   if (PQgetisnull(fStmt->fRes,fIterationCount,npar))
      return (Long64_t)0;

#ifndef R__WIN32
   return (Long64_t) atoll(PQgetvalue(fStmt->fRes,fIterationCount,npar));
#else
   return (Long64_t) _atoi64(PQgetvalue(fStmt->fRes,fIterationCount,npar));
#endif
}

//______________________________________________________________________________
ULong64_t TPgSQLStatement::GetULong64(Int_t npar)
{
   // Return field value as unsigned 64-bit integer

   if (PQgetisnull(fStmt->fRes,fIterationCount,npar))
      return (ULong64_t)0;

#ifndef R__WIN32
   return (ULong64_t) atoll(PQgetvalue(fStmt->fRes,fIterationCount,npar));
#else
   return (ULong64_t) _atoi64(PQgetvalue(fStmt->fRes,fIterationCount,npar));
#endif
}

//______________________________________________________________________________
Double_t TPgSQLStatement::GetDouble(Int_t npar)
{
   // Return field value as double.

   if (PQgetisnull(fStmt->fRes,fIterationCount,npar))
      return (Double_t)0;
   return (Double_t) atof(PQgetvalue(fStmt->fRes,fIterationCount,npar));
}

//______________________________________________________________________________
const char *TPgSQLStatement::GetString(Int_t npar)
{
   // Return field value as string.

   return PQgetvalue(fStmt->fRes,fIterationCount,npar);
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetBinary(Int_t npar, void* &mem, Long_t& size)
{
   // Return field value as binary array.
   // Note PQgetvalue mallocs/frees and ROOT classes expect new/delete.

   size_t sz;
   char *cptr = PQgetvalue(fStmt->fRes,fIterationCount,npar);
   unsigned char * mptr = PQunescapeBytea((const unsigned char*)cptr,&sz);
   if ((Long_t)sz>size) {
      delete [] (unsigned char*) mem;
      mem = (void*) new unsigned char[sz];
   }
   size=sz;
   memcpy(mem,mptr,sz);
   PQfreemem(mptr);
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetLargeObject(Int_t npar, void* &mem, Long_t& size)
{
   // Return large object whose oid is in the given field.

   Int_t objID = atoi(PQgetvalue(fStmt->fRes,fIterationCount,npar));

   // All this needs to happen inside a transaction, or it will NOT work.
   PGresult *res=PQexec(fStmt->fConn,"BEGIN");

   CheckErrResult("GetLargeObject", res, kFALSE);
   PQclear(res);

   Int_t lObjFD = lo_open(fStmt->fConn, objID, INV_READ);

   if (lObjFD<0) {
      Error("GetLargeObject", "SQL Error on lo_open: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }
   // Object size is not known beforehand.
   // Possible fast ways to get it are:
   // (1) Create a function that does fopen, fseek, ftell on server
   // (2) Query large object table with size()
   // Both can not be expected to work in general,
   // as  (1) needs permissions and changes DB,
   // and (2) needs permission.
   // So we use
   // (3) fopen, fseek and ftell locally.

   lo_lseek(fStmt->fConn, lObjFD, 0, SEEK_END);
   Long_t sz = lo_tell(fStmt->fConn, lObjFD);
   lo_lseek(fStmt->fConn, lObjFD, 0, SEEK_SET);

   if ((Long_t)sz>size) {
      delete [] (unsigned char*) mem;
      mem = (void*) new unsigned char[sz];
      size=sz;
   }

   Int_t readBytes = lo_read(fStmt->fConn, lObjFD, (char*)mem, size);

   if (readBytes != sz) {
      Error("GetLargeObject", "SQL Error on lo_read: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }

   if (lo_close(fStmt->fConn, lObjFD) != 0) {
      Error("GetLargeObject", "SQL Error on lo_close: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }

   res=PQexec(fStmt->fConn,"COMMIT");

   ExecStatusType stat = PQresultStatus(res);
   if (!pgsql_success(stat)) {
      Error("GetLargeObject", "SQL Error on COMMIT: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }
   PQclear(res);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetDate(Int_t npar, Int_t& year, Int_t& month, Int_t& day)
{
   // Return field value as date, in UTC.

   TString val=PQgetvalue(fStmt->fRes,fIterationCount,npar);
   TDatime d = TDatime(val.Data());
   year = d.GetYear();
   month = d.GetMonth();
   day= d.GetDay();
   Int_t hour = d.GetHour();
   Int_t min = d.GetMinute();
   Int_t sec = d.GetSecond();
   ConvertTimeToUTC(val, year, month, day, hour, min, sec);
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetTime(Int_t npar, Int_t& hour, Int_t& min, Int_t& sec)
{
   // Return field as time, in UTC.

   TString val=PQgetvalue(fStmt->fRes,fIterationCount,npar);
   TDatime d = TDatime(val.Data());
   hour = d.GetHour();
   min = d.GetMinute();
   sec= d.GetSecond();
   Int_t year = d.GetYear();
   Int_t month = d.GetMonth();
   Int_t day = d.GetDay();
   ConvertTimeToUTC(val, day, month, year, hour, min, sec);
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetDatime(Int_t npar, Int_t& year, Int_t& month, Int_t& day, Int_t& hour, Int_t& min, Int_t& sec)
{
   // Return field value as date & time, in UTC.

   TString val=PQgetvalue(fStmt->fRes,fIterationCount,npar);
   TDatime d = TDatime(val.Data());
   year = d.GetYear();
   month = d.GetMonth();
   day= d.GetDay();
   hour = d.GetHour();
   min = d.GetMinute();
   sec= d.GetSecond();
   ConvertTimeToUTC(val, year, month, day, hour, min, sec);
   return kTRUE;
}

//______________________________________________________________________________
void TPgSQLStatement::ConvertTimeToUTC(const TString &PQvalue, Int_t& year, Int_t& month, Int_t& day, Int_t& hour, Int_t& min, Int_t& sec)
{
   // Convert timestamp value to UTC if a zone is included.

   Ssiz_t p = PQvalue.Last('.');
   // Check if timestamp has timezone
   TSubString *s_zone;
   Bool_t hasZone = kFALSE;
   Ssiz_t tzP = PQvalue.Last('+');
   if ((tzP != kNPOS) && (tzP > p) ) {
      s_zone = new TSubString(PQvalue(tzP+1,PQvalue.Length()-tzP));
      hasZone=kTRUE;
   } else {
      Ssiz_t tzM = PQvalue.Last('-');
      if ((tzM != kNPOS) && (tzM > p) ) {
         s_zone = new TSubString(PQvalue(tzM+1,PQvalue.Length()-tzM));
         hasZone = kTRUE;
      }
   }
   if (hasZone == kTRUE) {
      // Parse timezone, might look like e.g. +00 or -00:00
      Int_t hourOffset, minuteOffset = 0;
      Int_t conversions=sscanf(s_zone->Data(), "%2d:%2d", &hourOffset, &minuteOffset);
      Int_t secondOffset = hourOffset*3600;
      if (conversions>1) {
         // Use sign from hour also for minute
         secondOffset += (TMath::Sign(minuteOffset, hourOffset))*60;
      }
      // Use TTimeStamp so we do not have to take care of over-/underflows
      TTimeStamp ts(year, month, day, hour, min, sec, 0, kTRUE, -secondOffset);
      UInt_t uyear, umonth, uday, uhour, umin, usec;
      ts.GetDate(kTRUE, 0, &uyear, &umonth, &uday);
      ts.GetTime(kTRUE, 0, &uhour, &umin, &usec);
      year=uyear;
      month=umonth;
      day=uday;
      hour=uhour;
      min=umin;
      sec=usec;
      delete s_zone;
   }
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetTimestamp(Int_t npar, Int_t& year, Int_t& month, Int_t& day, Int_t& hour, Int_t& min, Int_t& sec, Int_t& frac)
{
   // Return field as timestamp, in UTC.
   // Second fraction is to be interpreted as in the following example:
   // 2013-01-12 12:10:23.093854+02
   // Fraction is '93854', precision is fixed in this method to 6 decimal places.
   // This means the returned frac-value is always in microseconds.

   TString val=PQgetvalue(fStmt->fRes,fIterationCount,npar);
   TDatime d(val.Data());
   year = d.GetYear();
   month = d.GetMonth();
   day= d.GetDay();
   hour = d.GetHour();
   min = d.GetMinute();
   sec= d.GetSecond();

   ConvertTimeToUTC(val, year, month, day, hour, min, sec);

   Ssiz_t p = val.Last('.');
   TSubString s_frac = val(p,val.Length()-p+1);

   // atoi ignores timezone part.
   // We MUST use atof here to correctly convert the fraction of
   // "12:23:01.093854" and put a limitation on precision,
   // as we can only return an Int_t.
   frac=(Int_t) (atof(s_frac.Data())*1.E6);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetNull(Int_t npar)
{
   // Set NULL as parameter value.
   // If NULL should be set for statement parameter during first iteration,
   // one should call before proper Set... method to identify type of argument for
   // the future. For instance, if one suppose to have double as type of parameter,
   // code should look like:
   //    stmt->SetDouble(2, 0.);
   //    stmt->SetNull(2);

   fBind[npar] = 0;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetInt(Int_t npar, Int_t value)
{
   // Set parameter value as integer.

   snprintf(fBind[npar],kBindStringSize,"%d",value);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetUInt(Int_t npar, UInt_t value)
{
   // Set parameter value as unsinged integer.

   snprintf(fBind[npar],kBindStringSize,"%u",value);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetLong(Int_t npar, Long_t value)
{
   // Set parameter value as long.

   snprintf(fBind[npar],kBindStringSize,"%ld",value);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetLong64(Int_t npar, Long64_t value)
{
   // Set parameter value as 64-bit integer.

   snprintf(fBind[npar],kBindStringSize,"%lld",(Long64_t)value);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetULong64(Int_t npar, ULong64_t value)
{
   // Set parameter value as unsinged 64-bit integer.

   snprintf(fBind[npar],kBindStringSize,"%llu",(ULong64_t)value);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetDouble(Int_t npar, Double_t value)
{
   // Set parameter value as double value.

   snprintf(fBind[npar],kBindStringSize,"%lf",value);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetString(Int_t npar, const char* value, Int_t maxsize)
{
   // Set parameter value as string.

   if(sizeof(fBind[npar])<(unsigned)maxsize){
      delete [] fBind[npar];
      fBind[npar] = new char[maxsize];
   }
   strlcpy(fBind[npar],value,maxsize);
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetBinary(Int_t npar, void* mem, Long_t size, Long_t maxsize)
{
   // Set parameter value as binary data.

   size_t sz = size, mxsz = maxsize;
   unsigned char* escape_ptr = PQescapeBytea((const unsigned char*)mem, sz, &mxsz);
   unsigned char* binary_ptr = PQunescapeBytea((const unsigned char*)escape_ptr, &mxsz);
   PQfreemem(escape_ptr);

   delete [] fBind[npar];
   fBind[npar] = new char[mxsz+1];
   fBind[npar][mxsz] = '\0';
   memcpy(fBind[npar], binary_ptr, mxsz);

   PQfreemem(binary_ptr);
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetLargeObject(Int_t npar, void* mem, Long_t size, Long_t /*maxsize*/)
{
   // Set parameter value to large object and immediately insert the large object into DB.

   // All this needs to happen inside a transaction, or it will NOT work.
   PGresult *res=PQexec(fStmt->fConn,"BEGIN");

   CheckErrResult("GetLargeObject", res, kFALSE);
   PQclear(res);

   Int_t lObjID = lo_creat(fStmt->fConn, INV_READ | INV_WRITE);
   if (lObjID<0) {
      Error("SetLargeObject", "Error in SetLargeObject: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }

   Int_t lObjFD = lo_open(fStmt->fConn, lObjID, INV_READ | INV_WRITE);
   if (lObjFD<0) {
      Error("SetLargeObject", "Error in SetLargeObject: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }

   Int_t writtenBytes = lo_write(fStmt->fConn, lObjFD, (char*)mem, size);

   if (writtenBytes != size) {
      Error("SetLargeObject", "SQL Error on lo_write: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }

   if (lo_close(fStmt->fConn, lObjFD) != 0) {
      Error("SetLargeObject", "SQL Error on lo_close: %s", PQerrorMessage(fStmt->fConn));
      RollBackTransaction("GetLargeObject");
      return kFALSE;
   }

   res=PQexec(fStmt->fConn,"COMMIT");
   ExecStatusType stat = PQresultStatus(res);
   if (!pgsql_success(stat)) {
      Error("SetLargeObject", "SQL Error on COMMIT: %s", PQerrorMessage(fStmt->fConn));
      PQclear(res);
      return kFALSE;
   }
   PQclear(res);

   snprintf(fBind[npar],kBindStringSize,"%d",lObjID);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetDate(Int_t npar, Int_t year, Int_t month, Int_t day)
{
   // Set parameter value as date.

   TDatime d =TDatime(year,month,day,0,0,0);
   snprintf(fBind[npar],kBindStringSize,"%s",(char*)d.AsSQLString());

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetTime(Int_t npar, Int_t hour, Int_t min, Int_t sec)
{
   // Set parameter value as time.

   TDatime d=TDatime(2000,1,1,hour,min,sec);
   snprintf(fBind[npar],kBindStringSize,"%s",(char*)d.AsSQLString());
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetDatime(Int_t npar, Int_t year, Int_t month, Int_t day, Int_t hour, Int_t min, Int_t sec)
{
   // Set parameter value as date & time.

   TDatime d=TDatime(year,month,day,hour,min,sec);
   snprintf(fBind[npar],kBindStringSize,"%s",(char*)d.AsSQLString());
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetTimestamp(Int_t npar, Int_t year, Int_t month, Int_t day, Int_t hour, Int_t min, Int_t sec, Int_t frac)
{
   // Set parameter value as timestamp.
   // Second fraction is assumed as value in microseconds,
   // i.e. as a fraction with six decimal places.
   // See GetTimestamp() for an example.

   TDatime d(year,month,day,hour,min,sec);
   snprintf(fBind[npar],kBindStringSize,"%s.%06d",(char*)d.AsSQLString(),frac);
   return kTRUE;
}

#else

//______________________________________________________________________________
TPgSQLStatement::TPgSQLStatement(PgSQL_Stmt_t*, Bool_t)
{
   // Normal constructor.
   // For PgSQL version < 8.2 no statement is supported.
}

//______________________________________________________________________________
TPgSQLStatement::~TPgSQLStatement()
{
   // Destructor.
}

//______________________________________________________________________________
void TPgSQLStatement::Close(Option_t *)
{
   // Close statement.
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::Process()
{
   // Process statement.

   return kFALSE;
}

//______________________________________________________________________________
Int_t TPgSQLStatement::GetNumAffectedRows()
{
   // Return number of affected rows after statement is processed.

   return 0;
}

//______________________________________________________________________________
Int_t TPgSQLStatement::GetNumParameters()
{
   // Return number of statement parameters.

   return 0;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::StoreResult()
{
   // Store result of statement processing to access them
   // via GetInt(), GetDouble() and so on methods.

   return kFALSE;
}

//______________________________________________________________________________
Int_t TPgSQLStatement::GetNumFields()
{
   // Return number of fields in result set.

   return 0;
}

//______________________________________________________________________________
const char* TPgSQLStatement::GetFieldName(Int_t)
{
   // Returns field name in result set.

   return 0;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::NextResultRow()
{
   // Shift cursor to nect row in result set.

   return kFALSE;
}


//______________________________________________________________________________
Bool_t TPgSQLStatement::NextIteration()
{
   // Increment iteration counter for statement, where parameter can be set.
   // Statement with parameters of previous iteration
   // automatically will be applied to database.

   return kFALSE;
}

//______________________________________________________________________________
void TPgSQLStatement::FreeBuffers()
{
   // Release all buffers, used by statement.
}

//______________________________________________________________________________
void TPgSQLStatement::SetBuffersNumber(Int_t)
{
   // Allocate buffers for statement parameters/ result fields.
}

//______________________________________________________________________________
const char* TPgSQLStatement::ConvertToString(Int_t)
{
   // Convert field value to string.

   return 0;
}

//______________________________________________________________________________
long double TPgSQLStatement::ConvertToNumeric(Int_t)
{
   // Convert field to numeric value.

   return 0;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::IsNull(Int_t)
{
   // Checks if field value is null.

   return kTRUE;
}

//______________________________________________________________________________
Int_t TPgSQLStatement::GetInt(Int_t)
{
   // Return field value as integer.

   return 0;
}

//______________________________________________________________________________
UInt_t TPgSQLStatement::GetUInt(Int_t)
{
   // Return field value as unsigned integer.

   return 0;
}

//______________________________________________________________________________
Long_t TPgSQLStatement::GetLong(Int_t)
{
   // Return field value as long integer.

   return 0;
}

//______________________________________________________________________________
Long64_t TPgSQLStatement::GetLong64(Int_t)
{
   // Return field value as 64-bit integer.

   return 0;
}

//______________________________________________________________________________
ULong64_t TPgSQLStatement::GetULong64(Int_t)
{
   // Return field value as unsigned 64-bit integer.

   return 0;
}

//______________________________________________________________________________
Double_t TPgSQLStatement::GetDouble(Int_t)
{
   // Return field value as double.

   return 0.;
}

//______________________________________________________________________________
const char *TPgSQLStatement::GetString(Int_t)
{
   // Return field value as string.

   return 0;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetBinary(Int_t, void* &, Long_t&)
{
   // Return field value as binary array.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetLargeObject(Int_t, void* &, Long_t&)
{
   // Return large object whose oid is in the given field.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetDate(Int_t, Int_t&, Int_t&, Int_t&)
{
   // Return field value as date.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetTime(Int_t, Int_t&, Int_t&, Int_t&)
{
   // Return field value as time.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetDatime(Int_t, Int_t&, Int_t&, Int_t&, Int_t&, Int_t&, Int_t&)
{
   // Return field value as date & time.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::GetTimestamp(Int_t, Int_t&, Int_t&, Int_t&, Int_t&, Int_t&, Int_t&, Int_t&)
{
   // Return field value as time stamp.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetSQLParamType(Int_t, int, bool, int)
{
   // Set parameter type to be used as buffer.
   // Used in both setting data to database and retriving data from data base.
   // Initialize proper PGSQL_BIND structure and allocate required buffers.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetNull(Int_t npar)
{
   // Set NULL as parameter value.
   // If NULL should be set for statement parameter during first iteration,
   // one should call before proper Set... method to identify type of argument for
   // the future. For instance, if one suppose to have double as type of parameter,
   // code should look like:
   //    stmt->SetDouble(2, 0.);
   //    stmt->SetNull(2);

   if ((npar >= 0) && (npar < fNumBuffers))
      fBind[npar] = 0;
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetInt(Int_t, Int_t)
{
   // Set parameter value as integer.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetUInt(Int_t, UInt_t)
{
   // Set parameter value as unsigned integer.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetLong(Int_t, Long_t)
{
   // Set parameter value as long integer.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetLong64(Int_t, Long64_t)
{
   // Set parameter value as 64-bit integer.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetULong64(Int_t, ULong64_t)
{
   // Set parameter value as unsigned 64-bit integer.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetDouble(Int_t, Double_t)
{
   // Set parameter value as double.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetString(Int_t, const char*, Int_t)
{
   // Set parameter value as string.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetBinary(Int_t, void*, Long_t, Long_t)
{
   // Set parameter value as binary data.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetLargeObject(Int_t, void*, Long_t, Long_t)
{
   // Set parameter value to large object and immediately insert the large object into DB.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetDate(Int_t, Int_t, Int_t, Int_t)
{
   // Set parameter value as date.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetTime(Int_t, Int_t, Int_t, Int_t)
{
   // Set parameter value as time.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetDatime(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t)
{
   // Set parameter value as date & time.

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TPgSQLStatement::SetTimestamp(Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t, Int_t)
{
   // Set parameter value as timestamp.

   return kFALSE;
}

#endif  //PG_VERSION_NUM
 TPgSQLStatement.cxx:1
 TPgSQLStatement.cxx:2
 TPgSQLStatement.cxx:3
 TPgSQLStatement.cxx:4
 TPgSQLStatement.cxx:5
 TPgSQLStatement.cxx:6
 TPgSQLStatement.cxx:7
 TPgSQLStatement.cxx:8
 TPgSQLStatement.cxx:9
 TPgSQLStatement.cxx:10
 TPgSQLStatement.cxx:11
 TPgSQLStatement.cxx:12
 TPgSQLStatement.cxx:13
 TPgSQLStatement.cxx:14
 TPgSQLStatement.cxx:15
 TPgSQLStatement.cxx:16
 TPgSQLStatement.cxx:17
 TPgSQLStatement.cxx:18
 TPgSQLStatement.cxx:19
 TPgSQLStatement.cxx:20
 TPgSQLStatement.cxx:21
 TPgSQLStatement.cxx:22
 TPgSQLStatement.cxx:23
 TPgSQLStatement.cxx:24
 TPgSQLStatement.cxx:25
 TPgSQLStatement.cxx:26
 TPgSQLStatement.cxx:27
 TPgSQLStatement.cxx:28
 TPgSQLStatement.cxx:29
 TPgSQLStatement.cxx:30
 TPgSQLStatement.cxx:31
 TPgSQLStatement.cxx:32
 TPgSQLStatement.cxx:33
 TPgSQLStatement.cxx:34
 TPgSQLStatement.cxx:35
 TPgSQLStatement.cxx:36
 TPgSQLStatement.cxx:37
 TPgSQLStatement.cxx:38
 TPgSQLStatement.cxx:39
 TPgSQLStatement.cxx:40
 TPgSQLStatement.cxx:41
 TPgSQLStatement.cxx:42
 TPgSQLStatement.cxx:43
 TPgSQLStatement.cxx:44
 TPgSQLStatement.cxx:45
 TPgSQLStatement.cxx:46
 TPgSQLStatement.cxx:47
 TPgSQLStatement.cxx:48
 TPgSQLStatement.cxx:49
 TPgSQLStatement.cxx:50
 TPgSQLStatement.cxx:51
 TPgSQLStatement.cxx:52
 TPgSQLStatement.cxx:53
 TPgSQLStatement.cxx:54
 TPgSQLStatement.cxx:55
 TPgSQLStatement.cxx:56
 TPgSQLStatement.cxx:57
 TPgSQLStatement.cxx:58
 TPgSQLStatement.cxx:59
 TPgSQLStatement.cxx:60
 TPgSQLStatement.cxx:61
 TPgSQLStatement.cxx:62
 TPgSQLStatement.cxx:63
 TPgSQLStatement.cxx:64
 TPgSQLStatement.cxx:65
 TPgSQLStatement.cxx:66
 TPgSQLStatement.cxx:67
 TPgSQLStatement.cxx:68
 TPgSQLStatement.cxx:69
 TPgSQLStatement.cxx:70
 TPgSQLStatement.cxx:71
 TPgSQLStatement.cxx:72
 TPgSQLStatement.cxx:73
 TPgSQLStatement.cxx:74
 TPgSQLStatement.cxx:75
 TPgSQLStatement.cxx:76
 TPgSQLStatement.cxx:77
 TPgSQLStatement.cxx:78
 TPgSQLStatement.cxx:79
 TPgSQLStatement.cxx:80
 TPgSQLStatement.cxx:81
 TPgSQLStatement.cxx:82
 TPgSQLStatement.cxx:83
 TPgSQLStatement.cxx:84
 TPgSQLStatement.cxx:85
 TPgSQLStatement.cxx:86
 TPgSQLStatement.cxx:87
 TPgSQLStatement.cxx:88
 TPgSQLStatement.cxx:89
 TPgSQLStatement.cxx:90
 TPgSQLStatement.cxx:91
 TPgSQLStatement.cxx:92
 TPgSQLStatement.cxx:93
 TPgSQLStatement.cxx:94
 TPgSQLStatement.cxx:95
 TPgSQLStatement.cxx:96
 TPgSQLStatement.cxx:97
 TPgSQLStatement.cxx:98
 TPgSQLStatement.cxx:99
 TPgSQLStatement.cxx:100
 TPgSQLStatement.cxx:101
 TPgSQLStatement.cxx:102
 TPgSQLStatement.cxx:103
 TPgSQLStatement.cxx:104
 TPgSQLStatement.cxx:105
 TPgSQLStatement.cxx:106
 TPgSQLStatement.cxx:107
 TPgSQLStatement.cxx:108
 TPgSQLStatement.cxx:109
 TPgSQLStatement.cxx:110
 TPgSQLStatement.cxx:111
 TPgSQLStatement.cxx:112
 TPgSQLStatement.cxx:113
 TPgSQLStatement.cxx:114
 TPgSQLStatement.cxx:115
 TPgSQLStatement.cxx:116
 TPgSQLStatement.cxx:117
 TPgSQLStatement.cxx:118
 TPgSQLStatement.cxx:119
 TPgSQLStatement.cxx:120
 TPgSQLStatement.cxx:121
 TPgSQLStatement.cxx:122
 TPgSQLStatement.cxx:123
 TPgSQLStatement.cxx:124
 TPgSQLStatement.cxx:125
 TPgSQLStatement.cxx:126
 TPgSQLStatement.cxx:127
 TPgSQLStatement.cxx:128
 TPgSQLStatement.cxx:129
 TPgSQLStatement.cxx:130
 TPgSQLStatement.cxx:131
 TPgSQLStatement.cxx:132
 TPgSQLStatement.cxx:133
 TPgSQLStatement.cxx:134
 TPgSQLStatement.cxx:135
 TPgSQLStatement.cxx:136
 TPgSQLStatement.cxx:137
 TPgSQLStatement.cxx:138
 TPgSQLStatement.cxx:139
 TPgSQLStatement.cxx:140
 TPgSQLStatement.cxx:141
 TPgSQLStatement.cxx:142
 TPgSQLStatement.cxx:143
 TPgSQLStatement.cxx:144
 TPgSQLStatement.cxx:145
 TPgSQLStatement.cxx:146
 TPgSQLStatement.cxx:147
 TPgSQLStatement.cxx:148
 TPgSQLStatement.cxx:149
 TPgSQLStatement.cxx:150
 TPgSQLStatement.cxx:151
 TPgSQLStatement.cxx:152
 TPgSQLStatement.cxx:153
 TPgSQLStatement.cxx:154
 TPgSQLStatement.cxx:155
 TPgSQLStatement.cxx:156
 TPgSQLStatement.cxx:157
 TPgSQLStatement.cxx:158
 TPgSQLStatement.cxx:159
 TPgSQLStatement.cxx:160
 TPgSQLStatement.cxx:161
 TPgSQLStatement.cxx:162
 TPgSQLStatement.cxx:163
 TPgSQLStatement.cxx:164
 TPgSQLStatement.cxx:165
 TPgSQLStatement.cxx:166
 TPgSQLStatement.cxx:167
 TPgSQLStatement.cxx:168
 TPgSQLStatement.cxx:169
 TPgSQLStatement.cxx:170
 TPgSQLStatement.cxx:171
 TPgSQLStatement.cxx:172
 TPgSQLStatement.cxx:173
 TPgSQLStatement.cxx:174
 TPgSQLStatement.cxx:175
 TPgSQLStatement.cxx:176
 TPgSQLStatement.cxx:177
 TPgSQLStatement.cxx:178
 TPgSQLStatement.cxx:179
 TPgSQLStatement.cxx:180
 TPgSQLStatement.cxx:181
 TPgSQLStatement.cxx:182
 TPgSQLStatement.cxx:183
 TPgSQLStatement.cxx:184
 TPgSQLStatement.cxx:185
 TPgSQLStatement.cxx:186
 TPgSQLStatement.cxx:187
 TPgSQLStatement.cxx:188
 TPgSQLStatement.cxx:189
 TPgSQLStatement.cxx:190
 TPgSQLStatement.cxx:191
 TPgSQLStatement.cxx:192
 TPgSQLStatement.cxx:193
 TPgSQLStatement.cxx:194
 TPgSQLStatement.cxx:195
 TPgSQLStatement.cxx:196
 TPgSQLStatement.cxx:197
 TPgSQLStatement.cxx:198
 TPgSQLStatement.cxx:199
 TPgSQLStatement.cxx:200
 TPgSQLStatement.cxx:201
 TPgSQLStatement.cxx:202
 TPgSQLStatement.cxx:203
 TPgSQLStatement.cxx:204
 TPgSQLStatement.cxx:205
 TPgSQLStatement.cxx:206
 TPgSQLStatement.cxx:207
 TPgSQLStatement.cxx:208
 TPgSQLStatement.cxx:209
 TPgSQLStatement.cxx:210
 TPgSQLStatement.cxx:211
 TPgSQLStatement.cxx:212
 TPgSQLStatement.cxx:213
 TPgSQLStatement.cxx:214
 TPgSQLStatement.cxx:215
 TPgSQLStatement.cxx:216
 TPgSQLStatement.cxx:217
 TPgSQLStatement.cxx:218
 TPgSQLStatement.cxx:219
 TPgSQLStatement.cxx:220
 TPgSQLStatement.cxx:221
 TPgSQLStatement.cxx:222
 TPgSQLStatement.cxx:223
 TPgSQLStatement.cxx:224
 TPgSQLStatement.cxx:225
 TPgSQLStatement.cxx:226
 TPgSQLStatement.cxx:227
 TPgSQLStatement.cxx:228
 TPgSQLStatement.cxx:229
 TPgSQLStatement.cxx:230
 TPgSQLStatement.cxx:231
 TPgSQLStatement.cxx:232
 TPgSQLStatement.cxx:233
 TPgSQLStatement.cxx:234
 TPgSQLStatement.cxx:235
 TPgSQLStatement.cxx:236
 TPgSQLStatement.cxx:237
 TPgSQLStatement.cxx:238
 TPgSQLStatement.cxx:239
 TPgSQLStatement.cxx:240
 TPgSQLStatement.cxx:241
 TPgSQLStatement.cxx:242
 TPgSQLStatement.cxx:243
 TPgSQLStatement.cxx:244
 TPgSQLStatement.cxx:245
 TPgSQLStatement.cxx:246
 TPgSQLStatement.cxx:247
 TPgSQLStatement.cxx:248
 TPgSQLStatement.cxx:249
 TPgSQLStatement.cxx:250
 TPgSQLStatement.cxx:251
 TPgSQLStatement.cxx:252
 TPgSQLStatement.cxx:253
 TPgSQLStatement.cxx:254
 TPgSQLStatement.cxx:255
 TPgSQLStatement.cxx:256
 TPgSQLStatement.cxx:257
 TPgSQLStatement.cxx:258
 TPgSQLStatement.cxx:259
 TPgSQLStatement.cxx:260
 TPgSQLStatement.cxx:261
 TPgSQLStatement.cxx:262
 TPgSQLStatement.cxx:263
 TPgSQLStatement.cxx:264
 TPgSQLStatement.cxx:265
 TPgSQLStatement.cxx:266
 TPgSQLStatement.cxx:267
 TPgSQLStatement.cxx:268
 TPgSQLStatement.cxx:269
 TPgSQLStatement.cxx:270
 TPgSQLStatement.cxx:271
 TPgSQLStatement.cxx:272
 TPgSQLStatement.cxx:273
 TPgSQLStatement.cxx:274
 TPgSQLStatement.cxx:275
 TPgSQLStatement.cxx:276
 TPgSQLStatement.cxx:277
 TPgSQLStatement.cxx:278
 TPgSQLStatement.cxx:279
 TPgSQLStatement.cxx:280
 TPgSQLStatement.cxx:281
 TPgSQLStatement.cxx:282
 TPgSQLStatement.cxx:283
 TPgSQLStatement.cxx:284
 TPgSQLStatement.cxx:285
 TPgSQLStatement.cxx:286
 TPgSQLStatement.cxx:287
 TPgSQLStatement.cxx:288
 TPgSQLStatement.cxx:289
 TPgSQLStatement.cxx:290
 TPgSQLStatement.cxx:291
 TPgSQLStatement.cxx:292
 TPgSQLStatement.cxx:293
 TPgSQLStatement.cxx:294
 TPgSQLStatement.cxx:295
 TPgSQLStatement.cxx:296
 TPgSQLStatement.cxx:297
 TPgSQLStatement.cxx:298
 TPgSQLStatement.cxx:299
 TPgSQLStatement.cxx:300
 TPgSQLStatement.cxx:301
 TPgSQLStatement.cxx:302
 TPgSQLStatement.cxx:303
 TPgSQLStatement.cxx:304
 TPgSQLStatement.cxx:305
 TPgSQLStatement.cxx:306
 TPgSQLStatement.cxx:307
 TPgSQLStatement.cxx:308
 TPgSQLStatement.cxx:309
 TPgSQLStatement.cxx:310
 TPgSQLStatement.cxx:311
 TPgSQLStatement.cxx:312
 TPgSQLStatement.cxx:313
 TPgSQLStatement.cxx:314
 TPgSQLStatement.cxx:315
 TPgSQLStatement.cxx:316
 TPgSQLStatement.cxx:317
 TPgSQLStatement.cxx:318
 TPgSQLStatement.cxx:319
 TPgSQLStatement.cxx:320
 TPgSQLStatement.cxx:321
 TPgSQLStatement.cxx:322
 TPgSQLStatement.cxx:323
 TPgSQLStatement.cxx:324
 TPgSQLStatement.cxx:325
 TPgSQLStatement.cxx:326
 TPgSQLStatement.cxx:327
 TPgSQLStatement.cxx:328
 TPgSQLStatement.cxx:329
 TPgSQLStatement.cxx:330
 TPgSQLStatement.cxx:331
 TPgSQLStatement.cxx:332
 TPgSQLStatement.cxx:333
 TPgSQLStatement.cxx:334
 TPgSQLStatement.cxx:335
 TPgSQLStatement.cxx:336
 TPgSQLStatement.cxx:337
 TPgSQLStatement.cxx:338
 TPgSQLStatement.cxx:339
 TPgSQLStatement.cxx:340
 TPgSQLStatement.cxx:341
 TPgSQLStatement.cxx:342
 TPgSQLStatement.cxx:343
 TPgSQLStatement.cxx:344
 TPgSQLStatement.cxx:345
 TPgSQLStatement.cxx:346
 TPgSQLStatement.cxx:347
 TPgSQLStatement.cxx:348
 TPgSQLStatement.cxx:349
 TPgSQLStatement.cxx:350
 TPgSQLStatement.cxx:351
 TPgSQLStatement.cxx:352
 TPgSQLStatement.cxx:353
 TPgSQLStatement.cxx:354
 TPgSQLStatement.cxx:355
 TPgSQLStatement.cxx:356
 TPgSQLStatement.cxx:357
 TPgSQLStatement.cxx:358
 TPgSQLStatement.cxx:359
 TPgSQLStatement.cxx:360
 TPgSQLStatement.cxx:361
 TPgSQLStatement.cxx:362
 TPgSQLStatement.cxx:363
 TPgSQLStatement.cxx:364
 TPgSQLStatement.cxx:365
 TPgSQLStatement.cxx:366
 TPgSQLStatement.cxx:367
 TPgSQLStatement.cxx:368
 TPgSQLStatement.cxx:369
 TPgSQLStatement.cxx:370
 TPgSQLStatement.cxx:371
 TPgSQLStatement.cxx:372
 TPgSQLStatement.cxx:373
 TPgSQLStatement.cxx:374
 TPgSQLStatement.cxx:375
 TPgSQLStatement.cxx:376
 TPgSQLStatement.cxx:377
 TPgSQLStatement.cxx:378
 TPgSQLStatement.cxx:379
 TPgSQLStatement.cxx:380
 TPgSQLStatement.cxx:381
 TPgSQLStatement.cxx:382
 TPgSQLStatement.cxx:383
 TPgSQLStatement.cxx:384
 TPgSQLStatement.cxx:385
 TPgSQLStatement.cxx:386
 TPgSQLStatement.cxx:387
 TPgSQLStatement.cxx:388
 TPgSQLStatement.cxx:389
 TPgSQLStatement.cxx:390
 TPgSQLStatement.cxx:391
 TPgSQLStatement.cxx:392
 TPgSQLStatement.cxx:393
 TPgSQLStatement.cxx:394
 TPgSQLStatement.cxx:395
 TPgSQLStatement.cxx:396
 TPgSQLStatement.cxx:397
 TPgSQLStatement.cxx:398
 TPgSQLStatement.cxx:399
 TPgSQLStatement.cxx:400
 TPgSQLStatement.cxx:401
 TPgSQLStatement.cxx:402
 TPgSQLStatement.cxx:403
 TPgSQLStatement.cxx:404
 TPgSQLStatement.cxx:405
 TPgSQLStatement.cxx:406
 TPgSQLStatement.cxx:407
 TPgSQLStatement.cxx:408
 TPgSQLStatement.cxx:409
 TPgSQLStatement.cxx:410
 TPgSQLStatement.cxx:411
 TPgSQLStatement.cxx:412
 TPgSQLStatement.cxx:413
 TPgSQLStatement.cxx:414
 TPgSQLStatement.cxx:415
 TPgSQLStatement.cxx:416
 TPgSQLStatement.cxx:417
 TPgSQLStatement.cxx:418
 TPgSQLStatement.cxx:419
 TPgSQLStatement.cxx:420
 TPgSQLStatement.cxx:421
 TPgSQLStatement.cxx:422
 TPgSQLStatement.cxx:423
 TPgSQLStatement.cxx:424
 TPgSQLStatement.cxx:425
 TPgSQLStatement.cxx:426
 TPgSQLStatement.cxx:427
 TPgSQLStatement.cxx:428
 TPgSQLStatement.cxx:429
 TPgSQLStatement.cxx:430
 TPgSQLStatement.cxx:431
 TPgSQLStatement.cxx:432
 TPgSQLStatement.cxx:433
 TPgSQLStatement.cxx:434
 TPgSQLStatement.cxx:435
 TPgSQLStatement.cxx:436
 TPgSQLStatement.cxx:437
 TPgSQLStatement.cxx:438
 TPgSQLStatement.cxx:439
 TPgSQLStatement.cxx:440
 TPgSQLStatement.cxx:441
 TPgSQLStatement.cxx:442
 TPgSQLStatement.cxx:443
 TPgSQLStatement.cxx:444
 TPgSQLStatement.cxx:445
 TPgSQLStatement.cxx:446
 TPgSQLStatement.cxx:447
 TPgSQLStatement.cxx:448
 TPgSQLStatement.cxx:449
 TPgSQLStatement.cxx:450
 TPgSQLStatement.cxx:451
 TPgSQLStatement.cxx:452
 TPgSQLStatement.cxx:453
 TPgSQLStatement.cxx:454
 TPgSQLStatement.cxx:455
 TPgSQLStatement.cxx:456
 TPgSQLStatement.cxx:457
 TPgSQLStatement.cxx:458
 TPgSQLStatement.cxx:459
 TPgSQLStatement.cxx:460
 TPgSQLStatement.cxx:461
 TPgSQLStatement.cxx:462
 TPgSQLStatement.cxx:463
 TPgSQLStatement.cxx:464
 TPgSQLStatement.cxx:465
 TPgSQLStatement.cxx:466
 TPgSQLStatement.cxx:467
 TPgSQLStatement.cxx:468
 TPgSQLStatement.cxx:469
 TPgSQLStatement.cxx:470
 TPgSQLStatement.cxx:471
 TPgSQLStatement.cxx:472
 TPgSQLStatement.cxx:473
 TPgSQLStatement.cxx:474
 TPgSQLStatement.cxx:475
 TPgSQLStatement.cxx:476
 TPgSQLStatement.cxx:477
 TPgSQLStatement.cxx:478
 TPgSQLStatement.cxx:479
 TPgSQLStatement.cxx:480
 TPgSQLStatement.cxx:481
 TPgSQLStatement.cxx:482
 TPgSQLStatement.cxx:483
 TPgSQLStatement.cxx:484
 TPgSQLStatement.cxx:485
 TPgSQLStatement.cxx:486
 TPgSQLStatement.cxx:487
 TPgSQLStatement.cxx:488
 TPgSQLStatement.cxx:489
 TPgSQLStatement.cxx:490
 TPgSQLStatement.cxx:491
 TPgSQLStatement.cxx:492
 TPgSQLStatement.cxx:493
 TPgSQLStatement.cxx:494
 TPgSQLStatement.cxx:495
 TPgSQLStatement.cxx:496
 TPgSQLStatement.cxx:497
 TPgSQLStatement.cxx:498
 TPgSQLStatement.cxx:499
 TPgSQLStatement.cxx:500
 TPgSQLStatement.cxx:501
 TPgSQLStatement.cxx:502
 TPgSQLStatement.cxx:503
 TPgSQLStatement.cxx:504
 TPgSQLStatement.cxx:505
 TPgSQLStatement.cxx:506
 TPgSQLStatement.cxx:507
 TPgSQLStatement.cxx:508
 TPgSQLStatement.cxx:509
 TPgSQLStatement.cxx:510
 TPgSQLStatement.cxx:511
 TPgSQLStatement.cxx:512
 TPgSQLStatement.cxx:513
 TPgSQLStatement.cxx:514
 TPgSQLStatement.cxx:515
 TPgSQLStatement.cxx:516
 TPgSQLStatement.cxx:517
 TPgSQLStatement.cxx:518
 TPgSQLStatement.cxx:519
 TPgSQLStatement.cxx:520
 TPgSQLStatement.cxx:521
 TPgSQLStatement.cxx:522
 TPgSQLStatement.cxx:523
 TPgSQLStatement.cxx:524
 TPgSQLStatement.cxx:525
 TPgSQLStatement.cxx:526
 TPgSQLStatement.cxx:527
 TPgSQLStatement.cxx:528
 TPgSQLStatement.cxx:529
 TPgSQLStatement.cxx:530
 TPgSQLStatement.cxx:531
 TPgSQLStatement.cxx:532
 TPgSQLStatement.cxx:533
 TPgSQLStatement.cxx:534
 TPgSQLStatement.cxx:535
 TPgSQLStatement.cxx:536
 TPgSQLStatement.cxx:537
 TPgSQLStatement.cxx:538
 TPgSQLStatement.cxx:539
 TPgSQLStatement.cxx:540
 TPgSQLStatement.cxx:541
 TPgSQLStatement.cxx:542
 TPgSQLStatement.cxx:543
 TPgSQLStatement.cxx:544
 TPgSQLStatement.cxx:545
 TPgSQLStatement.cxx:546
 TPgSQLStatement.cxx:547
 TPgSQLStatement.cxx:548
 TPgSQLStatement.cxx:549
 TPgSQLStatement.cxx:550
 TPgSQLStatement.cxx:551
 TPgSQLStatement.cxx:552
 TPgSQLStatement.cxx:553
 TPgSQLStatement.cxx:554
 TPgSQLStatement.cxx:555
 TPgSQLStatement.cxx:556
 TPgSQLStatement.cxx:557
 TPgSQLStatement.cxx:558
 TPgSQLStatement.cxx:559
 TPgSQLStatement.cxx:560
 TPgSQLStatement.cxx:561
 TPgSQLStatement.cxx:562
 TPgSQLStatement.cxx:563
 TPgSQLStatement.cxx:564
 TPgSQLStatement.cxx:565
 TPgSQLStatement.cxx:566
 TPgSQLStatement.cxx:567
 TPgSQLStatement.cxx:568
 TPgSQLStatement.cxx:569
 TPgSQLStatement.cxx:570
 TPgSQLStatement.cxx:571
 TPgSQLStatement.cxx:572
 TPgSQLStatement.cxx:573
 TPgSQLStatement.cxx:574
 TPgSQLStatement.cxx:575
 TPgSQLStatement.cxx:576
 TPgSQLStatement.cxx:577
 TPgSQLStatement.cxx:578
 TPgSQLStatement.cxx:579
 TPgSQLStatement.cxx:580
 TPgSQLStatement.cxx:581
 TPgSQLStatement.cxx:582
 TPgSQLStatement.cxx:583
 TPgSQLStatement.cxx:584
 TPgSQLStatement.cxx:585
 TPgSQLStatement.cxx:586
 TPgSQLStatement.cxx:587
 TPgSQLStatement.cxx:588
 TPgSQLStatement.cxx:589
 TPgSQLStatement.cxx:590
 TPgSQLStatement.cxx:591
 TPgSQLStatement.cxx:592
 TPgSQLStatement.cxx:593
 TPgSQLStatement.cxx:594
 TPgSQLStatement.cxx:595
 TPgSQLStatement.cxx:596
 TPgSQLStatement.cxx:597
 TPgSQLStatement.cxx:598
 TPgSQLStatement.cxx:599
 TPgSQLStatement.cxx:600
 TPgSQLStatement.cxx:601
 TPgSQLStatement.cxx:602
 TPgSQLStatement.cxx:603
 TPgSQLStatement.cxx:604
 TPgSQLStatement.cxx:605
 TPgSQLStatement.cxx:606
 TPgSQLStatement.cxx:607
 TPgSQLStatement.cxx:608
 TPgSQLStatement.cxx:609
 TPgSQLStatement.cxx:610
 TPgSQLStatement.cxx:611
 TPgSQLStatement.cxx:612
 TPgSQLStatement.cxx:613
 TPgSQLStatement.cxx:614
 TPgSQLStatement.cxx:615
 TPgSQLStatement.cxx:616
 TPgSQLStatement.cxx:617
 TPgSQLStatement.cxx:618
 TPgSQLStatement.cxx:619
 TPgSQLStatement.cxx:620
 TPgSQLStatement.cxx:621
 TPgSQLStatement.cxx:622
 TPgSQLStatement.cxx:623
 TPgSQLStatement.cxx:624
 TPgSQLStatement.cxx:625
 TPgSQLStatement.cxx:626
 TPgSQLStatement.cxx:627
 TPgSQLStatement.cxx:628
 TPgSQLStatement.cxx:629
 TPgSQLStatement.cxx:630
 TPgSQLStatement.cxx:631
 TPgSQLStatement.cxx:632
 TPgSQLStatement.cxx:633
 TPgSQLStatement.cxx:634
 TPgSQLStatement.cxx:635
 TPgSQLStatement.cxx:636
 TPgSQLStatement.cxx:637
 TPgSQLStatement.cxx:638
 TPgSQLStatement.cxx:639
 TPgSQLStatement.cxx:640
 TPgSQLStatement.cxx:641
 TPgSQLStatement.cxx:642
 TPgSQLStatement.cxx:643
 TPgSQLStatement.cxx:644
 TPgSQLStatement.cxx:645
 TPgSQLStatement.cxx:646
 TPgSQLStatement.cxx:647
 TPgSQLStatement.cxx:648
 TPgSQLStatement.cxx:649
 TPgSQLStatement.cxx:650
 TPgSQLStatement.cxx:651
 TPgSQLStatement.cxx:652
 TPgSQLStatement.cxx:653
 TPgSQLStatement.cxx:654
 TPgSQLStatement.cxx:655
 TPgSQLStatement.cxx:656
 TPgSQLStatement.cxx:657
 TPgSQLStatement.cxx:658
 TPgSQLStatement.cxx:659
 TPgSQLStatement.cxx:660
 TPgSQLStatement.cxx:661
 TPgSQLStatement.cxx:662
 TPgSQLStatement.cxx:663
 TPgSQLStatement.cxx:664
 TPgSQLStatement.cxx:665
 TPgSQLStatement.cxx:666
 TPgSQLStatement.cxx:667
 TPgSQLStatement.cxx:668
 TPgSQLStatement.cxx:669
 TPgSQLStatement.cxx:670
 TPgSQLStatement.cxx:671
 TPgSQLStatement.cxx:672
 TPgSQLStatement.cxx:673
 TPgSQLStatement.cxx:674
 TPgSQLStatement.cxx:675
 TPgSQLStatement.cxx:676
 TPgSQLStatement.cxx:677
 TPgSQLStatement.cxx:678
 TPgSQLStatement.cxx:679
 TPgSQLStatement.cxx:680
 TPgSQLStatement.cxx:681
 TPgSQLStatement.cxx:682
 TPgSQLStatement.cxx:683
 TPgSQLStatement.cxx:684
 TPgSQLStatement.cxx:685
 TPgSQLStatement.cxx:686
 TPgSQLStatement.cxx:687
 TPgSQLStatement.cxx:688
 TPgSQLStatement.cxx:689
 TPgSQLStatement.cxx:690
 TPgSQLStatement.cxx:691
 TPgSQLStatement.cxx:692
 TPgSQLStatement.cxx:693
 TPgSQLStatement.cxx:694
 TPgSQLStatement.cxx:695
 TPgSQLStatement.cxx:696
 TPgSQLStatement.cxx:697
 TPgSQLStatement.cxx:698
 TPgSQLStatement.cxx:699
 TPgSQLStatement.cxx:700
 TPgSQLStatement.cxx:701
 TPgSQLStatement.cxx:702
 TPgSQLStatement.cxx:703
 TPgSQLStatement.cxx:704
 TPgSQLStatement.cxx:705
 TPgSQLStatement.cxx:706
 TPgSQLStatement.cxx:707
 TPgSQLStatement.cxx:708
 TPgSQLStatement.cxx:709
 TPgSQLStatement.cxx:710
 TPgSQLStatement.cxx:711
 TPgSQLStatement.cxx:712
 TPgSQLStatement.cxx:713
 TPgSQLStatement.cxx:714
 TPgSQLStatement.cxx:715
 TPgSQLStatement.cxx:716
 TPgSQLStatement.cxx:717
 TPgSQLStatement.cxx:718
 TPgSQLStatement.cxx:719
 TPgSQLStatement.cxx:720
 TPgSQLStatement.cxx:721
 TPgSQLStatement.cxx:722
 TPgSQLStatement.cxx:723
 TPgSQLStatement.cxx:724
 TPgSQLStatement.cxx:725
 TPgSQLStatement.cxx:726
 TPgSQLStatement.cxx:727
 TPgSQLStatement.cxx:728
 TPgSQLStatement.cxx:729
 TPgSQLStatement.cxx:730
 TPgSQLStatement.cxx:731
 TPgSQLStatement.cxx:732
 TPgSQLStatement.cxx:733
 TPgSQLStatement.cxx:734
 TPgSQLStatement.cxx:735
 TPgSQLStatement.cxx:736
 TPgSQLStatement.cxx:737
 TPgSQLStatement.cxx:738
 TPgSQLStatement.cxx:739
 TPgSQLStatement.cxx:740
 TPgSQLStatement.cxx:741
 TPgSQLStatement.cxx:742
 TPgSQLStatement.cxx:743
 TPgSQLStatement.cxx:744
 TPgSQLStatement.cxx:745
 TPgSQLStatement.cxx:746
 TPgSQLStatement.cxx:747
 TPgSQLStatement.cxx:748
 TPgSQLStatement.cxx:749
 TPgSQLStatement.cxx:750
 TPgSQLStatement.cxx:751
 TPgSQLStatement.cxx:752
 TPgSQLStatement.cxx:753
 TPgSQLStatement.cxx:754
 TPgSQLStatement.cxx:755
 TPgSQLStatement.cxx:756
 TPgSQLStatement.cxx:757
 TPgSQLStatement.cxx:758
 TPgSQLStatement.cxx:759
 TPgSQLStatement.cxx:760
 TPgSQLStatement.cxx:761
 TPgSQLStatement.cxx:762
 TPgSQLStatement.cxx:763
 TPgSQLStatement.cxx:764
 TPgSQLStatement.cxx:765
 TPgSQLStatement.cxx:766
 TPgSQLStatement.cxx:767
 TPgSQLStatement.cxx:768
 TPgSQLStatement.cxx:769
 TPgSQLStatement.cxx:770
 TPgSQLStatement.cxx:771
 TPgSQLStatement.cxx:772
 TPgSQLStatement.cxx:773
 TPgSQLStatement.cxx:774
 TPgSQLStatement.cxx:775
 TPgSQLStatement.cxx:776
 TPgSQLStatement.cxx:777
 TPgSQLStatement.cxx:778
 TPgSQLStatement.cxx:779
 TPgSQLStatement.cxx:780
 TPgSQLStatement.cxx:781
 TPgSQLStatement.cxx:782
 TPgSQLStatement.cxx:783
 TPgSQLStatement.cxx:784
 TPgSQLStatement.cxx:785
 TPgSQLStatement.cxx:786
 TPgSQLStatement.cxx:787
 TPgSQLStatement.cxx:788
 TPgSQLStatement.cxx:789
 TPgSQLStatement.cxx:790
 TPgSQLStatement.cxx:791
 TPgSQLStatement.cxx:792
 TPgSQLStatement.cxx:793
 TPgSQLStatement.cxx:794
 TPgSQLStatement.cxx:795
 TPgSQLStatement.cxx:796
 TPgSQLStatement.cxx:797
 TPgSQLStatement.cxx:798
 TPgSQLStatement.cxx:799
 TPgSQLStatement.cxx:800
 TPgSQLStatement.cxx:801
 TPgSQLStatement.cxx:802
 TPgSQLStatement.cxx:803
 TPgSQLStatement.cxx:804
 TPgSQLStatement.cxx:805
 TPgSQLStatement.cxx:806
 TPgSQLStatement.cxx:807
 TPgSQLStatement.cxx:808
 TPgSQLStatement.cxx:809
 TPgSQLStatement.cxx:810
 TPgSQLStatement.cxx:811
 TPgSQLStatement.cxx:812
 TPgSQLStatement.cxx:813
 TPgSQLStatement.cxx:814
 TPgSQLStatement.cxx:815
 TPgSQLStatement.cxx:816
 TPgSQLStatement.cxx:817
 TPgSQLStatement.cxx:818
 TPgSQLStatement.cxx:819
 TPgSQLStatement.cxx:820
 TPgSQLStatement.cxx:821
 TPgSQLStatement.cxx:822
 TPgSQLStatement.cxx:823
 TPgSQLStatement.cxx:824
 TPgSQLStatement.cxx:825
 TPgSQLStatement.cxx:826
 TPgSQLStatement.cxx:827
 TPgSQLStatement.cxx:828
 TPgSQLStatement.cxx:829
 TPgSQLStatement.cxx:830
 TPgSQLStatement.cxx:831
 TPgSQLStatement.cxx:832
 TPgSQLStatement.cxx:833
 TPgSQLStatement.cxx:834
 TPgSQLStatement.cxx:835
 TPgSQLStatement.cxx:836
 TPgSQLStatement.cxx:837
 TPgSQLStatement.cxx:838
 TPgSQLStatement.cxx:839
 TPgSQLStatement.cxx:840
 TPgSQLStatement.cxx:841
 TPgSQLStatement.cxx:842
 TPgSQLStatement.cxx:843
 TPgSQLStatement.cxx:844
 TPgSQLStatement.cxx:845
 TPgSQLStatement.cxx:846
 TPgSQLStatement.cxx:847
 TPgSQLStatement.cxx:848
 TPgSQLStatement.cxx:849
 TPgSQLStatement.cxx:850
 TPgSQLStatement.cxx:851
 TPgSQLStatement.cxx:852
 TPgSQLStatement.cxx:853
 TPgSQLStatement.cxx:854
 TPgSQLStatement.cxx:855
 TPgSQLStatement.cxx:856
 TPgSQLStatement.cxx:857
 TPgSQLStatement.cxx:858
 TPgSQLStatement.cxx:859
 TPgSQLStatement.cxx:860
 TPgSQLStatement.cxx:861
 TPgSQLStatement.cxx:862
 TPgSQLStatement.cxx:863
 TPgSQLStatement.cxx:864
 TPgSQLStatement.cxx:865
 TPgSQLStatement.cxx:866
 TPgSQLStatement.cxx:867
 TPgSQLStatement.cxx:868
 TPgSQLStatement.cxx:869
 TPgSQLStatement.cxx:870
 TPgSQLStatement.cxx:871
 TPgSQLStatement.cxx:872
 TPgSQLStatement.cxx:873
 TPgSQLStatement.cxx:874
 TPgSQLStatement.cxx:875
 TPgSQLStatement.cxx:876
 TPgSQLStatement.cxx:877
 TPgSQLStatement.cxx:878
 TPgSQLStatement.cxx:879
 TPgSQLStatement.cxx:880
 TPgSQLStatement.cxx:881
 TPgSQLStatement.cxx:882
 TPgSQLStatement.cxx:883
 TPgSQLStatement.cxx:884
 TPgSQLStatement.cxx:885
 TPgSQLStatement.cxx:886
 TPgSQLStatement.cxx:887
 TPgSQLStatement.cxx:888
 TPgSQLStatement.cxx:889
 TPgSQLStatement.cxx:890
 TPgSQLStatement.cxx:891
 TPgSQLStatement.cxx:892
 TPgSQLStatement.cxx:893
 TPgSQLStatement.cxx:894
 TPgSQLStatement.cxx:895
 TPgSQLStatement.cxx:896
 TPgSQLStatement.cxx:897
 TPgSQLStatement.cxx:898
 TPgSQLStatement.cxx:899
 TPgSQLStatement.cxx:900
 TPgSQLStatement.cxx:901
 TPgSQLStatement.cxx:902
 TPgSQLStatement.cxx:903
 TPgSQLStatement.cxx:904
 TPgSQLStatement.cxx:905
 TPgSQLStatement.cxx:906
 TPgSQLStatement.cxx:907
 TPgSQLStatement.cxx:908
 TPgSQLStatement.cxx:909
 TPgSQLStatement.cxx:910
 TPgSQLStatement.cxx:911
 TPgSQLStatement.cxx:912
 TPgSQLStatement.cxx:913
 TPgSQLStatement.cxx:914
 TPgSQLStatement.cxx:915
 TPgSQLStatement.cxx:916
 TPgSQLStatement.cxx:917
 TPgSQLStatement.cxx:918
 TPgSQLStatement.cxx:919
 TPgSQLStatement.cxx:920
 TPgSQLStatement.cxx:921
 TPgSQLStatement.cxx:922
 TPgSQLStatement.cxx:923
 TPgSQLStatement.cxx:924
 TPgSQLStatement.cxx:925
 TPgSQLStatement.cxx:926
 TPgSQLStatement.cxx:927
 TPgSQLStatement.cxx:928
 TPgSQLStatement.cxx:929
 TPgSQLStatement.cxx:930
 TPgSQLStatement.cxx:931
 TPgSQLStatement.cxx:932
 TPgSQLStatement.cxx:933
 TPgSQLStatement.cxx:934
 TPgSQLStatement.cxx:935
 TPgSQLStatement.cxx:936
 TPgSQLStatement.cxx:937
 TPgSQLStatement.cxx:938
 TPgSQLStatement.cxx:939
 TPgSQLStatement.cxx:940
 TPgSQLStatement.cxx:941
 TPgSQLStatement.cxx:942
 TPgSQLStatement.cxx:943
 TPgSQLStatement.cxx:944
 TPgSQLStatement.cxx:945
 TPgSQLStatement.cxx:946
 TPgSQLStatement.cxx:947
 TPgSQLStatement.cxx:948
 TPgSQLStatement.cxx:949
 TPgSQLStatement.cxx:950
 TPgSQLStatement.cxx:951
 TPgSQLStatement.cxx:952
 TPgSQLStatement.cxx:953
 TPgSQLStatement.cxx:954
 TPgSQLStatement.cxx:955
 TPgSQLStatement.cxx:956
 TPgSQLStatement.cxx:957
 TPgSQLStatement.cxx:958
 TPgSQLStatement.cxx:959
 TPgSQLStatement.cxx:960
 TPgSQLStatement.cxx:961
 TPgSQLStatement.cxx:962
 TPgSQLStatement.cxx:963
 TPgSQLStatement.cxx:964
 TPgSQLStatement.cxx:965
 TPgSQLStatement.cxx:966
 TPgSQLStatement.cxx:967
 TPgSQLStatement.cxx:968
 TPgSQLStatement.cxx:969
 TPgSQLStatement.cxx:970
 TPgSQLStatement.cxx:971
 TPgSQLStatement.cxx:972
 TPgSQLStatement.cxx:973
 TPgSQLStatement.cxx:974
 TPgSQLStatement.cxx:975
 TPgSQLStatement.cxx:976
 TPgSQLStatement.cxx:977
 TPgSQLStatement.cxx:978
 TPgSQLStatement.cxx:979
 TPgSQLStatement.cxx:980
 TPgSQLStatement.cxx:981
 TPgSQLStatement.cxx:982
 TPgSQLStatement.cxx:983
 TPgSQLStatement.cxx:984
 TPgSQLStatement.cxx:985
 TPgSQLStatement.cxx:986
 TPgSQLStatement.cxx:987
 TPgSQLStatement.cxx:988
 TPgSQLStatement.cxx:989
 TPgSQLStatement.cxx:990
 TPgSQLStatement.cxx:991
 TPgSQLStatement.cxx:992
 TPgSQLStatement.cxx:993
 TPgSQLStatement.cxx:994
 TPgSQLStatement.cxx:995
 TPgSQLStatement.cxx:996
 TPgSQLStatement.cxx:997
 TPgSQLStatement.cxx:998
 TPgSQLStatement.cxx:999
 TPgSQLStatement.cxx:1000
 TPgSQLStatement.cxx:1001
 TPgSQLStatement.cxx:1002
 TPgSQLStatement.cxx:1003
 TPgSQLStatement.cxx:1004
 TPgSQLStatement.cxx:1005
 TPgSQLStatement.cxx:1006
 TPgSQLStatement.cxx:1007
 TPgSQLStatement.cxx:1008
 TPgSQLStatement.cxx:1009
 TPgSQLStatement.cxx:1010
 TPgSQLStatement.cxx:1011
 TPgSQLStatement.cxx:1012
 TPgSQLStatement.cxx:1013
 TPgSQLStatement.cxx:1014
 TPgSQLStatement.cxx:1015
 TPgSQLStatement.cxx:1016
 TPgSQLStatement.cxx:1017
 TPgSQLStatement.cxx:1018
 TPgSQLStatement.cxx:1019
 TPgSQLStatement.cxx:1020
 TPgSQLStatement.cxx:1021
 TPgSQLStatement.cxx:1022
 TPgSQLStatement.cxx:1023
 TPgSQLStatement.cxx:1024
 TPgSQLStatement.cxx:1025
 TPgSQLStatement.cxx:1026
 TPgSQLStatement.cxx:1027
 TPgSQLStatement.cxx:1028
 TPgSQLStatement.cxx:1029
 TPgSQLStatement.cxx:1030
 TPgSQLStatement.cxx:1031
 TPgSQLStatement.cxx:1032
 TPgSQLStatement.cxx:1033
 TPgSQLStatement.cxx:1034
 TPgSQLStatement.cxx:1035
 TPgSQLStatement.cxx:1036
 TPgSQLStatement.cxx:1037
 TPgSQLStatement.cxx:1038
 TPgSQLStatement.cxx:1039
 TPgSQLStatement.cxx:1040
 TPgSQLStatement.cxx:1041
 TPgSQLStatement.cxx:1042
 TPgSQLStatement.cxx:1043
 TPgSQLStatement.cxx:1044
 TPgSQLStatement.cxx:1045
 TPgSQLStatement.cxx:1046
 TPgSQLStatement.cxx:1047
 TPgSQLStatement.cxx:1048
 TPgSQLStatement.cxx:1049
 TPgSQLStatement.cxx:1050
 TPgSQLStatement.cxx:1051
 TPgSQLStatement.cxx:1052
 TPgSQLStatement.cxx:1053
 TPgSQLStatement.cxx:1054
 TPgSQLStatement.cxx:1055
 TPgSQLStatement.cxx:1056
 TPgSQLStatement.cxx:1057
 TPgSQLStatement.cxx:1058
 TPgSQLStatement.cxx:1059
 TPgSQLStatement.cxx:1060
 TPgSQLStatement.cxx:1061
 TPgSQLStatement.cxx:1062
 TPgSQLStatement.cxx:1063
 TPgSQLStatement.cxx:1064
 TPgSQLStatement.cxx:1065
 TPgSQLStatement.cxx:1066
 TPgSQLStatement.cxx:1067
 TPgSQLStatement.cxx:1068
 TPgSQLStatement.cxx:1069
 TPgSQLStatement.cxx:1070
 TPgSQLStatement.cxx:1071
 TPgSQLStatement.cxx:1072
 TPgSQLStatement.cxx:1073
 TPgSQLStatement.cxx:1074
 TPgSQLStatement.cxx:1075
 TPgSQLStatement.cxx:1076
 TPgSQLStatement.cxx:1077
 TPgSQLStatement.cxx:1078
 TPgSQLStatement.cxx:1079
 TPgSQLStatement.cxx:1080
 TPgSQLStatement.cxx:1081
 TPgSQLStatement.cxx:1082
 TPgSQLStatement.cxx:1083
 TPgSQLStatement.cxx:1084
 TPgSQLStatement.cxx:1085
 TPgSQLStatement.cxx:1086
 TPgSQLStatement.cxx:1087
 TPgSQLStatement.cxx:1088
 TPgSQLStatement.cxx:1089
 TPgSQLStatement.cxx:1090
 TPgSQLStatement.cxx:1091
 TPgSQLStatement.cxx:1092
 TPgSQLStatement.cxx:1093
 TPgSQLStatement.cxx:1094
 TPgSQLStatement.cxx:1095
 TPgSQLStatement.cxx:1096
 TPgSQLStatement.cxx:1097
 TPgSQLStatement.cxx:1098
 TPgSQLStatement.cxx:1099
 TPgSQLStatement.cxx:1100
 TPgSQLStatement.cxx:1101
 TPgSQLStatement.cxx:1102
 TPgSQLStatement.cxx:1103
 TPgSQLStatement.cxx:1104
 TPgSQLStatement.cxx:1105
 TPgSQLStatement.cxx:1106
 TPgSQLStatement.cxx:1107
 TPgSQLStatement.cxx:1108
 TPgSQLStatement.cxx:1109
 TPgSQLStatement.cxx:1110
 TPgSQLStatement.cxx:1111
 TPgSQLStatement.cxx:1112
 TPgSQLStatement.cxx:1113
 TPgSQLStatement.cxx:1114
 TPgSQLStatement.cxx:1115
 TPgSQLStatement.cxx:1116
 TPgSQLStatement.cxx:1117
 TPgSQLStatement.cxx:1118
 TPgSQLStatement.cxx:1119
 TPgSQLStatement.cxx:1120
 TPgSQLStatement.cxx:1121
 TPgSQLStatement.cxx:1122
 TPgSQLStatement.cxx:1123
 TPgSQLStatement.cxx:1124
 TPgSQLStatement.cxx:1125
 TPgSQLStatement.cxx:1126
 TPgSQLStatement.cxx:1127
 TPgSQLStatement.cxx:1128
 TPgSQLStatement.cxx:1129
 TPgSQLStatement.cxx:1130
 TPgSQLStatement.cxx:1131
 TPgSQLStatement.cxx:1132
 TPgSQLStatement.cxx:1133
 TPgSQLStatement.cxx:1134
 TPgSQLStatement.cxx:1135
 TPgSQLStatement.cxx:1136
 TPgSQLStatement.cxx:1137
 TPgSQLStatement.cxx:1138
 TPgSQLStatement.cxx:1139
 TPgSQLStatement.cxx:1140
 TPgSQLStatement.cxx:1141
 TPgSQLStatement.cxx:1142
 TPgSQLStatement.cxx:1143
 TPgSQLStatement.cxx:1144
 TPgSQLStatement.cxx:1145
 TPgSQLStatement.cxx:1146
 TPgSQLStatement.cxx:1147
 TPgSQLStatement.cxx:1148
 TPgSQLStatement.cxx:1149
 TPgSQLStatement.cxx:1150
 TPgSQLStatement.cxx:1151
 TPgSQLStatement.cxx:1152
 TPgSQLStatement.cxx:1153
 TPgSQLStatement.cxx:1154
 TPgSQLStatement.cxx:1155
 TPgSQLStatement.cxx:1156
 TPgSQLStatement.cxx:1157
 TPgSQLStatement.cxx:1158
 TPgSQLStatement.cxx:1159
 TPgSQLStatement.cxx:1160
 TPgSQLStatement.cxx:1161
 TPgSQLStatement.cxx:1162
 TPgSQLStatement.cxx:1163
 TPgSQLStatement.cxx:1164
 TPgSQLStatement.cxx:1165
 TPgSQLStatement.cxx:1166
 TPgSQLStatement.cxx:1167
 TPgSQLStatement.cxx:1168
 TPgSQLStatement.cxx:1169
 TPgSQLStatement.cxx:1170
 TPgSQLStatement.cxx:1171
 TPgSQLStatement.cxx:1172
 TPgSQLStatement.cxx:1173
 TPgSQLStatement.cxx:1174
 TPgSQLStatement.cxx:1175
 TPgSQLStatement.cxx:1176
 TPgSQLStatement.cxx:1177
 TPgSQLStatement.cxx:1178
 TPgSQLStatement.cxx:1179
 TPgSQLStatement.cxx:1180
 TPgSQLStatement.cxx:1181
 TPgSQLStatement.cxx:1182
 TPgSQLStatement.cxx:1183
 TPgSQLStatement.cxx:1184
 TPgSQLStatement.cxx:1185
 TPgSQLStatement.cxx:1186
 TPgSQLStatement.cxx:1187
 TPgSQLStatement.cxx:1188
 TPgSQLStatement.cxx:1189
 TPgSQLStatement.cxx:1190
 TPgSQLStatement.cxx:1191
 TPgSQLStatement.cxx:1192
 TPgSQLStatement.cxx:1193
 TPgSQLStatement.cxx:1194
 TPgSQLStatement.cxx:1195
 TPgSQLStatement.cxx:1196
 TPgSQLStatement.cxx:1197
 TPgSQLStatement.cxx:1198
 TPgSQLStatement.cxx:1199
 TPgSQLStatement.cxx:1200
 TPgSQLStatement.cxx:1201
 TPgSQLStatement.cxx:1202
 TPgSQLStatement.cxx:1203
 TPgSQLStatement.cxx:1204
 TPgSQLStatement.cxx:1205
 TPgSQLStatement.cxx:1206
 TPgSQLStatement.cxx:1207
 TPgSQLStatement.cxx:1208
 TPgSQLStatement.cxx:1209
 TPgSQLStatement.cxx:1210
 TPgSQLStatement.cxx:1211
 TPgSQLStatement.cxx:1212
 TPgSQLStatement.cxx:1213
 TPgSQLStatement.cxx:1214
 TPgSQLStatement.cxx:1215
 TPgSQLStatement.cxx:1216
 TPgSQLStatement.cxx:1217
 TPgSQLStatement.cxx:1218
 TPgSQLStatement.cxx:1219
 TPgSQLStatement.cxx:1220
 TPgSQLStatement.cxx:1221
 TPgSQLStatement.cxx:1222
 TPgSQLStatement.cxx:1223
 TPgSQLStatement.cxx:1224
 TPgSQLStatement.cxx:1225
 TPgSQLStatement.cxx:1226
 TPgSQLStatement.cxx:1227
 TPgSQLStatement.cxx:1228
 TPgSQLStatement.cxx:1229
 TPgSQLStatement.cxx:1230
 TPgSQLStatement.cxx:1231
 TPgSQLStatement.cxx:1232