#include "TOracleStatement.h"
#include "TOracleServer.h"
#include "TDataType.h"
#include <stdlib.h>
#include "snprintf.h"
ClassImp(TOracleStatement)
TOracleStatement::TOracleStatement(Environment* env, Connection* conn, Statement* stmt, Int_t niter, Bool_t errout) :
TSQLStatement(errout),
fEnv(env),
fConn(conn),
fStmt(stmt),
fResult(0),
fFieldInfo(0),
fBuffer(0),
fBufferSize(0),
fNumIterations(niter),
fIterCounter(0),
fWorkingMode(0),
fTimeFmt(TOracleServer::GetDatimeFormat())
{
if (fStmt) {
fStmt->setPrefetchMemorySize(1000000);
fStmt->setPrefetchRowCount(niter);
fStmt->setMaxIterations(niter);
}
}
TOracleStatement::~TOracleStatement()
{
Close();
}
void TOracleStatement::Close(Option_t *)
{
if (fFieldInfo)
delete fFieldInfo;
if (fResult && fStmt)
fStmt->closeResultSet(fResult);
if (fConn && fStmt)
fConn->terminateStatement(fStmt);
CloseBuffer();
fConn = 0;
fStmt = 0;
fResult = 0;
fFieldInfo = 0;
fIterCounter = 0;
}
#define CheckStatement(method, res) \
{ \
ClearError(); \
if (fStmt==0) { \
SetError(-1,"Statement is not correctly initialized",method); \
return res; \
} \
}
#define CheckSetPar(method) \
{ \
CheckStatement(method, kFALSE); \
if (!IsParSettMode()) { \
SetError(-1,"Parameters cannot be set for this statement", method); \
return kFALSE; \
} \
if (npar<0) { \
TString errmsg("Invalid parameter number "); \
errmsg+= npar; \
SetError(-1,errmsg.Data(),method); \
return kFALSE; \
} \
}
#define CheckGetField(method, defres) \
{ \
ClearError(); \
if (!IsResultSet()) { \
SetError(-1,"There is no result set for statement", method); \
return defres; \
} \
if ((npar<0) || (npar>=fBufferSize)) { \
TString errmsg("Invalid parameter number "); \
errmsg+= npar; \
SetError(-1,errmsg.Data(),method); \
return defres; \
} \
}
void TOracleStatement::SetBufferSize(Int_t size)
{
CloseBuffer();
if (size<=0) return;
fBufferSize = size;
fBuffer = new TBufferRec[size];
for (Int_t n=0;n<fBufferSize;n++) {
fBuffer[n].strbuf = 0;
fBuffer[n].strbufsize = -1;
fBuffer[n].namebuf = 0;
}
}
void TOracleStatement::CloseBuffer()
{
if (fBuffer) {
for (Int_t n=0;n<fBufferSize;n++) {
delete[] fBuffer[n].strbuf;
delete[] fBuffer[n].namebuf;
}
delete[] fBuffer;
}
fBuffer = 0;
fBufferSize = 0;
}
Bool_t TOracleStatement::Process()
{
CheckStatement("Process", kFALSE);
try {
if (IsParSettMode()) {
fStmt->executeUpdate();
fWorkingMode = 0;
} else {
fStmt->execute();
}
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "Process");
}
return kFALSE;
}
Int_t TOracleStatement::GetNumAffectedRows()
{
CheckStatement("GetNumAffectedRows", -1);
try {
return fStmt->getUpdateCount();
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetNumAffectedRows");
}
return -1;
}
Int_t TOracleStatement::GetNumParameters()
{
CheckStatement("GetNumParameters", -1);
Info("GetParametersNumber","Not implemented");
return 0;
}
Bool_t TOracleStatement::SetNull(Int_t npar)
{
CheckSetPar("SetNull");
try {
fStmt->setNull(npar+1, OCCIINT);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetNull");
}
return kFALSE;
}
Bool_t TOracleStatement::SetInt(Int_t npar, Int_t value)
{
CheckSetPar("SetInt");
try {
fStmt->setInt(npar+1, value);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetInt");
}
return kFALSE;
}
Bool_t TOracleStatement::SetUInt(Int_t npar, UInt_t value)
{
CheckSetPar("SetUInt");
try {
fStmt->setUInt(npar+1, value);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetUInt");
}
return kFALSE;
}
Bool_t TOracleStatement::SetLong(Int_t npar, Long_t value)
{
CheckSetPar("SetLong");
try {
fStmt->setNumber(npar+1, Number(value));
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetLong");
}
return kFALSE;
}
Bool_t TOracleStatement::SetLong64(Int_t npar, Long64_t value)
{
CheckSetPar("SetLong64");
try {
fStmt->setNumber(npar+1, Number((long double)value));
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetLong64");
}
return kFALSE;
}
Bool_t TOracleStatement::SetULong64(Int_t npar, ULong64_t value)
{
CheckSetPar("SetULong64");
try {
fStmt->setNumber(npar+1, Number((long double)value));
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetULong64");
}
return kFALSE;
}
Bool_t TOracleStatement::SetDouble(Int_t npar, Double_t value)
{
CheckSetPar("SetDouble");
try {
fStmt->setDouble(npar+1, value);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetDouble");
}
return kFALSE;
}
Bool_t TOracleStatement::SetString(Int_t npar, const char* value, Int_t maxsize)
{
CheckSetPar("SetString");
try {
if (fIterCounter==1) {
fStmt->setDatabaseNCHARParam(npar+1, true);
fStmt->setMaxParamSize(npar+1, maxsize);
}
fStmt->setString(npar+1, value);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetString");
}
return kFALSE;
}
Bool_t TOracleStatement::SetBinary(Int_t npar, void* mem, Long_t size, Long_t maxsize)
{
CheckSetPar("SetBinary");
try {
if (fIterCounter==1)
fStmt->setMaxParamSize(npar+1, maxsize);
Bytes buf((unsigned char*) mem, size);
fStmt->setBytes(npar+1, buf);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetBinary");
}
return kFALSE;
}
Bool_t TOracleStatement::SetDate(Int_t npar, Int_t year, Int_t month, Int_t day)
{
CheckSetPar("SetDate");
try {
Date tm = fStmt->getDate(npar+1);
int o_year;
unsigned int o_month, o_day, o_hour, o_minute, o_second;
tm.getDate(o_year, o_month, o_day, o_hour, o_minute, o_second);
tm.setDate(year, month, day, o_hour, o_minute, o_second);
fStmt->setDate(npar+1, tm);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetDate");
}
return kFALSE;
}
Bool_t TOracleStatement::SetTime(Int_t npar, Int_t hour, Int_t min, Int_t sec)
{
CheckSetPar("SetTime");
try {
Date tm = fStmt->getDate(npar+1);
int o_year;
unsigned int o_month, o_day, o_hour, o_minute, o_second;
tm.getDate(o_year, o_month, o_day, o_hour, o_minute, o_second);
tm.setDate(o_year, o_month, o_day, hour, min, sec);
fStmt->setDate(npar+1, tm);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetTime");
}
return kFALSE;
}
Bool_t TOracleStatement::SetDatime(Int_t npar, Int_t year, Int_t month, Int_t day, Int_t hour, Int_t min, Int_t sec)
{
CheckSetPar("SetDatime");
try {
Date tm(fEnv, year, month, day, hour, min, sec);
fStmt->setDate(npar+1, tm);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetDatime");
}
return kFALSE;
}
Bool_t TOracleStatement::SetTimestamp(Int_t npar, Int_t year, Int_t month, Int_t day, Int_t hour, Int_t min, Int_t sec, Int_t frac)
{
CheckSetPar("SetTimestamp");
try {
Timestamp tm(fEnv, year, month, day, hour, min, sec, frac);
fStmt->setTimestamp(npar+1, tm);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetTimestamp");
}
return kFALSE;
}
Bool_t TOracleStatement::SetVInt(Int_t npar, const std::vector<Int_t> value, const char* schemaName, const char* typeName)
{
CheckSetPar("SetVInt");
try {
setVector(fStmt, npar+1, value, schemaName, typeName);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetVInt");
}
return kFALSE;
}
Bool_t TOracleStatement::SetVUInt(Int_t npar, const std::vector<UInt_t> value, const char* schemaName, const char* typeName)
{
CheckSetPar("SetVUInt");
try {
setVector(fStmt, npar+1, value, schemaName, typeName);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetVUInt");
}
return kFALSE;
}
Bool_t TOracleStatement::SetVLong(Int_t npar, const std::vector<Long_t> value, const char* schemaName, const char* typeName)
{
CheckSetPar("SetVLong");
try {
std::vector<Number> nvec;
for (std::vector<Long_t>::const_iterator it = value.begin();
it != value.end();
it++) {
nvec.push_back(Number(*it));
}
setVector(fStmt, npar+1, nvec, schemaName, typeName);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetVLong");
}
return kFALSE;
}
Bool_t TOracleStatement::SetVLong64(Int_t npar, const std::vector<Long64_t> value, const char* schemaName, const char* typeName)
{
CheckSetPar("SetVLong64");
try {
std::vector<Number> nvec;
for (std::vector<Long64_t>::const_iterator it = value.begin();
it != value.end();
it++) {
nvec.push_back(Number((long double)*it));
}
setVector(fStmt, npar+1, nvec, schemaName, typeName);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetVLong64");
}
return kFALSE;
}
Bool_t TOracleStatement::SetVULong64(Int_t npar, std::vector<ULong64_t> value, const char* schemaName, const char* typeName)
{
CheckSetPar("SetVULong64");
try {
std::vector<Number> nvec;
for (std::vector<ULong64_t>::const_iterator it = value.begin();
it != value.end();
it++) {
nvec.push_back(Number((long double)*it));
}
setVector(fStmt, npar+1, nvec, schemaName, typeName);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetVULong64");
}
return kFALSE;
}
Bool_t TOracleStatement::SetVDouble(Int_t npar, const std::vector<Double_t> value, const char* schemaName, const char* typeName)
{
CheckSetPar("SetVDouble");
try {
setVector(fStmt, npar+1, value, schemaName, typeName);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetVDouble");
}
return kFALSE;
}
Bool_t TOracleStatement::NextIteration()
{
CheckStatement("NextIteration", kFALSE);
try {
fWorkingMode=1;
if ((fIterCounter % fNumIterations == 0) && (fIterCounter>0)) {
fStmt->executeUpdate();
}
if (fIterCounter % fNumIterations != 0) {
fStmt->addIteration();
}
fIterCounter++;
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "NextIteration");
}
return kFALSE;
}
Bool_t TOracleStatement::StoreResult()
{
CheckStatement("StoreResult", kFALSE);
try {
if (fStmt->status() == Statement::RESULT_SET_AVAILABLE) {
fResult = fStmt->getResultSet();
fFieldInfo = (fResult==0) ? 0 : new std::vector<MetaData>(fResult->getColumnListMetaData());
Int_t count = (fFieldInfo==0) ? 0 : fFieldInfo->size();
SetBufferSize(count);
if ((fResult!=0) && (count>0)) fWorkingMode = 2;
return IsResultSet();
}
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "StoreResult");
}
return kFALSE;
}
Bool_t TOracleStatement::SetMaxFieldSize(Int_t nfield, Long_t maxsize)
{
CheckStatement("SetMaxFieldSize", kFALSE);
try {
if (fResult)
fResult->setMaxColumnSize(nfield+1, maxsize);
else
fStmt->setMaxParamSize(nfield+1, maxsize);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "SetMaxFieldSize");
}
return kFALSE;
}
Int_t TOracleStatement::GetNumFields()
{
return IsResultSet() ? fBufferSize : -1;
}
const char* TOracleStatement::GetFieldName(Int_t npar)
{
CheckGetField("GetFieldName", 0);
if (!IsResultSet() || (npar<0) || (npar>=fBufferSize)) return 0;
if (fBuffer[npar].namebuf!=0) return fBuffer[npar].namebuf;
std::string buff = (*fFieldInfo)[npar].getString(MetaData::ATTR_NAME);
if (buff.length()==0) return 0;
fBuffer[npar].namebuf = new char[buff.length()+1];
strcpy(fBuffer[npar].namebuf, buff.c_str());
return fBuffer[npar].namebuf;
}
Bool_t TOracleStatement::NextResultRow()
{
ClearError();
if (fResult==0) {
SetError(-1,"There is no result set for statement", "NextResultRow");
return kFALSE;
}
if (fResult==0) return kFALSE;
try {
for (int n=0;n<fBufferSize;n++) {
if (fBuffer[n].strbuf)
delete[] fBuffer[n].strbuf;
fBuffer[n].strbuf = 0;
fBuffer[n].strbufsize = -1;
}
if (!fResult->next()) {
fWorkingMode = 0;
CloseBuffer();
return kFALSE;
}
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "NextResultRow");
if (oraex.getErrorCode()==32108)
Info("NextResultRow", "Use TSQLStatement::SetMaxFieldSize() to solve a problem");
}
return kFALSE;
}
Bool_t TOracleStatement::IsNull(Int_t npar)
{
CheckGetField("IsNull", kFALSE);
try {
return fResult->isNull(npar+1);
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "IsNull");
}
return kTRUE;
}
Int_t TOracleStatement::GetInt(Int_t npar)
{
CheckGetField("GetInt", 0);
Int_t res = 0;
try {
if (!fResult->isNull(npar+1))
res = fResult->getInt(npar+1);
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetInt");
}
return res;
}
UInt_t TOracleStatement::GetUInt(Int_t npar)
{
CheckGetField("GetUInt", 0);
UInt_t res = 0;
try {
if (!fResult->isNull(npar+1))
res = fResult->getUInt(npar+1);
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetUInt");
}
return res;
}
Long_t TOracleStatement::GetLong(Int_t npar)
{
CheckGetField("GetLong", 0);
Long_t res = 0;
try {
if (!fResult->isNull(npar+1))
res = (Long_t) fResult->getNumber(npar+1);
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetLong");
}
return res;
}
Long64_t TOracleStatement::GetLong64(Int_t npar)
{
CheckGetField("GetLong64", 0);
Long64_t res = 0;
try {
if (!fResult->isNull(npar+1))
res = (Long64_t) (long double) fResult->getNumber(npar+1);
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetLong64");
}
return res;
}
ULong64_t TOracleStatement::GetULong64(Int_t npar)
{
CheckGetField("GetULong64", 0);
ULong64_t res = 0;
try {
if (!fResult->isNull(npar+1))
res = (ULong64_t) (long double) fResult->getNumber(npar+1);
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetULong64");
}
return res;
}
Double_t TOracleStatement::GetDouble(Int_t npar)
{
CheckGetField("GetDouble", 0.);
Double_t res = 0;
try {
if (!fResult->isNull(npar+1))
res = fResult->getDouble(npar+1);
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetDouble");
}
return res;
}
const char* TOracleStatement::GetString(Int_t npar)
{
CheckGetField("GetString", 0);
if (fBuffer[npar].strbuf!=0) return fBuffer[npar].strbuf;
try {
if (fResult->isNull(npar+1)) return 0;
int datatype = (*fFieldInfo)[npar].getInt(MetaData::ATTR_DATA_TYPE);
std::string res;
switch (datatype) {
case SQLT_NUM: {
int prec = (*fFieldInfo)[npar].getInt(MetaData::ATTR_PRECISION);
int scale = (*fFieldInfo)[npar].getInt(MetaData::ATTR_SCALE);
if ((scale == 0) || (prec == 0)) {
res = fResult->getString(npar+1);
} else {
double double_val = fResult->getDouble(npar+1);
char str_number[50];
snprintf(str_number, sizeof(str_number), TSQLServer::GetFloatFormat(), double_val);
res = str_number;
}
break;
}
case SQLT_CHR:
case SQLT_VCS:
case SQLT_AFC:
case SQLT_AVC:
res = fResult->getString(npar+1);
break;
case SQLT_DAT:
res = (fResult->getDate(npar+1)).toText(fTimeFmt.Data());
break;
case SQLT_TIMESTAMP:
case SQLT_TIMESTAMP_TZ:
case SQLT_TIMESTAMP_LTZ:
res = (fResult->getTimestamp(npar+1)).toText(fTimeFmt.Data(), 0);
break;
default:
res = fResult->getString(npar+1);
Info("getString","Type %d may not be supported", datatype);
}
int len = res.length();
if (len>0) {
fBuffer[npar].strbuf = new char[len+1];
fBuffer[npar].strbufsize = len+1;
strcpy(fBuffer[npar].strbuf, res.c_str());
}
return fBuffer[npar].strbuf;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetString");
}
return 0;
}
Bool_t TOracleStatement::GetBinary(Int_t npar, void* &mem, Long_t& size)
{
mem = 0;
size = 0;
CheckGetField("GetBinary", kFALSE);
if (fBuffer[npar].strbufsize>=0) {
mem = fBuffer[npar].strbuf;
size = fBuffer[npar].strbufsize;
return kTRUE;
}
try {
if (fResult->isNull(npar+1)) return kTRUE;
int datatype = (*fFieldInfo)[npar].getInt(MetaData::ATTR_DATA_TYPE);
switch (datatype) {
case SQLT_LNG: {
Bytes parbytes = fResult->getBytes(npar+1);
size = parbytes.length();
fBuffer[npar].strbufsize = size;
if (size>0) {
mem = malloc(size);
fBuffer[npar].strbuf = (char*) mem;
parbytes.getBytes((unsigned char*) mem, size);
}
break;
}
case SQLT_BLOB: {
Blob parblob = fResult->getBlob(npar+1);
size = parblob.length();
fBuffer[npar].strbufsize = size;
if (size>0) {
mem = malloc(size);
fBuffer[npar].strbuf = (char*) mem;
parblob.read(size, (unsigned char*) mem, size);
}
break;
}
case SQLT_CLOB: {
Clob parclob = fResult->getClob(npar+1);
size = parclob.length();
fBuffer[npar].strbufsize = size;
if (size>0) {
mem = malloc(size);
fBuffer[npar].strbuf = (char*) mem;
parclob.read(size, (unsigned char*) mem, size);
}
break;
}
case SQLT_BFILEE:
case SQLT_CFILEE: {
Bfile parbfile = fResult->getBfile(npar+1);
size = parbfile.length();
fBuffer[npar].strbufsize = size;
if (size>0) {
mem = malloc(size);
fBuffer[npar].strbuf = (char*) mem;
parbfile.read(size, (unsigned char*) mem, size);
}
break;
}
default:
Error("GetBinary", "Oracle data type %d not supported", datatype);
SetError(-1, "Unsupported type for binary convertion", "GetBinary");
return false;
}
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetBinary");
}
return kFALSE;
}
Bool_t TOracleStatement::GetDate(Int_t npar, Int_t& year, Int_t& month, Int_t& day)
{
Int_t hour, min, sec;
return GetDatime(npar, year, month, day, hour, min, sec);
}
Bool_t TOracleStatement::GetTime(Int_t npar, Int_t& hour, Int_t& min, Int_t& sec)
{
Int_t year, month, day;
return GetDatime(npar, year, month, day, hour, min, sec);
}
Bool_t TOracleStatement::GetDatime(Int_t npar, Int_t& year, Int_t& month, Int_t& day, Int_t& hour, Int_t& min, Int_t& sec)
{
CheckGetField("GetDatime", kFALSE);
try {
if (!fResult->isNull(npar+1)) {
int datatype = (*fFieldInfo)[npar].getInt(MetaData::ATTR_DATA_TYPE);
if (datatype!=SQLT_DAT) return kFALSE;
Date tm = fResult->getDate(npar+1);
int o_year;
unsigned int o_month, o_day, o_hour, o_minute, o_second;
tm.getDate(o_year, o_month, o_day, o_hour, o_minute, o_second);
year = (Int_t) o_year;
month = (Int_t) o_month;
day = (Int_t) o_day;
hour = (Int_t) o_hour;
min = (Int_t) o_minute;
sec = (Int_t) o_second;
return kTRUE;
}
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetDatime");
}
return kFALSE;
}
Bool_t TOracleStatement::GetTimestamp(Int_t npar, Int_t& year, Int_t& month, Int_t& day, Int_t& hour, Int_t& min, Int_t& sec, Int_t& frac)
{
CheckGetField("GetTimestamp", kFALSE);
try {
if (!fResult->isNull(npar+1)) {
int datatype = (*fFieldInfo)[npar].getInt(MetaData::ATTR_DATA_TYPE);
if ((datatype!=SQLT_TIMESTAMP) &&
(datatype!=SQLT_TIMESTAMP_TZ) &&
(datatype!=SQLT_TIMESTAMP_LTZ)) return kFALSE;
Timestamp tm = fResult->getTimestamp(npar+1);
int o_year;
unsigned int o_month, o_day, o_hour, o_minute, o_second, o_frac;
tm.getDate(o_year, o_month, o_day);
tm.getTime(o_hour, o_minute, o_second, o_frac);
year = (Int_t) o_year;
month = (Int_t) o_month;
day = (Int_t) o_day;
hour = (Int_t) o_hour;
min = (Int_t) o_minute;
sec = (Int_t) o_second;
frac = (Int_t) o_frac;
return kTRUE;
}
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetTimestamp");
}
return kFALSE;
}
Bool_t TOracleStatement::GetVInt(Int_t npar, std::vector<Int_t> &value)
{
CheckGetField("GetVInt", kFALSE);
try {
if (!fResult->isNull(npar+1))
getVector(fResult, npar+1, value);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetVInt");
}
return kFALSE;
}
Bool_t TOracleStatement::GetVUInt(Int_t npar, std::vector<UInt_t> &value)
{
CheckGetField("GetVUInt", kFALSE);
try {
if (!fResult->isNull(npar+1))
getVector(fResult, npar+1, value);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetVUInt");
}
return kFALSE;
}
Bool_t TOracleStatement::GetVLong(Int_t npar, std::vector<Long_t> &value)
{
CheckGetField("GetVLong", kFALSE);
try {
std::vector<Number> res;
if (!fResult->isNull(npar+1))
getVector(fResult, npar+1, res);
for (std::vector<Number>::const_iterator it = res.begin();
it != res.end();
it++ ) {
value.push_back((Long_t)*it);
}
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetVLong");
}
return kFALSE;
}
Bool_t TOracleStatement::GetVLong64(Int_t npar, std::vector<Long64_t> &value)
{
CheckGetField("GetVLong64", kFALSE);
try {
std::vector<Number> res;
if (!fResult->isNull(npar+1))
getVector(fResult, npar+1, res);
for (std::vector<Number>::const_iterator it = res.begin();
it != res.end();
it++ ) {
value.push_back((Long_t)*it);
}
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetVLong64");
}
return kFALSE;
}
Bool_t TOracleStatement::GetVULong64(Int_t npar, std::vector<ULong64_t> &value)
{
CheckGetField("GetVULong64", kFALSE);
try {
std::vector<Number> res;
if (!fResult->isNull(npar+1))
getVector(fResult, npar+1, res);
for (std::vector<Number>::const_iterator it = res.begin();
it != res.end();
it++ ) {
value.push_back((Long_t)(long double)*it);
}
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetVULong64");
}
return kFALSE;
}
Bool_t TOracleStatement::GetVDouble(Int_t npar, std::vector<Double_t> &value)
{
CheckGetField("GetVDouble", kFALSE);
try {
if (!fResult->isNull(npar+1))
getVector(fResult, npar+1, value);
return kTRUE;
} catch (SQLException &oraex) {
SetError(oraex.getErrorCode(), oraex.getMessage().c_str(), "GetVDouble");
}
return kFALSE;
}
TOracleStatement.cxx:1000 TOracleStatement.cxx:1001 TOracleStatement.cxx:1002 TOracleStatement.cxx:1003 TOracleStatement.cxx:1004 TOracleStatement.cxx:1005 TOracleStatement.cxx:1006 TOracleStatement.cxx:1007 TOracleStatement.cxx:1008 TOracleStatement.cxx:1009 TOracleStatement.cxx:1010 TOracleStatement.cxx:1011 TOracleStatement.cxx:1012 TOracleStatement.cxx:1013 TOracleStatement.cxx:1014 TOracleStatement.cxx:1015 TOracleStatement.cxx:1016 TOracleStatement.cxx:1017 TOracleStatement.cxx:1018 TOracleStatement.cxx:1019 TOracleStatement.cxx:1020 TOracleStatement.cxx:1021 TOracleStatement.cxx:1022 TOracleStatement.cxx:1023 TOracleStatement.cxx:1024 TOracleStatement.cxx:1025 TOracleStatement.cxx:1026 TOracleStatement.cxx:1027 TOracleStatement.cxx:1028 TOracleStatement.cxx:1029 TOracleStatement.cxx:1030 TOracleStatement.cxx:1031 TOracleStatement.cxx:1032 TOracleStatement.cxx:1033 TOracleStatement.cxx:1034 TOracleStatement.cxx:1035 TOracleStatement.cxx:1036 TOracleStatement.cxx:1037 TOracleStatement.cxx:1038 TOracleStatement.cxx:1039 TOracleStatement.cxx:1040 TOracleStatement.cxx:1041 TOracleStatement.cxx:1042 TOracleStatement.cxx:1043 TOracleStatement.cxx:1044 TOracleStatement.cxx:1045 TOracleStatement.cxx:1046 TOracleStatement.cxx:1047 TOracleStatement.cxx:1048 TOracleStatement.cxx:1049 TOracleStatement.cxx:1050 TOracleStatement.cxx:1051 TOracleStatement.cxx:1052 TOracleStatement.cxx:1053 TOracleStatement.cxx:1054 TOracleStatement.cxx:1055 TOracleStatement.cxx:1056 TOracleStatement.cxx:1057 TOracleStatement.cxx:1058 TOracleStatement.cxx:1059 TOracleStatement.cxx:1060 TOracleStatement.cxx:1061 TOracleStatement.cxx:1062 TOracleStatement.cxx:1063 TOracleStatement.cxx:1064 TOracleStatement.cxx:1065 TOracleStatement.cxx:1066 TOracleStatement.cxx:1067 TOracleStatement.cxx:1068 TOracleStatement.cxx:1069 TOracleStatement.cxx:1070 TOracleStatement.cxx:1071 TOracleStatement.cxx:1072 TOracleStatement.cxx:1073 TOracleStatement.cxx:1074 TOracleStatement.cxx:1075 TOracleStatement.cxx:1076 TOracleStatement.cxx:1077 TOracleStatement.cxx:1078 TOracleStatement.cxx:1079 TOracleStatement.cxx:1080 TOracleStatement.cxx:1081 TOracleStatement.cxx:1082 TOracleStatement.cxx:1083 TOracleStatement.cxx:1084 TOracleStatement.cxx:1085 TOracleStatement.cxx:1086 TOracleStatement.cxx:1087 TOracleStatement.cxx:1088 TOracleStatement.cxx:1089 TOracleStatement.cxx:1090 TOracleStatement.cxx:1091 TOracleStatement.cxx:1092 TOracleStatement.cxx:1093 TOracleStatement.cxx:1094 TOracleStatement.cxx:1095 TOracleStatement.cxx:1096 TOracleStatement.cxx:1097 TOracleStatement.cxx:1098 TOracleStatement.cxx:1099 TOracleStatement.cxx:1100 TOracleStatement.cxx:1101 TOracleStatement.cxx:1102 TOracleStatement.cxx:1103 TOracleStatement.cxx:1104 TOracleStatement.cxx:1105 TOracleStatement.cxx:1106 TOracleStatement.cxx:1107 TOracleStatement.cxx:1108 TOracleStatement.cxx:1109 TOracleStatement.cxx:1110 TOracleStatement.cxx:1111 TOracleStatement.cxx:1112 TOracleStatement.cxx:1113 TOracleStatement.cxx:1114 TOracleStatement.cxx:1115 TOracleStatement.cxx:1116 TOracleStatement.cxx:1117 TOracleStatement.cxx:1118 TOracleStatement.cxx:1119 TOracleStatement.cxx:1120 TOracleStatement.cxx:1121 TOracleStatement.cxx:1122 TOracleStatement.cxx:1123 TOracleStatement.cxx:1124 TOracleStatement.cxx:1125 TOracleStatement.cxx:1126 TOracleStatement.cxx:1127 TOracleStatement.cxx:1128 TOracleStatement.cxx:1129 TOracleStatement.cxx:1130 TOracleStatement.cxx:1131 TOracleStatement.cxx:1132 TOracleStatement.cxx:1133 TOracleStatement.cxx:1134 TOracleStatement.cxx:1135 TOracleStatement.cxx:1136 TOracleStatement.cxx:1137 TOracleStatement.cxx:1138 TOracleStatement.cxx:1139 TOracleStatement.cxx:1140 TOracleStatement.cxx:1141 TOracleStatement.cxx:1142 TOracleStatement.cxx:1143 TOracleStatement.cxx:1144 TOracleStatement.cxx:1145 TOracleStatement.cxx:1146 TOracleStatement.cxx:1147 TOracleStatement.cxx:1148 TOracleStatement.cxx:1149 TOracleStatement.cxx:1150 TOracleStatement.cxx:1151 TOracleStatement.cxx:1152 TOracleStatement.cxx:1153 TOracleStatement.cxx:1154 TOracleStatement.cxx:1155 TOracleStatement.cxx:1156 TOracleStatement.cxx:1157 TOracleStatement.cxx:1158 TOracleStatement.cxx:1159 TOracleStatement.cxx:1160 TOracleStatement.cxx:1161 TOracleStatement.cxx:1162 TOracleStatement.cxx:1163 TOracleStatement.cxx:1164 TOracleStatement.cxx:1165 TOracleStatement.cxx:1166 TOracleStatement.cxx:1167 TOracleStatement.cxx:1168 TOracleStatement.cxx:1169 TOracleStatement.cxx:1170 TOracleStatement.cxx:1171 TOracleStatement.cxx:1172 TOracleStatement.cxx:1173 TOracleStatement.cxx:1174 TOracleStatement.cxx:1175 TOracleStatement.cxx:1176 TOracleStatement.cxx:1177 TOracleStatement.cxx:1178 TOracleStatement.cxx:1179 TOracleStatement.cxx:1180 TOracleStatement.cxx:1181 TOracleStatement.cxx:1182 TOracleStatement.cxx:1183 TOracleStatement.cxx:1184 TOracleStatement.cxx:1185 TOracleStatement.cxx:1186 TOracleStatement.cxx:1187 TOracleStatement.cxx:1188 TOracleStatement.cxx:1189 TOracleStatement.cxx:1190 TOracleStatement.cxx:1191 TOracleStatement.cxx:1192 TOracleStatement.cxx:1193 TOracleStatement.cxx:1194 TOracleStatement.cxx:1195 TOracleStatement.cxx:1196 TOracleStatement.cxx:1197 TOracleStatement.cxx:1198 TOracleStatement.cxx:1199 TOracleStatement.cxx:1200 TOracleStatement.cxx:1201 TOracleStatement.cxx:1202 TOracleStatement.cxx:1203 TOracleStatement.cxx:1204 TOracleStatement.cxx:1205 TOracleStatement.cxx:1206 TOracleStatement.cxx:1207 TOracleStatement.cxx:1208 TOracleStatement.cxx:1209 TOracleStatement.cxx:1210 TOracleStatement.cxx:1211 TOracleStatement.cxx:1212 TOracleStatement.cxx:1213 TOracleStatement.cxx:1214 TOracleStatement.cxx:1215 TOracleStatement.cxx:1216 TOracleStatement.cxx:1217 TOracleStatement.cxx:1218 TOracleStatement.cxx:1219 TOracleStatement.cxx:1220 TOracleStatement.cxx:1221 TOracleStatement.cxx:1222 TOracleStatement.cxx:1223 TOracleStatement.cxx:1224 TOracleStatement.cxx:1225 TOracleStatement.cxx:1226 TOracleStatement.cxx:1227 TOracleStatement.cxx:1228 TOracleStatement.cxx:1229 TOracleStatement.cxx:1230