ROOT logo
// @(#)root/mysql:$Id: TMySQLStatement.cxx 27842 2009-03-17 10:56:23Z rdm $
// Author: Sergey Linev   6/02/2006

/*************************************************************************
 * Copyright (C) 1995-2006, 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 MySQL                                       //
//                                                                      //
//  See TSQLStatement class documentation for more details.             //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TMySQLStatement.h"
#include "TDataType.h"
#include "TDatime.h"
#include "snprintf.h"
#include <stdlib.h>

ClassImp(TMySQLStatement)

ULong64_t TMySQLStatement::fgAllocSizeLimit = 0x8000000; // 128 Mb

#if MYSQL_VERSION_ID >= 40100

//______________________________________________________________________________
TMySQLStatement::TMySQLStatement(MYSQL_STMT* stmt, Bool_t errout) :
   TSQLStatement(errout),
   fStmt(stmt),
   fNumBuffers(0),
   fBind(0),
   fBuffer(0),
   fWorkingMode(0)
{
   // Normal constructor.
   // Checks if statement contains parameters tags.

   ULong_t paramcount = mysql_stmt_param_count(fStmt);

   if (paramcount>0) {
      fWorkingMode = 1;
      SetBuffersNumber(paramcount);
      fNeedParBind = kTRUE;
      fIterationCount = -1;
   }
}

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

   Close();
}

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

   if (fStmt)
      mysql_stmt_close(fStmt);

   fStmt = 0;

   FreeBuffers();
}


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

// check last mysql statement error code
#define CheckErrNo(method, force, res)                  \
   {                                                    \
      unsigned int stmterrno = mysql_stmt_errno(fStmt);     \
      if ((stmterrno!=0) || force) {                        \
         const char* stmterrmsg = mysql_stmt_error(fStmt);  \
         if (stmterrno==0) { stmterrno = 11111; stmterrmsg = "MySQL statement error"; } \
         SetError(stmterrno, stmterrmsg, method);               \
         return res;                                    \
      }                                                 \
   }


// check last mysql 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 TMySQLStatement::Process()
{
   // Process statement.

   CheckStmt("Process",kFALSE);

   // if parameters was set, processing just means of closing parameters and variables
   if (IsSetParsMode()) {
      if (fIterationCount>=0)
         if (!NextIteration()) return kFALSE;
      fWorkingMode = 0;
      fIterationCount = -1;
      FreeBuffers();
      return kTRUE;
   }

   if (mysql_stmt_execute(fStmt))
      CheckErrNo("Process",kTRUE, kFALSE);

   return kTRUE;
}

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

   CheckStmt("Process", -1);

   my_ulonglong res = mysql_stmt_affected_rows(fStmt);

   if (res == (my_ulonglong) -1)
      CheckErrNo("GetNumAffectedRows", kTRUE, -1);

   return (Int_t) res;
}

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

   CheckStmt("GetNumParameters", -1);

   Int_t res = mysql_stmt_param_count(fStmt);

   CheckErrNo("GetNumParameters", kFALSE, -1);

   return res;
}

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

   CheckStmt("StoreResult", kFALSE);
   if (fWorkingMode!=0) {
      SetError(-1,"Cannot store result for that statement","StoreResult");
      return kFALSE;
   }

   if (mysql_stmt_store_result(fStmt))
      CheckErrNo("StoreResult",kTRUE, kFALSE);

   // allocate memeory for data reading from query
   MYSQL_RES* meta = mysql_stmt_result_metadata(fStmt);
   if (meta) {
      int count = mysql_num_fields(meta);

      SetBuffersNumber(count);

      MYSQL_FIELD *fields = mysql_fetch_fields(meta);

      for (int n=0;n<count;n++) {
         SetSQLParamType(n, fields[n].type, (fields[n].flags & UNSIGNED_FLAG) == 0, fields[n].length);
         if (fields[n].name!=0) {
            fBuffer[n].fFieldName = new char[strlen(fields[n].name)+1];
            strcpy(fBuffer[n].fFieldName, fields[n].name);
         }
      }

      mysql_free_result(meta);
   }

   if (fBind==0) return kFALSE;

   /* Bind the buffers */
   if (mysql_stmt_bind_result(fStmt, fBind))
      CheckErrNo("StoreResult",kTRUE, kFALSE);

   fWorkingMode = 2;

   return kTRUE;
}

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

   return IsResultSetMode() ? fNumBuffers : -1;
}

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

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

   return fBuffer[nfield].fFieldName;
}

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

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

   Bool_t res = !mysql_stmt_fetch(fStmt);

   if (!res) {
      fWorkingMode = 0;
      FreeBuffers();
   }

   return res;
}

