ROOT logo
// @(#)root/sql:$Id$
// Author: Sergey Linev  20/11/2005

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

//________________________________________________________________________
//
// The main motivation for the TSQLFile development is to have
// "transparent" access to SQL data base via standard TFile interface.
//
// The main approach that each class (but not each object) has one or two tables
// with names like $(CLASSNAME)_ver$(VERSION) and $(CLASSNAME)_raw$(VERSION)
// For example: TAxis_ver8 or TList_raw5
// Second kind of tables appears, when some of class members can not be converted to
// normalized form or when class has custom streamer.
// For instance, for TH1 class two tables are required: TH1_ver4 and TH1_raw4
// Most of memebers are stored in TH1_ver4 table columnwise, and only memeber:
//
//  Double_t*  fBuffer;  //[fBufferSize]
//
// can not be represented as column while size of array is not known apriory.
// Therefore, fBuffer will be written as list of values in TH1_raw4 table.
//
// All objects, stored in the DB, will be registered in table "ObjectsTable".
// In this there are following columns:
//     "key:id"  - key identifier to which belong object
//     "obj:id"  - object identifier
//     "Class"   - object class name
//     "Version" - object class version
//  Data in each "ObjectsTable" row uniqly identify, in which table
//  and which column object is stored.
//
// In normal situation all class data should be sorted columnwise.
// Up to now following member are supported:
// 1) Basic data types
//     Here is everything clear. Column SQL type will be as much as possible
//     close to the original type of value.
// 2) Fixed array of basic data types
//     In this case n columns like fArr[0], fArr[1] and so on will be created.
//     If there is multidimensional array, names will be fArr2[1][2][1] and so on
// 3) Parent class
//     In this case version of parent class is stored and
//     data of parent class will be stored with the same obj:id in corrspondent table.
//     There is a special case, when parent store nothing (this is for instance TQObject).
//     In that case just -1 is written to avoid any extra checks if table exist or not.
// 4) Object as data member.
//     In that case object is saved in normal way to data base and column
//     will contain id of this object.
// 5) Pointer on object
//     Same as before. In case if object was already stored, just its id
//     will be placed in the column. For NULL pointer 0 is used.
// 6) TString
//     Now column with limited width like VARCAHR(255) in MySQL is used.
//     Later this will be improved to support maximum possible strings
// 7) Anything else.
//     Data will be converted to raw format and saved in _streamer_ table.
//     Each row supplied with obj:id and row:id, where row:id indicates
//     data, corresponding to this particular data member, and column
//     will contain this raw:id
//
// All conversion to SQL statements are done with help of TSQLStructure class.
// This is special hierarchical structure wich internally is very similar
// to XML structures. TBufferSQL2 creates these structures, when object
// data is streamed by ROOT and only afterwards all SQL statements will be produced
// and applied all together.
//
// When data is reading, TBufferSQL2 will produce requests to database
// during unstreaming of object data.
//
// Optionally (default this options on) name of column includes
// suffix which indicates type of column. For instance:
//   *:parent  - parent class, column contain class version
//   *:object  - other object, column contain object id
//   *:rawdata - raw data, column contains id of raw data from _streamer_ table
//   *:Int_t   - column with integer value
// Use TSQLFile::SetUseSuffixes(kFALSE) to disable suffixes usage.
//
// This and several other options can be changed only when
// TSQLFile created with options "CREATE" or "RECREATE" and only before
// first write operation. These options are:
//     SetUseSuffixes() - suffix usage in column names (default - on)
//     SetArrayLimit()  - defines maximum array size, which can
//                        has column for each element (default 21)
//     SetTablesType()  - table type name in MySQL database (default "InnoDB")
//     SetUseIndexes()  - usage of indexes in database (default kIndexesBasic)
// Normally these functions should be called immidiately after TSQLFile constructor.
//
// When objects data written to database, by default START TRANSACTION/COMMIT
// SQL commands are used before and after data storage. If TSQLFile detects
// any problems, ROLLBACK command will be used to restore
// previous state of data base. If transactions not supported by SQL server,
// they can be disabled by SetUseTransactions(kTransactionsOff). Or user
// can take responsibility to use transactions function to hime
//
// By default only indexes for basic tables are created.
// In most cases usage of indexes increase perfomance to data reading,
// but it also can increase time of writing data to database.
// There are several modes of index usage available in SetUseIndexes() method
//
// There is MakeSelectQuery(TClass*) method, which
// produces SELECT statement to get objects data of specified class.
// Difference from simple statement like:
//   mysql> SELECT * FROM TH1I_ver1
// that not only data for that class, but also data from parent classes
// will be extracted from other tables and combined in single result table.
// Such select query can be usufull for external access to objects data.
//
// Up to now MySQL 4.1 and Oracle 9i were tested.
// Some extra work is required for other SQL databases.
// Hopefully, this should be straigthforward.
//
// Known problems and open questions.
// 1) TTree is not supported by TSQLFile. There is independent development
//    of TTreeSQL class, which allows to store trees directly in SQL database
// 2) TClonesArray is store objects in raw format,
//    which can not be accessed outside ROOT.
//    This will be changed later.
// 3) TDirectory cannot work. Hopefully, will (changes in ROOT basic I/O is required)
// 4) Streamer infos are not written to file, therefore schema evolution
//    is not yet supported. All eforts are done to enable this feature in
//    the near future
//
// Example how TSQLFile can be used:
//
// example of a session saving data to a SQL data base
// =====================================================
//
//  const char* dbname = "mysql://host.domain:3306/dbname";
//  const char* username = "username";
//  const char* userpass = "userpass";
//
//  // Clean data base and create primary tables
//  TSQLFile* f = new TSQLFile(dbname, "recreate", username, userpass);
//  // Write with standard I/O functions
//  arr->Write("arr", TObject::kSingleKey);
//  h1->Write("histo");
//  // Close connection to DB
//  delete f;
//
// example of a session read data from SQL data base
// =====================================================
//
//  // Open database again in read-only mode
//  TSQLFile* f = new TSQLFile(dbname, "open", username, userpass);
//  // Show list of keys
//  f->ls();
//  // Read stored object, again standard ROOT I/O
//  TH1* h1 = (TH1*) f->Get("histo");
//  if (h1!=0) { h1->SetDirectory(0); h1->Draw(); }
//  TObject* obj = f->Get("arr");
//  if (obj!=0) obj->Print("*");
//  // close connection to DB
//  delete f;
//
// The "SQL I/O" package is currently under development.
// Any bug reports and suggestions are welcome.
// Author: S.Linev, GSI Darmstadt,   S.Linev@gsi.de
//
//______________________________________________________________________________

#include "TSQLFile.h"

#include "TROOT.h"
#include "TSystem.h"
#include "TList.h"
#include "TBrowser.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "TList.h"
#include "TArrayC.h"
#include "TVirtualStreamerInfo.h"
#include "TStreamerElement.h"
#include "TProcessID.h"
#include "TError.h"
#include "TClass.h"

#include "TSQLServer.h"
#include "TSQLTableInfo.h"
#include "TSQLColumnInfo.h"
#include "TSQLStatement.h"
#include "TSQLResult.h"
#include "TSQLRow.h"
#include "TBufferSQL2.h"
#include "TSQLStructure.h"
#include "TKeySQL.h"
#include "TSQLClassInfo.h"
#include "TSQLObjectData.h"

#include "Riostream.h"

ClassImp(TSQLFile);

const char* mysql_BasicTypes[21] = {
"VARCHAR(255)",     // kBase     =  0,  used for text
"TINYINT UNSIGNED", // kChar     =  1,
"SMALLINT",         // kShort   =  2,
"INT",              // kInt     =  3,
"BIGINT",           // kLong    =  4,
"FLOAT",            // kFloat    = 5,
"INT",              // kCounter =  6,
"VARCHAR(255)",     // kCharStar = 7,
"DOUBLE",           // kDouble   = 8,
"DOUBLE",           // kDouble32=  9,
"",                 // nothing
"TINYINT UNSIGNED", // kUChar    = 11,
"SMALLINT UNSIGNED",// kUShort  = 12,
"INT UNSIGNED",     // kUInt    = 13,
"BIGINT UNSIGNED",  // kULong   = 14,
"INT UNSIGNED",     // kBits     = 15,
"BIGINT",           // kLong64   = 16,
"BIGINT UNSIGNED",  // kULong64 = 17,
"BOOL",             // kBool    = 18,
"DOUBLE",           // kFloat16 = 19,
""
};

const char* mysql_OtherTypes[13] = {
"VARCHAR(255)",     // smallest text
"255",              // maximum length of small text
"TEXT",             // biggest size text
"DATETIME",         // date & time
"`",                // quote for identifier like table name or column name
"dir:id",           // dir id column
"key:id",           // key id column
"obj:id",           // object id column
"raw:id",           // raw data id column
"str:id",           // string id column
":",                // name separator between name and type like TObject:Parent
"\"",               // quote for string values in MySQL
"InnoDB"            // default tables types, used only for MySQL tables
};

const char* oracle_BasicTypes[21] = {
"VARCHAR(255)",     // kBase     =  0,  used for text
"INT",              // kChar     =  1,
"INT",              // kShort   =  2,
"INT",              // kInt     =  3,
"INT",              // kLong    =  4,
"FLOAT",            // kFloat    = 5,
"INT",              // kCounter =  6,
"VARCHAR(255)",     // kCharStar = 7,
"DOUBLE PRECISION", // kDouble   = 8,
"DOUBLE PRECISION", // kDouble32=  9,
"",                 // nothing
"INT",              // kUChar    = 11,
"INT",              // kUShort  = 12,
"INT",              // kUInt    = 13,
"INT",              // kULong   = 14,
"INT",              // kBits     = 15,
"INT",              // kLong64   = 16,
"INT",              // kULong64 = 17,
"INT",              // kBool    = 18,
"FLOAT",            // kFloat16 = 19,
""
};

const char* oracle_OtherTypes[13] = {
"VARCHAR(1000)",    // smallest text
"1000",             // maximum size of smallest text
"VARCHAR(4000)",    // biggest size text, CLOB is not yet supported by TOracleRow
"VARCHAR(50)",      // date & time
"\"",               // quote for identifier like table name or column name
"dir:id",           // dir id column
"key:id",           // key id column
"obj:id",           // object id column
"raw:id",           // raw data id column
"str:id",           // string id column
":",                // name separator between name and type like TObject:parent
"'",                // quote for string values in Oracle
""                  // default tables types, used only for MySQL tables
};


//______________________________________________________________________________
TSQLFile::TSQLFile() :
   TFile(),
   fSQL(0),
   fSQLClassInfos(0),
   fUseSuffixes(kTRUE),
   fSQLIOversion(1),
   fArrayLimit(21),
   fCanChangeConfig(kFALSE),
   fTablesType(),
   fUseTransactions(0),
   fUseIndexes(0),
   fModifyCounter(0),
   fQuerisCounter(0),
   fBasicTypes(0),
   fOtherTypes(0),
   fUserName(),
   fLogFile(0),
   fIdsTableExists(kFALSE),
   fStmtCounter(0)
{
   // default TSQLFile constructor
   SetBit(kBinaryFile, kFALSE);
}

//______________________________________________________________________________
TSQLFile::TSQLFile(const char* dbname, Option_t* option, const char* user, const char* pass) :
   TFile(),
   fSQL(0),
   fSQLClassInfos(0),
   fUseSuffixes(kTRUE),
   fSQLIOversion(1),
   fArrayLimit(21),
   fCanChangeConfig(kFALSE),
   fTablesType(),
   fUseTransactions(0),
   fUseIndexes(0),
   fModifyCounter(0),
   fQuerisCounter(0),
   fBasicTypes(mysql_BasicTypes),
   fOtherTypes(mysql_OtherTypes),
   fUserName(user),
   fLogFile(0),
   fIdsTableExists(kFALSE),
   fStmtCounter(0)
{
   // Connects to SQL server with provided arguments.
   // If the constructor fails in any way IsZombie() will
   // return true. Use IsOpen() to check if the file is (still) open.
   //
   // If option = NEW or CREATE   create a ROOT tables in database
   //                             if the tables already exists connection is
   //                             not opened.
   //           = RECREATE        create completely new tables. Any existing tables
   //                             will be deleted
   //           = UPDATE          open an existing database for writing.
   //                             If data base open by other TSQLFile instance for writing,
   //                             write access will be rejected
   //           = BREAKLOCK       Special case when lock was not correctly released
   //                             by TSQLFile instance. This may happen if program crashed when
   //                             TSQLFile was open with write access mode.
   //           = READ or OPEN    open an existing data base for reading.
   //
   // For more details see comments for TFile::TFile() constructor
   //
   // For a moment TSQLFile does not support TTree objects and subdirectories

   if (!gROOT)
      ::Fatal("TFile::TFile", "ROOT system not initialized");

   gDirectory = 0;
   SetName(dbname);
   SetTitle("TFile interface to SQL DB");
   TDirectoryFile::Build();
   fFile = this;

   if (dbname && strstr(dbname,"oracle://")!=0) {
      fBasicTypes = oracle_BasicTypes;
      fOtherTypes = oracle_OtherTypes;
   }

   fArrayLimit = 21;
   fTablesType = SQLDefaultTableType();
   fUseIndexes = 1;
   fUseTransactions = kTransactionsAuto;

   fD          = -1;
   fFile       = this;
   fFree       = 0;
   fVersion    = gROOT->GetVersionInt();  //ROOT version in integer format
   fUnits      = 4;
   fOption     = option;
   SetCompressionLevel(5);
   fWritten    = 0;
   fSumBuffer  = 0;
   fSum2Buffer = 0;
   fBytesRead  = 0;
   fBytesWrite = 0;
   fClassIndex = 0;
   fSeekInfo   = 0;
   fNbytesInfo = 0;
   fProcessIDs = 0;
   fNProcessIDs= 0;
   fSeekDir    = sqlio::Ids_RootDir;
   SetBit(kBinaryFile, kFALSE);

   fOption = option;
   fOption.ToUpper();

   if (fOption == "NEW") fOption = "CREATE";

   Bool_t breaklock = kFALSE;

   if (fOption == "BREAKLOCK") { breaklock = kTRUE; fOption = "UPDATE"; }

   Bool_t create   = (fOption == "CREATE") ? kTRUE : kFALSE;
   Bool_t recreate = (fOption == "RECREATE") ? kTRUE : kFALSE;
   Bool_t update   = (fOption == "UPDATE") ? kTRUE : kFALSE;
   Bool_t read     = (fOption == "READ") ? kTRUE : kFALSE;

   if (!create && !recreate && !update && !read) {
      read    = kTRUE;
      fOption = "READ";
   }

   if (!dbname || !strlen(dbname)) {
      Error("TSQLFile", "Database not specified");
      goto zombie;
   }

   gROOT->cd();

   fSQL = TSQLServer::Connect(dbname, user, pass);

   if (fSQL==0) {
      Error("TSQLFile", "Cannot connect to DB %s", dbname);
      goto zombie;
   }

   if (recreate) {
      if (IsTablesExists())
         if (!IsWriteAccess()) {
            Error("TSQLFile", "no write permission, DB %s locked", dbname);
            goto zombie;
         }
      SQLDeleteAllTables();
      recreate = kFALSE;
      create   = kTRUE;
      fOption  = "CREATE";
   }

   if (create && IsTablesExists()) {
      Error("TSQLFile", "DB tables already exists");
      goto zombie;
   }

   if (update) {
      if (!IsTablesExists()) {
         update = kFALSE;
         create = kTRUE;
      }

      if (update && !breaklock && !IsWriteAccess()) {
         Error("TSQLFile", "no write permission, DB %s locked", dbname);
         goto zombie;
      }
   }

   if (read) {
      if (!IsTablesExists()) {
         Error("TSQLFile", "DB %s tables not exist", dbname);
         goto zombie;
      }
      if (!IsReadAccess()) {
         Error("TSQLFile", "no read permission for DB %s tables", dbname);
         goto zombie;
      }
   }

   fRealName = dbname;

   if (create || update) {
      SetWritable(kTRUE);
      if (update) SetLocking(kLockBusy);
   } else
      SetWritable(kFALSE);

   // user can change configurations only when create (recreate) options
   // was specified. When first object will be saved, configurations will
   // be frozen.
   fCanChangeConfig = create;

   InitSqlDatabase(create);

   return;

zombie:

   delete fSQL;
   fSQL = 0;
   MakeZombie();
   gDirectory = gROOT;
}

//______________________________________________________________________________
void TSQLFile::StartLogFile(const char* fname)
{
   // start logging of all SQL statements in specified file

   StopLogFile();
   fLogFile = new std::ofstream(fname);
}

//______________________________________________________________________________
void TSQLFile::StopLogFile()
{
   // close logging file
   if (fLogFile!=0) {
      delete fLogFile;
      fLogFile = 0;
   }
}

//______________________________________________________________________________
Bool_t TSQLFile::IsMySQL() const
{
   // checks, if MySQL database
   if (fSQL==0) return kFALSE;
   return strcmp(fSQL->ClassName(),"TMySQLServer")==0;
}

//______________________________________________________________________________
Bool_t TSQLFile::IsOracle() const
{
   // checks, if Oracle database

   if (fSQL==0) return kFALSE;
   return strcmp(fSQL->ClassName(),"TOracleServer")==0;
}

//______________________________________________________________________________
Bool_t TSQLFile::IsODBC() const
{
   // checks, if ODBC driver used for database connection

   if (fSQL==0) return kFALSE;
   return strcmp(fSQL->ClassName(),"TODBCServer")==0;

}

//______________________________________________________________________________
void TSQLFile::SetUseSuffixes(Bool_t on)
{
   // enable/disable uasge of suffixes in columns names
   // can be changed before first object is saved into file

   if (!fCanChangeConfig)
      Error("SetUseSuffixes", "Configurations already cannot be changed");
   else
      fUseSuffixes = on;
}

//______________________________________________________________________________
void TSQLFile::SetArrayLimit(Int_t limit)
{
   // Defines maximum number of columns for array representation
   // If array size bigger than limit, array data will be converted to raw format
   // This is usefull to prevent tables with very big number of columns
   // If limit==0, all arrays will be stored in raw format
   // If limit<0, all array values will be stored in column form
   // Default value is 21

   if (!fCanChangeConfig)
      Error("SetArrayLimit", "Configurations already cannot be changed");
   else
      fArrayLimit = limit;
}

//______________________________________________________________________________
void TSQLFile::SetTablesType(const char* tables_type)
{
   // Defines tables type, which is used in CREATE TABLE statements
   // Now is only used for MySQL database, where following types are supported:
   //    "BDB", "HEAP", "ISAM", "InnoDB", "MERGE", "MRG_MYISAM", "MYISAM"
   // Default for TSQLFile is "InnoDB". For more detailes see MySQL docs.

   if (!fCanChangeConfig)
      Error("SetTablesType", "Configurations already cannot be changed");
   else
      fTablesType = tables_type;
}

//______________________________________________________________________________
void TSQLFile::SetUseTransactions(Int_t mode)
{
   // Defines usage of transactions statements for writing objects data to database.
   //    kTransactionsOff=0   - no transaction operation are allowed
   //    kTransactionsAuto=1  - automatic mode. Each write operation,
   //        produced by TSQLFile, will be supplied by START TRANSACTION and COMMIT calls.
   //        If any error happen, ROLLBACK will returns database to previous state
   //    kTransactionsUser=2  - transactions are delegated to user. Methods
   //        StartTransaction(), Commit() and Rollback() should be called by user.
   // Default UseTransactions option is kTransactionsAuto

   fUseTransactions = mode;
}

//______________________________________________________________________________
Bool_t TSQLFile::StartTransaction()
{
   // Start user transaction.
   // This can be usesfull, when big number of objects should be stored in
   // data base and commitment required only if all operations were successful.
   // In that case in the end of all operations method Commit() should be
   // called. If operation on user-level is looks like not successfull,
   // method Rollback() will return database data and TSQLFile instance to
   // previous state.
   // In MySQL not all tables types support transaction mode of operation.
   // See SetTablesType() method for details .

   if (GetUseTransactions()!=kTransactionsUser) {
      Error("SQLStartTransaction","Only allowed when SetUseTransactions(kUserTransactions) was configured");
      return kFALSE;
   }

   return SQLStartTransaction();
}

//______________________________________________________________________________
Bool_t TSQLFile::Commit()
{
   // Commit transaction, started by StartTransaction() call.
   // Only after that call data will be written and visible on database side.

   if (GetUseTransactions()!=kTransactionsUser) {
      Error("SQLCommit","Only allowed when SetUseTransactions(kUserTransactions) was configured");
      return kFALSE;
   }

   return SQLCommit();
}

//______________________________________________________________________________
Bool_t TSQLFile::Rollback()
{
   // Rollback all operations, done after StartTransaction() call.
   // Database should return to initial state.

   if (GetUseTransactions()!=kTransactionsUser) {
      Error("SQLRollback","Only allowed when SetUseTransactions(kUserTransactions) was configured");
      return kFALSE;
   }

   return SQLRollback();
}

//______________________________________________________________________________
void TSQLFile::SetUseIndexes(Int_t use_type)
{
   // Specify usage of indexes for data tables
   //    kIndexesNone = 0  - no indexes are used
   //    kIndexesBasic = 1 - indexes used only for keys list and
   //                        objects list tables (default)
   //    kIndexesClass = 2 - index also created for every normal class table
   //    kIndexesAll = 3   - index created for every table, including _streamer_ tables
   // Indexes in general should increase speed of access to objects data,
   // but they required more operations and more disk space on server side

   if (!fCanChangeConfig)
      Error("SetUseIndexes", "Configurations already cannot be changed");
   else
      fUseIndexes = use_type;
}

//______________________________________________________________________________
const char* TSQLFile::GetDataBaseName() const
{
   // Return name of data base on the host
   // For Oracle always return 0

   if (IsOracle()) return 0;
   const char* name = strrchr(GetName(),'/');
   if (name==0) return 0;
   return name + 1;
}

//______________________________________________________________________________
void TSQLFile::Close(Option_t *option)
{
   // Close a SQL file
   // For more comments see TFile::Close() function

   if (!IsOpen()) return;

   TString opt = option;
   if (opt.Length()>0)
      opt.ToLower();

   if (IsWritable()) {
      SaveToDatabase();
      SetLocking(kLockFree);
   }

   fWritable = kFALSE;

   if (fClassIndex) {
      delete fClassIndex;
      fClassIndex = 0;
   }

   {
      TDirectory::TContext ctxt(this);
      // Delete all supported directories structures from memory
      TDirectoryFile::Close();
   }

   //delete the TProcessIDs
   TList pidDeleted;
   TIter next(fProcessIDs);
   TProcessID *pid;
   while ((pid = (TProcessID*)next())) {
      if (!pid->DecrementCount()) {
         if (pid != TProcessID::GetSessionProcessID()) pidDeleted.Add(pid);
      } else if(opt.Contains("r")) {
         pid->Clear();
      }
   }
   pidDeleted.Delete();

   gROOT->GetListOfFiles()->Remove(this);
}

