/* the implement of TOracleRow. 2000,3,18 by T.GUO*/ #include "OracleRow.h" #include //extern char *_itoa( Int_t value, char *string, Int_t radix ); ClassImp(TOracleRow) //______________________________________________________________________________ TOracleRow::TOracleRow(SQLDA *res) { // Single row of query result. fResult = res; } //______________________________________________________________________________ TOracleRow::~TOracleRow() { // Destroy row object. if (fResult) Close(); } //______________________________________________________________________________ void TOracleRow::Close(Option_t *) { fResult= 0; return; } //______________________________________________________________________________ Bool_t TOracleRow::IsValid(Int_t field) { // Check if row is open and field index within range. if (field < 0 || field >= fResult->F) { Error("IsValid", "field index out of bounds"); return kFALSE; } else return kTRUE; } //______________________________________________________________________________ ULong_t TOracleRow::GetFieldLength(Int_t field) { // Get length in bytes of specified field. if (!IsValid(field)) return 0; else if ((fResult->I[field]<0)&&(fResult->T[field]==4)) return fResult->L[field]+3; else return fResult->L[field]; } //-------------------------------------------------------- Int_t TOracleRow::GetFieldType(Int_t field) { // Get length in bytes of specified field. if (!IsValid(field)) return 0; else if (fResult->I[field]<0) return 100; else return fResult->T[field]; } //______________________________________________________________________________ char *TOracleRow::GetFieldData(Int_t field) { // Get specified field from row (0 <= field < GetFieldCount()). char fField[4001]; char *c_null=" "; if (!IsValid(field)) return 0; else if (fResult->I[field]<0) { strcpy(fField,c_null); fField[GetFieldLength(field)]='\0'; return fField; }//guo else { if ((fResult->T[field]==3)||(fResult->T[field]==4)) { //Int_t datatype or float datatype return fResult->V[field]; } else { /* character string */ strcpy(fField,fResult->V[field]); fField[GetFieldLength(field)]='\0'; return fField;//guo } } } //______________________________________________________________________________ //______________________________________________________________________________ const char *TOracleRow::GetField(Int_t field) {/* specified field from row (0 <= field < GetFieldCount()).*/ char fieldstr[4001]; int j=0; if (!IsValid(field)) return 0; else { j=GetFieldType(field); switch(j){ case 3: sprintf(fieldstr,"%-*d ",(int)GetFieldLength(field),*(int*)GetFieldData(field)); break; case 4: sprintf(fieldstr,"%-*f ",(int)GetFieldLength(field),*(float*)GetFieldData(field)); break; default: sprintf(fieldstr,"%-*.*s",(int)GetFieldLength(field),(int)GetFieldLength(field),GetFieldData(field)); break; } return fieldstr; } } //______________________________________________________________________________