//______________________________________________________________________________
Bool_t TMySQLStatement::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;

   if (fNeedParBind) {
      fNeedParBind = kFALSE;
      if (mysql_stmt_bind_param(fStmt, fBind))
         CheckErrNo("NextIteration",kTRUE, kFALSE);
   }

   if (mysql_stmt_execute(fStmt))
      CheckErrNo("NextIteration", kTRUE, kFALSE);

   return kTRUE;
}

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

   if (fBuffer) {
      for (Int_t n=0; n<fNumBuffers;n++) {
         free(fBuffer[n].fMem);
         if (fBuffer[n].fStrBuffer)
            delete[] fBuffer[n].fStrBuffer;
         if (fBuffer[n].fFieldName)
            delete[] fBuffer[n].fFieldName;
      }
      delete[] fBuffer;
   }

   if (fBind)
      delete[] fBind;

   fBuffer = 0;
   fBind = 0;
   fNumBuffers = 0;
}

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

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

   fNumBuffers = numpars;

   fBind = new MYSQL_BIND[fNumBuffers];
   memset(fBind, 0, sizeof(MYSQL_BIND)*fNumBuffers);

   fBuffer = new TParamData[fNumBuffers];
   memset(fBuffer, 0, sizeof(TParamData)*fNumBuffers);
}

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

   if (fBuffer[npar].fResNull) return 0;

   void* addr = fBuffer[npar].fMem;
   bool sig = fBuffer[npar].fSign;

   if (addr==0) return 0;

   if ((fBind[npar].buffer_type==MYSQL_TYPE_STRING) ||
      (fBind[npar].buffer_type==MYSQL_TYPE_VAR_STRING))
      return (const char*) addr;

   if (fBuffer[npar].fStrBuffer==0)
      fBuffer[npar].fStrBuffer = new char[100];

   char* buf = fBuffer[npar].fStrBuffer;

   switch(fBind[npar].buffer_type) {
      case MYSQL_TYPE_LONG:
         if (sig) snprintf(buf,100,"%d",*((int*) addr));
             else snprintf(buf,100,"%u",*((unsigned int*) addr));
         break;
      case MYSQL_TYPE_LONGLONG:
         if (sig) snprintf(buf,100,"%lld",*((long long*) addr)); else
                  snprintf(buf,100,"%llu",*((unsigned long long*) addr));
         break;
      case MYSQL_TYPE_SHORT:
         if (sig) snprintf(buf,100,"%hd",*((short*) addr)); else
                  snprintf(buf,100,"%hu",*((unsigned short*) addr));
         break;
      case MYSQL_TYPE_TINY:
         if (sig) snprintf(buf,100,"%d",*((char*) addr)); else
                  snprintf(buf,100,"%u",*((unsigned char*) addr));
         break;
      case MYSQL_TYPE_FLOAT:
         snprintf(buf,100,"%f",*((float*) addr));
         break;
      case MYSQL_TYPE_DOUBLE:
         snprintf(buf,100,"%f",*((double*) addr));
         break;
      case MYSQL_TYPE_DATETIME:
      case MYSQL_TYPE_TIMESTAMP: {
         MYSQL_TIME* tm = (MYSQL_TIME*) addr;
         snprintf(buf,100,"%4.4d-%2.2d-%2.2d %2.2d:%2.2d:%2.2d",
                  tm->year, tm->month,  tm->day,
                  tm->hour, tm->minute, tm->second);
         break;
      }
      case MYSQL_TYPE_TIME: {
         MYSQL_TIME* tm = (MYSQL_TIME*) addr;
         snprintf(buf,100,"%2.2d:%2.2d:%2.2d",
                  tm->hour, tm->minute, tm->second);
         break;
      }
      case MYSQL_TYPE_DATE: {
         MYSQL_TIME* tm = (MYSQL_TIME*) addr;
         snprintf(buf,100,"%4.4d-%2.2d-%2.2d",
                  tm->year, tm->month,  tm->day);
         break;
      }
      default:
         return 0;
   }
   return buf;
}

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

   if (fBuffer[npar].fResNull) return 0;

   void* addr = fBuffer[npar].fMem;
   bool sig = fBuffer[npar].fSign;

   if (addr==0) return 0;

   switch(fBind[npar].buffer_type) {
      case MYSQL_TYPE_LONG:
         if (sig) return *((long*) addr); else
                  return *((unsigned long*) addr);
         break;
      case MYSQL_TYPE_LONGLONG:
         if (sig) return *((long long*) addr); else
                  return *((ULong64_t*) addr);
         break;
      case MYSQL_TYPE_SHORT:
         if (sig) return *((short*) addr); else
                  return *((unsigned short*) addr);
         break;
      case MYSQL_TYPE_TINY:
         if (sig) return *((char*) addr); else
                  return *((unsigned char*) addr);
         break;
      case MYSQL_TYPE_FLOAT:
         return *((float*) addr);
         break;
      case MYSQL_TYPE_DOUBLE:
         return *((double*) addr);
         break;
#if MYSQL_VERSION_ID >= 50022
      case MYSQL_TYPE_NEWDECIMAL /* new MYSQL_TYPE fixed precision decimal */:
#endif
      case MYSQL_TYPE_STRING:
      case MYSQL_TYPE_VAR_STRING:
      case MYSQL_TYPE_BLOB: {
         char* str = (char*) addr;
         ULong_t len = fBuffer[npar].fResLength;
         if ((str==0) || (*str==0) || (len==0)) return 0;
         Int_t size = fBuffer[npar].fSize;
         if (1.*len<size)
            str[len] = 0;
         else
            str[size-1] = 0;
         long double buf = 0;
         sscanf(str,"%Lf",&buf);
         return buf;
         break;
      }
      case MYSQL_TYPE_DATETIME:
      case MYSQL_TYPE_TIMESTAMP: {
         MYSQL_TIME* tm = (MYSQL_TIME*) addr;
         TDatime rtm(tm->year, tm->month,  tm->day,
                  tm->hour, tm->minute, tm->second);
         return rtm.Get();
         break;
      }
      case MYSQL_TYPE_DATE: {
         MYSQL_TIME* tm = (MYSQL_TIME*) addr;
         TDatime rtm(tm->year, tm->month,  tm->day, 0, 0, 0);
         return rtm.GetDate();
         break;
      }
      case MYSQL_TYPE_TIME: {
         MYSQL_TIME* tm = (MYSQL_TIME*) addr;
         TDatime rtm(2000, 1, 1, tm->hour, tm->minute, tm->second);
         return rtm.GetTime();
         break;
      }

      default:
         return 0;
   }

   return 0;
}

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

   CheckGetField("IsNull", kTRUE);

   return fBuffer[npar].fResNull;
}

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

   CheckGetField("GetInt", 0);

   if ((fBuffer[npar].fSqlType==MYSQL_TYPE_LONG) && fBuffer[npar].fSign)
     return (Int_t) *((long*) fBuffer[npar].fMem);

   return (Int_t) ConvertToNumeric(npar);
}

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

   CheckGetField("GetUInt", 0);

   if ((fBuffer[npar].fSqlType==MYSQL_TYPE_LONG) && !fBuffer[npar].fSign)
     return (UInt_t) *((unsigned long*) fBuffer[npar].fMem);

   return (UInt_t) ConvertToNumeric(npar);
}

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

   CheckGetField("GetLong", 0);

   if ((fBuffer[npar].fSqlType==MYSQL_TYPE_LONG) && fBuffer[npar].fSign)
     return (Long_t) *((long*) fBuffer[npar].fMem);

   return (Long_t) ConvertToNumeric(npar);
}

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

   CheckGetField("GetLong64", 0);

   if ((fBuffer[npar].fSqlType==MYSQL_TYPE_LONGLONG) && fBuffer[npar].fSign)
     return (Long64_t) *((Long64_t*) fBuffer[npar].fMem);

   return (Long64_t) ConvertToNumeric(npar);
}

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

   CheckGetField("GetULong64", 0);

   if ((fBuffer[npar].fSqlType==MYSQL_TYPE_LONGLONG) && !fBuffer[npar].fSign)
     return (ULong64_t) *((ULong64_t*) fBuffer[npar].fMem);

   return (ULong64_t) ConvertToNumeric(npar);
}

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

   CheckGetField("GetDouble", 0);

   if (fBuffer[npar].fSqlType==MYSQL_TYPE_DOUBLE)
     return (Double_t) *((double*) fBuffer[npar].fMem);

   return (Double_t) ConvertToNumeric(npar);
}

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

   CheckGetField("GetString", 0);

   if ((fBind[npar].buffer_type==MYSQL_TYPE_STRING)
      || (fBind[npar].buffer_type==MYSQL_TYPE_BLOB)
      || (fBind[npar].buffer_type==MYSQL_TYPE_VAR_STRING)
#if MYSQL_VERSION_ID >= 50022
      || (fBuffer[npar].fSqlType==MYSQL_TYPE_NEWDECIMAL)
#endif
       ) {
         if (fBuffer[npar].fResNull) return 0;
         char* str = (char*) fBuffer[npar].fMem;
         ULong_t len = fBuffer[npar].fResLength;
         Int_t size = fBuffer[npar].fSize;
         if (1.*len<size) str[len] = 0; else
                          str[size-1] = 0;
         return str;
      }

   return ConvertToString(npar);
}

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

   mem = 0;
   size = 0;

   CheckGetField("GetBinary", kFALSE);

   if ((fBind[npar].buffer_type==MYSQL_TYPE_STRING) ||
       (fBind[npar].buffer_type==MYSQL_TYPE_VAR_STRING) ||
       (fBind[npar].buffer_type==MYSQL_TYPE_BLOB) ||
       (fBind[npar].buffer_type==MYSQL_TYPE_TINY_BLOB) ||
       (fBind[npar].buffer_type==MYSQL_TYPE_MEDIUM_BLOB) ||
       (fBind[npar].buffer_type==MYSQL_TYPE_LONG_BLOB)) {
         if (fBuffer[npar].fResNull) return kTRUE;
         mem = fBuffer[npar].fMem;
         size = fBuffer[npar].fResLength;
         return kTRUE;
      }

   return kFALSE;
}

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

   CheckGetField("GetDate", kFALSE);

   if (fBuffer[npar].fResNull) return kFALSE;

   switch(fBind[npar].buffer_type) {
      case MYSQL_TYPE_DATETIME:
      case MYSQL_TYPE_TIMESTAMP:
      case MYSQL_TYPE_DATE: {
         MYSQL_TIME* tm = (MYSQL_TIME*) fBuffer[npar].fMem;
         if (tm==0) return kFALSE;
         year = tm->year;
         month = tm->month;
         day = tm->day;
         break;
      }
      default:
         return kFALSE;
   }
   return kTRUE;
}

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

   CheckGetField("GetTime", kFALSE);

   if (fBuffer[npar].fResNull) return kFALSE;

   switch(fBind[npar].buffer_type) {
      case MYSQL_TYPE_DATETIME:
      case MYSQL_TYPE_TIMESTAMP:
      case MYSQL_TYPE_TIME: {
         MYSQL_TIME* tm = (MYSQL_TIME*) fBuffer[npar].fMem;
         if (tm==0) return kFALSE;
         hour = tm->hour;
         min = tm->minute;
         sec = tm->second;
         break;
      }
      default:
         return kFALSE;
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TMySQLStatement::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.

   CheckGetField("GetDatime", kFALSE);

   if (fBuffer[npar].fResNull) return kFALSE;

   switch(fBind[npar].buffer_type) {
      case MYSQL_TYPE_DATETIME:
      case MYSQL_TYPE_TIMESTAMP: {
         MYSQL_TIME* tm = (MYSQL_TIME*) fBuffer[npar].fMem;
         if (tm==0) return kFALSE;
         year = tm->year;
         month = tm->month;
         day = tm->day;
         hour = tm->hour;
         min = tm->minute;
         sec = tm->second;
         break;
      }
      default:
         return kFALSE;
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TMySQLStatement::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 value as time stamp.

   CheckGetField("GetTimstamp", kFALSE);

   if (fBuffer[npar].fResNull) return kFALSE;

   switch(fBind[npar].buffer_type) {
      case MYSQL_TYPE_DATETIME:
      case MYSQL_TYPE_TIMESTAMP: {
         MYSQL_TIME* tm = (MYSQL_TIME*) fBuffer[npar].fMem;
         if (tm==0) return kFALSE;
         year = tm->year;
         month = tm->month;
         day = tm->day;
         hour = tm->hour;
         min = tm->minute;
         sec = tm->second;
         frac = 0;
         break;
      }
      default:
         return kFALSE;
   }
   return kTRUE;
}

//______________________________________________________________________________
Bool_t TMySQLStatement::SetSQLParamType(Int_t npar, int sqltype, bool sig, unsigned long sqlsize)
{
   // Set parameter type to be used as buffer.
   // Used in both setting data to database and retriving data from data base.
   // Initialize proper MYSQL_BIND structure and allocate required buffers.

   if ((npar<0) || (npar>=fNumBuffers)) return kFALSE;

   fBuffer[npar].fMem = 0;
   fBuffer[npar].fSize = 0;
   fBuffer[npar].fResLength = 0;
   fBuffer[npar].fResNull = false;
   fBuffer[npar].fStrBuffer = 0;

   ULong64_t allocsize = 0;

   bool doreset = false;

   switch (sqltype) {
      case MYSQL_TYPE_LONG:     allocsize = sizeof(long);  break;
      case MYSQL_TYPE_LONGLONG: allocsize = sizeof(long long); break;
      case MYSQL_TYPE_SHORT:    allocsize = sizeof(short); break;
      case MYSQL_TYPE_TINY:     allocsize = sizeof(char); break;
      case MYSQL_TYPE_FLOAT:    allocsize = sizeof(float); break;
      case MYSQL_TYPE_DOUBLE:   allocsize = sizeof(double); break;
#if MYSQL_VERSION_ID >= 50022
      case MYSQL_TYPE_NEWDECIMAL /* new MYSQL_TYPE fixed precision decimal */:
#endif
      case MYSQL_TYPE_STRING:   allocsize = sqlsize > 256 ? sqlsize : 256; break;
      case MYSQL_TYPE_VAR_STRING: allocsize = sqlsize > 256 ? sqlsize : 256; break;
      case MYSQL_TYPE_MEDIUM_BLOB:
      case MYSQL_TYPE_LONG_BLOB:
      case MYSQL_TYPE_BLOB:     allocsize = sqlsize >= 65525 ? sqlsize : 65535; break;
      case MYSQL_TYPE_TINY_BLOB:   allocsize = sqlsize > 255 ? sqlsize : 255; break;
      case MYSQL_TYPE_TIME:
      case MYSQL_TYPE_DATE:
      case MYSQL_TYPE_TIMESTAMP:
      case MYSQL_TYPE_DATETIME: allocsize = sizeof(MYSQL_TIME); doreset = true; break;
      default: SetError(-1,"Nonsupported SQL type","SetSQLParamType"); return kFALSE;
   }

   if (allocsize > fgAllocSizeLimit) allocsize = fgAllocSizeLimit;

   fBuffer[npar].fMem = malloc(allocsize);
   fBuffer[npar].fSize = allocsize;
   fBuffer[npar].fSqlType = sqltype;
   fBuffer[npar].fSign = sig;

   if ((allocsize>0) && fBuffer[npar].fMem && doreset)
      memset(fBuffer[npar].fMem, 0, allocsize);

   fBind[npar].buffer_type = enum_field_types(sqltype);
   fBind[npar].buffer = fBuffer[npar].fMem;
   fBind[npar].buffer_length = allocsize;
   fBind[npar].is_null= &(fBuffer[npar].fResNull);
   fBind[npar].length = &(fBuffer[npar].fResLength);
   fBind[npar].is_unsigned = !sig;

   return kTRUE;
}

//______________________________________________________________________________
void *TMySQLStatement::BeforeSet(const char* method, Int_t npar, Int_t sqltype, Bool_t sig, unsigned long size)
{
   // Check boundary condition before setting value of parameter.
   // Return address of parameter buffer.

   ClearError();

   if (!IsSetParsMode()) {
      SetError(-1,"Cannot set parameter for statement", method);
      return 0;
   }

   if ((npar<0) || (npar>=fNumBuffers)) {
      SetError(-1,Form("Invalid parameter number %d",npar), method);
      return 0;
   }

   if ((fIterationCount==0) && (fBuffer[npar].fSqlType==0))
      if (!SetSQLParamType(npar, sqltype, sig, size)) {
         SetError(-1,"Cannot initialize parameter buffer", method);
         return 0;
      }

   if ((fBuffer[npar].fSqlType!=sqltype) ||
      (fBuffer[npar].fSign != sig)) return 0;

   fBuffer[npar].fResNull = false;

   return fBuffer[npar].fMem;
}

//______________________________________________________________________________
Bool_t TMySQLStatement::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);

   void* addr = BeforeSet("SetNull", npar, MYSQL_TYPE_LONG);

   if (addr!=0)
      *((long*) addr) = 0;

   if ((npar>=0) && (npar<fNumBuffers))
      fBuffer[npar].fResNull = true;

   return kTRUE;
}

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

   void* addr = BeforeSet("SetInt", npar, MYSQL_TYPE_LONG);

   if (addr!=0)
      *((long*) addr) = value;

   return (addr!=0);
}

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

   void* addr = BeforeSet("SetUInt", npar, MYSQL_TYPE_LONG, kFALSE);

   if (addr!=0)
      *((unsigned long*) addr) = value;

   return (addr!=0);
}

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

   void* addr = BeforeSet("SetLong", npar, MYSQL_TYPE_LONG);

   if (addr!=0)
      *((long*) addr) = value;

   return (addr!=0);
}

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

   void* addr = BeforeSet("SetLong64", npar, MYSQL_TYPE_LONGLONG);

   if (addr!=0)
      *((Long64_t*) addr) = value;

   return (addr!=0);
}

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

   void* addr = BeforeSet("SetULong64", npar, MYSQL_TYPE_LONGLONG, kFALSE);

   if (addr!=0)
      *((ULong64_t*) addr) = value;

   return (addr!=0);
}

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

   void* addr = BeforeSet("SetDouble", npar, MYSQL_TYPE_DOUBLE, kFALSE);

   if (addr!=0)
      *((double*) addr) = value;

   return (addr!=0);
}

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

   Int_t len = value ? strlen(value) : 0;

   void* addr = BeforeSet("SetString", npar, MYSQL_TYPE_STRING, true, maxsize);

   if (addr==0) return kFALSE;

   if (len >= fBuffer[npar].fSize) {
      free(fBuffer[npar].fMem);

      fBuffer[npar].fMem = malloc(len+1);
      fBuffer[npar].fSize = len + 1;

      fBind[npar].buffer = fBuffer[npar].fMem;
      fBind[npar].buffer_length = fBuffer[npar].fSize;

      addr = fBuffer[npar].fMem;
      fNeedParBind = kTRUE;
   }

   strcpy((char*) addr, value);

   fBuffer[npar].fResLength = len;

   return kTRUE;
}

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

   if (size>=maxsize) maxsize = size + 1;

   int bin_type = MYSQL_TYPE_BLOB;
   if (maxsize > 65525) bin_type = MYSQL_TYPE_MEDIUM_BLOB;
   if (maxsize > 16777205) bin_type = MYSQL_TYPE_LONG_BLOB;

   void* addr = BeforeSet("SetBinary", npar, bin_type, true, maxsize);

   if (addr==0) return kFALSE;

   if (size >= fBuffer[npar].fSize) {
      free(fBuffer[npar].fMem);

      fBuffer[npar].fMem = malloc(size+1);
      fBuffer[npar].fSize = size + 1;

      fBind[npar].buffer = fBuffer[npar].fMem;
      fBind[npar].buffer_length = fBuffer[npar].fSize;

      addr = fBuffer[npar].fMem;
      fNeedParBind = kTRUE;
   }

   memcpy(addr, mem, size);

   fBuffer[npar].fResLength = size;

   return kTRUE;
}

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

   MYSQL_TIME* addr = (MYSQL_TIME*) BeforeSet("SetDate", npar, MYSQL_TYPE_DATE);

   if (addr!=0) {
      addr->year = year;
      addr->month = month;
      addr->day = day;
   }

   return (addr!=0);
}

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

   MYSQL_TIME* addr = (MYSQL_TIME*) BeforeSet("SetTime", npar, MYSQL_TYPE_TIME);

   if (addr!=0) {
      addr->hour = hour;
      addr->minute = min;
      addr->second = sec;
   }

   return (addr!=0);
}

