00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133 #ifndef StDbTable_HH
00134 #define StDbTable_HH
00135
00136 #include "StDbNode.hh"
00137 #include "StDbTime.h"
00138
00139 #include "StTableDescriptorI.h"
00140
00141 #include "StDbStoreInfo.hh"
00142 #include <string.h>
00143
00144 class StDbBufferI;
00145 class StDbBuffer;
00146 class typeAcceptor;
00147
00148 #ifdef __ROOT__
00149 #include "TROOT.h"
00150 #endif
00151
00152 class StDbTable : public StDbNode {
00153
00154 protected:
00155
00156 char* mflavor;
00157 bool mdefaultFlavor;
00158 unsigned int mprodTime;
00159
00161 StDbTime mbeginTime;
00162 StDbTime mendTime;
00163 StDbTime mendStoreTime;
00164
00165
00166 char* mstructName;
00167 char* melementName;
00168 bool mIsBaseLine;
00169 bool mIsBinary;
00170 bool mIsIndexed;
00171 char* mdataTable;
00172
00173 int mschemaID;
00174 int* melementID;
00175
00177 StDbStoreInfo mstoredData;
00178
00180 bool mhasDescriptor;
00181 StTableDescriptorI* mdescriptor;
00182
00184 char* mdata;
00185 int mrows;
00186 int mrowNumber;
00187 bool mhasData;
00188 int mrowsRequested;
00189 unsigned int* mtimeVals;
00190
00191 virtual void ReadElement(char*& ptr, char* name, int length, StTypeE type, StDbBuffer* buff);
00192 virtual void WriteElement(char* ptr, char* name, int length, StTypeE type, StDbBuffer* buff);
00193 virtual void PassOutElement(char* ptr, char* name, int length, StTypeE type, typeAcceptor* accept);
00194 virtual void PassInElement(char* ptr, char* name, int length, StTypeE type, typeAcceptor* accept);
00195 virtual void getElementSpecs(int elementNum, char*& c, char*& name, unsigned int& length,StTypeE& type);
00196
00197 bool createMemory();
00198 bool createMemory(int nrows);
00199 char* duplicateData();
00200 void init();
00201 void printNoDataReturned(const char* elementName);
00202
00203
00204 public:
00205
00206 StDbTable(const char* tableName);
00207 StDbTable(const char* tableName, int schemaID);
00208 StDbTable(StDbTable& table);
00209
00210 virtual ~StDbTable(){ if(melementID) delete [] melementID;
00211 if(mdescriptor)delete mdescriptor;
00212 if(mdata) delete [] mdata;
00213 if(mdataTable) delete [] mdataTable;
00214 if(mstructName) delete [] mstructName;
00215 if(melementName) delete [] melementName;
00216 if(mtimeVals) delete [] mtimeVals;
00217 if(mflavor) delete [] mflavor;
00218 };
00219
00220 virtual bool IsTable() const;
00221 virtual void setNodeInfo(StDbNode* node);
00222 virtual unsigned int getTableSize() const;
00223 virtual char* getCstructName();
00224 virtual char* printCstructName();
00225 virtual void setCstructName(const char* name);
00226 virtual void setDataTable(const char* name);
00227 virtual char* getDataTable();
00228 virtual char* printDataTable();
00229
00230
00231
00232
00233 virtual char* getFlavor();
00234 virtual char* printFlavor();
00235 virtual void setFlavor(const char* flavor);
00236 virtual bool defaultFlavor() const;
00237 virtual void setDefaultFlavor();
00238
00239 virtual unsigned int getProdTime();
00240 virtual void setProdTime(unsigned int ptime);
00241
00242 virtual unsigned int getEndTime() const ;
00243 virtual char* getEndDateTime();
00244 virtual void setEndTime(unsigned int time);
00245 virtual void setEndTime(const char* time);
00246
00247 virtual unsigned int getBeginTime() const ;
00248 virtual char* getBeginDateTime();
00249 virtual void setBeginTime(unsigned int time) ;
00250 virtual void setBeginTime(const char* time);
00251
00252 virtual unsigned int getEndStoreTime() const;
00253 virtual char* getEndStoreDateTime();
00254 virtual void setEndStoreTime(unsigned int time);
00255 virtual void setEndStoreTime(const char* time);
00256
00257 virtual int* getElementID(int& nrows);
00258 virtual int getRowID(int rowNumber) const ;
00259 virtual char* getElementName();
00260 virtual char* printElementName();
00261 virtual void setElementName(const char* ename);
00262 virtual void setElementID(int* elements, int nrows);
00263
00264 virtual void setBaseLine(bool baseLine);
00265 virtual void setIndexed(bool indexed);
00266 virtual void setBinary(bool abinary);
00267 virtual bool IsBaseLine() const;
00268 virtual bool IsIndexed() const;
00269 virtual bool IsBinary() const;
00270
00271 virtual int getSchemaID() const ;
00272 virtual void setSchemaID(int id) ;
00273
00274
00275 virtual void addWrittenRows(int* dataID,int numRows,bool canRollBack=false);
00276 virtual int* getWrittenRows(int& numRows);
00277 virtual void commitData();
00278 virtual void clearStoreInfo();
00279 virtual unsigned int* getTimeValues();
00280 virtual unsigned int getMaxTime();
00281 virtual void setTimeValues(unsigned int* timeValues);
00282
00283
00284
00285
00286 virtual StTableDescriptorI* getDescriptorCpy() const;
00287 virtual StTableDescriptorI* getDescriptor();
00288 virtual void setDescriptor(StTableDescriptorI* descriptor);
00289 virtual bool hasDescriptor() const;
00290 void checkDescriptor();
00291
00292
00293
00294 virtual StDbTable* Clone();
00295 virtual char* GetTable();
00296 virtual void* GetTableCpy();
00297 virtual void SetTable(char* data, int nrows, int* idList=0);
00298 virtual void AddRows(char* data, int nrows);
00299
00300 virtual int GetNRows() const;
00301 virtual void setRowNumber(int row=0);
00302 virtual bool hasData() const;
00303 virtual void* getDataValue(const char* name,int rowNumber=0);
00304
00305
00306 virtual int getRowLimit() const;
00307 virtual void setRowLimit(int nrows);
00308 virtual void addNRows(int newRows);
00309
00311 virtual void addNElements(int* elements, int newRows);
00312 virtual void resizeNumRows(int nrows);
00313 virtual void resizeElementID(int numRows);
00314
00315
00316 virtual void StreamAccessor(typeAcceptor* accept, bool isReading);
00317 virtual void dbStreamer(typeAcceptor* accept, bool isReading);
00318 virtual void StreamAccessor(StDbBufferI* buff, bool isReading);
00319 virtual void dbStreamer(StDbBufferI* buff, bool isReading);
00320 virtual void dbStreamerWrite(StDbBufferI* buff);
00321 virtual void dbTableStreamer(StDbBufferI* buff, const char* name, bool isReading);
00322 #ifdef __ROOT__
00323 ClassDef(StDbTable,0)
00324 #endif
00325 };
00326
00327 inline bool StDbTable::IsTable() const { return true; };
00328 inline unsigned int StDbTable::getTableSize() const {
00329 if(mhasDescriptor && !mdescriptor->getTrowSize()) return mdescriptor->getTotalSizeInBytes();
00330 if(mhasDescriptor) return mdescriptor->getTrowSize();
00331 return 0;
00332 }
00333 inline char* StDbTable::printCstructName() { return mstructName; }
00334 inline char* StDbTable::printDataTable() { return mdataTable; }
00335 inline char* StDbTable::printFlavor() { return mflavor; }
00336 inline bool StDbTable::defaultFlavor() const {return mdefaultFlavor;}
00337 inline void StDbTable::setProdTime(unsigned int ptime) { mprodTime=ptime; }
00338 inline unsigned int StDbTable::getProdTime() { return mprodTime; }
00339 inline unsigned int StDbTable::getEndTime() const {return mendTime.munixTime; }
00340 inline char* StDbTable::getEndDateTime() { return mendTime.mdateTime; }
00341 inline void StDbTable::setEndTime(unsigned int time){ mendTime.munixTime=time;}
00342 inline void StDbTable::setEndTime(const char* time){mendTime.setDateTime(time);}
00343 inline unsigned int StDbTable::getBeginTime() const {return mbeginTime.munixTime; }
00344 inline char* StDbTable::getBeginDateTime() {return mbeginTime.mdateTime; }
00345 inline void StDbTable::setBeginTime(unsigned int time){mbeginTime.munixTime = time; }
00346 inline void StDbTable::setBeginTime(const char* time){ mbeginTime.setDateTime(time); }
00347 inline unsigned int StDbTable::getEndStoreTime() const { return mendStoreTime.munixTime; }
00348 inline char* StDbTable::getEndStoreDateTime() { return mendStoreTime.mdateTime; }
00349 inline void StDbTable::setEndStoreTime(unsigned int time) {mendStoreTime.munixTime = time; }
00350 inline void StDbTable::setEndStoreTime(const char* time){ mendStoreTime.setDateTime(time); }
00351 inline int* StDbTable::getElementID(int& nrows) { nrows = mrows; return melementID; }
00352
00353 inline int StDbTable::getRowID(int rowNumber) const {
00354 if(rowNumber<mrows)return melementID[rowNumber];
00355 return 0;
00356 }
00357 inline unsigned int* StDbTable::getTimeValues(){ return mtimeVals; }
00358 inline void StDbTable::setTimeValues(unsigned int* timeValues){
00359 if(mtimeVals) delete [] mtimeVals;
00360 mtimeVals=timeValues;
00361 }
00362 inline unsigned int StDbTable::getMaxTime() {
00363 unsigned int retVal=0;
00364 for(int i=0; i<mrows;i++)if(mtimeVals[i]>retVal)retVal=mtimeVals[i];
00365 return retVal;
00366 }
00367 inline char* StDbTable::printElementName() { return melementName; }
00368 inline int StDbTable::getSchemaID() const { return mschemaID; }
00369 inline void StDbTable::setSchemaID(int id) {mschemaID = id; }
00370 inline StTableDescriptorI* StDbTable::getDescriptor() { return mdescriptor; }
00371 inline bool StDbTable::hasDescriptor() const { return mhasDescriptor; }
00372 inline StDbTable* StDbTable::Clone() {return (new StDbTable(*this));}
00373 inline int StDbTable::GetNRows() const { return mrows; }
00374 inline void StDbTable::setRowLimit(int nrows) { mrowsRequested=nrows; };
00375 inline int StDbTable::getRowLimit() const { return mrowsRequested; };
00376 inline void StDbTable::setRowNumber(int row){if(row < mrows)mrowNumber = row;}
00377 inline bool StDbTable::hasData() const { return mhasData; };
00378 inline void StDbTable::setBinary(bool abinary) { mIsBinary=abinary; }
00379 inline void StDbTable::setBaseLine(bool baseLine) { mIsBaseLine=baseLine; }
00380 inline void StDbTable::setIndexed(bool indexed) { mIsIndexed=indexed; }
00381 inline bool StDbTable::IsBinary() const { return mIsBinary; }
00382 inline bool StDbTable::IsBaseLine() const { return mIsBaseLine; }
00383 inline bool StDbTable::IsIndexed() const { return mIsIndexed; }
00384
00385 #endif