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();