//______________________________________________________________________________
Bool_t TMySQLStatement::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.

   MYSQL_TIME* addr = (MYSQL_TIME*) BeforeSet("SetDatime", npar, MYSQL_TYPE_DATETIME);

   if (addr!=0) {
      addr->year = year;
      addr->month = month;
      addr->day = day;
      addr->hour = hour;
      addr->minute = min;
      addr->second = sec;
   }

   return (addr!=0);
}

//______________________________________________________________________________
Bool_t TMySQLStatement::SetTimestamp(Int_t npar, Int_t year, Int_t month, Int_t day, Int_t hour, Int_t min, Int_t sec, Int_t)
{
   // Set parameter value as timestamp.

   MYSQL_TIME* addr = (MYSQL_TIME*) BeforeSet("SetTimestamp", npar, MYSQL_TYPE_TIMESTAMP);

   if (addr!=0) {
      addr->year = year;
      addr->month = month;
      addr->day = day;
      addr->hour = hour;
      addr->minute = min;
      addr->second = sec;
   }

   return (addr!=0);
}

#else

//______________________________________________________________________________
TMySQLStatement::TMySQLStatement(MYSQL_STMT*, Bool_t)
{
   // Normal constructor.
   // For MySQL version < 4.1 no statement is supported
}

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

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

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

   return kFALSE;
}

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

   return 0;
}

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

   return 0;
}

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

   return kFALSE;
}

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

   return 0;
}

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

   return 0;
}

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

   return kFALSE;
}


//______________________________________________________________________________
Bool_t TMySQLStatement::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 TMySQLStatement::FreeBuffers()
{
   // Release all buffers, used by statement.
}

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

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

   return 0;
}

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

   return 0;
}

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

   return kTRUE;
}

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

   return 0;
}

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

   return 0;
}

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

   return 0;
}

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

   return 0;
}

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

   return 0;
}

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

   return 0.;
}

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

   return 0;
}

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

   return kFALSE;
}


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

   return kFALSE;
}

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

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TMySQLStatement::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 TMySQLStatement::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 TMySQLStatement::SetSQLParamType(Int_t, int, bool, unsigned long)
{
   // Set parameter type to be used as buffer.
   // Used in both setting data to database and retriving data from data base.
   // Initialize proper MYSQL_BIND structure and allocate required buffers.

   return kFALSE;
}

//______________________________________________________________________________
void *TMySQLStatement::BeforeSet(const char*, Int_t, Int_t, Bool_t, unsigned long)
{
   // Check boundary condition before setting value of parameter.
   // Return address of parameter buffer.

   return 0;
}

//______________________________________________________________________________
Bool_t TMySQLStatement::SetNull(Int_t)
{
   // 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);

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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

   return kFALSE;
}

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