//______________________________________________________________________________
TSQLFile::~TSQLFile()
{
   // destructor of TSQLFile object

   Close();

   if (fSQLClassInfos!=0) {
      fSQLClassInfos->Delete();
      delete fSQLClassInfos;
   }

   StopLogFile();

   if (fSQL!=0) {
      delete fSQL;
      fSQL = 0;
   }
}

//______________________________________________________________________________
void TSQLFile::operator=(const TSQLFile &)
{
   // make private to exclude copy operator
}

//______________________________________________________________________________
Bool_t TSQLFile::IsOpen() const
{
   // return kTRUE if file is opened and can be accessed

   return fSQL != 0;
}

//______________________________________________________________________________
Int_t TSQLFile::ReOpen(Option_t* mode)
{
   // Reopen a file with a different access mode, like from READ to
   // See TFile::Open() for details

   cd();

   TString opt = mode;
   opt.ToUpper();

   if (opt != "READ" && opt != "UPDATE") {
      Error("ReOpen", "mode must be either READ or UPDATE, not %s", opt.Data());
      return 1;
   }

   if (opt == fOption || (opt == "UPDATE" && fOption == "CREATE"))
      return 1;

   if (opt == "READ") {
      // switch to READ mode

      if (IsOpen() && IsWritable()) {
         SaveToDatabase();
         SetLocking(kLockFree);
      }
      fOption = opt;

      SetWritable(kFALSE);

   } else {
      // switch to UPDATE mode

      if (!IsWriteAccess()) {
         Error("ReOpen","Tables are locked, no write access");
         return 1;
      }

      fOption = opt;

      SetWritable(kTRUE);

      SetLocking(kLockBusy);
   }

   return 0;
}

//______________________________________________________________________________
TKey* TSQLFile::CreateKey(TDirectory* mother, const TObject* obj, const char* name, Int_t )
{
   // create SQL key, which will store object in data base
   return new TKeySQL(mother, obj, name);
}

//______________________________________________________________________________
TKey* TSQLFile::CreateKey(TDirectory* mother, const void* obj, const TClass* cl, const char* name, Int_t )
{
   // create SQL key, which will store object in data base
   return new TKeySQL(mother, obj, cl, name);
}

//______________________________________________________________________________
void TSQLFile::WriteHeader()
{
   // Write file info like configurations, title, UUID and other

   WriteSpecialObject(sqlio::Ids_TSQLFile, this, GetName(), GetTitle());
}

//______________________________________________________________________________
void TSQLFile::WriteStreamerInfo()
{
   // Store all TVirtualStreamerInfo, used in file, in sql database

   // return;

   // do not write anything when no basic tables was created
   if (!IsTablesExists()) return;

   if (gDebug>1)
      Info("WriteStreamerInfo","Saving streamer infos to database");

   TList list;

   TIter iter(gROOT->GetListOfStreamerInfo());

   TVirtualStreamerInfo* info = 0;

   while ((info = (TVirtualStreamerInfo*) iter()) !=0 ) {
      Int_t uid = info->GetNumber();
      if (fClassIndex->fArray[uid]) {
         if (gDebug>1) Info("WriteStreamerInfo","Add %s",info->GetName());
         list.Add(info);
      }
   }
   if (list.GetSize()==0) return;
   fClassIndex->fArray[0] = 2; //to prevent adding classes in TVirtualStreamerInfo::TagFile

   WriteSpecialObject(sqlio::Ids_StreamerInfos, &list, "StreamerInfo", "StreamerInfos of this file");

   fClassIndex->fArray[0] = 0; //to prevent adding classes in TVirtualStreamerInfo::TagFile
}

//______________________________________________________________________________
Bool_t TSQLFile::WriteSpecialObject(Long64_t keyid, TObject* obj, const char* name, const char* title)
{
// write special kind of object like streamer infos or file itself
// keys for that objects should exist in tables but not indicated in list of keys,
// therefore users can not get them with TDirectoryFile::Get() method

   DeleteKeyFromDB(keyid);
   if (obj==0) return kTRUE;

   Long64_t objid = StoreObjectInTables(keyid, obj, obj->IsA());

   if (objid>0) {
      TDatime now;

      TKeySQL* key = new TKeySQL(this, keyid, objid,
                                 name, title,
                                 now.AsSQLString(), 1, obj->ClassName());
      WriteKeyData(key);
      delete key;
   }

   return (objid>0);
}

//______________________________________________________________________________
TObject* TSQLFile::ReadSpecialObject(Long64_t keyid, TObject* obj)
{
   // Read data of special kind of objects

   TKeySQL* key = 0;

   StreamKeysForDirectory(this, kFALSE, keyid, &key);
   if (key==0) return obj;

   TBufferSQL2 buffer(TBuffer::kRead, this);

   TClass* cl = 0;

   void* res = buffer.SqlReadAny(key->GetDBKeyId(), key->GetDBObjId(), &cl, obj);

   if ((cl==TSQLFile::Class()) && (res!=0) && (obj==this)) {
      // name should not be preserved while name of database may be changed
      SetTitle(key->GetTitle());
   }

   delete key;

   return (TObject*) res;
}

//______________________________________________________________________________
TList* TSQLFile::GetStreamerInfoList()
{
   // Read back streamer infos from database
   // List of streamer infos is always stored with key:id 0,
   // which is not shown in normal keys list

//   return new TList;

   if (gDebug>1)
      Info("GetStreamerInfoList","Start reading of streamer infos");

   TObject* obj = ReadSpecialObject(sqlio::Ids_StreamerInfos);

   TList* list = dynamic_cast<TList*> (obj);
   if (list==0) { delete obj; list = new TList; }

   return list;
}

//______________________________________________________________________________
void TSQLFile::SaveToDatabase()
{
   // save data which is not yet in Database
   // Typically this is streamerinfos structures or

   if (fSQL==0) return;

   WriteStreamerInfo();
   WriteHeader();
}

//______________________________________________________________________________
Int_t TSQLFile::StreamKeysForDirectory(TDirectory* dir, Bool_t doupdate, Long64_t specialkeyid, TKeySQL** specialkey)
{
   // read keys for specified directory (when update == kFALSE)
   // or update value for modified keys when update == kTRUE
   // Returns number of successfully read keys or -1 if error

   if (dir==0) return -1;

   const char* quote = SQLIdentifierQuote();

   Long64_t dirid = dir->GetSeekDir();

   TString sqlcmd;
   sqlcmd.Form("SELECT * FROM %s%s%s WHERE %s%s%s=%lld",
               quote, sqlio::KeysTable, quote,
               quote, SQLDirIdColumn(), quote, dirid);
   if (specialkeyid>=0) {
      TString buf;
      buf.Form(" AND %s%s%s=%lld", quote, SQLKeyIdColumn(), quote, specialkeyid);
      sqlcmd += buf;
   }

   TSQLResult* res = SQLQuery(sqlcmd.Data(), 2);

   if (res==0) return -1;

   Int_t nkeys = 0;

   TSQLRow* row = 0;

   while ((row = res->Next()) != 0) {
      nkeys++;

      Long64_t keyid = sqlio::atol64((*row)[0]);
      //      Int_t dirid = atoi((*row)[1]);
      Long64_t objid = sqlio::atol64((*row)[2]);
      const char* keyname = (*row)[3];
      const char* keytitle = (*row)[4];
      const char* keydatime = (*row)[5];
      Int_t cycle = atoi((*row)[6]);
      const char* classname = (*row)[7];

      if (gDebug>4)
        cout << "  Reading keyid = " << keyid << " name = " << keyname << endl;

      if ((keyid>=sqlio::Ids_FirstKey) || (keyid==specialkeyid)) {
         if (doupdate) {
            TKeySQL* key = FindSQLKey(dir, keyid);

            if (key==0) {
               Error("StreamKeysForDirectory","Key with id %lld not exist in list", keyid);
               nkeys = -1; // this will finish execution
            } else
            if (key->IsKeyModified(keyname, keytitle, keydatime, cycle, classname))
               UpdateKeyData(key);

         } else {
            TKeySQL* key = new TKeySQL(dir, keyid, objid,
                                       keyname, keytitle,
                                       keydatime, cycle, classname);
            if (specialkey!=0)
               { *specialkey = key; nkeys = 1; }
            else
               dir->GetListOfKeys()->Add(key);
         }
      }
      delete row;
   }

   delete res;

   if (gDebug>4) {
      Info("StreamKeysForDirectory","dir = %s numread = %d",dir->GetName(), nkeys);
      dir->GetListOfKeys()->Print("*");
   }

   return nkeys;
}

//______________________________________________________________________________
void TSQLFile::InitSqlDatabase(Bool_t create)
{
   // initialize sql database and correspondent structures
   // identical to TFile::Init() function

   Int_t len = gROOT->GetListOfStreamerInfo()->GetSize()+1;
   if (len<5000) len = 5000;
   fClassIndex = new TArrayC(len);
   fClassIndex->Reset(0);

   if (!create) {

      Bool_t ok = ReadConfigurations();

      // read data corresponding to TSQLFile
      if (ok) {
         ReadSQLClassInfos();

         ReadStreamerInfo();

         ok = (ReadSpecialObject(sqlio::Ids_TSQLFile, this) != 0);
      }

      // read list of keys
      if (ok)
         ok = StreamKeysForDirectory(this, kFALSE)>=0;

      if (!ok) {
         Error("InitSqlDatabase", "Cannot detect proper tabled in database. Close.");
         Close();
         delete fSQL;
         fSQL = 0;
         MakeZombie();
         gDirectory = gROOT;
         return;
      }
   }

   gROOT->GetListOfFiles()->Add(this);
   cd();

   fNProcessIDs = 0;
   TKey* key = 0;
   TIter iter(fKeys);
   while ((key = (TKey*)iter())!=0) {
      if (!strcmp(key->GetClassName(),"TProcessID")) fNProcessIDs++;
   }

   fProcessIDs = new TObjArray(fNProcessIDs+1);
}

//______________________________________________________________________________
Bool_t TSQLFile::ReadConfigurations()
{
   // read table configurations as special table

   const char* quote = SQLIdentifierQuote();

   TString sqlcmd;
   sqlcmd.Form("SELECT * FROM %s%s%s",
               quote, sqlio::ConfigTable, quote);
   TSQLResult* res = SQLQuery(sqlcmd.Data(), 2);

   if (res==0) return kFALSE;

   // should be found, otherwise will be error
   fSQLIOversion = 0;

   Int_t lock = 0;

   #define ReadIntCfg(name, target)                        \
     if ((field.CompareTo(name, TString::kIgnoreCase)==0)) \
        target = value.Atoi(); else

   #define ReadBoolCfg(name, target)                        \
     if ((field.CompareTo(name, TString::kIgnoreCase)==0))  \
        target = value.CompareTo(sqlio::True, TString::kIgnoreCase)==0; else

   #define ReadStrCfg(name, target)                         \
     if ((field.CompareTo(name, TString::kIgnoreCase)==0))  \
        target = value; else

   TSQLRow* row = 0;

   while ((row = res->Next()) != 0) {

      TString field = row->GetField(0);
      TString value = row->GetField(1);

      delete row;

      ReadIntCfg(sqlio::cfg_Version, fSQLIOversion)
      ReadBoolCfg(sqlio::cfg_UseSufixes, fUseSuffixes)
      ReadIntCfg(sqlio::cfg_ArrayLimit, fArrayLimit)
      ReadStrCfg(sqlio::cfg_TablesType, fTablesType)
      ReadIntCfg(sqlio::cfg_UseTransactions, fUseTransactions)
      ReadIntCfg(sqlio::cfg_UseIndexes, fUseIndexes)
      ReadIntCfg(sqlio::cfg_ModifyCounter, fModifyCounter)
      ReadIntCfg(sqlio::cfg_LockingMode, lock)
      {
         Error("ReadConfigurations","Invalid configuration field %s", field.Data());
         fSQLIOversion = 0;
         break;
      }
   }
   (void)lock;

   delete res;

   return (fSQLIOversion>0);
}

//______________________________________________________________________________
void TSQLFile::CreateBasicTables()
{
   // Creates initial tables in database
   // This is table with configurations and table with keys
   // Function called once when first object is stored to the file.

   TString sqlcmd;

   const char* quote = SQLIdentifierQuote();
   const char* vquote = SQLValueQuote();

   if (SQLTestTable(sqlio::ConfigTable)) {
      sqlcmd.Form("DROP TABLE %s%s%s", quote, sqlio::ConfigTable, quote);
      SQLQuery(sqlcmd.Data());
   }

   sqlcmd.Form("CREATE TABLE %s%s%s (%s%s%s %s, %s%s%s %s)",
               quote, sqlio::ConfigTable, quote,
               quote, sqlio::CT_Field, quote, SQLSmallTextType(),
               quote, sqlio::CT_Value, quote, SQLSmallTextType());
   if ((fTablesType.Length()>0) && IsMySQL()) {
      sqlcmd +=" ENGINE=";
      sqlcmd += fTablesType;
   }

   SQLQuery(sqlcmd.Data());

   #define WrintCfg(name, type, value)                              \
   {                                                                \
      sqlcmd.Form("INSERT INTO %s%s%s VALUES (%s%s%s, %s" type "%s)", \
                  quote, sqlio::ConfigTable, quote,                 \
                  vquote, name, vquote,                             \
                  vquote, value, vquote);                           \
      SQLQuery(sqlcmd.Data());                                      \
   }

   WrintCfg(sqlio::cfg_Version, "%d", fSQLIOversion);
   WrintCfg(sqlio::cfg_UseSufixes, "%s", fUseSuffixes ? sqlio::True : sqlio::False);
   WrintCfg(sqlio::cfg_ArrayLimit, "%d", fArrayLimit);
   WrintCfg(sqlio::cfg_TablesType, "%s", fTablesType.Data());
   WrintCfg(sqlio::cfg_UseTransactions, "%d", fUseTransactions);
   WrintCfg(sqlio::cfg_UseIndexes, "%d", fUseIndexes);
   WrintCfg(sqlio::cfg_ModifyCounter, "%d", fModifyCounter);
   WrintCfg(sqlio::cfg_LockingMode, "%d", kLockBusy);

   // from this moment on user cannot change configurations
   fCanChangeConfig = kFALSE;

   if (SQLTestTable(sqlio::KeysTable)) {
      sqlcmd.Form("DROP TABLE %s%s%s", quote, sqlio::KeysTable, quote);
      SQLQuery(sqlcmd.Data());
   }

   sqlcmd.Form("CREATE TABLE %s%s%s (%s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s)",
               quote, sqlio::KeysTable, quote,
               quote, SQLKeyIdColumn(), quote, SQLIntType(),
               quote, SQLDirIdColumn(), quote, SQLIntType(),
               quote, SQLObjectIdColumn(), quote, SQLIntType(),
               quote, sqlio::KT_Name, quote, SQLSmallTextType(),
               quote, sqlio::KT_Title, quote, SQLSmallTextType(),
               quote, sqlio::KT_Datetime, quote, SQLDatetimeType(),
               quote, sqlio::KT_Cycle, quote, SQLIntType(),
               quote, sqlio::KT_Class, quote, SQLSmallTextType());

   if ((fTablesType.Length()>0) && IsMySQL()) {
      sqlcmd +=" ENGINE=";
      sqlcmd += fTablesType;
   }

   SQLQuery(sqlcmd.Data());

   if (GetUseIndexes()>kIndexesNone) {
      sqlcmd.Form("CREATE UNIQUE INDEX %s%s%s ON %s%s%s (%s%s%s)",
                   quote, sqlio::KeysTableIndex, quote,
                   quote, sqlio::KeysTable, quote,
                   quote, SQLKeyIdColumn(), quote);
      SQLQuery(sqlcmd.Data());
   }
}

//______________________________________________________________________________
void TSQLFile::IncrementModifyCounter()
{
   // Update value of modify counter in config table
   // Modify counter used to indicate that something was changed in database.
   // It will be used when multiple instances of TSQLFile for the same data base
   // will be connected.

   if (!IsWritable()) {
      Error("IncrementModifyCounter","Cannot update tables without write accsess");
      return;
   }

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   const char* vquote = SQLValueQuote();

   sqlcmd.Form("UPDATE %s%s%s SET %s%s%s=%d WHERE %s%s%s=%s%s%s",
                quote, sqlio::ConfigTable, quote,
                quote, sqlio::CT_Value, quote, ++fModifyCounter,
                quote, sqlio::CT_Field, quote,
                vquote, sqlio::cfg_ModifyCounter, vquote);
   SQLQuery(sqlcmd.Data());
}

//______________________________________________________________________________
TString TSQLFile::MakeSelectQuery(TClass* cl)
{
   // Produce SELECT statement which can be used to get all data
   // of class cl in one SELECT statement
   // This statement also can be used to create VIEW by command like
   // mysql> CREATE VIEW TH1I_view AS $CLASSSELECT$
   // Where $CLASSSELECT$ argument should be produced by call
   //   f->MakeSelectQuery(TH1I::Class());
   // VIEWs supported by latest MySQL 5 and Oracle

   TString res = "";
   TSQLClassInfo* sqlinfo = FindSQLClassInfo(cl);
   if (sqlinfo==0) return res;

   TString columns, tables;
   Int_t tablecnt = 0;

   if (!ProduceClassSelectQuery(cl->GetStreamerInfo(), sqlinfo, columns, tables, tablecnt))
      return res;

   res.Form("SELECT %s FROM %s", columns.Data(), tables.Data());

   return res;
}

//______________________________________________________________________________
Bool_t TSQLFile::ProduceClassSelectQuery(TVirtualStreamerInfo* info,
                                         TSQLClassInfo* sqlinfo,
                                         TString& columns,
                                         TString& tables,
                                         Int_t& tablecnt)
{
   // used by MakeClassSelectQuery method to add columns from table of
   // class, specified by TVirtualStreamerInfo structure

   if ((info==0) || (sqlinfo==0)) return kFALSE;

   if (!sqlinfo->IsClassTableExist()) return kFALSE;

   const char* quote = SQLIdentifierQuote();

   TString table_syn;
   table_syn.Form("t%d", ++tablecnt);

   Bool_t start = tables.Length()==0;

   TString buf;

   if (start)
      buf.Form("%s AS %s", sqlinfo->GetClassTableName(), table_syn.Data());
   else
      buf.Form(" LEFT JOIN %s AS %s USING(%s%s%s)",
               sqlinfo->GetClassTableName(), table_syn.Data(),
               quote, SQLObjectIdColumn(), quote);

   tables += buf;

   if (start)
      columns.Form("%s.%s%s%s",table_syn.Data(), quote, SQLObjectIdColumn(), quote);

   if (info->GetClass()==TObject::Class()) {
      buf.Form(", %s.%s",table_syn.Data(), sqlio::TObjectUniqueId);
      columns+=buf;
      buf.Form(", %s.%s",table_syn.Data(), sqlio::TObjectBits);
      columns+=buf;
      buf.Form(", %s.%s",table_syn.Data(), sqlio::TObjectProcessId);
      columns+=buf;
      return kTRUE;
   }

   TIter iter(info->GetElements());
   TStreamerElement* elem = 0;

   while ((elem = (TStreamerElement*) iter()) != 0) {
      Int_t coltype = TSQLStructure::DefineElementColumnType(elem, this);
      TString colname = TSQLStructure::DefineElementColumnName(elem, this);

      buf = "";
      switch (coltype) {

         case TSQLStructure::kColObject:
         case TSQLStructure::kColObjectPtr:
         case TSQLStructure::kColTString:
         case TSQLStructure::kColSimple: {
            buf.Form(", %s.%s%s%s",table_syn.Data(), quote, colname.Data(), quote);
            columns+=buf;
            break;
         }

         case TSQLStructure::kColParent: {
            TClass* parentcl = elem->GetClassPointer();
            ProduceClassSelectQuery(parentcl->GetStreamerInfo(),
                                    FindSQLClassInfo(parentcl),
                                    columns, tables, tablecnt);
            break;
         }

         case TSQLStructure::kColSimpleArray: {
            for(Int_t n=0;n<elem->GetArrayLength();n++) {
               colname = TSQLStructure::DefineElementColumnName(elem, this, n);
               buf.Form(", %s.%s%s%s",table_syn.Data(), quote, colname.Data(), quote);
               columns+=buf;
            }
            break;
         }
      } // switch
   }

   return (columns.Length()>0) && (tables.Length()>0);
}

//______________________________________________________________________________
Bool_t TSQLFile::IsTablesExists()
{
   // Checks if main keys table is existing

   return SQLTestTable(sqlio::KeysTable) && SQLTestTable(sqlio::ConfigTable);
}

//______________________________________________________________________________
Bool_t TSQLFile::IsWriteAccess()
{
   // Checkis, if lock is free in configuration tables

   return GetLocking()==kLockFree;
}

//______________________________________________________________________________
void TSQLFile::SetLocking(Int_t mode)
{
   // Set locking mode for current database

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   const char* vquote = SQLValueQuote();

   sqlcmd.Form("UPDATE %s%s%s SET %s%s%s=%d WHERE %s%s%s=%s%s%s",
                quote, sqlio::ConfigTable, quote,
                quote, sqlio::CT_Value, quote, mode,
                quote, sqlio::CT_Field, quote,
                vquote, sqlio::cfg_LockingMode, vquote);
   SQLQuery(sqlcmd.Data());
}

//______________________________________________________________________________
Int_t TSQLFile::GetLocking()
{
   // Return current locking mode for that file

   const char* quote = SQLIdentifierQuote();
   const char* vquote = SQLValueQuote();

   TString sqlcmd;
   sqlcmd.Form("SELECT %s%s%s FROM %s%s%s WHERE %s%s%s=%s%s%s",
                quote, sqlio::CT_Value, quote,
                quote, sqlio::ConfigTable, quote,
                quote, sqlio::CT_Field, quote,
                vquote, sqlio::cfg_LockingMode, vquote);

   TSQLResult* res = SQLQuery(sqlcmd.Data(), 1);
   TSQLRow* row = (res==0) ? 0 : res->Next();
   TString field = (row==0) ? "" : row->GetField(0);
   delete row;
   delete res;

   if (field.Length()==0) return kLockFree;

   return field.Atoi();
}

//______________________________________________________________________________
Bool_t TSQLFile::IsReadAccess()
{
   // dummy, in future should check about read access to database

   return kTRUE;
}

//______________________________________________________________________________
TSQLResult* TSQLFile::SQLQuery(const char* cmd, Int_t flag, Bool_t* ok)
{
   // submits query to SQL server
   // if flag==0, result is not interesting and will be deleted
   // if flag==1, return result of submitted query
   // if flag==2, results is may be necessary for long time
   //             Oracle plugin do not support working with several TSQLResult
   //             objects, therefore explicit deep copy will be produced
   // If ok!=0, it will contains kTRUE is Query was successfull, otherwise kFALSE

   if (fLogFile!=0)
      *fLogFile << cmd << endl;

   if (ok!=0) *ok = kFALSE;

   if (fSQL==0) return 0;

   if (gDebug>2) Info("SQLQuery", "%s", cmd);

   fQuerisCounter++;

   if (flag==0) {
      Bool_t res = fSQL->Exec(cmd);
      if (ok!=0) *ok = res;
      return 0;
   }

   TSQLResult* res = fSQL->Query(cmd);
   if (ok!=0) *ok = res!=0;
   if (res==0) return 0;
//   if ((flag==2) && IsOracle())
//      res = new TSQLResultCopy(res);
   return res;
}

