Go to the documentation of this file.00001 #ifndef IODCONFIG_H
00002 #define IODCONFIG_H
00003 #include <stdexcept>
00004 #include <string>
00005 #include <fstream>
00006 #include <iostream>
00007 #include <stdio.h>
00008 #include <cstring>
00009
00010
00011 #include "OnlineDB/Oracle/interface/Oracle.h"
00012
00013 #include "OnlineDB/EcalCondDB/interface/IDBObject.h"
00014
00019 class IODConfig : public IDBObject {
00020
00021 public:
00022 typedef oracle::occi::SQLException SQLException;
00023 typedef oracle::occi::Statement Statement;
00024 typedef oracle::occi::Stream Stream;
00025 typedef oracle::occi::Clob Clob;
00026
00027 std::string m_config_tag;
00028
00029 virtual std::string getTable() =0;
00030
00031 inline void setConfigTag(std::string x) {m_config_tag=x;}
00032 inline std::string getConfigTag() {return m_config_tag;}
00033
00034
00035 protected:
00036 Statement* m_writeStmt;
00037 Statement* m_readStmt;
00038
00039 inline void checkPrepare()
00040 throw(std::runtime_error)
00041 {
00042 if (m_writeStmt == NULL) {
00043 throw(std::runtime_error("Write statement not prepared"));
00044 }
00045 }
00046
00047 inline void terminateWriteStatement()
00048 throw(std::runtime_error)
00049 {
00050 if (m_writeStmt != NULL) {
00051 m_conn->terminateStatement(m_writeStmt);
00052 } else {
00053 std::cout << "Warning from IDataItem: statement was aleady closed"<< std::endl;
00054 }
00055 }
00056
00057
00058 inline void createReadStatement()
00059 throw(std::runtime_error)
00060 {
00061 m_readStmt=m_conn->createStatement();
00062 }
00063
00064 inline void setPrefetchRowCount(int ncount)
00065 throw(std::runtime_error)
00066 {
00067 m_readStmt->setPrefetchRowCount(ncount);
00068 }
00069
00070 inline void terminateReadStatement()
00071 throw(std::runtime_error)
00072 {
00073 if (m_readStmt != NULL) {
00074 m_conn->terminateStatement(m_readStmt);
00075 } else {
00076 std::cout << "Warning from IDataItem: statement was aleady closed"<< std::endl;
00077 }
00078 }
00079
00080
00081
00082
00083 virtual void prepareWrite() throw(std::runtime_error) =0;
00084
00085
00086
00087
00088 void populateClob (Clob &clob, std::string fname, unsigned int bufsize)
00089 throw (std::runtime_error)
00090 {
00091
00092 try{
00093
00094 std::cout << "Populating the Clob using writeBuffer(Stream) method" << std::endl;
00095 std::cout<<"we are here0"<<std::endl;
00096
00097 char *file = (char *)fname.c_str();
00098 std::cout<<"we are here0.5 file is:"<<fname<<std::endl;
00099
00100 std::ifstream inFile;
00101 inFile.open(file,std::ios::in);
00102 if (!inFile)
00103 {
00104 std::cout << fname <<" file not found\n";
00105 inFile.close();
00106
00107 std::string fname2="/nfshome0/ecaldev/francesca/null_file.txt";
00108 inFile.open((char*)fname2.c_str(),std::ios::in);
00109
00110
00111
00112 }
00113 if(bufsize==0){
00114
00115
00116 inFile.seekg( 0,std::ios::end );
00117 bufsize = inFile.tellg();
00118 std::cout <<" bufsize ="<<bufsize<< std::endl;
00119
00120 inFile.seekg( 0,std::ios::beg );
00121
00122 }
00123
00124 char *buffer = new char[bufsize + 1];
00125
00126
00127 std::cout<<"we are here1"<<std::endl;
00128 unsigned int size;
00129 Stream *strm=clob.getStream();
00130 std::cout<<"we are here2"<<std::endl;
00131
00132
00133 int buf=0;
00134 memset (buffer, buf, bufsize + 1);
00135 inFile.read(buffer,bufsize);
00136 std::cout<<"we are here2.5"<<std::endl;
00137
00138 strm->writeBuffer(buffer,strlen(buffer));
00139 std::cout<<"we are here2.6"<<std::endl;
00140
00141
00142 std::cout<<"we are here3"<<std::endl;
00143 strcpy(buffer," ");
00144 size=strlen(buffer);
00145 strm->writeLastBuffer(buffer,size);
00146 clob.closeStream(strm);
00147 inFile.close();
00148 std::cout<<"we are here4"<<std::endl;
00149 delete[] buffer;
00150
00151
00152 }catch (SQLException &e) {
00153 throw(std::runtime_error("populateClob(): "+e.getMessage()));
00154 }
00155
00156 std::cout << "Populating the Clob - Success" << std::endl;
00157 }
00158
00159
00160 unsigned char* readClob (Clob &clob, int size)
00161 throw (std::runtime_error)
00162 {
00163
00164 try{
00165 Stream *instream = clob.getStream (1,0);
00166 unsigned char *buffer= new unsigned char[size];
00167 int buf=0;
00168 memset (buffer, buf, size);
00169
00170 instream->readBuffer ((char*)buffer, size);
00171 std::cout << "remember to delete the char* at the end of the program ";
00172 for (int i = 0; i < size; ++i)
00173 std::cout << (char) buffer[i];
00174 std::cout << std::endl;
00175
00176
00177 clob.closeStream (instream);
00178
00179 return buffer;
00180
00181 }catch (SQLException &e) {
00182 throw(std::runtime_error("readClob(): "+e.getMessage()));
00183 }
00184
00185 }
00186
00187
00188
00189 };
00190
00191 #endif
00192
00193