// @(#)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.             *
 *************************************************************************/

//________________________________________________________________________
//
// TSQLObjectData is used in TBufferSQL2 class in reading procedure.
// It contains data, request from database table for one specifc
// object for one specific class. For instance, when data for
// class TH1 required, requests will be done to
// TH1_ver4 and TH1_raw4 tables and result of these requests
// will be kept in single TSQLObjectData instance.
//
//________________________________________________________________________

#include "TSQLObjectData.h"

#include "TObjArray.h"
#include "TNamed.h"
#include "TList.h"
#include "TSQLRow.h"
#include "TSQLResult.h"
#include "TSQLClassInfo.h"
#include "TSQLStructure.h"
#include "TSQLStatement.h"

ClassImp(TSQLObjectInfo)

//________________________________________________________________________
TSQLObjectInfo::TSQLObjectInfo() :
   TObject(),
   fObjId(0),
   fClassName(),
   fVersion(0)
{
}

//________________________________________________________________________
TSQLObjectInfo::TSQLObjectInfo(Long64_t objid, const char* classname, Version_t version) :
   TObject(),
   fObjId(objid),
   fClassName(classname),
   fVersion(version)
{
}

//________________________________________________________________________
TSQLObjectInfo::~TSQLObjectInfo()
{
}



ClassImp(TSQLObjectData)

//________________________________________________________________________
TSQLObjectData::TSQLObjectData() :
      TObject(),
      fInfo(0),
      fObjId(0),
      fOwner(kFALSE),
      fClassData(0),
      fBlobData(0),
      fBlobStmt(0),
      fLocatedColumn(-1),
      fClassRow(0),
      fBlobRow(0),
      fLocatedField(0),
      fLocatedValue(0),
      fCurrentBlob(kFALSE),
      fBlobPrefixName(0),
      fBlobTypeName(0),
      fUnpack(0)
{
   // default contrsuctor
}

//______________________________________________________________________________
TSQLObjectData::TSQLObjectData(TSQLClassInfo* sqlinfo,
                               Long64_t       objid,
                               TSQLResult*    classdata,
                               TSQLRow*       classrow,
                               TSQLResult*    blobdata,
                               TSQLStatement* blobstmt) :
   TObject(),
   fInfo(sqlinfo),
   fObjId(objid),
   fOwner(kFALSE),
   fClassData(classdata),
   fBlobData(blobdata),
   fBlobStmt(blobstmt),
   fLocatedColumn(-1),
   fClassRow(classrow),
   fBlobRow(0),
   fLocatedField(0),
   fLocatedValue(0),
   fCurrentBlob(kFALSE),
   fBlobPrefixName(0),
   fBlobTypeName(0),
   fUnpack(0)
{
   // normal contrsuctor,

   // take ownership if no special row from data pool is provided
   if ((fClassData!=0) && (fClassRow==0)) {
      fOwner = kTRUE;
      fClassRow = fClassData->Next();
   }

   ShiftBlobRow();
}

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

   if ((fClassData!=0) && fOwner) delete fClassData;
   if (fClassRow!=0) delete fClassRow;
   if (fBlobRow!=0) delete fBlobRow;
   if (fBlobData!=0) delete fBlobData;
   if (fUnpack!=0) { fUnpack->Delete(); delete fUnpack; }
   if (fBlobStmt!=0) delete fBlobStmt;
}

//______________________________________________________________________________
Int_t TSQLObjectData::GetNumClassFields()
{
   // return number of columns in class table result

   if (fClassData!=0) return fClassData->GetFieldCount();
   return 0;
}

//______________________________________________________________________________
const char* TSQLObjectData::GetClassFieldName(Int_t n)
{
   // get name of class table column

   if (fClassData!=0) return fClassData->GetFieldName(n);
   return 0;
}