//______________________________________________________________________________
Bool_t TSQLFile::SQLCanStatement()
{
   // Test if DB support statement and number of open statements is not exceeded

   if (fSQL==0) return kFALSE;

   if (!fSQL->HasStatement()) return kFALSE;

   return kTRUE; // !IsOracle() || (fStmtCounter<15);
}

//______________________________________________________________________________
TSQLStatement* TSQLFile::SQLStatement(const char* cmd, Int_t bufsize)
{
   // Produces SQL statement for currently conected DB server

   if (fSQL==0) return 0;

   if (!fSQL->HasStatement()) return 0;

   if (gDebug>1)
      Info("SQLStatement", "%s", cmd);

   fStmtCounter++;
   fQuerisCounter++; // one statement counts as one query

   return fSQL->Statement(cmd, bufsize);
}

//______________________________________________________________________________
void TSQLFile::SQLDeleteStatement(TSQLStatement* stmt)
{
   // delete statement and decrease counter

   if (stmt==0) return;

   fStmtCounter--;

   delete stmt;
}

//______________________________________________________________________________
Bool_t TSQLFile::SQLApplyCommands(TObjArray* cmds)
{
   // supplies set of commands to server
   // Commands is stored as array of TObjString

   if ((cmds==0) || (fSQL==0)) return kFALSE;

   Bool_t ok = kTRUE;
   TIter iter(cmds);
   TObject* cmd= 0;
   while ((cmd=iter())!=0) {
      SQLQuery(cmd->GetName(),0,&ok);
      if(!ok) break;
   }

   return ok;
}

//______________________________________________________________________________
Bool_t TSQLFile::SQLTestTable(const char* tablename)
{
   // Test, if table of specified name exists

   if (fSQL==0) return kFALSE;

   if (fSQL->HasTable(tablename)) return kTRUE;

   TString buf(tablename);
   buf.ToLower();
   if (fSQL->HasTable(buf.Data())) return kTRUE;
   buf.ToUpper();
   return fSQL->HasTable(buf.Data());
}

//______________________________________________________________________________
Long64_t TSQLFile::SQLMaximumValue(const char* tablename, const char* columnname)
{
   // Returns maximum value, found in specified columnname of table tablename
   // Column type should be numeric

   if (fSQL==0) return -1;

   if (gDebug>2)
      Info("SQLMaximumValue","Requests for %s column %s", tablename, columnname);

   const char* quote = SQLIdentifierQuote();

   TString query;
   query.Form("SELECT MAX(%s%s%s) FROM %s%s%s",
              quote, columnname, quote,
              quote, tablename, quote);
   TSQLResult* res = SQLQuery(query.Data(), 1);

   if (res==0) return -1;

   TSQLRow* row = res->Next();

   Long64_t maxid = -1;
   if (row!=0)
      if (row->GetField(0)!=0)
         maxid = sqlio::atol64(row->GetField(0));

   delete row;
   delete res;

   if (gDebug>2)
      Info("SQLMaximumValue","Result = %lld",maxid);;

   return maxid;
}

//______________________________________________________________________________
void TSQLFile::SQLDeleteAllTables()
{
   // Delete all tables in database

   if (fSQL==0) return;

   TList* tables = fSQL->GetTablesList();
   if (tables==0) return;

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();

   TIter iter(tables);
   TObject* obj = 0;
   while ((obj=iter())!=0) {
      sqlcmd.Form("DROP TABLE %s%s%s", quote, obj->GetName(), quote);
      SQLQuery(sqlcmd.Data());
   }
   delete tables;
}

//______________________________________________________________________________
Bool_t TSQLFile::SQLStartTransaction()
{
   // Start SQL transaction.

   return fSQL ? fSQL->StartTransaction() : kFALSE;
}

//______________________________________________________________________________
Bool_t TSQLFile::SQLCommit()
{
   // Commit SQL transaction

   return fSQL ? fSQL->Commit() : kFALSE;
}

//______________________________________________________________________________
Bool_t TSQLFile::SQLRollback()
{
   // Rollback all SQL operations, done after start transaction

   return fSQL ? fSQL->Rollback() : kFALSE;
}

//______________________________________________________________________________
Int_t TSQLFile::SQLMaxIdentifierLength()
{
   // returns maximum allowed length of identifiers

   Int_t maxlen = fSQL==0 ? 32 : fSQL->GetMaxIdentifierLength();

   // lets exclude absolute ubnormal data
   if (maxlen<10) maxlen = 10;

   return maxlen;
}

//______________________________________________________________________________
void TSQLFile::DeleteKeyFromDB(Long64_t keyid)
{
// remove key with specified id from keys table
// also removes all objects data, related to this table

   if (!IsWritable() || (keyid<0) || (fSQL==0)) return;

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();

   sqlcmd.Form("SELECT MIN(%s%s%s), MAX(%s%s%s) FROM %s%s%s WHERE %s%s%s=%lld",
               quote, SQLObjectIdColumn(), quote,
               quote, SQLObjectIdColumn(), quote,
               quote, sqlio::ObjectsTable, quote,
               quote, SQLKeyIdColumn(), quote, keyid);
   TSQLResult* res = SQLQuery(sqlcmd.Data(), 2);
   TSQLRow* row = res==0 ? 0 : res->Next();
   Long64_t minid(1), maxid(0);

   if ((row!=0) && (row->GetField(0)!=0) && (row->GetField(1)!=0)) {
      minid = sqlio::atol64(row->GetField(0));
      maxid = sqlio::atol64(row->GetField(1));
   }

   delete row;
   delete res;

   // can be that object tables does not include any entry this that keyid
   if (minid<=maxid) {
      TIter iter(fSQLClassInfos);
      TSQLClassInfo* info = 0;
      TString querymask, query;
      querymask.Form("DELETE FROM %s%s%s WHERE %s%s%s BETWEEN %lld AND %lld",
                     quote, "%s", quote,
                     quote, SQLObjectIdColumn(), quote,
                     minid, maxid);

      while ((info = (TSQLClassInfo*) iter()) !=0 ) {

         if (info->IsClassTableExist()) {
            query.Form(querymask.Data(), info->GetClassTableName());
            SQLQuery(query.Data());
         }

         if (info->IsRawTableExist()) {
            query.Form(querymask.Data(), info->GetRawTableName());
            SQLQuery(query.Data());
         }
      }
   }

   sqlcmd.Form("DELETE FROM %s%s%s WHERE %s%s%s=%lld", quote, sqlio::ObjectsTable, quote, quote, SQLKeyIdColumn(), quote, keyid);
   SQLQuery(sqlcmd.Data());

   sqlcmd.Form("DELETE FROM %s%s%s WHERE %s%s%s=%lld", quote, sqlio::KeysTable, quote, quote, SQLKeyIdColumn(), quote, keyid);
   SQLQuery(sqlcmd.Data());

   IncrementModifyCounter();
}

//______________________________________________________________________________
TKeySQL* TSQLFile::FindSQLKey(TDirectory* dir, Long64_t keyid)
{
   // Search for TKeySQL object with specified keyid

   if (dir==0) return 0;

   TIter next(dir->GetListOfKeys());
   TObject* obj = 0;

   while ((obj = next())!=0) {
      TKeySQL* key = dynamic_cast<TKeySQL*> (obj);
      if (key!=0)
         if (key->GetDBKeyId()==keyid) return key;
   }

   return 0;
}

//______________________________________________________________________________
Bool_t TSQLFile::WriteKeyData(TKeySQL* key)
{
   // add entry into keys table

   if ((fSQL==0) || (key==0)) return kFALSE;

   if (!IsTablesExists()) CreateBasicTables();

   TString sqlcmd;
   const char* valuequote = SQLValueQuote();
   const char* quote = SQLIdentifierQuote();

   sqlcmd.Form("INSERT INTO %s%s%s VALUES (%lld, %lld, %lld, %s%s%s, %s%s%s, %s%s%s, %d, %s%s%s)",
               quote, sqlio::KeysTable, quote,
               key->GetDBKeyId(), key->GetDBDirId(), key->GetDBObjId(),
               valuequote, key->GetName(), valuequote,
               valuequote, key->GetTitle(), valuequote,
               valuequote, key->GetDatime().AsSQLString(), valuequote,
               key->GetCycle(),
               valuequote, key->GetClassName(), valuequote);

   Bool_t ok = kTRUE;

   SQLQuery(sqlcmd.Data(), 0, &ok);

   if (ok) IncrementModifyCounter();

   return ok;
}

//______________________________________________________________________________
Bool_t TSQLFile::UpdateKeyData(TKeySQL* key)
{
   // updates (overwrites) key data in KeysTable

   if ((fSQL==0) || (key==0)) return kFALSE;

   TString sqlcmd;
   const char* valuequote = SQLValueQuote();
   const char* quote = SQLIdentifierQuote();

   TString keyname = key->GetName();
   TString keytitle = key->GetTitle();
   TString keydatime = key->GetDatime().AsSQLString();

   TSQLStructure::AddStrBrackets(keyname, valuequote);
   TSQLStructure::AddStrBrackets(keytitle, valuequote);
   TSQLStructure::AddStrBrackets(keydatime, valuequote);

   sqlcmd.Form("UPDATE %s%s%s SET %s%s%s=%s, %s%s%s=%s, %s%s%s=%s, %s%s%s=%d WHERE %s%s%s=%lld",
                quote, sqlio::KeysTable, quote,
                quote, sqlio::KT_Name, quote, keyname.Data(),
                quote, sqlio::KT_Title, quote, keytitle.Data(),
                quote, sqlio::KT_Datetime, quote, keydatime.Data(),
                quote, sqlio::KT_Cycle, quote, key->GetCycle(),
                quote, SQLKeyIdColumn(), quote, key->GetDBKeyId());

   Bool_t ok = kTRUE;

   SQLQuery(sqlcmd.Data(), 0, &ok);

   if (ok) IncrementModifyCounter();

   return ok;
}

//______________________________________________________________________________
Long64_t TSQLFile::DefineNextKeyId()
{
   // Returns next possible key identifier

   Long64_t max = -1;

   if (SQLTestTable(sqlio::KeysTable))
      max = SQLMaximumValue(sqlio::KeysTable, SQLKeyIdColumn());

   if (max<0) return sqlio::Ids_FirstKey;

   return max+1;
}

//______________________________________________________________________________
TSQLClassInfo* TSQLFile::FindSQLClassInfo(const char* clname, Int_t version)
{
   // return (if exists) TSQLClassInfo for specified class name and version

   if (fSQLClassInfos==0) return 0;

   TIter iter(fSQLClassInfos);
   TSQLClassInfo* info = 0;

   while ((info = (TSQLClassInfo*) iter()) !=0 ) {
      if (strcmp(info->GetName(), clname)==0)
         if (info->GetClassVersion()==version) return info;
   }
   return 0;
}

//______________________________________________________________________________
TSQLClassInfo* TSQLFile::FindSQLClassInfo(const TClass* cl)
{
   // return (if exists) TSQLClassInfo for specified class

   return FindSQLClassInfo(cl->GetName(), cl->GetClassVersion());
}

//______________________________________________________________________________
TSQLClassInfo* TSQLFile::RequestSQLClassInfo(const char* clname, Int_t version)
{
   // search in database tables for specified class and return TSQLClassInfo object

   TSQLClassInfo* info = FindSQLClassInfo(clname, version);
   if (info!=0) return info;

   if (fSQL==0) return 0;

   Long64_t maxid = 0;

   if (fSQLClassInfos!=0) {
      TIter iter(fSQLClassInfos);
      info = 0;
      while ((info = (TSQLClassInfo*) iter()) !=0 ) {
         if (info->GetClassId()>maxid)
            maxid = info->GetClassId();
      }
   }

   info = new TSQLClassInfo(maxid+1, clname, version);

   info->SetClassTableName(DefineTableName(clname, version, kFALSE));
   info->SetRawTableName(DefineTableName(clname, version, kTRUE));

   if (fSQLClassInfos==0) fSQLClassInfos = new TList;
   fSQLClassInfos->Add(info);

   return info;
}

//______________________________________________________________________________
TString TSQLFile::DefineTableName(const char* clname, Int_t version, Bool_t rawtable)
{
   // proposes table name for class

   Int_t maxlen = SQLMaxIdentifierLength();

   TString res;

   const char *suffix = rawtable ? "_raw" : "_ver";

   res.Form("%s%s%d", clname, suffix, version);

   if ((res.Length() <= maxlen) && !HasTable(res.Data()))
      return res;

   TString scnt;

   Int_t len = strlen(clname);
   Int_t cnt = version;
   if (cnt>100) cnt = 0; // do not start with the biggest values

   do {
      scnt.Form("%d%s",cnt, suffix);
      Int_t numlen = scnt.Length();
      if (numlen>=maxlen-2) break;

      res = clname;

      if (len + numlen > maxlen)
         res.Resize(maxlen - numlen);

      res+=scnt;

      if (!HasTable(res.Data())) return res;

      cnt++;

   } while (cnt<10000);

   Error("DefineTableName","Cannot produce table name for class %s ver %d", clname, version);
   res.Form("%s%s%d", clname, suffix, version);

   return res;
}

//______________________________________________________________________________
Bool_t TSQLFile::HasTable(const char* name)
{
   // test if table name exists

   if (fSQLClassInfos==0) return kFALSE;

   TIter iter(fSQLClassInfos);
   TSQLClassInfo* info = 0;
   while ((info = (TSQLClassInfo*) iter()) !=0 ) {
      if (strcmp(info->GetClassTableName(), name)==0) return kTRUE;
      if (strcmp(info->GetRawTableName(), name)==0) return kTRUE;
   }

   return kFALSE;
}

//______________________________________________________________________________
TSQLClassInfo* TSQLFile::RequestSQLClassInfo(const TClass* cl)
{
   // search in database tables for specified class and return TSQLClassInfo object

   return RequestSQLClassInfo(cl->GetName(), cl->GetClassVersion());
}

//______________________________________________________________________________
void TSQLFile::ReadSQLClassInfos()
{
   // Read all class infos from IdsTable

   if (fSQL==0) return;

   fIdsTableExists = SQLTestTable(sqlio::IdsTable);

   if (!fIdsTableExists) return;

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();

   sqlcmd.Form("SELECT * FROM %s%s%s WHERE %s%s%s = %d ORDER BY %s%s%s",
                quote, sqlio::IdsTable, quote,
                quote, sqlio::IT_Type, quote, TSQLStructure::kIdTable,
                quote, sqlio::IT_TableID, quote);

   TSQLResult* res = SQLQuery(sqlcmd.Data(), 1);

   TSQLRow* row = 0;

   if (res!=0)
      while ((row = res->Next())!=0) {
         Long64_t tableid = sqlio::atol64(row->GetField(0));
         Int_t version = atoi(row->GetField(1));

         const char* classname = row->GetField(3);
         const char* classtable = row->GetField(4);

         TSQLClassInfo* info = new TSQLClassInfo(tableid, classname, version);
         info->SetClassTableName(classtable);

         if (fSQLClassInfos==0) fSQLClassInfos = new TList;
         fSQLClassInfos->Add(info);

         delete row;
      }
   delete res;


   TIter next(fSQLClassInfos);
   TSQLClassInfo* info = 0;

   while ((info = (TSQLClassInfo*) next()) != 0) {
      sqlcmd.Form("SELECT * FROM %s%s%s WHERE %s%s%s = %lld ORDER BY %s%s%s",
                   quote, sqlio::IdsTable, quote,
                   quote, sqlio::IT_TableID, quote, info->GetClassId(),
                   quote, sqlio::IT_SubID, quote);
      res = SQLQuery(sqlcmd.Data(), 1);

      TObjArray* cols = 0;

      if (res!=0)
         while ((row = res->Next())!=0) {

            Int_t typ = atoi(row->GetField(2));

            const char* fullname = row->GetField(3);
            const char* sqlname = row->GetField(4);
            const char* info2 = row->GetField(5);

            if (typ==TSQLStructure::kIdColumn) {
                if (cols==0) cols = new TObjArray;
                cols->Add(new TSQLClassColumnInfo(fullname, sqlname, info2));
            }

            delete row;
         }

      delete res;

      info->SetColumns(cols);
   }

   sqlcmd.Form("SELECT * FROM %s%s%s WHERE %s%s%s = %d ORDER BY %s%s%s",
                quote, sqlio::IdsTable, quote,
                quote, sqlio::IT_Type, quote, TSQLStructure::kIdRawTable,
                quote, sqlio::IT_TableID, quote);

   res = SQLQuery(sqlcmd.Data(), 1);

   if (res!=0)
      while ((row = res->Next())!=0) {
         Long64_t tableid = sqlio::atol64(row->GetField(0));
         Int_t version = atoi(row->GetField(1));

         const char* classname = row->GetField(3);
         const char* rawtable = row->GetField(4);

         TSQLClassInfo* info2 = FindSQLClassInfo(classname, version);

         if (info2==0) {
            info2 = new TSQLClassInfo(tableid, classname, version);

            if (fSQLClassInfos==0) fSQLClassInfos = new TList;
            fSQLClassInfos->Add(info2);
         }

         info2->SetRawTableName(rawtable);
         info2->SetRawExist(kTRUE);

         delete row;
      }

   delete res;
}


//______________________________________________________________________________
void TSQLFile::AddIdEntry(Long64_t tableid, Int_t subid, Int_t type,
                          const char* name, const char* sqlname, const char* info)
{
   // Add entry into IdsTable, where all tables names and columns names are listed

   if ((fSQL==0) || !IsWritable()) return;

   TString sqlcmd;
   const char* valuequote = SQLValueQuote();
   const char* quote = SQLIdentifierQuote();

   if (!fIdsTableExists) {

      if (SQLTestTable(sqlio::IdsTable)) {
         sqlcmd.Form("DROP TABLE %s%s%s", quote, sqlio::IdsTable, quote);
         SQLQuery(sqlcmd.Data());
      }

      sqlcmd.Form("CREATE TABLE %s%s%s (%s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s)",
                  quote, sqlio::IdsTable, quote,
                  quote, sqlio::IT_TableID, quote, SQLIntType(),
                  quote, sqlio::IT_SubID, quote, SQLIntType(),
                  quote, sqlio::IT_Type, quote, SQLIntType(),
                  quote, sqlio::IT_FullName, quote, SQLSmallTextType(),
                  quote, sqlio::IT_SQLName, quote, SQLSmallTextType(),
                  quote, sqlio::IT_Info, quote, SQLSmallTextType());
      if ((fTablesType.Length()>0) && IsMySQL()) {
         sqlcmd +=" ENGINE=";
         sqlcmd += fTablesType;
      }
      SQLQuery(sqlcmd.Data());

      fIdsTableExists = kTRUE;
   }

   sqlcmd.Form("INSERT INTO %s%s%s VALUES (%lld, %d, %d, %s%s%s, %s%s%s, %s%s%s)",
               quote, sqlio::IdsTable, quote,
               tableid, subid, type,
               valuequote, name, valuequote,
               valuequote, sqlname, valuequote,
               valuequote, info, valuequote);

   SQLQuery(sqlcmd.Data());
}

