20 using namespace oracle::occi;
26 TOracleRow::TOracleRow(ResultSet *rs, vector<MetaData> *fieldMetaData)
29 fFieldInfo = fieldMetaData;
30 fFieldCount = fFieldInfo->size();
40 TOracleRow::~TOracleRow()
48 void TOracleRow::Close(Option_t *)
50 if (fFieldsBuffer!=0) {
51 for (
int n=0;n<fFieldCount;n++)
52 if (fFieldsBuffer[n])
delete[] fFieldsBuffer[n];
53 delete[] fFieldsBuffer;
64 Bool_t TOracleRow::IsValid(Int_t field)
67 Error(
"IsValid",
"row closed");
70 if (field < 0 || field >= (Int_t)fFieldInfo->size()) {
71 Error(
"IsValid",
"field index out of bounds");
80 ULong_t TOracleRow::GetFieldLength(Int_t field)
82 if (!IsValid(field) || fFieldInfo->size() <= 0)
85 MetaData fieldMD = (*fFieldInfo)[field];
87 return fieldMD.getInt(MetaData::ATTR_DATA_SIZE);
92 const char* TOracleRow::GetField(Int_t field)
94 if ((field<0) || (field>=fFieldCount)) {
95 Error(
"TOracleRow",
"GetField(): out-of-range or No RowData/ResultSet/MetaData");
99 return fFieldsBuffer ? fFieldsBuffer[field] : 0;
104 void TOracleRow::GetRowData()
106 if (!fResult || !fFieldInfo || (fFieldCount<=0))
return;
108 fFieldsBuffer =
new char* [fFieldCount];
109 for (
int n=0;n<fFieldCount;n++)
110 fFieldsBuffer[n] = 0;
114 char str_number[200];
116 int fPrecision, fScale, fDataType;
121 for (
int field=0;field<fFieldCount;field++) {
122 if (fResult->isNull(field+1))
continue;
124 fDataType = (*fFieldInfo)[field].getInt(MetaData::ATTR_DATA_TYPE);
128 fPrecision = (*fFieldInfo)[field].getInt(MetaData::ATTR_PRECISION);
129 fScale = (*fFieldInfo)[field].getInt(MetaData::ATTR_SCALE);
131 if ((fScale == 0) || (fPrecision == 0)) {
132 res = fResult->getString(field+1);
134 double_val = fResult->getDouble(field+1);
135 snprintf(str_number,
sizeof(str_number), TSQLServer::GetFloatFormat(), double_val);
144 res = fResult->getString(field+1);
147 res = (fResult->getDate(field+1)).toText(TOracleServer::GetDatimeFormat());
150 case SQLT_TIMESTAMP_TZ:
151 case SQLT_TIMESTAMP_LTZ:
152 res = (fResult->getTimestamp(field+1)).toText(TOracleServer::GetDatimeFormat(), 0);
156 res = fResult->getString(field+1);
159 Error(
"GetRowData",
"Oracle type %d was not yet tested - please inform ROOT developers", fDataType);
163 int len = res.length();
165 fFieldsBuffer[field] =
new char[len+1];
166 strcpy(fFieldsBuffer[field], res.c_str());
170 }
catch (SQLException &oraex) {
171 Error(
"GetRowData",
"%s", (oraex.getMessage()).c_str());