//______________________________________________________________________________
Bool_t TSQLObjectData::LocateColumn(const char* colname, Bool_t isblob)
{
   // locate column of that name in results

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

   fLocatedField = 0;
   fLocatedValue = 0;
   fCurrentBlob = kFALSE;

   if ((fClassData==0) || (fClassRow==0)) return kFALSE;

//   Int_t numfields = GetNumClassFields();

   Int_t ncol = fInfo->FindColumn(colname, kFALSE);
   if (ncol>0) {
      fLocatedColumn = ncol;
      fLocatedField = GetClassFieldName(ncol);
      fLocatedValue = fClassRow->GetField(ncol);
   }
  

/*   for (Int_t ncol=1;ncol<numfields;ncol++) {
      const char* fieldname = GetClassFieldName(ncol);
      if (strcmp(colname, fieldname)==0) {
         fLocatedColumn = ncol;
         fLocatedField = fieldname;
         fLocatedValue = fClassRow->GetField(ncol);
         break;
      }
   }
*/

   if (fLocatedField==0) return kFALSE;

   if (!isblob) return kTRUE;

   if ((fBlobRow==0) && (fBlobStmt==0)) return kFALSE;

   fCurrentBlob = kTRUE;

   ExtractBlobValues();

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TSQLObjectData::ShiftBlobRow()
{
   // shift cursor to next blob value 
    
   if (fBlobStmt!=0) {
      Bool_t res = fBlobStmt->NextResultRow();
      if (!res) { delete fBlobStmt; fBlobStmt = 0; }
      return res;
   }
   
   delete fBlobRow;
   fBlobRow = fBlobData ? fBlobData->Next() : 0;
   return fBlobRow!=0;
}

//______________________________________________________________________________
Bool_t TSQLObjectData::ExtractBlobValues()
{
   // extract from curent blob row value and names identifiers

   const char* name = 0;
   
   Bool_t hasdata = kFALSE;

   if (fBlobStmt!=0) {
      name = fBlobStmt->GetString(0);
      fLocatedValue = fBlobStmt->GetString(1);
      hasdata = kTRUE;
   }

   if (!hasdata) {
      if (fBlobRow!=0) {
         fLocatedValue = fBlobRow->GetField(1);
         name = fBlobRow->GetField(0);
      }
   }
   
   if (name==0) {
      fBlobPrefixName = 0;
      fBlobTypeName = 0; 
      return kFALSE;
   }
   
   const char* separ = strstr(name, ":"); //SQLNameSeparator()

   if (separ==0) {
      fBlobPrefixName = 0;
      fBlobTypeName = name;
   } else {
      fBlobPrefixName = name;
      separ+=strlen(":"); //SQLNameSeparator()
      fBlobTypeName = separ;
   }

//   if (gDebug>4)
//      Info("ExtractBlobValues","Prefix:%s Type:%s",
//            (fBlobPrefixName ? fBlobPrefixName : "null"),
//            (fBlobTypeName ? fBlobTypeName : "null"));

   return kTRUE;
}

//______________________________________________________________________________
void TSQLObjectData::AddUnpack(const char* tname, const char* value)
{
   // add emulated data
   // this used to place version or TObject raw data, read from normal tables

   TNamed* str = new TNamed(tname, value);
   if (fUnpack==0) {
      fUnpack = new TObjArray();
      fBlobPrefixName = 0;
      fBlobTypeName = str->GetName();
      fLocatedValue = str->GetTitle();
   }

   fUnpack->Add(str);
}

//______________________________________________________________________________
void TSQLObjectData::AddUnpackInt(const char* tname, Int_t value)
{
   // emulate integer value in raw data

   TString sbuf;
   sbuf.Form("%d", value);
   AddUnpack(tname, sbuf.Data());
}

//______________________________________________________________________________
void TSQLObjectData::ShiftToNextValue()
{
   // shift to next column or next row in blob data

   Bool_t doshift = kTRUE;

   if (fUnpack!=0) {
      TObject* prev = fUnpack->First();
      fUnpack->Remove(prev);
      delete prev;
      fUnpack->Compress();
      if (fUnpack->GetLast()>=0) {
         TNamed* curr = (TNamed*) fUnpack->First();
         fBlobPrefixName = 0;
         fBlobTypeName = curr->GetName();
         fLocatedValue = curr->GetTitle();
         return;
      }
      delete fUnpack;
      fUnpack = 0;
      doshift = kFALSE;
   }

   if (fCurrentBlob) {
      if (doshift) ShiftBlobRow();
      ExtractBlobValues();
   } else
      if (fClassData!=0) {
         if (doshift) fLocatedColumn++;
         if (fLocatedColumn<GetNumClassFields()) {
            fLocatedField = GetClassFieldName(fLocatedColumn);
            fLocatedValue = fClassRow->GetField(fLocatedColumn);
         } else {
            fLocatedField = 0;
            fLocatedValue = 0;
         }
      }
}

//______________________________________________________________________________
Bool_t TSQLObjectData::VerifyDataType(const char* tname, Bool_t errormsg)
{
   // checks if data type corresponds to that stored in raw table

   if (tname==0) {
      if (errormsg)
         Error("VerifyDataType","Data type not specified");
      return kFALSE;
   }

   // here maybe type of column can be checked
   if (!IsBlobData()) return kTRUE;

   if (gDebug>4) 
      if ((fBlobTypeName==0) && errormsg) {
         Error("VerifyDataType","fBlobTypeName is null");
         return kFALSE;
      }


   TString v1(fBlobTypeName);
   TString v2(tname);

//   if (strcmp(fBlobTypeName,tname)!=0) {
   if (v1!=v2) { 
      if (errormsg)
         Error("VerifyDataType","Data type missmatch %s - %s", fBlobTypeName, tname);
      return kFALSE;
   }

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TSQLObjectData::PrepareForRawData()
{
   // prepare to read data from raw table

   if (!ExtractBlobValues()) return kFALSE;

   fCurrentBlob = kTRUE;

   return kTRUE;
}

//===================================================================================

//________________________________________________________________________
//
// TSQLObjectDataPool contains list (pool) of data from single class table 
// for differents objects, all belonging to the same key.
// This is typical situation when list of objects stored as single key.
// To optimize reading of such data, one query is submitted and results of that
// query kept in TSQLObjectDataPool object
//
//________________________________________________________________________


ClassImp(TSQLObjectDataPool);

//______________________________________________________________________________
TSQLObjectDataPool::TSQLObjectDataPool() :
   TObject(),
   fInfo(0),
   fClassData(0),
   fIsMoreRows(kTRUE),
   fRowsPool(0)
{
}

//______________________________________________________________________________
TSQLObjectDataPool::TSQLObjectDataPool(TSQLClassInfo* info, TSQLResult* data) :
   TObject(),
   fInfo(info),
   fClassData(data),
   fIsMoreRows(kTRUE),
   fRowsPool(0)
{
}

//______________________________________________________________________________
TSQLObjectDataPool::~TSQLObjectDataPool()
{
   // Destructor of TSQLObjectDataPool class
   // Deletes not used rows and class data table
   
   if (fClassData!=0) delete fClassData;
   if (fRowsPool!=0) {
      fRowsPool->Delete();
      delete fRowsPool;
   }
}

//______________________________________________________________________________
TSQLRow* TSQLObjectDataPool::GetObjectRow(Long64_t objid)
{
   // Returns single sql row with object data for that class
   
   if (fClassData==0) return 0;
   
   Long64_t rowid;
         
   if (fRowsPool!=0) {
      TObjLink* link = fRowsPool->FirstLink();
      while (link!=0) {
         TSQLRow* row = (TSQLRow*) link->GetObject();
         rowid = sqlio::atol64(row->GetField(0));
         if (rowid==objid) {
            fRowsPool->Remove(link);   
            return row;
         }
         
         link = link->Next();   
      }
   }
   
   while (fIsMoreRows) {
      TSQLRow* row = fClassData->Next();
      if (row==0) 
         fIsMoreRows = kFALSE; 
      else {
         rowid = sqlio::atol64(row->GetField(0));
         if (rowid==objid) return row;
         if (fRowsPool==0) fRowsPool = new TList();
         fRowsPool->Add(row);
      }
   }
   
   return 0;
}
  
 TSQLObjectData.cxx:1
 TSQLObjectData.cxx:2
 TSQLObjectData.cxx:3
 TSQLObjectData.cxx:4
 TSQLObjectData.cxx:5
 TSQLObjectData.cxx:6
 TSQLObjectData.cxx:7
 TSQLObjectData.cxx:8
 TSQLObjectData.cxx:9
 TSQLObjectData.cxx:10
 TSQLObjectData.cxx:11
 TSQLObjectData.cxx:12
 TSQLObjectData.cxx:13
 TSQLObjectData.cxx:14
 TSQLObjectData.cxx:15
 TSQLObjectData.cxx:16
 TSQLObjectData.cxx:17
 TSQLObjectData.cxx:18
 TSQLObjectData.cxx:19
 TSQLObjectData.cxx:20
 TSQLObjectData.cxx:21
 TSQLObjectData.cxx:22
 TSQLObjectData.cxx:23
 TSQLObjectData.cxx:24
 TSQLObjectData.cxx:25
 TSQLObjectData.cxx:26
 TSQLObjectData.cxx:27
 TSQLObjectData.cxx:28
 TSQLObjectData.cxx:29
 TSQLObjectData.cxx:30
 TSQLObjectData.cxx:31
 TSQLObjectData.cxx:32
 TSQLObjectData.cxx:33
 TSQLObjectData.cxx:34
 TSQLObjectData.cxx:35
 TSQLObjectData.cxx:36
 TSQLObjectData.cxx:37
 TSQLObjectData.cxx:38
 TSQLObjectData.cxx:39
 TSQLObjectData.cxx:40
 TSQLObjectData.cxx:41
 TSQLObjectData.cxx:42
 TSQLObjectData.cxx:43
 TSQLObjectData.cxx:44
 TSQLObjectData.cxx:45
 TSQLObjectData.cxx:46
 TSQLObjectData.cxx:47
 TSQLObjectData.cxx:48
 TSQLObjectData.cxx:49
 TSQLObjectData.cxx:50
 TSQLObjectData.cxx:51
 TSQLObjectData.cxx:52
 TSQLObjectData.cxx:53
 TSQLObjectData.cxx:54
 TSQLObjectData.cxx:55
 TSQLObjectData.cxx:56
 TSQLObjectData.cxx:57
 TSQLObjectData.cxx:58
 TSQLObjectData.cxx:59
 TSQLObjectData.cxx:60
 TSQLObjectData.cxx:61
 TSQLObjectData.cxx:62
 TSQLObjectData.cxx:63
 TSQLObjectData.cxx:64
 TSQLObjectData.cxx:65
 TSQLObjectData.cxx:66
 TSQLObjectData.cxx:67
 TSQLObjectData.cxx:68
 TSQLObjectData.cxx:69
 TSQLObjectData.cxx:70
 TSQLObjectData.cxx:71
 TSQLObjectData.cxx:72
 TSQLObjectData.cxx:73
 TSQLObjectData.cxx:74
 TSQLObjectData.cxx:75
 TSQLObjectData.cxx:76
 TSQLObjectData.cxx:77
 TSQLObjectData.cxx:78
 TSQLObjectData.cxx:79
 TSQLObjectData.cxx:80
 TSQLObjectData.cxx:81
 TSQLObjectData.cxx:82
 TSQLObjectData.cxx:83
 TSQLObjectData.cxx:84
 TSQLObjectData.cxx:85
 TSQLObjectData.cxx:86
 TSQLObjectData.cxx:87
 TSQLObjectData.cxx:88
 TSQLObjectData.cxx:89
 TSQLObjectData.cxx:90
 TSQLObjectData.cxx:91
 TSQLObjectData.cxx:92
 TSQLObjectData.cxx:93
 TSQLObjectData.cxx:94
 TSQLObjectData.cxx:95
 TSQLObjectData.cxx:96
 TSQLObjectData.cxx:97
 TSQLObjectData.cxx:98
 TSQLObjectData.cxx:99
 TSQLObjectData.cxx:100
 TSQLObjectData.cxx:101
 TSQLObjectData.cxx:102
 TSQLObjectData.cxx:103
 TSQLObjectData.cxx:104
 TSQLObjectData.cxx:105
 TSQLObjectData.cxx:106
 TSQLObjectData.cxx:107
 TSQLObjectData.cxx:108
 TSQLObjectData.cxx:109
 TSQLObjectData.cxx:110
 TSQLObjectData.cxx:111
 TSQLObjectData.cxx:112
 TSQLObjectData.cxx:113
 TSQLObjectData.cxx:114
 TSQLObjectData.cxx:115
 TSQLObjectData.cxx:116
 TSQLObjectData.cxx:117
 TSQLObjectData.cxx:118
 TSQLObjectData.cxx:119
 TSQLObjectData.cxx:120
 TSQLObjectData.cxx:121
 TSQLObjectData.cxx:122
 TSQLObjectData.cxx:123
 TSQLObjectData.cxx:124
 TSQLObjectData.cxx:125
 TSQLObjectData.cxx:126
 TSQLObjectData.cxx:127
 TSQLObjectData.cxx:128
 TSQLObjectData.cxx:129
 TSQLObjectData.cxx:130
 TSQLObjectData.cxx:131
 TSQLObjectData.cxx:132
 TSQLObjectData.cxx:133
 TSQLObjectData.cxx:134
 TSQLObjectData.cxx:135
 TSQLObjectData.cxx:136
 TSQLObjectData.cxx:137
 TSQLObjectData.cxx:138
 TSQLObjectData.cxx:139
 TSQLObjectData.cxx:140
 TSQLObjectData.cxx:141
 TSQLObjectData.cxx:142
 TSQLObjectData.cxx:143
 TSQLObjectData.cxx:144
 TSQLObjectData.cxx:145
 TSQLObjectData.cxx:146
 TSQLObjectData.cxx:147
 TSQLObjectData.cxx:148
 TSQLObjectData.cxx:149
 TSQLObjectData.cxx:150
 TSQLObjectData.cxx:151
 TSQLObjectData.cxx:152
 TSQLObjectData.cxx:153
 TSQLObjectData.cxx:154
 TSQLObjectData.cxx:155
 TSQLObjectData.cxx:156
 TSQLObjectData.cxx:157
 TSQLObjectData.cxx:158
 TSQLObjectData.cxx:159
 TSQLObjectData.cxx:160
 TSQLObjectData.cxx:161
 TSQLObjectData.cxx:162
 TSQLObjectData.cxx:163
 TSQLObjectData.cxx:164
 TSQLObjectData.cxx:165
 TSQLObjectData.cxx:166
 TSQLObjectData.cxx:167
 TSQLObjectData.cxx:168
 TSQLObjectData.cxx:169
 TSQLObjectData.cxx:170
 TSQLObjectData.cxx:171
 TSQLObjectData.cxx:172
 TSQLObjectData.cxx:173
 TSQLObjectData.cxx:174
 TSQLObjectData.cxx:175
 TSQLObjectData.cxx:176
 TSQLObjectData.cxx:177
 TSQLObjectData.cxx:178
 TSQLObjectData.cxx:179
 TSQLObjectData.cxx:180
 TSQLObjectData.cxx:181
 TSQLObjectData.cxx:182
 TSQLObjectData.cxx:183
 TSQLObjectData.cxx:184
 TSQLObjectData.cxx:185
 TSQLObjectData.cxx:186
 TSQLObjectData.cxx:187
 TSQLObjectData.cxx:188
 TSQLObjectData.cxx:189
 TSQLObjectData.cxx:190
 TSQLObjectData.cxx:191
 TSQLObjectData.cxx:192
 TSQLObjectData.cxx:193
 TSQLObjectData.cxx:194
 TSQLObjectData.cxx:195
 TSQLObjectData.cxx:196
 TSQLObjectData.cxx:197
 TSQLObjectData.cxx:198
 TSQLObjectData.cxx:199
 TSQLObjectData.cxx:200
 TSQLObjectData.cxx:201
 TSQLObjectData.cxx:202
 TSQLObjectData.cxx:203
 TSQLObjectData.cxx:204
 TSQLObjectData.cxx:205
 TSQLObjectData.cxx:206
 TSQLObjectData.cxx:207
 TSQLObjectData.cxx:208
 TSQLObjectData.cxx:209
 TSQLObjectData.cxx:210
 TSQLObjectData.cxx:211
 TSQLObjectData.cxx:212
 TSQLObjectData.cxx:213
 TSQLObjectData.cxx:214
 TSQLObjectData.cxx:215
 TSQLObjectData.cxx:216
 TSQLObjectData.cxx:217
 TSQLObjectData.cxx:218
 TSQLObjectData.cxx:219
 TSQLObjectData.cxx:220
 TSQLObjectData.cxx:221
 TSQLObjectData.cxx:222
 TSQLObjectData.cxx:223
 TSQLObjectData.cxx:224
 TSQLObjectData.cxx:225
 TSQLObjectData.cxx:226
 TSQLObjectData.cxx:227
 TSQLObjectData.cxx:228
 TSQLObjectData.cxx:229
 TSQLObjectData.cxx:230
 TSQLObjectData.cxx:231
 TSQLObjectData.cxx:232
 TSQLObjectData.cxx:233
 TSQLObjectData.cxx:234
 TSQLObjectData.cxx:235
 TSQLObjectData.cxx:236
 TSQLObjectData.cxx:237
 TSQLObjectData.cxx:238
 TSQLObjectData.cxx:239
 TSQLObjectData.cxx:240
 TSQLObjectData.cxx:241
 TSQLObjectData.cxx:242
 TSQLObjectData.cxx:243
 TSQLObjectData.cxx:244
 TSQLObjectData.cxx:245
 TSQLObjectData.cxx:246
 TSQLObjectData.cxx:247
 TSQLObjectData.cxx:248
 TSQLObjectData.cxx:249
 TSQLObjectData.cxx:250
 TSQLObjectData.cxx:251
 TSQLObjectData.cxx:252
 TSQLObjectData.cxx:253
 TSQLObjectData.cxx:254
 TSQLObjectData.cxx:255
 TSQLObjectData.cxx:256
 TSQLObjectData.cxx:257
 TSQLObjectData.cxx:258
 TSQLObjectData.cxx:259
 TSQLObjectData.cxx:260
 TSQLObjectData.cxx:261
 TSQLObjectData.cxx:262
 TSQLObjectData.cxx:263
 TSQLObjectData.cxx:264
 TSQLObjectData.cxx:265
 TSQLObjectData.cxx:266
 TSQLObjectData.cxx:267
 TSQLObjectData.cxx:268
 TSQLObjectData.cxx:269
 TSQLObjectData.cxx:270
 TSQLObjectData.cxx:271
 TSQLObjectData.cxx:272
 TSQLObjectData.cxx:273
 TSQLObjectData.cxx:274
 TSQLObjectData.cxx:275
 TSQLObjectData.cxx:276
 TSQLObjectData.cxx:277
 TSQLObjectData.cxx:278
 TSQLObjectData.cxx:279
 TSQLObjectData.cxx:280
 TSQLObjectData.cxx:281
 TSQLObjectData.cxx:282
 TSQLObjectData.cxx:283
 TSQLObjectData.cxx:284
 TSQLObjectData.cxx:285
 TSQLObjectData.cxx:286
 TSQLObjectData.cxx:287
 TSQLObjectData.cxx:288
 TSQLObjectData.cxx:289
 TSQLObjectData.cxx:290
 TSQLObjectData.cxx:291
 TSQLObjectData.cxx:292
 TSQLObjectData.cxx:293
 TSQLObjectData.cxx:294
 TSQLObjectData.cxx:295
 TSQLObjectData.cxx:296
 TSQLObjectData.cxx:297
 TSQLObjectData.cxx:298
 TSQLObjectData.cxx:299
 TSQLObjectData.cxx:300
 TSQLObjectData.cxx:301
 TSQLObjectData.cxx:302
 TSQLObjectData.cxx:303
 TSQLObjectData.cxx:304
 TSQLObjectData.cxx:305
 TSQLObjectData.cxx:306
 TSQLObjectData.cxx:307
 TSQLObjectData.cxx:308
 TSQLObjectData.cxx:309
 TSQLObjectData.cxx:310
 TSQLObjectData.cxx:311
 TSQLObjectData.cxx:312
 TSQLObjectData.cxx:313
 TSQLObjectData.cxx:314
 TSQLObjectData.cxx:315
 TSQLObjectData.cxx:316
 TSQLObjectData.cxx:317
 TSQLObjectData.cxx:318
 TSQLObjectData.cxx:319
 TSQLObjectData.cxx:320
 TSQLObjectData.cxx:321
 TSQLObjectData.cxx:322
 TSQLObjectData.cxx:323
 TSQLObjectData.cxx:324
 TSQLObjectData.cxx:325
 TSQLObjectData.cxx:326
 TSQLObjectData.cxx:327
 TSQLObjectData.cxx:328
 TSQLObjectData.cxx:329
 TSQLObjectData.cxx:330
 TSQLObjectData.cxx:331
 TSQLObjectData.cxx:332
 TSQLObjectData.cxx:333
 TSQLObjectData.cxx:334
 TSQLObjectData.cxx:335
 TSQLObjectData.cxx:336
 TSQLObjectData.cxx:337
 TSQLObjectData.cxx:338
 TSQLObjectData.cxx:339
 TSQLObjectData.cxx:340
 TSQLObjectData.cxx:341
 TSQLObjectData.cxx:342
 TSQLObjectData.cxx:343
 TSQLObjectData.cxx:344
 TSQLObjectData.cxx:345
 TSQLObjectData.cxx:346
 TSQLObjectData.cxx:347
 TSQLObjectData.cxx:348
 TSQLObjectData.cxx:349
 TSQLObjectData.cxx:350
 TSQLObjectData.cxx:351
 TSQLObjectData.cxx:352
 TSQLObjectData.cxx:353
 TSQLObjectData.cxx:354
 TSQLObjectData.cxx:355
 TSQLObjectData.cxx:356
 TSQLObjectData.cxx:357
 TSQLObjectData.cxx:358
 TSQLObjectData.cxx:359
 TSQLObjectData.cxx:360
 TSQLObjectData.cxx:361
 TSQLObjectData.cxx:362
 TSQLObjectData.cxx:363
 TSQLObjectData.cxx:364
 TSQLObjectData.cxx:365
 TSQLObjectData.cxx:366
 TSQLObjectData.cxx:367
 TSQLObjectData.cxx:368
 TSQLObjectData.cxx:369
 TSQLObjectData.cxx:370
 TSQLObjectData.cxx:371
 TSQLObjectData.cxx:372
 TSQLObjectData.cxx:373
 TSQLObjectData.cxx:374
 TSQLObjectData.cxx:375
 TSQLObjectData.cxx:376
 TSQLObjectData.cxx:377
 TSQLObjectData.cxx:378
 TSQLObjectData.cxx:379
 TSQLObjectData.cxx:380
 TSQLObjectData.cxx:381
 TSQLObjectData.cxx:382
 TSQLObjectData.cxx:383
 TSQLObjectData.cxx:384
 TSQLObjectData.cxx:385
 TSQLObjectData.cxx:386
 TSQLObjectData.cxx:387
 TSQLObjectData.cxx:388
 TSQLObjectData.cxx:389
 TSQLObjectData.cxx:390
 TSQLObjectData.cxx:391
 TSQLObjectData.cxx:392
 TSQLObjectData.cxx:393
 TSQLObjectData.cxx:394
 TSQLObjectData.cxx:395
 TSQLObjectData.cxx:396
 TSQLObjectData.cxx:397
 TSQLObjectData.cxx:398
 TSQLObjectData.cxx:399
 TSQLObjectData.cxx:400
 TSQLObjectData.cxx:401
 TSQLObjectData.cxx:402
 TSQLObjectData.cxx:403
 TSQLObjectData.cxx:404
 TSQLObjectData.cxx:405
 TSQLObjectData.cxx:406
 TSQLObjectData.cxx:407
 TSQLObjectData.cxx:408
 TSQLObjectData.cxx:409
 TSQLObjectData.cxx:410
 TSQLObjectData.cxx:411
 TSQLObjectData.cxx:412
 TSQLObjectData.cxx:413
 TSQLObjectData.cxx:414
 TSQLObjectData.cxx:415
 TSQLObjectData.cxx:416
 TSQLObjectData.cxx:417
 TSQLObjectData.cxx:418
 TSQLObjectData.cxx:419
 TSQLObjectData.cxx:420
 TSQLObjectData.cxx:421
 TSQLObjectData.cxx:422
 TSQLObjectData.cxx:423
 TSQLObjectData.cxx:424
 TSQLObjectData.cxx:425
 TSQLObjectData.cxx:426
 TSQLObjectData.cxx:427
 TSQLObjectData.cxx:428
 TSQLObjectData.cxx:429
 TSQLObjectData.cxx:430
 TSQLObjectData.cxx:431
 TSQLObjectData.cxx:432
 TSQLObjectData.cxx:433
 TSQLObjectData.cxx:434
 TSQLObjectData.cxx:435
 TSQLObjectData.cxx:436
 TSQLObjectData.cxx:437
 TSQLObjectData.cxx:438
 TSQLObjectData.cxx:439
 TSQLObjectData.cxx:440
 TSQLObjectData.cxx:441
 TSQLObjectData.cxx:442
 TSQLObjectData.cxx:443
 TSQLObjectData.cxx:444
 TSQLObjectData.cxx:445
 TSQLObjectData.cxx:446
 TSQLObjectData.cxx:447
 TSQLObjectData.cxx:448
 TSQLObjectData.cxx:449
 TSQLObjectData.cxx:450
 TSQLObjectData.cxx:451
 TSQLObjectData.cxx:452
 TSQLObjectData.cxx:453
 TSQLObjectData.cxx:454
 TSQLObjectData.cxx:455
 TSQLObjectData.cxx:456
 TSQLObjectData.cxx:457
 TSQLObjectData.cxx:458
 TSQLObjectData.cxx:459
 TSQLObjectData.cxx:460
 TSQLObjectData.cxx:461
 TSQLObjectData.cxx:462
 TSQLObjectData.cxx:463