//______________________________________________________________________________
Bool_t TSQLFile::CreateClassTable(TSQLClassInfo* sqlinfo, TObjArray* colinfos)
{
   // Create normal class table if required

   if (sqlinfo==0) return kFALSE;

   // this is normal situation, when no extra column infos was created when not necessary
   if (colinfos==0) return sqlinfo->IsClassTableExist();

   if (sqlinfo->IsClassTableExist()) {
      if (colinfos!=0) {
         colinfos->Delete();
         delete colinfos;
         //Error("CreateClassTable","Why colinfos for table %s", sqlinfo->GetClassTableName());
      }
      return kTRUE;
   }

   if (gDebug>2)
      Info("CreateClassTable", "cl:%s", sqlinfo->GetName());

   const char* quote = SQLIdentifierQuote();

   AddIdEntry(sqlinfo->GetClassId(),
              sqlinfo->GetClassVersion(),
              TSQLStructure::kIdTable,
              sqlinfo->GetName(),
              sqlinfo->GetClassTableName(),
              "Main class table");

   TString sqlcmd;
   sqlcmd.Form("CREATE TABLE %s%s%s (",
                quote, sqlinfo->GetClassTableName(), quote);

   TIter iter(colinfos);
   TSQLClassColumnInfo* col;
   Bool_t first = kTRUE;
   Bool_t forcequote = IsOracle();
   Int_t colid = 0;
   while ((col=(TSQLClassColumnInfo*)iter())!=0) {
      if (!first) sqlcmd+=", "; else first = false;

      const char* colname = col->GetSQLName();
      if ((strpbrk(colname,"[:.]<>")!=0) || forcequote) {
         sqlcmd += quote;
         sqlcmd += colname;
         sqlcmd += quote;
         sqlcmd += " ";
      } else {
         sqlcmd += colname,
         sqlcmd += " ";
      }

      sqlcmd += col->GetSQLType();

      AddIdEntry(sqlinfo->GetClassId(),
                 colid++,
                 TSQLStructure::kIdColumn,
                 col->GetName(),
                 col->GetSQLName(),
                 col->GetSQLType());
   }
   sqlcmd += ")";

   if ((fTablesType.Length()>0)  && IsMySQL()) {
      sqlcmd +=" ENGINE=";
      sqlcmd += fTablesType;
   }

   SQLQuery(sqlcmd.Data());

   sqlinfo->SetColumns(colinfos);

   if (GetUseIndexes()>kIndexesBasic) {

      TString indxname = sqlinfo->GetClassTableName();
      indxname.ReplaceAll("_ver","_i1x");

      sqlcmd.Form("CREATE UNIQUE INDEX %s%s_I1%s ON %s%s%s (%s%s%s)",
                  quote, indxname.Data(), quote,
                  quote, sqlinfo->GetClassTableName(), quote,
                  quote, SQLObjectIdColumn(), quote);
      SQLQuery(sqlcmd.Data());
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TSQLFile::CreateRawTable(TSQLClassInfo* sqlinfo)
{
   //create the raw table
   if (sqlinfo==0) return kFALSE;

   if (sqlinfo->IsRawTableExist()) return kTRUE;

   const char* quote = SQLIdentifierQuote();

   if (gDebug>2)
      Info("CreateRawTable", "%s", sqlinfo->GetName());

   TString sqlcmd;

   sqlcmd.Form("CREATE TABLE %s%s%s (%s%s%s %s, %s%s%s %s, %s %s, %s %s)",
               quote, sqlinfo->GetRawTableName(), quote,
               quote, SQLObjectIdColumn(), quote, SQLIntType(),
               quote, SQLRawIdColumn(), quote, SQLIntType(),
               sqlio::BT_Field, SQLSmallTextType(),
               sqlio::BT_Value, SQLSmallTextType());

   if ((fTablesType.Length()>0) && IsMySQL()) {
      sqlcmd +=" ENGINE=";
      sqlcmd += fTablesType;
   }

   SQLQuery(sqlcmd.Data());
   sqlinfo->SetRawExist(kTRUE);

   if (GetUseIndexes()>kIndexesClass) {
      TString indxname = sqlinfo->GetClassTableName();
      indxname.ReplaceAll("_ver","_i2x");

      sqlcmd.Form("CREATE UNIQUE INDEX %s%s_I2%s ON %s%s%s (%s%s%s, %s%s%s)",
                  quote, indxname.Data(), quote,
                  quote, sqlinfo->GetRawTableName(), quote,
                  quote, SQLObjectIdColumn(), quote,
                  quote, SQLRawIdColumn(), quote);
      SQLQuery(sqlcmd.Data());
   }

   AddIdEntry(sqlinfo->GetClassId(),
              sqlinfo->GetClassVersion(),
              TSQLStructure::kIdRawTable,
              sqlinfo->GetName(),
              sqlinfo->GetRawTableName(),
              "Raw data class table");

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TSQLFile::VerifyLongStringTable()
{
   // Checks that table for big strings is exists
   // If not, will be created

   if (fSQL==0) return kFALSE;

   if (SQLTestTable(sqlio::StringsTable)) return kTRUE;

   const char* quote = SQLIdentifierQuote();

   TString sqlcmd;
   sqlcmd.Form("CREATE TABLE %s (%s%s%s %s, %s%s%s %s, %s %s)",
               sqlio::StringsTable,
               quote, SQLObjectIdColumn(), quote, SQLIntType(),
               quote, SQLStrIdColumn(), quote, SQLIntType(),
               sqlio::ST_Value, SQLBigTextType());

   if (fTablesType.Length()>0) {
      sqlcmd +=" ENGINE=";
      sqlcmd += fTablesType;
   }

   SQLQuery(sqlcmd.Data());

   return kTRUE;
}

//______________________________________________________________________________
TString TSQLFile::CodeLongString(Long64_t objid, Int_t strid)
{
   // produces id which will be placed in column instead of string itself
   TString res;
   res.Form("%s %lld %s %d %s", sqlio::LongStrPrefix, objid, sqlio::LongStrPrefix, strid, sqlio::LongStrPrefix);
   return res;
}

//______________________________________________________________________________
Int_t TSQLFile::IsLongStringCode(Long64_t objid, const char* value)
{
   // checks if this is long string code
   // returns 0, if not or string id
   if (value==0) return 0;
   if (strlen(value)<strlen(sqlio::LongStrPrefix)*3+6) return 0;
   if (strstr(value, sqlio::LongStrPrefix)!=value) return 0;

   value+=strlen(sqlio::LongStrPrefix);
   if (*value++!=' ') return 0;
   TString s_strid, s_objid;
   if ((*value<'1') || (*value>'9')) return 0;
   do {
      s_objid.Append(*value++);
   } while ((*value!=0) && (*value>='0') && (*value<='9'));

   if (*value++ != ' ') return 0;
   if ((*value==0) || (strstr(value, sqlio::LongStrPrefix)!=value)) return 0;
   value+=strlen(sqlio::LongStrPrefix);
   if (*value++!=' ') return 0;

   if ((*value<'1') || (*value>'9')) return 0;
   do {
      s_strid.Append(*value++);
   } while ((*value!=0) && (*value>='0') && (*value<='9'));
   if (*value++!=' ') return 0;

   if ((*value==0) || (strcmp(value, sqlio::LongStrPrefix)!=0)) return 0;

   Long64_t objid2 = sqlio::atol64(s_objid.Data());
   if (objid2!=objid) return 0;

   return atoi(s_strid.Data());
}

//______________________________________________________________________________
Bool_t TSQLFile::GetLongString(Long64_t objid, Int_t strid, TString& value)
{
   // returns value of string, extracted from special table,
   // where long strings are stored

   if (!SQLTestTable(sqlio::StringsTable)) return kFALSE;

   TString cmd;
   const char* quote = SQLIdentifierQuote();
   cmd.Form("SELECT %s FROM %s%s%s WHERE %s%s%s=%lld AND %s%s%s=%d",
            sqlio::ST_Value,
            quote, sqlio::StringsTable, quote,
            quote, SQLObjectIdColumn(), quote, objid,
            quote, SQLStrIdColumn(), quote, strid);

   TSQLResult* res = SQLQuery(cmd.Data(), 1);
   if (res==0) return kFALSE;
   TSQLRow* row = res->Next();
   if (row==0) { delete res; return kFALSE; }
   value = row->GetField(0);

   delete row;
   delete res;

   return kTRUE;
}

//______________________________________________________________________________
Long64_t TSQLFile::VerifyObjectTable()
{
   // Checks that objects table is exists
   // If not, table will be created
   // Returns maximum value for existing objects id

   if (fSQL==0) return -1;

   Long64_t maxid = -1;

   if (gDebug>2)
      Info("VerifyObjectTable", "Checks if object table is there");

   if (SQLTestTable(sqlio::ObjectsTable))
      maxid = SQLMaximumValue(sqlio::ObjectsTable, SQLObjectIdColumn());
   else {
      TString sqlcmd;
      const char* quote = SQLIdentifierQuote();
      sqlcmd.Form("CREATE TABLE %s%s%s (%s%s%s %s, %s%s%s %s, %s%s%s %s, %s%s%s %s)",
                  quote, sqlio::ObjectsTable, quote,
                  quote, SQLKeyIdColumn(), quote, SQLIntType(),
                  quote, SQLObjectIdColumn(), quote, SQLIntType(),
                  quote, sqlio::OT_Class, quote, SQLSmallTextType(),
                  quote, sqlio::OT_Version, quote, SQLIntType());

      if ((fTablesType.Length()>0) && IsMySQL()) {
         sqlcmd +=" ENGINE=";
         sqlcmd += fTablesType;
      }

      SQLQuery(sqlcmd.Data());

      if (GetUseIndexes()>kIndexesNone) {
         sqlcmd.Form("CREATE UNIQUE INDEX %s%s%s ON %s%s%s (%s%s%s)",
                      quote, sqlio::ObjectsTableIndex, quote,
                      quote, sqlio::ObjectsTable, quote,
                      quote, SQLObjectIdColumn(), quote);
         SQLQuery(sqlcmd.Data());
      }
   }

   return maxid;
}

//______________________________________________________________________________
Bool_t TSQLFile::SQLObjectInfo(Long64_t objid, TString& clname, Version_t &version)
{
   // Read from objects table data for specified objectid

   if (fSQL==0) return kFALSE;

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   sqlcmd.Form("SELECT %s%s%s, %s%s%s FROM %s%s%s WHERE %s%s%s=%lld",
               quote, sqlio::OT_Class, quote,
               quote, sqlio::OT_Version, quote,
               quote, sqlio::ObjectsTable, quote,
               quote, SQLObjectIdColumn(), quote, objid);
   TSQLResult* res = SQLQuery(sqlcmd.Data(), 1);
   if (res==0) return kFALSE;
   TSQLRow* row = res->Next();
   if (row!=0) {
      clname = row->GetField(0);
      version = atoi(row->GetField(1));
   }

   delete row;
   delete res;
   return row!=0;
}

//______________________________________________________________________________
TObjArray* TSQLFile::SQLObjectsInfo(Long64_t keyid)
{
// Produce array of TSQLObjectInfo objects for all objects, belong to that key
// Array should be deleted by calling function afterwards
   if (fSQL==0) return 0;

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   sqlcmd.Form("SELECT %s%s%s, %s%s%s, %s%s%s FROM %s%s%s WHERE %s%s%s=%lld ORDER BY %s%s%s",
               quote, SQLObjectIdColumn(), quote,
               quote, sqlio::OT_Class, quote,
               quote, sqlio::OT_Version, quote,
               quote, sqlio::ObjectsTable, quote,
               quote, SQLKeyIdColumn(), quote, keyid,
               quote, SQLObjectIdColumn(), quote);

   TObjArray* arr = 0;

   if (fLogFile!=0)
      *fLogFile << sqlcmd << endl;
   if (gDebug>2) Info("SQLObjectsInfo", "%s", sqlcmd.Data());
   fQuerisCounter++;

   TSQLStatement* stmt = SQLStatement(sqlcmd.Data(), 1000);

   if (stmt!=0) {
      stmt->Process();
      stmt->StoreResult();

      while (stmt->NextResultRow()) {
         Long64_t objid = stmt->GetLong64(0);
         const char* clname = stmt->GetString(1);
         Int_t version = stmt->GetInt(2);

         TSQLObjectInfo* info = new TSQLObjectInfo(objid, clname, version);
         if (arr==0) arr = new TObjArray();
         arr->Add(info);
      }

      delete stmt;
      return arr;
   }

   TSQLResult* res = SQLQuery(sqlcmd.Data(), 1);
   if (res==0) return 0;

   TSQLRow* row = 0;
   while ((row = res->Next()) != 0) {
      Long64_t objid = atoi(row->GetField(0));
      const char* clname = row->GetField(1);
      Int_t version = atoi(row->GetField(2));

      TSQLObjectInfo* info = new TSQLObjectInfo(objid, clname, version);
      if (arr==0) arr = new TObjArray();
      arr->Add(info);

      delete row;
   }
   delete res;
   return arr;
}

//______________________________________________________________________________
TSQLResult* TSQLFile::GetNormalClassData(Long64_t objid, TSQLClassInfo* sqlinfo)
{
// Method return request result for specified objid from normal classtable

   if (!sqlinfo->IsClassTableExist()) return 0;
   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   sqlcmd.Form("SELECT * FROM %s%s%s WHERE %s%s%s=%lld",
               quote, sqlinfo->GetClassTableName(), quote,
               quote, SQLObjectIdColumn(), quote, objid);
   return SQLQuery(sqlcmd.Data(), 2);
}

//______________________________________________________________________________
TSQLResult* TSQLFile::GetNormalClassDataAll(Long64_t minobjid, Long64_t maxobjid, TSQLClassInfo* sqlinfo)
{
   // return data for several objects from the range from normal class table

   if (!sqlinfo->IsClassTableExist()) return 0;
   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   sqlcmd.Form("SELECT * FROM %s%s%s WHERE %s%s%s BETWEEN %lld AND %lld ORDER BY %s%s%s",
               quote, sqlinfo->GetClassTableName(), quote,
               quote, SQLObjectIdColumn(), quote, minobjid, maxobjid,
               quote, SQLObjectIdColumn(), quote);
   return SQLQuery(sqlcmd.Data(), 2);
}

//______________________________________________________________________________
TSQLResult* TSQLFile::GetBlobClassData(Long64_t objid, TSQLClassInfo* sqlinfo)
{
//  Method return request results for specified objid from _streamer_ classtable

   if (!sqlinfo->IsRawTableExist()) return 0;
   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   sqlcmd.Form("SELECT %s, %s FROM %s%s%s WHERE %s%s%s=%lld ORDER BY %s%s%s",
               sqlio::BT_Field, sqlio::BT_Value,
               quote, sqlinfo->GetRawTableName(), quote,
               quote, SQLObjectIdColumn(), quote, objid,
               quote, SQLRawIdColumn(), quote);
   return SQLQuery(sqlcmd.Data(), 2);
}

//______________________________________________________________________________
TSQLStatement* TSQLFile::GetBlobClassDataStmt(Long64_t objid, TSQLClassInfo* sqlinfo)
{
//  Method return request results for specified objid from _streamer_ classtable
//  Data returned in form of statement, where direct access to values are possible

   if (!sqlinfo->IsRawTableExist()) return 0;

   TString sqlcmd;
   const char* quote = SQLIdentifierQuote();
   sqlcmd.Form("SELECT %s, %s FROM %s%s%s WHERE %s%s%s=%lld ORDER BY %s%s%s",
               sqlio::BT_Field, sqlio::BT_Value,
               quote, sqlinfo->GetRawTableName(), quote,
               quote, SQLObjectIdColumn(), quote, objid,
               quote, SQLRawIdColumn(), quote);

   if (fLogFile!=0)
      *fLogFile << sqlcmd << endl;
   if (gDebug>2) Info("BuildStatement", "%s", sqlcmd.Data());
   fQuerisCounter++;

   TSQLStatement* stmt = SQLStatement(sqlcmd.Data(), 1000);
   if (stmt==0) return 0;

   stmt->Process();

   stmt->StoreResult();

   return stmt;
}

//______________________________________________________________________________
Long64_t TSQLFile::StoreObjectInTables(Long64_t keyid, const void* obj, const TClass* cl)
{
   // Store object in database. Return stored object id or -1 if error

   if (fSQL==0) return -1;

   Long64_t objid = VerifyObjectTable();
   if (objid<=0) objid = 1; else objid++;

   TBufferSQL2 buffer(TBuffer::kWrite, this);

   TSQLStructure* s = buffer.SqlWriteAny(obj, cl, objid);

   if ((buffer.GetErrorFlag()>0) && s) {
      Error("StoreObjectInTables","Cannot convert object data to TSQLStructure");
      objid = -1;
   } else {
      TObjArray cmds;
      // here tables may be already created, therefore
      // it should be protected by transactions operations
      if (s && !s->ConvertToTables(this, keyid, &cmds)) {
         Error("StoreObjectInTables","Cannot convert to SQL statements");
         objid = -1;
      } else {
         Bool_t needcommit = kFALSE;

         if (GetUseTransactions()==kTransactionsAuto) {
            SQLStartTransaction();
            needcommit = kTRUE;
         }

         if (!SQLApplyCommands(&cmds)) {
            Error("StoreObject","Cannot correctly store object data in database");
            objid = -1;
            if (needcommit) SQLRollback();
         } else {
            if (needcommit) SQLCommit();
         }
      }
      cmds.Delete();
   }

   return objid;
}

//______________________________________________________________________________
const char* TSQLFile::SQLCompatibleType(Int_t typ) const
{
   // returns sql type name which is most closer to ROOT basic type
   // typ should be from TVirtualStreamerInfo:: constansts like TVirtualStreamerInfo::kInt

   return (typ<0) || (typ>18) ? 0 : fBasicTypes[typ];
}

//______________________________________________________________________________
const char* TSQLFile::SQLIntType() const
{
   // return SQL integer type

   return SQLCompatibleType(TVirtualStreamerInfo::kInt);
}

//______________________________________________________________________________
Long64_t TSQLFile::DirCreateEntry(TDirectory* dir)
{
   // Create entry for directory in database

   TDirectory* mother = dir->GetMotherDir();
   if (mother==0) mother = this;

   // key will be added to mother directory
   TKeySQL* key = new TKeySQL(mother, dir, dir->GetName(), dir->GetTitle());

   return key->GetDBKeyId();
}

//______________________________________________________________________________
Int_t TSQLFile::DirReadKeys(TDirectory* dir)
{
   // Read directory list of keys from database

   // First delete all old keys
   dir->GetListOfKeys()->Delete();

   if (gDebug>2)
      Info("DirReadKeys","dir = %s id = %lld", dir->GetName(), dir->GetSeekDir());

   return StreamKeysForDirectory(dir, kFALSE);
}

//______________________________________________________________________________
void TSQLFile::DirWriteKeys(TDirectory* dir)
{
   // Write directory keys list to database

   StreamKeysForDirectory(dir, kTRUE);
}

//______________________________________________________________________________
void TSQLFile::DirWriteHeader(TDirectory* dir)
{
   // Update dir header in the file

   TSQLClassInfo* sqlinfo = FindSQLClassInfo("TDirectory",TDirectoryFile::Class()->GetClassVersion());
   if (sqlinfo==0) return;

   // try to identify key with data for our directory
   TKeySQL* key = FindSQLKey(dir->GetMotherDir(), dir->GetSeekDir());
   if (key==0) return;

   const char* valuequote = SQLValueQuote();
   const char* quote = SQLIdentifierQuote();

   TString timeC = fDatimeC.AsSQLString();
   TSQLStructure::AddStrBrackets(timeC, valuequote);

   TString timeM = fDatimeM.AsSQLString();
   TSQLStructure::AddStrBrackets(timeM, valuequote);

   TString uuid = dir->GetUUID().AsString();
   TSQLStructure::AddStrBrackets(uuid, valuequote);

   TString sqlcmd;

   TString col1name = "CreateTime";
   TString col2name = "ModifyTime";
   TString col3name = "UUID";
   if (GetUseSuffixes()) {
      col1name+=sqlio::StrSuffix;
      col2name+=sqlio::StrSuffix;
      col3name+=sqlio::StrSuffix;
   }

   sqlcmd.Form("UPDATE %s%s%s SET %s%s%s=%s, %s%s%s=%s, %s%s%s=%s WHERE %s%s%s=%lld",
                quote, sqlinfo->GetClassTableName(), quote,
                quote, col1name.Data(), quote, timeC.Data(),
                quote, col2name.Data(), quote, timeM.Data(),
                quote, col3name.Data(), quote, uuid.Data(),
                quote, SQLObjectIdColumn(), quote, key->GetDBObjId());

   SQLQuery(sqlcmd.Data());
}

//______________________________________________________________________________
void TSQLFile::Streamer(TBuffer &b)
{
   // streamer for TSQLFile class
   // stores only data for TDirectory


   TString sbuf;

   if (b.IsReading()) {
      Version_t R__v = b.ReadVersion(0, 0);
      b.ClassBegin(TSQLFile::Class(), R__v);

      b.ClassMember("CreateTime","TString");
      sbuf.Streamer(b);
      TDatime timeC(sbuf.Data());
      fDatimeC = timeC;

      b.ClassMember("ModifyTime","TString");
      sbuf.Streamer(b);
      TDatime timeM(sbuf.Data());
      fDatimeM = timeM;

      b.ClassMember("UUID","TString");
      sbuf.Streamer(b);
      TUUID id(sbuf.Data());
      fUUID = id;

      b.ClassEnd(TSQLFile::Class());
   } else {

      b.WriteVersion(TSQLFile::Class());

      b.ClassBegin(TSQLFile::Class());

      b.ClassMember("CreateTime","TString");
      sbuf = fDatimeC.AsSQLString();
      sbuf.Streamer(b);

      b.ClassMember("ModifyTime","TString");
      fDatimeM.Set();
      sbuf = fDatimeM.AsSQLString();
      sbuf.Streamer(b);

      b.ClassMember("UUID","TString");
      sbuf = fUUID.AsString();
      sbuf.Streamer(b);

      b.ClassEnd(TSQLFile::Class());
   }
}
 TSQLFile.cxx:1
 TSQLFile.cxx:2
 TSQLFile.cxx:3
 TSQLFile.cxx:4
 TSQLFile.cxx:5
 TSQLFile.cxx:6
 TSQLFile.cxx:7
 TSQLFile.cxx:8
 TSQLFile.cxx:9
 TSQLFile.cxx:10
 TSQLFile.cxx:11
 TSQLFile.cxx:12
 TSQLFile.cxx:13
 TSQLFile.cxx:14
 TSQLFile.cxx:15
 TSQLFile.cxx:16
 TSQLFile.cxx:17
 TSQLFile.cxx:18
 TSQLFile.cxx:19
 TSQLFile.cxx:20
 TSQLFile.cxx:21
 TSQLFile.cxx:22
 TSQLFile.cxx:23
 TSQLFile.cxx:24
 TSQLFile.cxx:25
 TSQLFile.cxx:26
 TSQLFile.cxx:27
 TSQLFile.cxx:28
 TSQLFile.cxx:29
 TSQLFile.cxx:30
 TSQLFile.cxx:31
 TSQLFile.cxx:32
 TSQLFile.cxx:33
 TSQLFile.cxx:34
 TSQLFile.cxx:35
 TSQLFile.cxx:36
 TSQLFile.cxx:37
 TSQLFile.cxx:38
 TSQLFile.cxx:39
 TSQLFile.cxx:40
 TSQLFile.cxx:41
 TSQLFile.cxx:42
 TSQLFile.cxx:43
 TSQLFile.cxx:44
 TSQLFile.cxx:45
 TSQLFile.cxx:46
 TSQLFile.cxx:47
 TSQLFile.cxx:48
 TSQLFile.cxx:49
 TSQLFile.cxx:50
 TSQLFile.cxx:51
 TSQLFile.cxx:52
 TSQLFile.cxx:53
 TSQLFile.cxx:54
 TSQLFile.cxx:55
 TSQLFile.cxx:56
 TSQLFile.cxx:57
 TSQLFile.cxx:58
 TSQLFile.cxx:59
 TSQLFile.cxx:60
 TSQLFile.cxx:61
 TSQLFile.cxx:62
 TSQLFile.cxx:63
 TSQLFile.cxx:64
 TSQLFile.cxx:65
 TSQLFile.cxx:66
 TSQLFile.cxx:67
 TSQLFile.cxx:68
 TSQLFile.cxx:69
 TSQLFile.cxx:70
 TSQLFile.cxx:71
 TSQLFile.cxx:72
 TSQLFile.cxx:73
 TSQLFile.cxx:74
 TSQLFile.cxx:75
 TSQLFile.cxx:76
 TSQLFile.cxx:77
 TSQLFile.cxx:78
 TSQLFile.cxx:79
 TSQLFile.cxx:80
 TSQLFile.cxx:81
 TSQLFile.cxx:82
 TSQLFile.cxx:83
 TSQLFile.cxx:84
 TSQLFile.cxx:85
 TSQLFile.cxx:86
 TSQLFile.cxx:87
 TSQLFile.cxx:88
 TSQLFile.cxx:89
 TSQLFile.cxx:90
 TSQLFile.cxx:91
 TSQLFile.cxx:92
 TSQLFile.cxx:93
 TSQLFile.cxx:94
 TSQLFile.cxx:95
 TSQLFile.cxx:96
 TSQLFile.cxx:97
 TSQLFile.cxx:98
 TSQLFile.cxx:99
 TSQLFile.cxx:100
 TSQLFile.cxx:101
 TSQLFile.cxx:102
 TSQLFile.cxx:103
 TSQLFile.cxx:104
 TSQLFile.cxx:105
 TSQLFile.cxx:106
 TSQLFile.cxx:107
 TSQLFile.cxx:108
 TSQLFile.cxx:109
 TSQLFile.cxx:110
 TSQLFile.cxx:111
 TSQLFile.cxx:112
 TSQLFile.cxx:113
 TSQLFile.cxx:114
 TSQLFile.cxx:115
 TSQLFile.cxx:116
 TSQLFile.cxx:117
 TSQLFile.cxx:118
 TSQLFile.cxx:119
 TSQLFile.cxx:120
 TSQLFile.cxx:121
 TSQLFile.cxx:122
 TSQLFile.cxx:123
 TSQLFile.cxx:124
 TSQLFile.cxx:125
 TSQLFile.cxx:126
 TSQLFile.cxx:127
 TSQLFile.cxx:128
 TSQLFile.cxx:129
 TSQLFile.cxx:130
 TSQLFile.cxx:131
 TSQLFile.cxx:132
 TSQLFile.cxx:133
 TSQLFile.cxx:134
 TSQLFile.cxx:135
 TSQLFile.cxx:136
 TSQLFile.cxx:137
 TSQLFile.cxx:138
 TSQLFile.cxx:139
 TSQLFile.cxx:140
 TSQLFile.cxx:141
 TSQLFile.cxx:142
 TSQLFile.cxx:143
 TSQLFile.cxx:144
 TSQLFile.cxx:145
 TSQLFile.cxx:146
 TSQLFile.cxx:147
 TSQLFile.cxx:148
 TSQLFile.cxx:149
 TSQLFile.cxx:150
 TSQLFile.cxx:151
 TSQLFile.cxx:152
 TSQLFile.cxx:153
 TSQLFile.cxx:154
 TSQLFile.cxx:155
 TSQLFile.cxx:156
 TSQLFile.cxx:157
 TSQLFile.cxx:158
 TSQLFile.cxx:159
 TSQLFile.cxx:160
 TSQLFile.cxx:161
 TSQLFile.cxx:162
 TSQLFile.cxx:163
 TSQLFile.cxx:164
 TSQLFile.cxx:165
 TSQLFile.cxx:166
 TSQLFile.cxx:167
 TSQLFile.cxx:168
 TSQLFile.cxx:169
 TSQLFile.cxx:170
 TSQLFile.cxx:171
 TSQLFile.cxx:172
 TSQLFile.cxx:173
 TSQLFile.cxx:174
 TSQLFile.cxx:175
 TSQLFile.cxx:176
 TSQLFile.cxx:177
 TSQLFile.cxx:178
 TSQLFile.cxx:179
 TSQLFile.cxx:180
 TSQLFile.cxx:181
 TSQLFile.cxx:182
 TSQLFile.cxx:183
 TSQLFile.cxx:184
 TSQLFile.cxx:185
 TSQLFile.cxx:186
 TSQLFile.cxx:187
 TSQLFile.cxx:188
 TSQLFile.cxx:189
 TSQLFile.cxx:190
 TSQLFile.cxx:191
 TSQLFile.cxx:192
 TSQLFile.cxx:193
 TSQLFile.cxx:194
 TSQLFile.cxx:195
 TSQLFile.cxx:196
 TSQLFile.cxx:197
 TSQLFile.cxx:198
 TSQLFile.cxx:199
 TSQLFile.cxx:200
 TSQLFile.cxx:201
 TSQLFile.cxx:202
 TSQLFile.cxx:203
 TSQLFile.cxx:204
 TSQLFile.cxx:205
 TSQLFile.cxx:206
 TSQLFile.cxx:207
 TSQLFile.cxx:208
 TSQLFile.cxx:209
 TSQLFile.cxx:210
 TSQLFile.cxx:211
 TSQLFile.cxx:212
 TSQLFile.cxx:213
 TSQLFile.cxx:214
 TSQLFile.cxx:215
 TSQLFile.cxx:216
 TSQLFile.cxx:217
 TSQLFile.cxx:218
 TSQLFile.cxx:219
 TSQLFile.cxx:220
 TSQLFile.cxx:221
 TSQLFile.cxx:222
 TSQLFile.cxx:223
 TSQLFile.cxx:224
 TSQLFile.cxx:225
 TSQLFile.cxx:226
 TSQLFile.cxx:227
 TSQLFile.cxx:228
 TSQLFile.cxx:229
 TSQLFile.cxx:230
 TSQLFile.cxx:231
 TSQLFile.cxx:232
 TSQLFile.cxx:233
 TSQLFile.cxx:234
 TSQLFile.cxx:235
 TSQLFile.cxx:236
 TSQLFile.cxx:237
 TSQLFile.cxx:238
 TSQLFile.cxx:239
 TSQLFile.cxx:240
 TSQLFile.cxx:241
 TSQLFile.cxx:242
 TSQLFile.cxx:243
 TSQLFile.cxx:244
 TSQLFile.cxx:245
 TSQLFile.cxx:246
 TSQLFile.cxx:247
 TSQLFile.cxx:248
 TSQLFile.cxx:249
 TSQLFile.cxx:250
 TSQLFile.cxx:251
 TSQLFile.cxx:252
 TSQLFile.cxx:253
 TSQLFile.cxx:254
 TSQLFile.cxx:255
 TSQLFile.cxx:256
 TSQLFile.cxx:257
 TSQLFile.cxx:258
 TSQLFile.cxx:259
 TSQLFile.cxx:260
 TSQLFile.cxx:261
 TSQLFile.cxx:262
 TSQLFile.cxx:263
 TSQLFile.cxx:264
 TSQLFile.cxx:265
 TSQLFile.cxx:266
 TSQLFile.cxx:267
 TSQLFile.cxx:268
 TSQLFile.cxx:269
 TSQLFile.cxx:270
 TSQLFile.cxx:271
 TSQLFile.cxx:272
 TSQLFile.cxx:273
 TSQLFile.cxx:274
 TSQLFile.cxx:275
 TSQLFile.cxx:276
 TSQLFile.cxx:277
 TSQLFile.cxx:278
 TSQLFile.cxx:279
 TSQLFile.cxx:280
 TSQLFile.cxx:281
 TSQLFile.cxx:282
 TSQLFile.cxx:283
 TSQLFile.cxx:284
 TSQLFile.cxx:285
 TSQLFile.cxx:286
 TSQLFile.cxx:287
 TSQLFile.cxx:288
 TSQLFile.cxx:289
 TSQLFile.cxx:290
 TSQLFile.cxx:291
 TSQLFile.cxx:292
 TSQLFile.cxx:293
 TSQLFile.cxx:294
 TSQLFile.cxx:295
 TSQLFile.cxx:296
 TSQLFile.cxx:297
 TSQLFile.cxx:298
 TSQLFile.cxx:299
 TSQLFile.cxx:300
 TSQLFile.cxx:301
 TSQLFile.cxx:302
 TSQLFile.cxx:303
 TSQLFile.cxx:304
 TSQLFile.cxx:305
 TSQLFile.cxx:306
 TSQLFile.cxx:307
 TSQLFile.cxx:308
 TSQLFile.cxx:309
 TSQLFile.cxx:310
 TSQLFile.cxx:311
 TSQLFile.cxx:312
 TSQLFile.cxx:313
 TSQLFile.cxx:314
 TSQLFile.cxx:315
 TSQLFile.cxx:316
 TSQLFile.cxx:317
 TSQLFile.cxx:318
 TSQLFile.cxx:319
 TSQLFile.cxx:320
 TSQLFile.cxx:321
 TSQLFile.cxx:322
 TSQLFile.cxx:323
 TSQLFile.cxx:324
 TSQLFile.cxx:325
 TSQLFile.cxx:326
 TSQLFile.cxx:327
 TSQLFile.cxx:328
 TSQLFile.cxx:329
 TSQLFile.cxx:330
 TSQLFile.cxx:331
 TSQLFile.cxx:332
 TSQLFile.cxx:333
 TSQLFile.cxx:334
 TSQLFile.cxx:335
 TSQLFile.cxx:336
 TSQLFile.cxx:337
 TSQLFile.cxx:338
 TSQLFile.cxx:339
 TSQLFile.cxx:340
 TSQLFile.cxx:341
 TSQLFile.cxx:342
 TSQLFile.cxx:343
 TSQLFile.cxx:344
 TSQLFile.cxx:345
 TSQLFile.cxx:346
 TSQLFile.cxx:347
 TSQLFile.cxx:348
 TSQLFile.cxx:349
 TSQLFile.cxx:350
 TSQLFile.cxx:351
 TSQLFile.cxx:352
 TSQLFile.cxx:353
 TSQLFile.cxx:354
 TSQLFile.cxx:355
 TSQLFile.cxx:356
 TSQLFile.cxx:357
 TSQLFile.cxx:358
 TSQLFile.cxx:359
 TSQLFile.cxx:360
 TSQLFile.cxx:361
 TSQLFile.cxx:362
 TSQLFile.cxx:363
 TSQLFile.cxx:364
 TSQLFile.cxx:365
 TSQLFile.cxx:366
 TSQLFile.cxx:367
 TSQLFile.cxx:368
 TSQLFile.cxx:369
 TSQLFile.cxx:370
 TSQLFile.cxx:371
 TSQLFile.cxx:372
 TSQLFile.cxx:373
 TSQLFile.cxx:374
 TSQLFile.cxx:375
 TSQLFile.cxx:376
 TSQLFile.cxx:377
 TSQLFile.cxx:378
 TSQLFile.cxx:379
 TSQLFile.cxx:380
 TSQLFile.cxx:381
 TSQLFile.cxx:382
 TSQLFile.cxx:383
 TSQLFile.cxx:384
 TSQLFile.cxx:385
 TSQLFile.cxx:386
 TSQLFile.cxx:387
 TSQLFile.cxx:388
 TSQLFile.cxx:389
 TSQLFile.cxx:390
 TSQLFile.cxx:391
 TSQLFile.cxx:392
 TSQLFile.cxx:393
 TSQLFile.cxx:394
 TSQLFile.cxx:395
 TSQLFile.cxx:396
 TSQLFile.cxx:397
 TSQLFile.cxx:398
 TSQLFile.cxx:399
 TSQLFile.cxx:400
 TSQLFile.cxx:401
 TSQLFile.cxx:402
 TSQLFile.cxx:403
 TSQLFile.cxx:404
 TSQLFile.cxx:405
 TSQLFile.cxx:406
 TSQLFile.cxx:407
 TSQLFile.cxx:408
 TSQLFile.cxx:409
 TSQLFile.cxx:410
 TSQLFile.cxx:411
 TSQLFile.cxx:412
 TSQLFile.cxx:413
 TSQLFile.cxx:414
 TSQLFile.cxx:415
 TSQLFile.cxx:416
 TSQLFile.cxx:417
 TSQLFile.cxx:418
 TSQLFile.cxx:419
 TSQLFile.cxx:420
 TSQLFile.cxx:421
 TSQLFile.cxx:422
 TSQLFile.cxx:423
 TSQLFile.cxx:424
 TSQLFile.cxx:425
 TSQLFile.cxx:426
 TSQLFile.cxx:427
 TSQLFile.cxx:428
 TSQLFile.cxx:429
 TSQLFile.cxx:430
 TSQLFile.cxx:431
 TSQLFile.cxx:432
 TSQLFile.cxx:433
 TSQLFile.cxx:434
 TSQLFile.cxx:435
 TSQLFile.cxx:436
 TSQLFile.cxx:437
 TSQLFile.cxx:438
 TSQLFile.cxx:439
 TSQLFile.cxx:440
 TSQLFile.cxx:441
 TSQLFile.cxx:442
 TSQLFile.cxx:443
 TSQLFile.cxx:444
 TSQLFile.cxx:445
 TSQLFile.cxx:446
 TSQLFile.cxx:447
 TSQLFile.cxx:448
 TSQLFile.cxx:449
 TSQLFile.cxx:450
 TSQLFile.cxx:451
 TSQLFile.cxx:452
 TSQLFile.cxx:453
 TSQLFile.cxx:454
 TSQLFile.cxx:455
 TSQLFile.cxx:456
 TSQLFile.cxx:457
 TSQLFile.cxx:458
 TSQLFile.cxx:459
 TSQLFile.cxx:460
 TSQLFile.cxx:461
 TSQLFile.cxx:462
 TSQLFile.cxx:463
 TSQLFile.cxx:464
 TSQLFile.cxx:465
 TSQLFile.cxx:466
 TSQLFile.cxx:467
 TSQLFile.cxx:468
 TSQLFile.cxx:469
 TSQLFile.cxx:470
 TSQLFile.cxx:471
 TSQLFile.cxx:472
 TSQLFile.cxx:473
 TSQLFile.cxx:474
 TSQLFile.cxx:475
 TSQLFile.cxx:476
 TSQLFile.cxx:477
 TSQLFile.cxx:478
 TSQLFile.cxx:479
 TSQLFile.cxx:480
 TSQLFile.cxx:481
 TSQLFile.cxx:482
 TSQLFile.cxx:483
 TSQLFile.cxx:484
 TSQLFile.cxx:485
 TSQLFile.cxx:486
 TSQLFile.cxx:487
 TSQLFile.cxx:488
 TSQLFile.cxx:489
 TSQLFile.cxx:490
 TSQLFile.cxx:491
 TSQLFile.cxx:492
 TSQLFile.cxx:493
 TSQLFile.cxx:494
 TSQLFile.cxx:495
 TSQLFile.cxx:496
 TSQLFile.cxx:497
 TSQLFile.cxx:498
 TSQLFile.cxx:499
 TSQLFile.cxx:500
 TSQLFile.cxx:501
 TSQLFile.cxx:502
 TSQLFile.cxx:503
 TSQLFile.cxx:504
 TSQLFile.cxx:505
 TSQLFile.cxx:506
 TSQLFile.cxx:507
 TSQLFile.cxx:508
 TSQLFile.cxx:509
 TSQLFile.cxx:510
 TSQLFile.cxx:511
 TSQLFile.cxx:512
 TSQLFile.cxx:513
 TSQLFile.cxx:514
 TSQLFile.cxx:515
 TSQLFile.cxx:516
 TSQLFile.cxx:517
 TSQLFile.cxx:518
 TSQLFile.cxx:519
 TSQLFile.cxx:520
 TSQLFile.cxx:521
 TSQLFile.cxx:522
 TSQLFile.cxx:523
 TSQLFile.cxx:524
 TSQLFile.cxx:525
 TSQLFile.cxx:526
 TSQLFile.cxx:527
 TSQLFile.cxx:528
 TSQLFile.cxx:529
 TSQLFile.cxx:530
 TSQLFile.cxx:531
 TSQLFile.cxx:532
 TSQLFile.cxx:533
 TSQLFile.cxx:534
 TSQLFile.cxx:535
 TSQLFile.cxx:536
 TSQLFile.cxx:537
 TSQLFile.cxx:538
 TSQLFile.cxx:539
 TSQLFile.cxx:540
 TSQLFile.cxx:541
 TSQLFile.cxx:542
 TSQLFile.cxx:543
 TSQLFile.cxx:544
 TSQLFile.cxx:545
 TSQLFile.cxx:546
 TSQLFile.cxx:547
 TSQLFile.cxx:548
 TSQLFile.cxx:549
 TSQLFile.cxx:550
 TSQLFile.cxx:551
 TSQLFile.cxx:552
 TSQLFile.cxx:553
 TSQLFile.cxx:554
 TSQLFile.cxx:555
 TSQLFile.cxx:556
 TSQLFile.cxx:557
 TSQLFile.cxx:558
 TSQLFile.cxx:559
 TSQLFile.cxx:560
 TSQLFile.cxx:561
 TSQLFile.cxx:562
 TSQLFile.cxx:563
 TSQLFile.cxx:564
 TSQLFile.cxx:565
 TSQLFile.cxx:566
 TSQLFile.cxx:567
 TSQLFile.cxx:568
 TSQLFile.cxx:569
 TSQLFile.cxx:570
 TSQLFile.cxx:571
 TSQLFile.cxx:572
 TSQLFile.cxx:573
 TSQLFile.cxx:574
 TSQLFile.cxx:575
 TSQLFile.cxx:576
 TSQLFile.cxx:577
 TSQLFile.cxx:578
 TSQLFile.cxx:579
 TSQLFile.cxx:580
 TSQLFile.cxx:581
 TSQLFile.cxx:582
 TSQLFile.cxx:583
 TSQLFile.cxx:584
 TSQLFile.cxx:585
 TSQLFile.cxx:586
 TSQLFile.cxx:587
 TSQLFile.cxx:588
 TSQLFile.cxx:589
 TSQLFile.cxx:590
 TSQLFile.cxx:591
 TSQLFile.cxx:592
 TSQLFile.cxx:593
 TSQLFile.cxx:594
 TSQLFile.cxx:595
 TSQLFile.cxx:596
 TSQLFile.cxx:597
 TSQLFile.cxx:598
 TSQLFile.cxx:599
 TSQLFile.cxx:600
 TSQLFile.cxx:601
 TSQLFile.cxx:602
 TSQLFile.cxx:603
 TSQLFile.cxx:604
 TSQLFile.cxx:605
 TSQLFile.cxx:606
 TSQLFile.cxx:607
 TSQLFile.cxx:608
 TSQLFile.cxx:609
 TSQLFile.cxx:610
 TSQLFile.cxx:611
 TSQLFile.cxx:612
 TSQLFile.cxx:613
 TSQLFile.cxx:614
 TSQLFile.cxx:615
 TSQLFile.cxx:616
 TSQLFile.cxx:617
 TSQLFile.cxx:618
 TSQLFile.cxx:619
 TSQLFile.cxx:620
 TSQLFile.cxx:621
 TSQLFile.cxx:622
 TSQLFile.cxx:623
 TSQLFile.cxx:624
 TSQLFile.cxx:625
 TSQLFile.cxx:626
 TSQLFile.cxx:627
 TSQLFile.cxx:628
 TSQLFile.cxx:629
 TSQLFile.cxx:630
 TSQLFile.cxx:631
 TSQLFile.cxx:632
 TSQLFile.cxx:633
 TSQLFile.cxx:634
 TSQLFile.cxx:635
 TSQLFile.cxx:636
 TSQLFile.cxx:637
 TSQLFile.cxx:638
 TSQLFile.cxx:639
 TSQLFile.cxx:640
 TSQLFile.cxx:641
 TSQLFile.cxx:642
 TSQLFile.cxx:643
 TSQLFile.cxx:644
 TSQLFile.cxx:645
 TSQLFile.cxx:646
 TSQLFile.cxx:647
 TSQLFile.cxx:648
 TSQLFile.cxx:649
 TSQLFile.cxx:650
 TSQLFile.cxx:651
 TSQLFile.cxx:652
 TSQLFile.cxx:653
 TSQLFile.cxx:654
 TSQLFile.cxx:655
 TSQLFile.cxx:656
 TSQLFile.cxx:657
 TSQLFile.cxx:658
 TSQLFile.cxx:659
 TSQLFile.cxx:660
 TSQLFile.cxx:661
 TSQLFile.cxx:662
 TSQLFile.cxx:663
 TSQLFile.cxx:664
 TSQLFile.cxx:665
 TSQLFile.cxx:666
 TSQLFile.cxx:667
 TSQLFile.cxx:668
 TSQLFile.cxx:669
 TSQLFile.cxx:670
 TSQLFile.cxx:671
 TSQLFile.cxx:672
 TSQLFile.cxx:673
 TSQLFile.cxx:674
 TSQLFile.cxx:675
 TSQLFile.cxx:676
 TSQLFile.cxx:677
 TSQLFile.cxx:678
 TSQLFile.cxx:679
 TSQLFile.cxx:680
 TSQLFile.cxx:681
 TSQLFile.cxx:682
 TSQLFile.cxx:683
 TSQLFile.cxx:684
 TSQLFile.cxx:685
 TSQLFile.cxx:686
 TSQLFile.cxx:687
 TSQLFile.cxx:688
 TSQLFile.cxx:689
 TSQLFile.cxx:690
 TSQLFile.cxx:691
 TSQLFile.cxx:692
 TSQLFile.cxx:693
 TSQLFile.cxx:694
 TSQLFile.cxx:695
 TSQLFile.cxx:696
 TSQLFile.cxx:697
 TSQLFile.cxx:698
 TSQLFile.cxx:699
 TSQLFile.cxx:700
 TSQLFile.cxx:701
 TSQLFile.cxx:702
 TSQLFile.cxx:703
 TSQLFile.cxx:704
 TSQLFile.cxx:705
 TSQLFile.cxx:706
 TSQLFile.cxx:707
 TSQLFile.cxx:708
 TSQLFile.cxx:709
 TSQLFile.cxx:710
 TSQLFile.cxx:711
 TSQLFile.cxx:712
 TSQLFile.cxx:713
 TSQLFile.cxx:714
 TSQLFile.cxx:715
 TSQLFile.cxx:716
 TSQLFile.cxx:717
 TSQLFile.cxx:718
 TSQLFile.cxx:719
 TSQLFile.cxx:720
 TSQLFile.cxx:721
 TSQLFile.cxx:722
 TSQLFile.cxx:723
 TSQLFile.cxx:724
 TSQLFile.cxx:725
 TSQLFile.cxx:726
 TSQLFile.cxx:727
 TSQLFile.cxx:728
 TSQLFile.cxx:729
 TSQLFile.cxx:730
 TSQLFile.cxx:731
 TSQLFile.cxx:732
 TSQLFile.cxx:733
 TSQLFile.cxx:734
 TSQLFile.cxx:735
 TSQLFile.cxx:736
 TSQLFile.cxx:737
 TSQLFile.cxx:738
 TSQLFile.cxx:739
 TSQLFile.cxx:740
 TSQLFile.cxx:741
 TSQLFile.cxx:742
 TSQLFile.cxx:743
 TSQLFile.cxx:744
 TSQLFile.cxx:745
 TSQLFile.cxx:746
 TSQLFile.cxx:747
 TSQLFile.cxx:748
 TSQLFile.cxx:749
 TSQLFile.cxx:750
 TSQLFile.cxx:751
 TSQLFile.cxx:752
 TSQLFile.cxx:753
 TSQLFile.cxx:754
 TSQLFile.cxx:755
 TSQLFile.cxx:756
 TSQLFile.cxx:757
 TSQLFile.cxx:758
 TSQLFile.cxx:759
 TSQLFile.cxx:760
 TSQLFile.cxx:761
 TSQLFile.cxx:762
 TSQLFile.cxx:763
 TSQLFile.cxx:764
 TSQLFile.cxx:765
 TSQLFile.cxx:766
 TSQLFile.cxx:767
 TSQLFile.cxx:768
 TSQLFile.cxx:769
 TSQLFile.cxx:770
 TSQLFile.cxx:771
 TSQLFile.cxx:772
 TSQLFile.cxx:773
 TSQLFile.cxx:774
 TSQLFile.cxx:775
 TSQLFile.cxx:776
 TSQLFile.cxx:777
 TSQLFile.cxx:778
 TSQLFile.cxx:779
 TSQLFile.cxx:780
 TSQLFile.cxx:781
 TSQLFile.cxx:782
 TSQLFile.cxx:783
 TSQLFile.cxx:784
 TSQLFile.cxx:785
 TSQLFile.cxx:786
 TSQLFile.cxx:787
 TSQLFile.cxx:788
 TSQLFile.cxx:789
 TSQLFile.cxx:790
 TSQLFile.cxx:791
 TSQLFile.cxx:792
 TSQLFile.cxx:793
 TSQLFile.cxx:794
 TSQLFile.cxx:795
 TSQLFile.cxx:796
 TSQLFile.cxx:797
 TSQLFile.cxx:798
 TSQLFile.cxx:799
 TSQLFile.cxx:800
 TSQLFile.cxx:801
 TSQLFile.cxx:802
 TSQLFile.cxx:803
 TSQLFile.cxx:804
 TSQLFile.cxx:805
 TSQLFile.cxx:806
 TSQLFile.cxx:807
 TSQLFile.cxx:808
 TSQLFile.cxx:809
 TSQLFile.cxx:810
 TSQLFile.cxx:811
 TSQLFile.cxx:812
 TSQLFile.cxx:813
 TSQLFile.cxx:814
 TSQLFile.cxx:815
 TSQLFile.cxx:816
 TSQLFile.cxx:817
 TSQLFile.cxx:818
 TSQLFile.cxx:819
 TSQLFile.cxx:820
 TSQLFile.cxx:821
 TSQLFile.cxx:822
 TSQLFile.cxx:823
 TSQLFile.cxx:824
 TSQLFile.cxx:825
 TSQLFile.cxx:826
 TSQLFile.cxx:827
 TSQLFile.cxx:828
 TSQLFile.cxx:829
 TSQLFile.cxx:830
 TSQLFile.cxx:831
 TSQLFile.cxx:832
 TSQLFile.cxx:833
 TSQLFile.cxx:834
 TSQLFile.cxx:835
 TSQLFile.cxx:836
 TSQLFile.cxx:837
 TSQLFile.cxx:838
 TSQLFile.cxx:839
 TSQLFile.cxx:840
 TSQLFile.cxx:841
 TSQLFile.cxx:842
 TSQLFile.cxx:843
 TSQLFile.cxx:844
 TSQLFile.cxx:845
 TSQLFile.cxx:846
 TSQLFile.cxx:847
 TSQLFile.cxx:848
 TSQLFile.cxx:849
 TSQLFile.cxx:850
 TSQLFile.cxx:851
 TSQLFile.cxx:852
 TSQLFile.cxx:853
 TSQLFile.cxx:854
 TSQLFile.cxx:855
 TSQLFile.cxx:856
 TSQLFile.cxx:857
 TSQLFile.cxx:858
 TSQLFile.cxx:859
 TSQLFile.cxx:860
 TSQLFile.cxx:861
 TSQLFile.cxx:862
 TSQLFile.cxx:863
 TSQLFile.cxx:864
 TSQLFile.cxx:865
 TSQLFile.cxx:866
 TSQLFile.cxx:867
 TSQLFile.cxx:868
 TSQLFile.cxx:869
 TSQLFile.cxx:870
 TSQLFile.cxx:871
 TSQLFile.cxx:872
 TSQLFile.cxx:873
 TSQLFile.cxx:874
 TSQLFile.cxx:875
 TSQLFile.cxx:876
 TSQLFile.cxx:877
 TSQLFile.cxx:878
 TSQLFile.cxx:879
 TSQLFile.cxx:880
 TSQLFile.cxx:881
 TSQLFile.cxx:882
 TSQLFile.cxx:883
 TSQLFile.cxx:884
 TSQLFile.cxx:885
 TSQLFile.cxx:886
 TSQLFile.cxx:887
 TSQLFile.cxx:888
 TSQLFile.cxx:889
 TSQLFile.cxx:890
 TSQLFile.cxx:891
 TSQLFile.cxx:892
 TSQLFile.cxx:893
 TSQLFile.cxx:894
 TSQLFile.cxx:895
 TSQLFile.cxx:896
 TSQLFile.cxx:897
 TSQLFile.cxx:898
 TSQLFile.cxx:899
 TSQLFile.cxx:900
 TSQLFile.cxx:901
 TSQLFile.cxx:902
 TSQLFile.cxx:903
 TSQLFile.cxx:904
 TSQLFile.cxx:905
 TSQLFile.cxx:906
 TSQLFile.cxx:907
 TSQLFile.cxx:908
 TSQLFile.cxx:909
 TSQLFile.cxx:910
 TSQLFile.cxx:911
 TSQLFile.cxx:912
 TSQLFile.cxx:913
 TSQLFile.cxx:914
 TSQLFile.cxx:915
 TSQLFile.cxx:916
 TSQLFile.cxx:917
 TSQLFile.cxx:918
 TSQLFile.cxx:919
 TSQLFile.cxx:920
 TSQLFile.cxx:921
 TSQLFile.cxx:922
 TSQLFile.cxx:923
 TSQLFile.cxx:924
 TSQLFile.cxx:925
 TSQLFile.cxx:926
 TSQLFile.cxx:927
 TSQLFile.cxx:928
 TSQLFile.cxx:929
 TSQLFile.cxx:930
 TSQLFile.cxx:931
 TSQLFile.cxx:932
 TSQLFile.cxx:933
 TSQLFile.cxx:934
 TSQLFile.cxx:935
 TSQLFile.cxx:936
 TSQLFile.cxx:937
 TSQLFile.cxx:938
 TSQLFile.cxx:939
 TSQLFile.cxx:940
 TSQLFile.cxx:941
 TSQLFile.cxx:942
 TSQLFile.cxx:943
 TSQLFile.cxx:944
 TSQLFile.cxx:945
 TSQLFile.cxx:946
 TSQLFile.cxx:947
 TSQLFile.cxx:948
 TSQLFile.cxx:949
 TSQLFile.cxx:950
 TSQLFile.cxx:951
 TSQLFile.cxx:952
 TSQLFile.cxx:953
 TSQLFile.cxx:954
 TSQLFile.cxx:955
 TSQLFile.cxx:956
 TSQLFile.cxx:957
 TSQLFile.cxx:958
 TSQLFile.cxx:959
 TSQLFile.cxx:960
 TSQLFile.cxx:961
 TSQLFile.cxx:962
 TSQLFile.cxx:963
 TSQLFile.cxx:964
 TSQLFile.cxx:965
 TSQLFile.cxx:966
 TSQLFile.cxx:967
 TSQLFile.cxx:968
 TSQLFile.cxx:969
 TSQLFile.cxx:970
 TSQLFile.cxx:971
 TSQLFile.cxx:972
 TSQLFile.cxx:973
 TSQLFile.cxx:974
 TSQLFile.cxx:975
 TSQLFile.cxx:976
 TSQLFile.cxx:977
 TSQLFile.cxx:978
 TSQLFile.cxx:979
 TSQLFile.cxx:980
 TSQLFile.cxx:981
 TSQLFile.cxx:982
 TSQLFile.cxx:983
 TSQLFile.cxx:984
 TSQLFile.cxx:985
 TSQLFile.cxx:986
 TSQLFile.cxx:987
 TSQLFile.cxx:988
 TSQLFile.cxx:989
 TSQLFile.cxx:990
 TSQLFile.cxx:991
 TSQLFile.cxx:992
 TSQLFile.cxx:993
 TSQLFile.cxx:994
 TSQLFile.cxx:995
 TSQLFile.cxx:996
 TSQLFile.cxx:997
 TSQLFile.cxx:998
 TSQLFile.cxx:999
 TSQLFile.cxx:1000
 TSQLFile.cxx:1001
 TSQLFile.cxx:1002
 TSQLFile.cxx:1003
 TSQLFile.cxx:1004
 TSQLFile.cxx:1005
 TSQLFile.cxx:1006
 TSQLFile.cxx:1007
 TSQLFile.cxx:1008
 TSQLFile.cxx:1009
 TSQLFile.cxx:1010
 TSQLFile.cxx:1011
 TSQLFile.cxx:1012
 TSQLFile.cxx:1013
 TSQLFile.cxx:1014
 TSQLFile.cxx:1015
 TSQLFile.cxx:1016
 TSQLFile.cxx:1017
 TSQLFile.cxx:1018
 TSQLFile.cxx:1019
 TSQLFile.cxx:1020
 TSQLFile.cxx:1021
 TSQLFile.cxx:1022
 TSQLFile.cxx:1023
 TSQLFile.cxx:1024
 TSQLFile.cxx:1025
 TSQLFile.cxx:1026
 TSQLFile.cxx:1027
 TSQLFile.cxx:1028
 TSQLFile.cxx:1029
 TSQLFile.cxx:1030
 TSQLFile.cxx:1031
 TSQLFile.cxx:1032
 TSQLFile.cxx:1033
 TSQLFile.cxx:1034
 TSQLFile.cxx:1035
 TSQLFile.cxx:1036
 TSQLFile.cxx:1037
 TSQLFile.cxx:1038
 TSQLFile.cxx:1039
 TSQLFile.cxx:1040
 TSQLFile.cxx:1041
 TSQLFile.cxx:1042
 TSQLFile.cxx:1043
 TSQLFile.cxx:1044
 TSQLFile.cxx:1045
 TSQLFile.cxx:1046
 TSQLFile.cxx:1047
 TSQLFile.cxx:1048
 TSQLFile.cxx:1049
 TSQLFile.cxx:1050
 TSQLFile.cxx:1051
 TSQLFile.cxx:1052
 TSQLFile.cxx:1053
 TSQLFile.cxx:1054
 TSQLFile.cxx:1055
 TSQLFile.cxx:1056
 TSQLFile.cxx:1057
 TSQLFile.cxx:1058
 TSQLFile.cxx:1059
 TSQLFile.cxx:1060
 TSQLFile.cxx:1061
 TSQLFile.cxx:1062
 TSQLFile.cxx:1063
 TSQLFile.cxx:1064
 TSQLFile.cxx:1065
 TSQLFile.cxx:1066
 TSQLFile.cxx:1067
 TSQLFile.cxx:1068
 TSQLFile.cxx:1069
 TSQLFile.cxx:1070
 TSQLFile.cxx:1071
 TSQLFile.cxx:1072
 TSQLFile.cxx:1073
 TSQLFile.cxx:1074
 TSQLFile.cxx:1075
 TSQLFile.cxx:1076
 TSQLFile.cxx:1077
 TSQLFile.cxx:1078
 TSQLFile.cxx:1079
 TSQLFile.cxx:1080
 TSQLFile.cxx:1081
 TSQLFile.cxx:1082
 TSQLFile.cxx:1083
 TSQLFile.cxx:1084
 TSQLFile.cxx:1085
 TSQLFile.cxx:1086
 TSQLFile.cxx:1087
 TSQLFile.cxx:1088
 TSQLFile.cxx:1089
 TSQLFile.cxx:1090
 TSQLFile.cxx:1091
 TSQLFile.cxx:1092
 TSQLFile.cxx:1093
 TSQLFile.cxx:1094
 TSQLFile.cxx:1095
 TSQLFile.cxx:1096
 TSQLFile.cxx:1097
 TSQLFile.cxx:1098
 TSQLFile.cxx:1099
 TSQLFile.cxx:1100
 TSQLFile.cxx:1101
 TSQLFile.cxx:1102
 TSQLFile.cxx:1103
 TSQLFile.cxx:1104
 TSQLFile.cxx:1105
 TSQLFile.cxx:1106
 TSQLFile.cxx:1107
 TSQLFile.cxx:1108
 TSQLFile.cxx:1109
 TSQLFile.cxx:1110
 TSQLFile.cxx:1111
 TSQLFile.cxx:1112
 TSQLFile.cxx:1113
 TSQLFile.cxx:1114
 TSQLFile.cxx:1115
 TSQLFile.cxx:1116
 TSQLFile.cxx:1117
 TSQLFile.cxx:1118
 TSQLFile.cxx:1119
 TSQLFile.cxx:1120
 TSQLFile.cxx:1121
 TSQLFile.cxx:1122
 TSQLFile.cxx:1123
 TSQLFile.cxx:1124
 TSQLFile.cxx:1125
 TSQLFile.cxx:1126
 TSQLFile.cxx:1127
 TSQLFile.cxx:1128
 TSQLFile.cxx:1129
 TSQLFile.cxx:1130
 TSQLFile.cxx:1131
 TSQLFile.cxx:1132
 TSQLFile.cxx:1133
 TSQLFile.cxx:1134
 TSQLFile.cxx:1135
 TSQLFile.cxx:1136
 TSQLFile.cxx:1137
 TSQLFile.cxx:1138
 TSQLFile.cxx:1139
 TSQLFile.cxx:1140
 TSQLFile.cxx:1141
 TSQLFile.cxx:1142
 TSQLFile.cxx:1143
 TSQLFile.cxx:1144
 TSQLFile.cxx:1145
 TSQLFile.cxx:1146
 TSQLFile.cxx:1147
 TSQLFile.cxx:1148
 TSQLFile.cxx:1149
 TSQLFile.cxx:1150
 TSQLFile.cxx:1151
 TSQLFile.cxx:1152
 TSQLFile.cxx:1153
 TSQLFile.cxx:1154
 TSQLFile.cxx:1155
 TSQLFile.cxx:1156
 TSQLFile.cxx:1157
 TSQLFile.cxx:1158
 TSQLFile.cxx:1159
 TSQLFile.cxx:1160
 TSQLFile.cxx:1161
 TSQLFile.cxx:1162
 TSQLFile.cxx:1163
 TSQLFile.cxx:1164
 TSQLFile.cxx:1165
 TSQLFile.cxx:1166
 TSQLFile.cxx:1167
 TSQLFile.cxx:1168
 TSQLFile.cxx:1169
 TSQLFile.cxx:1170
 TSQLFile.cxx:1171
 TSQLFile.cxx:1172
 TSQLFile.cxx:1173
 TSQLFile.cxx:1174
 TSQLFile.cxx:1175
 TSQLFile.cxx:1176
 TSQLFile.cxx:1177
 TSQLFile.cxx:1178
 TSQLFile.cxx:1179
 TSQLFile.cxx:1180
 TSQLFile.cxx:1181
 TSQLFile.cxx:1182
 TSQLFile.cxx:1183
 TSQLFile.cxx:1184
 TSQLFile.cxx:1185
 TSQLFile.cxx:1186
 TSQLFile.cxx:1187
 TSQLFile.cxx:1188
 TSQLFile.cxx:1189
 TSQLFile.cxx:1190
 TSQLFile.cxx:1191
 TSQLFile.cxx:1192
 TSQLFile.cxx:1193
 TSQLFile.cxx:1194
 TSQLFile.cxx:1195
 TSQLFile.cxx:1196
 TSQLFile.cxx:1197
 TSQLFile.cxx:1198
 TSQLFile.cxx:1199
 TSQLFile.cxx:1200
 TSQLFile.cxx:1201
 TSQLFile.cxx:1202
 TSQLFile.cxx:1203
 TSQLFile.cxx:1204
 TSQLFile.cxx:1205
 TSQLFile.cxx:1206
 TSQLFile.cxx:1207
 TSQLFile.cxx:1208
 TSQLFile.cxx:1209
 TSQLFile.cxx:1210
 TSQLFile.cxx:1211
 TSQLFile.cxx:1212
 TSQLFile.cxx:1213
 TSQLFile.cxx:1214
 TSQLFile.cxx:1215
 TSQLFile.cxx:1216
 TSQLFile.cxx:1217
 TSQLFile.cxx:1218
 TSQLFile.cxx:1219
 TSQLFile.cxx:1220
 TSQLFile.cxx:1221
 TSQLFile.cxx:1222
 TSQLFile.cxx:1223
 TSQLFile.cxx:1224
 TSQLFile.cxx:1225
 TSQLFile.cxx:1226
 TSQLFile.cxx:1227
 TSQLFile.cxx:1228
 TSQLFile.cxx:1229
 TSQLFile.cxx:1230
 TSQLFile.cxx:1231
 TSQLFile.cxx:1232
 TSQLFile.cxx:1233
 TSQLFile.cxx:1234
 TSQLFile.cxx:1235
 TSQLFile.cxx:1236
 TSQLFile.cxx:1237
 TSQLFile.cxx:1238
 TSQLFile.cxx:1239
 TSQLFile.cxx:1240
 TSQLFile.cxx:1241
 TSQLFile.cxx:1242
 TSQLFile.cxx:1243
 TSQLFile.cxx:1244
 TSQLFile.cxx:1245
 TSQLFile.cxx:1246
 TSQLFile.cxx:1247
 TSQLFile.cxx:1248
 TSQLFile.cxx:1249
 TSQLFile.cxx:1250
 TSQLFile.cxx:1251
 TSQLFile.cxx:1252
 TSQLFile.cxx:1253
 TSQLFile.cxx:1254
 TSQLFile.cxx:1255
 TSQLFile.cxx:1256
 TSQLFile.cxx:1257
 TSQLFile.cxx:1258
 TSQLFile.cxx:1259
 TSQLFile.cxx:1260
 TSQLFile.cxx:1261
 TSQLFile.cxx:1262
 TSQLFile.cxx:1263
 TSQLFile.cxx:1264
 TSQLFile.cxx:1265
 TSQLFile.cxx:1266
 TSQLFile.cxx:1267
 TSQLFile.cxx:1268
 TSQLFile.cxx:1269
 TSQLFile.cxx:1270
 TSQLFile.cxx:1271
 TSQLFile.cxx:1272
 TSQLFile.cxx:1273
 TSQLFile.cxx:1274
 TSQLFile.cxx:1275
 TSQLFile.cxx:1276
 TSQLFile.cxx:1277
 TSQLFile.cxx:1278
 TSQLFile.cxx:1279
 TSQLFile.cxx:1280
 TSQLFile.cxx:1281
 TSQLFile.cxx:1282
 TSQLFile.cxx:1283
 TSQLFile.cxx:1284
 TSQLFile.cxx:1285
 TSQLFile.cxx:1286
 TSQLFile.cxx:1287
 TSQLFile.cxx:1288
 TSQLFile.cxx:1289
 TSQLFile.cxx:1290
 TSQLFile.cxx:1291
 TSQLFile.cxx:1292
 TSQLFile.cxx:1293
 TSQLFile.cxx:1294
 TSQLFile.cxx:1295
 TSQLFile.cxx:1296
 TSQLFile.cxx:1297
 TSQLFile.cxx:1298
 TSQLFile.cxx:1299
 TSQLFile.cxx:1300
 TSQLFile.cxx:1301
 TSQLFile.cxx:1302
 TSQLFile.cxx:1303
 TSQLFile.cxx:1304
 TSQLFile.cxx:1305
 TSQLFile.cxx:1306
 TSQLFile.cxx:1307
 TSQLFile.cxx:1308
 TSQLFile.cxx:1309
 TSQLFile.cxx:1310
 TSQLFile.cxx:1311
 TSQLFile.cxx:1312
 TSQLFile.cxx:1313
 TSQLFile.cxx:1314
 TSQLFile.cxx:1315
 TSQLFile.cxx:1316
 TSQLFile.cxx:1317
 TSQLFile.cxx:1318
 TSQLFile.cxx:1319
 TSQLFile.cxx:1320
 TSQLFile.cxx:1321
 TSQLFile.cxx:1322
 TSQLFile.cxx:1323
 TSQLFile.cxx:1324
 TSQLFile.cxx:1325
 TSQLFile.cxx:1326
 TSQLFile.cxx:1327
 TSQLFile.cxx:1328
 TSQLFile.cxx:1329
 TSQLFile.cxx:1330
 TSQLFile.cxx:1331
 TSQLFile.cxx:1332
 TSQLFile.cxx:1333
 TSQLFile.cxx:1334
 TSQLFile.cxx:1335
 TSQLFile.cxx:1336
 TSQLFile.cxx:1337
 TSQLFile.cxx:1338
 TSQLFile.cxx:1339
 TSQLFile.cxx:1340
 TSQLFile.cxx:1341
 TSQLFile.cxx:1342
 TSQLFile.cxx:1343
 TSQLFile.cxx:1344
 TSQLFile.cxx:1345
 TSQLFile.cxx:1346
 TSQLFile.cxx:1347
 TSQLFile.cxx:1348
 TSQLFile.cxx:1349
 TSQLFile.cxx:1350
 TSQLFile.cxx:1351
 TSQLFile.cxx:1352
 TSQLFile.cxx:1353
 TSQLFile.cxx:1354
 TSQLFile.cxx:1355
 TSQLFile.cxx:1356
 TSQLFile.cxx:1357
 TSQLFile.cxx:1358
 TSQLFile.cxx:1359
 TSQLFile.cxx:1360
 TSQLFile.cxx:1361
 TSQLFile.cxx:1362
 TSQLFile.cxx:1363
 TSQLFile.cxx:1364
 TSQLFile.cxx:1365
 TSQLFile.cxx:1366
 TSQLFile.cxx:1367
 TSQLFile.cxx:1368
 TSQLFile.cxx:1369
 TSQLFile.cxx:1370
 TSQLFile.cxx:1371
 TSQLFile.cxx:1372
 TSQLFile.cxx:1373
 TSQLFile.cxx:1374
 TSQLFile.cxx:1375
 TSQLFile.cxx:1376
 TSQLFile.cxx:1377
 TSQLFile.cxx:1378
 TSQLFile.cxx:1379
 TSQLFile.cxx:1380
 TSQLFile.cxx:1381
 TSQLFile.cxx:1382
 TSQLFile.cxx:1383
 TSQLFile.cxx:1384
 TSQLFile.cxx:1385
 TSQLFile.cxx:1386
 TSQLFile.cxx:1387
 TSQLFile.cxx:1388
 TSQLFile.cxx:1389
 TSQLFile.cxx:1390
 TSQLFile.cxx:1391
 TSQLFile.cxx:1392
 TSQLFile.cxx:1393
 TSQLFile.cxx:1394
 TSQLFile.cxx:1395
 TSQLFile.cxx:1396
 TSQLFile.cxx:1397
 TSQLFile.cxx:1398
 TSQLFile.cxx:1399
 TSQLFile.cxx:1400
 TSQLFile.cxx:1401
 TSQLFile.cxx:1402
 TSQLFile.cxx:1403
 TSQLFile.cxx:1404
 TSQLFile.cxx:1405
 TSQLFile.cxx:1406
 TSQLFile.cxx:1407
 TSQLFile.cxx:1408
 TSQLFile.cxx:1409
 TSQLFile.cxx:1410
 TSQLFile.cxx:1411
 TSQLFile.cxx:1412
 TSQLFile.cxx:1413
 TSQLFile.cxx:1414
 TSQLFile.cxx:1415
 TSQLFile.cxx:1416
 TSQLFile.cxx:1417
 TSQLFile.cxx:1418
 TSQLFile.cxx:1419
 TSQLFile.cxx:1420
 TSQLFile.cxx:1421
 TSQLFile.cxx:1422
 TSQLFile.cxx:1423
 TSQLFile.cxx:1424
 TSQLFile.cxx:1425
 TSQLFile.cxx:1426
 TSQLFile.cxx:1427
 TSQLFile.cxx:1428
 TSQLFile.cxx:1429
 TSQLFile.cxx:1430
 TSQLFile.cxx:1431
 TSQLFile.cxx:1432
 TSQLFile.cxx:1433
 TSQLFile.cxx:1434
 TSQLFile.cxx:1435
 TSQLFile.cxx:1436
 TSQLFile.cxx:1437
 TSQLFile.cxx:1438
 TSQLFile.cxx:1439
 TSQLFile.cxx:1440
 TSQLFile.cxx:1441
 TSQLFile.cxx:1442
 TSQLFile.cxx:1443
 TSQLFile.cxx:1444
 TSQLFile.cxx:1445
 TSQLFile.cxx:1446
 TSQLFile.cxx:1447
 TSQLFile.cxx:1448
 TSQLFile.cxx:1449
 TSQLFile.cxx:1450
 TSQLFile.cxx:1451
 TSQLFile.cxx:1452
 TSQLFile.cxx:1453
 TSQLFile.cxx:1454
 TSQLFile.cxx:1455
 TSQLFile.cxx:1456
 TSQLFile.cxx:1457
 TSQLFile.cxx:1458
 TSQLFile.cxx:1459
 TSQLFile.cxx:1460
 TSQLFile.cxx:1461
 TSQLFile.cxx:1462
 TSQLFile.cxx:1463
 TSQLFile.cxx:1464
 TSQLFile.cxx:1465
 TSQLFile.cxx:1466
 TSQLFile.cxx:1467
 TSQLFile.cxx:1468
 TSQLFile.cxx:1469
 TSQLFile.cxx:1470
 TSQLFile.cxx:1471
 TSQLFile.cxx:1472
 TSQLFile.cxx:1473
 TSQLFile.cxx:1474
 TSQLFile.cxx:1475
 TSQLFile.cxx:1476
 TSQLFile.cxx:1477
 TSQLFile.cxx:1478
 TSQLFile.cxx:1479
 TSQLFile.cxx:1480
 TSQLFile.cxx:1481
 TSQLFile.cxx:1482
 TSQLFile.cxx:1483
 TSQLFile.cxx:1484
 TSQLFile.cxx:1485
 TSQLFile.cxx:1486
 TSQLFile.cxx:1487
 TSQLFile.cxx:1488
 TSQLFile.cxx:1489
 TSQLFile.cxx:1490
 TSQLFile.cxx:1491
 TSQLFile.cxx:1492
 TSQLFile.cxx:1493
 TSQLFile.cxx:1494
 TSQLFile.cxx:1495
 TSQLFile.cxx:1496
 TSQLFile.cxx:1497
 TSQLFile.cxx:1498
 TSQLFile.cxx:1499
 TSQLFile.cxx:1500
 TSQLFile.cxx:1501
 TSQLFile.cxx:1502
 TSQLFile.cxx:1503
 TSQLFile.cxx:1504
 TSQLFile.cxx:1505
 TSQLFile.cxx:1506
 TSQLFile.cxx:1507
 TSQLFile.cxx:1508
 TSQLFile.cxx:1509
 TSQLFile.cxx:1510
 TSQLFile.cxx:1511
 TSQLFile.cxx:1512
 TSQLFile.cxx:1513
 TSQLFile.cxx:1514
 TSQLFile.cxx:1515
 TSQLFile.cxx:1516
 TSQLFile.cxx:1517
 TSQLFile.cxx:1518
 TSQLFile.cxx:1519
 TSQLFile.cxx:1520
 TSQLFile.cxx:1521
 TSQLFile.cxx:1522
 TSQLFile.cxx:1523
 TSQLFile.cxx:1524
 TSQLFile.cxx:1525
 TSQLFile.cxx:1526
 TSQLFile.cxx:1527
 TSQLFile.cxx:1528
 TSQLFile.cxx:1529
 TSQLFile.cxx:1530
 TSQLFile.cxx:1531
 TSQLFile.cxx:1532
 TSQLFile.cxx:1533
 TSQLFile.cxx:1534
 TSQLFile.cxx:1535
 TSQLFile.cxx:1536
 TSQLFile.cxx:1537
 TSQLFile.cxx:1538
 TSQLFile.cxx:1539
 TSQLFile.cxx:1540
 TSQLFile.cxx:1541
 TSQLFile.cxx:1542
 TSQLFile.cxx:1543
 TSQLFile.cxx:1544
 TSQLFile.cxx:1545
 TSQLFile.cxx:1546
 TSQLFile.cxx:1547
 TSQLFile.cxx:1548
 TSQLFile.cxx:1549
 TSQLFile.cxx:1550
 TSQLFile.cxx:1551
 TSQLFile.cxx:1552
 TSQLFile.cxx:1553
 TSQLFile.cxx:1554
 TSQLFile.cxx:1555
 TSQLFile.cxx:1556
 TSQLFile.cxx:1557
 TSQLFile.cxx:1558
 TSQLFile.cxx:1559
 TSQLFile.cxx:1560
 TSQLFile.cxx:1561
 TSQLFile.cxx:1562
 TSQLFile.cxx:1563
 TSQLFile.cxx:1564
 TSQLFile.cxx:1565
 TSQLFile.cxx:1566
 TSQLFile.cxx:1567
 TSQLFile.cxx:1568
 TSQLFile.cxx:1569
 TSQLFile.cxx:1570
 TSQLFile.cxx:1571
 TSQLFile.cxx:1572
 TSQLFile.cxx:1573
 TSQLFile.cxx:1574
 TSQLFile.cxx:1575
 TSQLFile.cxx:1576
 TSQLFile.cxx:1577
 TSQLFile.cxx:1578
 TSQLFile.cxx:1579
 TSQLFile.cxx:1580
 TSQLFile.cxx:1581
 TSQLFile.cxx:1582
 TSQLFile.cxx:1583
 TSQLFile.cxx:1584
 TSQLFile.cxx:1585
 TSQLFile.cxx:1586
 TSQLFile.cxx:1587
 TSQLFile.cxx:1588
 TSQLFile.cxx:1589
 TSQLFile.cxx:1590
 TSQLFile.cxx:1591
 TSQLFile.cxx:1592
 TSQLFile.cxx:1593
 TSQLFile.cxx:1594
 TSQLFile.cxx:1595
 TSQLFile.cxx:1596
 TSQLFile.cxx:1597
 TSQLFile.cxx:1598
 TSQLFile.cxx:1599
 TSQLFile.cxx:1600
 TSQLFile.cxx:1601
 TSQLFile.cxx:1602
 TSQLFile.cxx:1603
 TSQLFile.cxx:1604
 TSQLFile.cxx:1605
 TSQLFile.cxx:1606
 TSQLFile.cxx:1607
 TSQLFile.cxx:1608
 TSQLFile.cxx:1609
 TSQLFile.cxx:1610
 TSQLFile.cxx:1611
 TSQLFile.cxx:1612
 TSQLFile.cxx:1613
 TSQLFile.cxx:1614
 TSQLFile.cxx:1615
 TSQLFile.cxx:1616
 TSQLFile.cxx:1617
 TSQLFile.cxx:1618
 TSQLFile.cxx:1619
 TSQLFile.cxx:1620
 TSQLFile.cxx:1621
 TSQLFile.cxx:1622
 TSQLFile.cxx:1623
 TSQLFile.cxx:1624
 TSQLFile.cxx:1625
 TSQLFile.cxx:1626
 TSQLFile.cxx:1627
 TSQLFile.cxx:1628
 TSQLFile.cxx:1629
 TSQLFile.cxx:1630
 TSQLFile.cxx:1631
 TSQLFile.cxx:1632
 TSQLFile.cxx:1633
 TSQLFile.cxx:1634
 TSQLFile.cxx:1635
 TSQLFile.cxx:1636
 TSQLFile.cxx:1637
 TSQLFile.cxx:1638
 TSQLFile.cxx:1639
 TSQLFile.cxx:1640
 TSQLFile.cxx:1641
 TSQLFile.cxx:1642
 TSQLFile.cxx:1643
 TSQLFile.cxx:1644
 TSQLFile.cxx:1645
 TSQLFile.cxx:1646
 TSQLFile.cxx:1647
 TSQLFile.cxx:1648
 TSQLFile.cxx:1649
 TSQLFile.cxx:1650
 TSQLFile.cxx:1651
 TSQLFile.cxx:1652
 TSQLFile.cxx:1653
 TSQLFile.cxx:1654
 TSQLFile.cxx:1655
 TSQLFile.cxx:1656
 TSQLFile.cxx:1657
 TSQLFile.cxx:1658
 TSQLFile.cxx:1659
 TSQLFile.cxx:1660
 TSQLFile.cxx:1661
 TSQLFile.cxx:1662
 TSQLFile.cxx:1663
 TSQLFile.cxx:1664
 TSQLFile.cxx:1665
 TSQLFile.cxx:1666
 TSQLFile.cxx:1667
 TSQLFile.cxx:1668
 TSQLFile.cxx:1669
 TSQLFile.cxx:1670
 TSQLFile.cxx:1671
 TSQLFile.cxx:1672
 TSQLFile.cxx:1673
 TSQLFile.cxx:1674
 TSQLFile.cxx:1675
 TSQLFile.cxx:1676
 TSQLFile.cxx:1677
 TSQLFile.cxx:1678
 TSQLFile.cxx:1679
 TSQLFile.cxx:1680
 TSQLFile.cxx:1681
 TSQLFile.cxx:1682
 TSQLFile.cxx:1683
 TSQLFile.cxx:1684
 TSQLFile.cxx:1685
 TSQLFile.cxx:1686
 TSQLFile.cxx:1687
 TSQLFile.cxx:1688
 TSQLFile.cxx:1689
 TSQLFile.cxx:1690
 TSQLFile.cxx:1691
 TSQLFile.cxx:1692
 TSQLFile.cxx:1693
 TSQLFile.cxx:1694
 TSQLFile.cxx:1695
 TSQLFile.cxx:1696
 TSQLFile.cxx:1697
 TSQLFile.cxx:1698
 TSQLFile.cxx:1699
 TSQLFile.cxx:1700
 TSQLFile.cxx:1701
 TSQLFile.cxx:1702
 TSQLFile.cxx:1703
 TSQLFile.cxx:1704
 TSQLFile.cxx:1705
 TSQLFile.cxx:1706
 TSQLFile.cxx:1707
 TSQLFile.cxx:1708
 TSQLFile.cxx:1709
 TSQLFile.cxx:1710
 TSQLFile.cxx:1711
 TSQLFile.cxx:1712
 TSQLFile.cxx:1713
 TSQLFile.cxx:1714
 TSQLFile.cxx:1715
 TSQLFile.cxx:1716
 TSQLFile.cxx:1717
 TSQLFile.cxx:1718
 TSQLFile.cxx:1719
 TSQLFile.cxx:1720
 TSQLFile.cxx:1721
 TSQLFile.cxx:1722
 TSQLFile.cxx:1723
 TSQLFile.cxx:1724
 TSQLFile.cxx:1725
 TSQLFile.cxx:1726
 TSQLFile.cxx:1727
 TSQLFile.cxx:1728
 TSQLFile.cxx:1729
 TSQLFile.cxx:1730
 TSQLFile.cxx:1731
 TSQLFile.cxx:1732
 TSQLFile.cxx:1733
 TSQLFile.cxx:1734
 TSQLFile.cxx:1735
 TSQLFile.cxx:1736
 TSQLFile.cxx:1737
 TSQLFile.cxx:1738
 TSQLFile.cxx:1739
 TSQLFile.cxx:1740
 TSQLFile.cxx:1741
 TSQLFile.cxx:1742
 TSQLFile.cxx:1743
 TSQLFile.cxx:1744
 TSQLFile.cxx:1745
 TSQLFile.cxx:1746
 TSQLFile.cxx:1747
 TSQLFile.cxx:1748
 TSQLFile.cxx:1749
 TSQLFile.cxx:1750
 TSQLFile.cxx:1751
 TSQLFile.cxx:1752
 TSQLFile.cxx:1753
 TSQLFile.cxx:1754
 TSQLFile.cxx:1755
 TSQLFile.cxx:1756
 TSQLFile.cxx:1757
 TSQLFile.cxx:1758
 TSQLFile.cxx:1759
 TSQLFile.cxx:1760
 TSQLFile.cxx:1761
 TSQLFile.cxx:1762
 TSQLFile.cxx:1763
 TSQLFile.cxx:1764
 TSQLFile.cxx:1765
 TSQLFile.cxx:1766
 TSQLFile.cxx:1767
 TSQLFile.cxx:1768
 TSQLFile.cxx:1769
 TSQLFile.cxx:1770
 TSQLFile.cxx:1771
 TSQLFile.cxx:1772
 TSQLFile.cxx:1773
 TSQLFile.cxx:1774
 TSQLFile.cxx:1775
 TSQLFile.cxx:1776
 TSQLFile.cxx:1777
 TSQLFile.cxx:1778
 TSQLFile.cxx:1779
 TSQLFile.cxx:1780
 TSQLFile.cxx:1781
 TSQLFile.cxx:1782
 TSQLFile.cxx:1783
 TSQLFile.cxx:1784
 TSQLFile.cxx:1785
 TSQLFile.cxx:1786
 TSQLFile.cxx:1787
 TSQLFile.cxx:1788
 TSQLFile.cxx:1789
 TSQLFile.cxx:1790
 TSQLFile.cxx:1791
 TSQLFile.cxx:1792
 TSQLFile.cxx:1793
 TSQLFile.cxx:1794
 TSQLFile.cxx:1795
 TSQLFile.cxx:1796
 TSQLFile.cxx:1797
 TSQLFile.cxx:1798
 TSQLFile.cxx:1799
 TSQLFile.cxx:1800
 TSQLFile.cxx:1801
 TSQLFile.cxx:1802
 TSQLFile.cxx:1803
 TSQLFile.cxx:1804
 TSQLFile.cxx:1805
 TSQLFile.cxx:1806
 TSQLFile.cxx:1807
 TSQLFile.cxx:1808
 TSQLFile.cxx:1809
 TSQLFile.cxx:1810
 TSQLFile.cxx:1811
 TSQLFile.cxx:1812
 TSQLFile.cxx:1813
 TSQLFile.cxx:1814
 TSQLFile.cxx:1815
 TSQLFile.cxx:1816
 TSQLFile.cxx:1817
 TSQLFile.cxx:1818
 TSQLFile.cxx:1819
 TSQLFile.cxx:1820
 TSQLFile.cxx:1821
 TSQLFile.cxx:1822
 TSQLFile.cxx:1823
 TSQLFile.cxx:1824
 TSQLFile.cxx:1825
 TSQLFile.cxx:1826
 TSQLFile.cxx:1827
 TSQLFile.cxx:1828
 TSQLFile.cxx:1829
 TSQLFile.cxx:1830
 TSQLFile.cxx:1831
 TSQLFile.cxx:1832
 TSQLFile.cxx:1833
 TSQLFile.cxx:1834
 TSQLFile.cxx:1835
 TSQLFile.cxx:1836
 TSQLFile.cxx:1837
 TSQLFile.cxx:1838
 TSQLFile.cxx:1839
 TSQLFile.cxx:1840
 TSQLFile.cxx:1841
 TSQLFile.cxx:1842
 TSQLFile.cxx:1843
 TSQLFile.cxx:1844
 TSQLFile.cxx:1845
 TSQLFile.cxx:1846
 TSQLFile.cxx:1847
 TSQLFile.cxx:1848
 TSQLFile.cxx:1849
 TSQLFile.cxx:1850
 TSQLFile.cxx:1851
 TSQLFile.cxx:1852
 TSQLFile.cxx:1853
 TSQLFile.cxx:1854
 TSQLFile.cxx:1855
 TSQLFile.cxx:1856
 TSQLFile.cxx:1857
 TSQLFile.cxx:1858
 TSQLFile.cxx:1859
 TSQLFile.cxx:1860
 TSQLFile.cxx:1861
 TSQLFile.cxx:1862
 TSQLFile.cxx:1863
 TSQLFile.cxx:1864
 TSQLFile.cxx:1865
 TSQLFile.cxx:1866
 TSQLFile.cxx:1867
 TSQLFile.cxx:1868
 TSQLFile.cxx:1869
 TSQLFile.cxx:1870
 TSQLFile.cxx:1871
 TSQLFile.cxx:1872
 TSQLFile.cxx:1873
 TSQLFile.cxx:1874
 TSQLFile.cxx:1875
 TSQLFile.cxx:1876
 TSQLFile.cxx:1877
 TSQLFile.cxx:1878
 TSQLFile.cxx:1879
 TSQLFile.cxx:1880
 TSQLFile.cxx:1881
 TSQLFile.cxx:1882
 TSQLFile.cxx:1883
 TSQLFile.cxx:1884
 TSQLFile.cxx:1885
 TSQLFile.cxx:1886
 TSQLFile.cxx:1887
 TSQLFile.cxx:1888
 TSQLFile.cxx:1889
 TSQLFile.cxx:1890
 TSQLFile.cxx:1891
 TSQLFile.cxx:1892
 TSQLFile.cxx:1893
 TSQLFile.cxx:1894
 TSQLFile.cxx:1895
 TSQLFile.cxx:1896
 TSQLFile.cxx:1897
 TSQLFile.cxx:1898
 TSQLFile.cxx:1899
 TSQLFile.cxx:1900
 TSQLFile.cxx:1901
 TSQLFile.cxx:1902
 TSQLFile.cxx:1903
 TSQLFile.cxx:1904
 TSQLFile.cxx:1905
 TSQLFile.cxx:1906
 TSQLFile.cxx:1907
 TSQLFile.cxx:1908
 TSQLFile.cxx:1909
 TSQLFile.cxx:1910
 TSQLFile.cxx:1911
 TSQLFile.cxx:1912
 TSQLFile.cxx:1913
 TSQLFile.cxx:1914
 TSQLFile.cxx:1915
 TSQLFile.cxx:1916
 TSQLFile.cxx:1917
 TSQLFile.cxx:1918
 TSQLFile.cxx:1919
 TSQLFile.cxx:1920
 TSQLFile.cxx:1921
 TSQLFile.cxx:1922
 TSQLFile.cxx:1923
 TSQLFile.cxx:1924
 TSQLFile.cxx:1925
 TSQLFile.cxx:1926
 TSQLFile.cxx:1927
 TSQLFile.cxx:1928
 TSQLFile.cxx:1929
 TSQLFile.cxx:1930
 TSQLFile.cxx:1931
 TSQLFile.cxx:1932
 TSQLFile.cxx:1933
 TSQLFile.cxx:1934
 TSQLFile.cxx:1935
 TSQLFile.cxx:1936
 TSQLFile.cxx:1937
 TSQLFile.cxx:1938
 TSQLFile.cxx:1939
 TSQLFile.cxx:1940
 TSQLFile.cxx:1941
 TSQLFile.cxx:1942
 TSQLFile.cxx:1943
 TSQLFile.cxx:1944
 TSQLFile.cxx:1945
 TSQLFile.cxx:1946
 TSQLFile.cxx:1947
 TSQLFile.cxx:1948
 TSQLFile.cxx:1949
 TSQLFile.cxx:1950
 TSQLFile.cxx:1951
 TSQLFile.cxx:1952
 TSQLFile.cxx:1953
 TSQLFile.cxx:1954
 TSQLFile.cxx:1955
 TSQLFile.cxx:1956
 TSQLFile.cxx:1957
 TSQLFile.cxx:1958
 TSQLFile.cxx:1959
 TSQLFile.cxx:1960
 TSQLFile.cxx:1961
 TSQLFile.cxx:1962
 TSQLFile.cxx:1963
 TSQLFile.cxx:1964
 TSQLFile.cxx:1965
 TSQLFile.cxx:1966
 TSQLFile.cxx:1967
 TSQLFile.cxx:1968
 TSQLFile.cxx:1969
 TSQLFile.cxx:1970
 TSQLFile.cxx:1971
 TSQLFile.cxx:1972
 TSQLFile.cxx:1973
 TSQLFile.cxx:1974
 TSQLFile.cxx:1975
 TSQLFile.cxx:1976
 TSQLFile.cxx:1977
 TSQLFile.cxx:1978
 TSQLFile.cxx:1979
 TSQLFile.cxx:1980
 TSQLFile.cxx:1981
 TSQLFile.cxx:1982
 TSQLFile.cxx:1983
 TSQLFile.cxx:1984
 TSQLFile.cxx:1985
 TSQLFile.cxx:1986
 TSQLFile.cxx:1987
 TSQLFile.cxx:1988
 TSQLFile.cxx:1989
 TSQLFile.cxx:1990
 TSQLFile.cxx:1991
 TSQLFile.cxx:1992
 TSQLFile.cxx:1993
 TSQLFile.cxx:1994
 TSQLFile.cxx:1995
 TSQLFile.cxx:1996
 TSQLFile.cxx:1997
 TSQLFile.cxx:1998
 TSQLFile.cxx:1999
 TSQLFile.cxx:2000
 TSQLFile.cxx:2001
 TSQLFile.cxx:2002
 TSQLFile.cxx:2003
 TSQLFile.cxx:2004
 TSQLFile.cxx:2005
 TSQLFile.cxx:2006
 TSQLFile.cxx:2007
 TSQLFile.cxx:2008
 TSQLFile.cxx:2009
 TSQLFile.cxx:2010
 TSQLFile.cxx:2011
 TSQLFile.cxx:2012
 TSQLFile.cxx:2013
 TSQLFile.cxx:2014
 TSQLFile.cxx:2015
 TSQLFile.cxx:2016
 TSQLFile.cxx:2017
 TSQLFile.cxx:2018
 TSQLFile.cxx:2019
 TSQLFile.cxx:2020
 TSQLFile.cxx:2021
 TSQLFile.cxx:2022
 TSQLFile.cxx:2023
 TSQLFile.cxx:2024
 TSQLFile.cxx:2025
 TSQLFile.cxx:2026
 TSQLFile.cxx:2027
 TSQLFile.cxx:2028
 TSQLFile.cxx:2029
 TSQLFile.cxx:2030
 TSQLFile.cxx:2031
 TSQLFile.cxx:2032
 TSQLFile.cxx:2033
 TSQLFile.cxx:2034
 TSQLFile.cxx:2035
 TSQLFile.cxx:2036
 TSQLFile.cxx:2037
 TSQLFile.cxx:2038
 TSQLFile.cxx:2039
 TSQLFile.cxx:2040
 TSQLFile.cxx:2041
 TSQLFile.cxx:2042
 TSQLFile.cxx:2043
 TSQLFile.cxx:2044
 TSQLFile.cxx:2045
 TSQLFile.cxx:2046
 TSQLFile.cxx:2047
 TSQLFile.cxx:2048
 TSQLFile.cxx:2049
 TSQLFile.cxx:2050
 TSQLFile.cxx:2051
 TSQLFile.cxx:2052
 TSQLFile.cxx:2053
 TSQLFile.cxx:2054
 TSQLFile.cxx:2055
 TSQLFile.cxx:2056
 TSQLFile.cxx:2057
 TSQLFile.cxx:2058
 TSQLFile.cxx:2059
 TSQLFile.cxx:2060
 TSQLFile.cxx:2061
 TSQLFile.cxx:2062
 TSQLFile.cxx:2063
 TSQLFile.cxx:2064
 TSQLFile.cxx:2065
 TSQLFile.cxx:2066
 TSQLFile.cxx:2067
 TSQLFile.cxx:2068
 TSQLFile.cxx:2069
 TSQLFile.cxx:2070
 TSQLFile.cxx:2071
 TSQLFile.cxx:2072
 TSQLFile.cxx:2073
 TSQLFile.cxx:2074
 TSQLFile.cxx:2075
 TSQLFile.cxx:2076
 TSQLFile.cxx:2077
 TSQLFile.cxx:2078
 TSQLFile.cxx:2079
 TSQLFile.cxx:2080
 TSQLFile.cxx:2081
 TSQLFile.cxx:2082
 TSQLFile.cxx:2083
 TSQLFile.cxx:2084
 TSQLFile.cxx:2085
 TSQLFile.cxx:2086
 TSQLFile.cxx:2087
 TSQLFile.cxx:2088
 TSQLFile.cxx:2089
 TSQLFile.cxx:2090
 TSQLFile.cxx:2091
 TSQLFile.cxx:2092
 TSQLFile.cxx:2093
 TSQLFile.cxx:2094
 TSQLFile.cxx:2095
 TSQLFile.cxx:2096
 TSQLFile.cxx:2097
 TSQLFile.cxx:2098
 TSQLFile.cxx:2099
 TSQLFile.cxx:2100
 TSQLFile.cxx:2101
 TSQLFile.cxx:2102
 TSQLFile.cxx:2103
 TSQLFile.cxx:2104
 TSQLFile.cxx:2105
 TSQLFile.cxx:2106
 TSQLFile.cxx:2107
 TSQLFile.cxx:2108
 TSQLFile.cxx:2109
 TSQLFile.cxx:2110
 TSQLFile.cxx:2111
 TSQLFile.cxx:2112
 TSQLFile.cxx:2113
 TSQLFile.cxx:2114
 TSQLFile.cxx:2115
 TSQLFile.cxx:2116
 TSQLFile.cxx:2117
 TSQLFile.cxx:2118
 TSQLFile.cxx:2119
 TSQLFile.cxx:2120
 TSQLFile.cxx:2121
 TSQLFile.cxx:2122
 TSQLFile.cxx:2123
 TSQLFile.cxx:2124
 TSQLFile.cxx:2125
 TSQLFile.cxx:2126
 TSQLFile.cxx:2127
 TSQLFile.cxx:2128
 TSQLFile.cxx:2129
 TSQLFile.cxx:2130
 TSQLFile.cxx:2131
 TSQLFile.cxx:2132
 TSQLFile.cxx:2133
 TSQLFile.cxx:2134
 TSQLFile.cxx:2135
 TSQLFile.cxx:2136
 TSQLFile.cxx:2137
 TSQLFile.cxx:2138
 TSQLFile.cxx:2139
 TSQLFile.cxx:2140
 TSQLFile.cxx:2141
 TSQLFile.cxx:2142
 TSQLFile.cxx:2143
 TSQLFile.cxx:2144
 TSQLFile.cxx:2145
 TSQLFile.cxx:2146
 TSQLFile.cxx:2147
 TSQLFile.cxx:2148
 TSQLFile.cxx:2149
 TSQLFile.cxx:2150
 TSQLFile.cxx:2151
 TSQLFile.cxx:2152
 TSQLFile.cxx:2153
 TSQLFile.cxx:2154
 TSQLFile.cxx:2155
 TSQLFile.cxx:2156
 TSQLFile.cxx:2157
 TSQLFile.cxx:2158
 TSQLFile.cxx:2159
 TSQLFile.cxx:2160
 TSQLFile.cxx:2161
 TSQLFile.cxx:2162
 TSQLFile.cxx:2163
 TSQLFile.cxx:2164
 TSQLFile.cxx:2165
 TSQLFile.cxx:2166
 TSQLFile.cxx:2167
 TSQLFile.cxx:2168
 TSQLFile.cxx:2169
 TSQLFile.cxx:2170
 TSQLFile.cxx:2171
 TSQLFile.cxx:2172
 TSQLFile.cxx:2173
 TSQLFile.cxx:2174
 TSQLFile.cxx:2175
 TSQLFile.cxx:2176
 TSQLFile.cxx:2177
 TSQLFile.cxx:2178
 TSQLFile.cxx:2179
 TSQLFile.cxx:2180
 TSQLFile.cxx:2181
 TSQLFile.cxx:2182
 TSQLFile.cxx:2183
 TSQLFile.cxx:2184
 TSQLFile.cxx:2185
 TSQLFile.cxx:2186
 TSQLFile.cxx:2187
 TSQLFile.cxx:2188
 TSQLFile.cxx:2189
 TSQLFile.cxx:2190
 TSQLFile.cxx:2191
 TSQLFile.cxx:2192
 TSQLFile.cxx:2193
 TSQLFile.cxx:2194
 TSQLFile.cxx:2195
 TSQLFile.cxx:2196
 TSQLFile.cxx:2197
 TSQLFile.cxx:2198
 TSQLFile.cxx:2199
 TSQLFile.cxx:2200
 TSQLFile.cxx:2201
 TSQLFile.cxx:2202
 TSQLFile.cxx:2203
 TSQLFile.cxx:2204
 TSQLFile.cxx:2205
 TSQLFile.cxx:2206
 TSQLFile.cxx:2207
 TSQLFile.cxx:2208
 TSQLFile.cxx:2209
 TSQLFile.cxx:2210
 TSQLFile.cxx:2211
 TSQLFile.cxx:2212
 TSQLFile.cxx:2213
 TSQLFile.cxx:2214
 TSQLFile.cxx:2215
 TSQLFile.cxx:2216
 TSQLFile.cxx:2217
 TSQLFile.cxx:2218
 TSQLFile.cxx:2219
 TSQLFile.cxx:2220
 TSQLFile.cxx:2221
 TSQLFile.cxx:2222
 TSQLFile.cxx:2223
 TSQLFile.cxx:2224
 TSQLFile.cxx:2225
 TSQLFile.cxx:2226
 TSQLFile.cxx:2227
 TSQLFile.cxx:2228
 TSQLFile.cxx:2229
 TSQLFile.cxx:2230
 TSQLFile.cxx:2231
 TSQLFile.cxx:2232
 TSQLFile.cxx:2233
 TSQLFile.cxx:2234
 TSQLFile.cxx:2235
 TSQLFile.cxx:2236
 TSQLFile.cxx:2237
 TSQLFile.cxx:2238
 TSQLFile.cxx:2239
 TSQLFile.cxx:2240
 TSQLFile.cxx:2241
 TSQLFile.cxx:2242
 TSQLFile.cxx:2243
 TSQLFile.cxx:2244
 TSQLFile.cxx:2245
 TSQLFile.cxx:2246
 TSQLFile.cxx:2247
 TSQLFile.cxx:2248
 TSQLFile.cxx:2249
 TSQLFile.cxx:2250
 TSQLFile.cxx:2251
 TSQLFile.cxx:2252
 TSQLFile.cxx:2253
 TSQLFile.cxx:2254
 TSQLFile.cxx:2255
 TSQLFile.cxx:2256
 TSQLFile.cxx:2257
 TSQLFile.cxx:2258
 TSQLFile.cxx:2259
 TSQLFile.cxx:2260
 TSQLFile.cxx:2261
 TSQLFile.cxx:2262
 TSQLFile.cxx:2263
 TSQLFile.cxx:2264
 TSQLFile.cxx:2265
 TSQLFile.cxx:2266
 TSQLFile.cxx:2267
 TSQLFile.cxx:2268
 TSQLFile.cxx:2269
 TSQLFile.cxx:2270
 TSQLFile.cxx:2271
 TSQLFile.cxx:2272
 TSQLFile.cxx:2273
 TSQLFile.cxx:2274
 TSQLFile.cxx:2275
 TSQLFile.cxx:2276
 TSQLFile.cxx:2277
 TSQLFile.cxx:2278
 TSQLFile.cxx:2279
 TSQLFile.cxx:2280
 TSQLFile.cxx:2281
 TSQLFile.cxx:2282
 TSQLFile.cxx:2283
 TSQLFile.cxx:2284
 TSQLFile.cxx:2285
 TSQLFile.cxx:2286
 TSQLFile.cxx:2287
 TSQLFile.cxx:2288
 TSQLFile.cxx:2289
 TSQLFile.cxx:2290
 TSQLFile.cxx:2291
 TSQLFile.cxx:2292
 TSQLFile.cxx:2293
 TSQLFile.cxx:2294
 TSQLFile.cxx:2295
 TSQLFile.cxx:2296
 TSQLFile.cxx:2297
 TSQLFile.cxx:2298
 TSQLFile.cxx:2299
 TSQLFile.cxx:2300
 TSQLFile.cxx:2301
 TSQLFile.cxx:2302
 TSQLFile.cxx:2303
 TSQLFile.cxx:2304
 TSQLFile.cxx:2305
 TSQLFile.cxx:2306
 TSQLFile.cxx:2307
 TSQLFile.cxx:2308
 TSQLFile.cxx:2309
 TSQLFile.cxx:2310
 TSQLFile.cxx:2311
 TSQLFile.cxx:2312
 TSQLFile.cxx:2313
 TSQLFile.cxx:2314
 TSQLFile.cxx:2315
 TSQLFile.cxx:2316
 TSQLFile.cxx:2317
 TSQLFile.cxx:2318
 TSQLFile.cxx:2319
 TSQLFile.cxx:2320
 TSQLFile.cxx:2321
 TSQLFile.cxx:2322
 TSQLFile.cxx:2323
 TSQLFile.cxx:2324
 TSQLFile.cxx:2325
 TSQLFile.cxx:2326
 TSQLFile.cxx:2327
 TSQLFile.cxx:2328
 TSQLFile.cxx:2329
 TSQLFile.cxx:2330
 TSQLFile.cxx:2331
 TSQLFile.cxx:2332
 TSQLFile.cxx:2333
 TSQLFile.cxx:2334
 TSQLFile.cxx:2335
 TSQLFile.cxx:2336
 TSQLFile.cxx:2337
 TSQLFile.cxx:2338
 TSQLFile.cxx:2339
 TSQLFile.cxx:2340
 TSQLFile.cxx:2341
 TSQLFile.cxx:2342
 TSQLFile.cxx:2343
 TSQLFile.cxx:2344
 TSQLFile.cxx:2345
 TSQLFile.cxx:2346
 TSQLFile.cxx:2347
 TSQLFile.cxx:2348
 TSQLFile.cxx:2349
 TSQLFile.cxx:2350
 TSQLFile.cxx:2351
 TSQLFile.cxx:2352
 TSQLFile.cxx:2353
 TSQLFile.cxx:2354
 TSQLFile.cxx:2355
 TSQLFile.cxx:2356
 TSQLFile.cxx:2357
 TSQLFile.cxx:2358
 TSQLFile.cxx:2359
 TSQLFile.cxx:2360
 TSQLFile.cxx:2361
 TSQLFile.cxx:2362
 TSQLFile.cxx:2363
 TSQLFile.cxx:2364
 TSQLFile.cxx:2365
 TSQLFile.cxx:2366
 TSQLFile.cxx:2367
 TSQLFile.cxx:2368
 TSQLFile.cxx:2369
 TSQLFile.cxx:2370
 TSQLFile.cxx:2371
 TSQLFile.cxx:2372
 TSQLFile.cxx:2373
 TSQLFile.cxx:2374
 TSQLFile.cxx:2375
 TSQLFile.cxx:2376
 TSQLFile.cxx:2377
 TSQLFile.cxx:2378
 TSQLFile.cxx:2379
 TSQLFile.cxx:2380
 TSQLFile.cxx:2381
 TSQLFile.cxx:2382
 TSQLFile.cxx:2383
 TSQLFile.cxx:2384
 TSQLFile.cxx:2385
 TSQLFile.cxx:2386
 TSQLFile.cxx:2387
 TSQLFile.cxx:2388
 TSQLFile.cxx:2389
 TSQLFile.cxx:2390
 TSQLFile.cxx:2391
 TSQLFile.cxx:2392
 TSQLFile.cxx:2393
 TSQLFile.cxx:2394
 TSQLFile.cxx:2395
 TSQLFile.cxx:2396
 TSQLFile.cxx:2397
 TSQLFile.cxx:2398
 TSQLFile.cxx:2399
 TSQLFile.cxx:2400
 TSQLFile.cxx:2401
 TSQLFile.cxx:2402
 TSQLFile.cxx:2403
 TSQLFile.cxx:2404
 TSQLFile.cxx:2405
 TSQLFile.cxx:2406
 TSQLFile.cxx:2407
 TSQLFile.cxx:2408
 TSQLFile.cxx:2409
 TSQLFile.cxx:2410
 TSQLFile.cxx:2411
 TSQLFile.cxx:2412
 TSQLFile.cxx:2413
 TSQLFile.cxx:2414
 TSQLFile.cxx:2415
 TSQLFile.cxx:2416
 TSQLFile.cxx:2417
 TSQLFile.cxx:2418
 TSQLFile.cxx:2419
 TSQLFile.cxx:2420
 TSQLFile.cxx:2421
 TSQLFile.cxx:2422
 TSQLFile.cxx:2423
 TSQLFile.cxx:2424
 TSQLFile.cxx:2425
 TSQLFile.cxx:2426
 TSQLFile.cxx:2427
 TSQLFile.cxx:2428
 TSQLFile.cxx:2429
 TSQLFile.cxx:2430
 TSQLFile.cxx:2431
 TSQLFile.cxx:2432
 TSQLFile.cxx:2433
 TSQLFile.cxx:2434
 TSQLFile.cxx:2435
 TSQLFile.cxx:2436
 TSQLFile.cxx:2437
 TSQLFile.cxx:2438
 TSQLFile.cxx:2439
 TSQLFile.cxx:2440
 TSQLFile.cxx:2441
 TSQLFile.cxx:2442
 TSQLFile.cxx:2443
 TSQLFile.cxx:2444
 TSQLFile.cxx:2445
 TSQLFile.cxx:2446
 TSQLFile.cxx:2447
 TSQLFile.cxx:2448
 TSQLFile.cxx:2449
 TSQLFile.cxx:2450
 TSQLFile.cxx:2451
 TSQLFile.cxx:2452
 TSQLFile.cxx:2453
 TSQLFile.cxx:2454
 TSQLFile.cxx:2455
 TSQLFile.cxx:2456
 TSQLFile.cxx:2457
 TSQLFile.cxx:2458
 TSQLFile.cxx:2459
 TSQLFile.cxx:2460
 TSQLFile.cxx:2461
 TSQLFile.cxx:2462
 TSQLFile.cxx:2463
 TSQLFile.cxx:2464
 TSQLFile.cxx:2465
 TSQLFile.cxx:2466
 TSQLFile.cxx:2467
 TSQLFile.cxx:2468
 TSQLFile.cxx:2469
 TSQLFile.cxx:2470
 TSQLFile.cxx:2471
 TSQLFile.cxx:2472
 TSQLFile.cxx:2473
 TSQLFile.cxx:2474
 TSQLFile.cxx:2475
 TSQLFile.cxx:2476
 TSQLFile.cxx:2477
 TSQLFile.cxx:2478
 TSQLFile.cxx:2479
 TSQLFile.cxx:2480
 TSQLFile.cxx:2481
 TSQLFile.cxx:2482
 TSQLFile.cxx:2483
 TSQLFile.cxx:2484
 TSQLFile.cxx:2485
 TSQLFile.cxx:2486
 TSQLFile.cxx:2487
 TSQLFile.cxx:2488
 TSQLFile.cxx:2489
 TSQLFile.cxx:2490
 TSQLFile.cxx:2491
 TSQLFile.cxx:2492
 TSQLFile.cxx:2493
 TSQLFile.cxx:2494
 TSQLFile.cxx:2495
 TSQLFile.cxx:2496
 TSQLFile.cxx:2497
 TSQLFile.cxx:2498
 TSQLFile.cxx:2499
 TSQLFile.cxx:2500
 TSQLFile.cxx:2501
 TSQLFile.cxx:2502
 TSQLFile.cxx:2503
 TSQLFile.cxx:2504
 TSQLFile.cxx:2505
 TSQLFile.cxx:2506
 TSQLFile.cxx:2507
 TSQLFile.cxx:2508
 TSQLFile.cxx:2509
 TSQLFile.cxx:2510
 TSQLFile.cxx:2511
 TSQLFile.cxx:2512
 TSQLFile.cxx:2513
 TSQLFile.cxx:2514
 TSQLFile.cxx:2515
 TSQLFile.cxx:2516
 TSQLFile.cxx:2517
 TSQLFile.cxx:2518
 TSQLFile.cxx:2519
 TSQLFile.cxx:2520
 TSQLFile.cxx:2521
 TSQLFile.cxx:2522
 TSQLFile.cxx:2523
 TSQLFile.cxx:2524
 TSQLFile.cxx:2525
 TSQLFile.cxx:2526
 TSQLFile.cxx:2527
 TSQLFile.cxx:2528
 TSQLFile.cxx:2529
 TSQLFile.cxx:2530
 TSQLFile.cxx:2531
 TSQLFile.cxx:2532
 TSQLFile.cxx:2533
 TSQLFile.cxx:2534
 TSQLFile.cxx:2535
 TSQLFile.cxx:2536
 TSQLFile.cxx:2537
 TSQLFile.cxx:2538
 TSQLFile.cxx:2539
 TSQLFile.cxx:2540
 TSQLFile.cxx:2541
 TSQLFile.cxx:2542
 TSQLFile.cxx:2543
 TSQLFile.cxx:2544
 TSQLFile.cxx:2545
 TSQLFile.cxx:2546
 TSQLFile.cxx:2547
 TSQLFile.cxx:2548
 TSQLFile.cxx:2549
 TSQLFile.cxx:2550
 TSQLFile.cxx:2551
 TSQLFile.cxx:2552
 TSQLFile.cxx:2553
 TSQLFile.cxx:2554
 TSQLFile.cxx:2555
 TSQLFile.cxx:2556
 TSQLFile.cxx:2557
 TSQLFile.cxx:2558
 TSQLFile.cxx:2559
 TSQLFile.cxx:2560
 TSQLFile.cxx:2561
 TSQLFile.cxx:2562
 TSQLFile.cxx:2563
 TSQLFile.cxx:2564
 TSQLFile.cxx:2565
 TSQLFile.cxx:2566
 TSQLFile.cxx:2567
 TSQLFile.cxx:2568
 TSQLFile.cxx:2569
 TSQLFile.cxx:2570
 TSQLFile.cxx:2571
 TSQLFile.cxx:2572
 TSQLFile.cxx:2573
 TSQLFile.cxx:2574
 TSQLFile.cxx:2575
 TSQLFile.cxx:2576
 TSQLFile.cxx:2577
 TSQLFile.cxx:2578
 TSQLFile.cxx:2579
 TSQLFile.cxx:2580
 TSQLFile.cxx:2581
 TSQLFile.cxx:2582
 TSQLFile.cxx:2583
 TSQLFile.cxx:2584
 TSQLFile.cxx:2585
 TSQLFile.cxx:2586
 TSQLFile.cxx:2587
 TSQLFile.cxx:2588
 TSQLFile.cxx:2589
 TSQLFile.cxx:2590
 TSQLFile.cxx:2591
 TSQLFile.cxx:2592
 TSQLFile.cxx:2593
 TSQLFile.cxx:2594
 TSQLFile.cxx:2595
 TSQLFile.cxx:2596
 TSQLFile.cxx:2597
 TSQLFile.cxx:2598
 TSQLFile.cxx:2599
 TSQLFile.cxx:2600
 TSQLFile.cxx:2601
 TSQLFile.cxx:2602
 TSQLFile.cxx:2603
 TSQLFile.cxx:2604
 TSQLFile.cxx:2605
 TSQLFile.cxx:2606
 TSQLFile.cxx:2607
 TSQLFile.cxx:2608
 TSQLFile.cxx:2609
 TSQLFile.cxx:2610
 TSQLFile.cxx:2611
 TSQLFile.cxx:2612
 TSQLFile.cxx:2613
 TSQLFile.cxx:2614
 TSQLFile.cxx:2615
 TSQLFile.cxx:2616
 TSQLFile.cxx:2617
 TSQLFile.cxx:2618
 TSQLFile.cxx:2619
 TSQLFile.cxx:2620
 TSQLFile.cxx:2621
 TSQLFile.cxx:2622
 TSQLFile.cxx:2623
 TSQLFile.cxx:2624
 TSQLFile.cxx:2625
 TSQLFile.cxx:2626
 TSQLFile.cxx:2627
 TSQLFile.cxx:2628
 TSQLFile.cxx:2629
 TSQLFile.cxx:2630
 TSQLFile.cxx:2631
 TSQLFile.cxx:2632
 TSQLFile.cxx:2633
 TSQLFile.cxx:2634
 TSQLFile.cxx:2635
 TSQLFile.cxx:2636
 TSQLFile.cxx:2637
 TSQLFile.cxx:2638
 TSQLFile.cxx:2639
 TSQLFile.cxx:2640
 TSQLFile.cxx:2641
 TSQLFile.cxx:2642
 TSQLFile.cxx:2643
 TSQLFile.cxx:2644
 TSQLFile.cxx:2645
 TSQLFile.cxx:2646
 TSQLFile.cxx:2647
 TSQLFile.cxx:2648
 TSQLFile.cxx:2649
 TSQLFile.cxx:2650
 TSQLFile.cxx:2651
 TSQLFile.cxx:2652
 TSQLFile.cxx:2653
 TSQLFile.cxx:2654
 TSQLFile.cxx:2655
 TSQLFile.cxx:2656
 TSQLFile.cxx:2657
 TSQLFile.cxx:2658
 TSQLFile.cxx:2659
 TSQLFile.cxx:2660
 TSQLFile.cxx:2661
 TSQLFile.cxx:2662
 TSQLFile.cxx:2663
 TSQLFile.cxx:2664
 TSQLFile.cxx:2665
 TSQLFile.cxx:2666
 TSQLFile.cxx:2667
 TSQLFile.cxx:2668
 TSQLFile.cxx:2669
 TSQLFile.cxx:2670
 TSQLFile.cxx:2671
 TSQLFile.cxx:2672
 TSQLFile.cxx:2673
 TSQLFile.cxx:2674
 TSQLFile.cxx:2675
 TSQLFile.cxx:2676
 TSQLFile.cxx:2677
 TSQLFile.cxx:2678
 TSQLFile.cxx:2679
 TSQLFile.cxx:2680
 TSQLFile.cxx:2681
 TSQLFile.cxx:2682
 TSQLFile.cxx:2683
 TSQLFile.cxx:2684
 TSQLFile.cxx:2685
 TSQLFile.cxx:2686
 TSQLFile.cxx:2687
 TSQLFile.cxx:2688
 TSQLFile.cxx:2689
 TSQLFile.cxx:2690
 TSQLFile.cxx:2691
 TSQLFile.cxx:2692
 TSQLFile.cxx:2693
 TSQLFile.cxx:2694
 TSQLFile.cxx:2695
 TSQLFile.cxx:2696
 TSQLFile.cxx:2697
 TSQLFile.cxx:2698
 TSQLFile.cxx:2699
 TSQLFile.cxx:2700
 TSQLFile.cxx:2701
 TSQLFile.cxx:2702
 TSQLFile.cxx:2703
 TSQLFile.cxx:2704
 TSQLFile.cxx:2705
 TSQLFile.cxx:2706
 TSQLFile.cxx:2707
 TSQLFile.cxx:2708
 TSQLFile.cxx:2709
 TSQLFile.cxx:2710
 TSQLFile.cxx:2711
 TSQLFile.cxx:2712
 TSQLFile.cxx:2713
 TSQLFile.cxx:2714