41 ClassImp(TSQLObjectInfo);
 
   45 TSQLObjectInfo::TSQLObjectInfo() : TObject(), fObjId(0), fClassName(), fVersion(0)
 
   51 TSQLObjectInfo::TSQLObjectInfo(Long64_t objid, 
const char *classname, Version_t version)
 
   52    : TObject(), fObjId(objid), fClassName(classname), fVersion(version)
 
   58 TSQLObjectInfo::~TSQLObjectInfo()
 
   68 ClassImp(TSQLObjectData);
 
   73 TSQLObjectData::TSQLObjectData()
 
   74    : TObject(), fInfo(0), fObjId(0), fOwner(kFALSE), fClassData(0), fBlobData(0), fBlobStmt(0), fLocatedColumn(-1),
 
   75      fClassRow(0), fBlobRow(0), fLocatedField(0), fLocatedValue(0), fCurrentBlob(kFALSE), fBlobPrefixName(0),
 
   76      fBlobTypeName(0), fUnpack(0)
 
   83 TSQLObjectData::TSQLObjectData(TSQLClassInfo *sqlinfo, Long64_t objid, TSQLResult *classdata, TSQLRow *classrow,
 
   84                                TSQLResult *blobdata, TSQLStatement *blobstmt)
 
   85    : TObject(), fInfo(sqlinfo), fObjId(objid), fOwner(kFALSE), fClassData(classdata), fBlobData(blobdata),
 
   86      fBlobStmt(blobstmt), fLocatedColumn(-1), fClassRow(classrow), fBlobRow(0), fLocatedField(0), fLocatedValue(0),
 
   87      fCurrentBlob(kFALSE), fBlobPrefixName(0), fBlobTypeName(0), fUnpack(0)
 
   90    if ((fClassData != 0) && (fClassRow == 0)) {
 
   92       fClassRow = fClassData->Next();
 
  101 TSQLObjectData::~TSQLObjectData()
 
  103    if ((fClassData != 0) && fOwner)
 
  122 Int_t TSQLObjectData::GetNumClassFields()
 
  125       return fClassData->GetFieldCount();
 
  132 const char *TSQLObjectData::GetClassFieldName(Int_t n)
 
  135       return fClassData->GetFieldName(n);
 
  142 Bool_t TSQLObjectData::LocateColumn(
const char *colname, Bool_t isblob)
 
  152    fCurrentBlob = kFALSE;
 
  154    if ((fClassData == 0) || (fClassRow == 0))
 
  159    Int_t ncol = fInfo->FindColumn(colname, kFALSE);
 
  161       fLocatedColumn = ncol;
 
  162       fLocatedField = GetClassFieldName(ncol);
 
  163       fLocatedValue = fClassRow->GetField(ncol);
 
  177    if (fLocatedField == 0)
 
  183    if ((fBlobRow == 0) && (fBlobStmt == 0))
 
  186    fCurrentBlob = kTRUE;
 
  196 Bool_t TSQLObjectData::ShiftBlobRow()
 
  198    if (fBlobStmt != 0) {
 
  199       Bool_t res = fBlobStmt->NextResultRow();
 
  208    fBlobRow = fBlobData ? fBlobData->Next() : 0;
 
  209    return fBlobRow != 0;
 
  215 Bool_t TSQLObjectData::ExtractBlobValues()
 
  217    const char *name = 0;
 
  219    Bool_t hasdata = kFALSE;
 
  221    if (fBlobStmt != 0) {
 
  222       name = fBlobStmt->GetString(0);
 
  223       fLocatedValue = fBlobStmt->GetString(1);
 
  229          fLocatedValue = fBlobRow->GetField(1);
 
  230          name = fBlobRow->GetField(0);
 
  240    const char *separ = strstr(name, 
":"); 
 
  244       fBlobTypeName = name;
 
  246       fBlobPrefixName = name;
 
  247       separ += strlen(
":"); 
 
  248       fBlobTypeName = separ;
 
  263 void TSQLObjectData::AddUnpack(
const char *tname, 
const char *value)
 
  265    TNamed *str = 
new TNamed(tname, value);
 
  267       fUnpack = 
new TObjArray();
 
  269       fBlobTypeName = str->GetName();
 
  270       fLocatedValue = str->GetTitle();
 
  279 void TSQLObjectData::AddUnpackInt(
const char *tname, Int_t value)
 
  282    sbuf.Form(
"%d", value);
 
  283    AddUnpack(tname, sbuf.Data());
 
  289 void TSQLObjectData::ShiftToNextValue()
 
  291    Bool_t doshift = kTRUE;
 
  294       TObject *prev = fUnpack->First();
 
  295       fUnpack->Remove(prev);
 
  298       if (fUnpack->GetLast() >= 0) {
 
  299          TNamed *curr = (TNamed *)fUnpack->First();
 
  301          fBlobTypeName = curr->GetName();
 
  302          fLocatedValue = curr->GetTitle();
 
  314    } 
else if (fClassData != 0) {
 
  317       if (fLocatedColumn < GetNumClassFields()) {
 
  318          fLocatedField = GetClassFieldName(fLocatedColumn);
 
  319          fLocatedValue = fClassRow->GetField(fLocatedColumn);
 
  330 Bool_t TSQLObjectData::VerifyDataType(
const char *tname, Bool_t errormsg)
 
  334          Error(
"VerifyDataType", 
"Data type not specified");
 
  343       if ((fBlobTypeName == 0) && errormsg) {
 
  344          Error(
"VerifyDataType", 
"fBlobTypeName is null");
 
  348    TString v1(fBlobTypeName);
 
  354          Error(
"VerifyDataType", 
"Data type missmatch %s - %s", fBlobTypeName, tname);
 
  364 Bool_t TSQLObjectData::PrepareForRawData()
 
  366    if (!ExtractBlobValues())
 
  369    fCurrentBlob = kTRUE;
 
  386 ClassImp(TSQLObjectDataPool);
 
  390 TSQLObjectDataPool::TSQLObjectDataPool() : TObject(), fInfo(0), fClassData(0), fIsMoreRows(kTRUE), fRowsPool(0)
 
  396 TSQLObjectDataPool::TSQLObjectDataPool(TSQLClassInfo *info, TSQLResult *data)
 
  397    : TObject(), fInfo(info), fClassData(data), fIsMoreRows(kTRUE), fRowsPool(0)
 
  405 TSQLObjectDataPool::~TSQLObjectDataPool()
 
  409    if (fRowsPool != 0) {
 
  418 TSQLRow *TSQLObjectDataPool::GetObjectRow(Long64_t objid)
 
  425    if (fRowsPool != 0) {
 
  426       TObjLink *link = fRowsPool->FirstLink();
 
  428          TSQLRow *row = (TSQLRow *)link->GetObject();
 
  429          rowid = sqlio::atol64(row->GetField(0));
 
  430          if (rowid == objid) {
 
  431             fRowsPool->Remove(link);
 
  439    while (fIsMoreRows) {
 
  440       TSQLRow *row = fClassData->Next();
 
  442          fIsMoreRows = kFALSE;
 
  444          rowid = sqlio::atol64(row->GetField(0));
 
  448             fRowsPool = 
new TList();