TBufferSQL2.h

Go to the documentation of this file.
00001 // @(#)root/sql:$Id: TBufferSQL2.h 36061 2010-10-04 16:05:51Z pcanal $
00002 // Author: Sergey Linev  20/11/2005
00003 
00004 
00005 #ifndef ROOT_TBufferSQL2
00006 #define ROOT_TBufferSQL2
00007 
00008 
00009 /////////////////////////////////////////////////////////////////////////
00010 //                                                                     //
00011 // TBufferSQL2 class used in TSQLFile to convert binary object data    //
00012 // to SQL statements, supplied to DB server                            //
00013 //                                                                     //
00014 /////////////////////////////////////////////////////////////////////////
00015 
00016 
00017 #ifndef ROOT_TBufferFile
00018 #include "TBufferFile.h"
00019 #endif
00020 
00021 #ifndef ROOT_TString
00022 #include "TString.h"
00023 #endif
00024 
00025 #ifndef ROOT_TObjArray
00026 #include "TObjArray.h"
00027 #endif
00028 
00029 class TMap;
00030 class TExMap;
00031 class TVirtualStreamerInfo;
00032 class TStreamerElement;
00033 class TObjArray;
00034 class TMemberStreamer;
00035 class TSQLStackObj;
00036 
00037 class TSQLServer;
00038 class TSQLResult;
00039 class TSQLRow;
00040 class TSQLFile;
00041 class TSQLStructure;
00042 class TSQLObjectData;
00043 class TSQLClassInfo;
00044 
00045 class TBufferSQL2 : public TBufferFile {
00046 
00047 friend class TSQLStructure;    
00048     
00049 protected:
00050 
00051    TSQLFile*        fSQL;                  //!   instance of TSQLFile
00052    TSQLStructure*   fStructure;            //!   structures, created by object storing
00053    TSQLStructure*   fStk;                  //!   pointer on current active structure (stack head)
00054    TExMap*          fObjMap;               //!   Map between stored objects and object id
00055    TString          fReadBuffer;           //!   Buffer for read value
00056    Int_t            fErrorFlag;            //!   Error id value 
00057    Bool_t           fExpectedChain;        //!   flag to resolve situation when several elements of same basic type stored as FastArray
00058    Int_t            fCompressLevel;        //!   compress level used to minimize size of data in database
00059    Int_t            fReadVersionBuffer;    //!   buffer, used to by ReadVersion method
00060    Long64_t         fObjIdCounter;         //!   counter of objects id
00061    Bool_t           fIgnoreVerification;   //!   ignore verification of names 
00062    TSQLObjectData*  fCurrentData;          //!  
00063    TObjArray*       fObjectsInfos;         //!   array of objects info for selected key 
00064    Long64_t         fFirstObjId;           //!   id of first object to be read from the database
00065    Long64_t         fLastObjId;            //!   id of last object correspond to this key
00066    TMap*            fPoolsMap;             //!   map of pools with data from different tables
00067 
00068    // TBufferSQL2 objects cannot be copied or assigned
00069    TBufferSQL2(const TBufferSQL2 &);       // not implemented
00070    void operator=(const TBufferSQL2 &);    // not implemented
00071 
00072    TBufferSQL2();
00073 
00074    // redefined protected virtual functions
00075 
00076    virtual void     WriteObjectClass(const void *actualObjStart, const TClass *actualClass);
00077 
00078    // end redefined protected virtual functions
00079 
00080    TSQLStructure*   PushStack();
00081    TSQLStructure*   PopStack();
00082    TSQLStructure*   Stack(Int_t depth = 0);
00083 
00084    void             WorkWithClass(const char* classname, Version_t classversion); 
00085    void             WorkWithElement(TStreamerElement* elem, Int_t number);
00086 
00087    Int_t            SqlReadArraySize();
00088    Bool_t           SqlObjectInfo(Long64_t objid, TString& clname, Version_t& version);
00089    TSQLObjectData*  SqlObjectData(Long64_t objid, TSQLClassInfo* sqlinfo);
00090 
00091    Bool_t           SqlWriteBasic(Char_t value);
00092    Bool_t           SqlWriteBasic(Short_t value);
00093    Bool_t           SqlWriteBasic(Int_t value);
00094    Bool_t           SqlWriteBasic(Long_t value);
00095    Bool_t           SqlWriteBasic(Long64_t value);
00096    Bool_t           SqlWriteBasic(Float_t value);
00097    Bool_t           SqlWriteBasic(Double_t value);
00098    Bool_t           SqlWriteBasic(Bool_t value);
00099    Bool_t           SqlWriteBasic(UChar_t value);
00100    Bool_t           SqlWriteBasic(UShort_t value);
00101    Bool_t           SqlWriteBasic(UInt_t value);
00102    Bool_t           SqlWriteBasic(ULong_t value);
00103    Bool_t           SqlWriteBasic(ULong64_t value);
00104    Bool_t           SqlWriteValue(const char* value, const char* tname);
00105 
00106    void             SqlReadBasic(Char_t& value);
00107    void             SqlReadBasic(Short_t& value);
00108    void             SqlReadBasic(Int_t& value);
00109    void             SqlReadBasic(Long_t& value);
00110    void             SqlReadBasic(Long64_t& value);
00111    void             SqlReadBasic(Float_t& value);
00112    void             SqlReadBasic(Double_t& value);
00113    void             SqlReadBasic(Bool_t& value);
00114    void             SqlReadBasic(UChar_t& value);
00115    void             SqlReadBasic(UShort_t& value);
00116    void             SqlReadBasic(UInt_t& value);
00117    void             SqlReadBasic(ULong_t& value);
00118    void             SqlReadBasic(ULong64_t& value);
00119    const char*      SqlReadValue(const char* tname);
00120    const char*      SqlReadCharStarValue();
00121 
00122    Int_t            SqlWriteObject(const void* obj, const TClass* objClass, TMemberStreamer *streamer = 0, Int_t streamer_index = 0);
00123    void*            SqlReadObject(void* obj, TClass** cl = 0, TMemberStreamer *streamer = 0, Int_t streamer_index = 0, const TClass *onFileClass=0);
00124    void*            SqlReadObjectDirect(void* obj, TClass** cl, Long64_t objid, TMemberStreamer *streamer = 0, Int_t streamer_index = 0, const TClass *onFileClass = 0);
00125  
00126 public:
00127 
00128    TBufferSQL2(TBuffer::EMode mode);
00129    TBufferSQL2(TBuffer::EMode mode, TSQLFile* file);
00130    virtual ~TBufferSQL2();
00131    
00132    void             SetCompressionLevel(int level) { fCompressLevel = level; }
00133 
00134    TSQLStructure*   GetStructure() const { return fStructure; }
00135    
00136    Int_t            GetErrorFlag() const { return fErrorFlag; }
00137    
00138    void             SetIgnoreVerification() { fIgnoreVerification = kTRUE; }
00139 
00140    TSQLStructure*   SqlWriteAny(const void* obj, const TClass* cl, Long64_t objid);
00141 
00142    void*            SqlReadAny(Long64_t keyid, Long64_t objid, TClass** cl, void* obj = 0);
00143 
00144    // suppress class writing/reading
00145 
00146    virtual TClass*  ReadClass(const TClass* cl = 0, UInt_t* objTag = 0);
00147    virtual void     WriteClass(const TClass* cl);
00148 
00149    // redefined virtual functions of TBuffer
00150 
00151    virtual Int_t    CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss); // SL
00152    virtual Int_t    CheckByteCount(UInt_t startpos, UInt_t bcnt, const char *classname); // SL
00153    virtual void     SetByteCount(UInt_t cntpos, Bool_t packInVersion = kFALSE);  // SL
00154 
00155    virtual void      SkipVersion(const TClass *cl = 0);
00156    virtual Version_t ReadVersion(UInt_t *start = 0, UInt_t *bcnt = 0, const TClass *cl = 0);  // SL
00157    virtual UInt_t    WriteVersion(const TClass *cl, Bool_t useBcnt = kFALSE);  // SL
00158 
00159    virtual void*    ReadObjectAny(const TClass* clCast);
00160    virtual void     SkipObjectAny();
00161 
00162    virtual void     IncrementLevel(TVirtualStreamerInfo*);
00163    virtual void     SetStreamerElementNumber(Int_t);
00164    virtual void     DecrementLevel(TVirtualStreamerInfo*);
00165    
00166    virtual void     ClassBegin(const TClass*, Version_t = -1);
00167    virtual void     ClassEnd(const TClass*);
00168    virtual void     ClassMember(const char* name, const char* typeName = 0, Int_t arrsize1 = -1, Int_t arrsize2 = -1);
00169 
00170    virtual void     WriteObject(const TObject *obj);
00171 
00172    virtual void     ReadFloat16 (Float_t *f, TStreamerElement *ele=0);
00173    virtual void     WriteFloat16(Float_t *f, TStreamerElement *ele=0);
00174    virtual void     ReadDouble32 (Double_t *d, TStreamerElement *ele=0);
00175    virtual void     WriteDouble32(Double_t *d, TStreamerElement *ele=0);
00176    virtual void     ReadWithFactor(Float_t *ptr, Double_t factor, Double_t minvalue);
00177    virtual void     ReadWithNbits(Float_t *ptr, Int_t nbits);
00178    virtual void     ReadWithFactor(Double_t *ptr, Double_t factor, Double_t minvalue);
00179    virtual void     ReadWithNbits(Double_t *ptr, Int_t nbits);
00180    
00181    virtual Int_t    ReadArray(Bool_t    *&b);
00182    virtual Int_t    ReadArray(Char_t    *&c);
00183    virtual Int_t    ReadArray(UChar_t   *&c);
00184    virtual Int_t    ReadArray(Short_t   *&h);
00185    virtual Int_t    ReadArray(UShort_t  *&h);
00186    virtual Int_t    ReadArray(Int_t     *&i);
00187    virtual Int_t    ReadArray(UInt_t    *&i);
00188    virtual Int_t    ReadArray(Long_t    *&l);
00189    virtual Int_t    ReadArray(ULong_t   *&l);
00190    virtual Int_t    ReadArray(Long64_t  *&l);
00191    virtual Int_t    ReadArray(ULong64_t *&l);
00192    virtual Int_t    ReadArray(Float_t   *&f);
00193    virtual Int_t    ReadArray(Double_t  *&d);
00194    virtual Int_t    ReadArrayFloat16(Float_t  *&f, TStreamerElement *ele=0);
00195    virtual Int_t    ReadArrayDouble32(Double_t  *&d, TStreamerElement *ele=0);
00196 
00197    virtual Int_t    ReadStaticArray(Bool_t    *b);
00198    virtual Int_t    ReadStaticArray(Char_t    *c);
00199    virtual Int_t    ReadStaticArray(UChar_t   *c);
00200    virtual Int_t    ReadStaticArray(Short_t   *h);
00201    virtual Int_t    ReadStaticArray(UShort_t  *h);
00202    virtual Int_t    ReadStaticArray(Int_t     *i);
00203    virtual Int_t    ReadStaticArray(UInt_t    *i);
00204    virtual Int_t    ReadStaticArray(Long_t    *l);
00205    virtual Int_t    ReadStaticArray(ULong_t   *l);
00206    virtual Int_t    ReadStaticArray(Long64_t  *l);
00207    virtual Int_t    ReadStaticArray(ULong64_t *l);
00208    virtual Int_t    ReadStaticArray(Float_t   *f);
00209    virtual Int_t    ReadStaticArray(Double_t  *d);
00210    virtual Int_t    ReadStaticArrayFloat16(Float_t  *f, TStreamerElement *ele=0);
00211    virtual Int_t    ReadStaticArrayDouble32(Double_t  *d, TStreamerElement *ele=0);
00212 
00213    virtual void     ReadFastArray(Bool_t    *b, Int_t n);
00214    virtual void     ReadFastArray(Char_t    *c, Int_t n);
00215    virtual void     ReadFastArray(UChar_t   *c, Int_t n);
00216    virtual void     ReadFastArray(Short_t   *h, Int_t n);
00217    virtual void     ReadFastArray(UShort_t  *h, Int_t n);
00218    virtual void     ReadFastArray(Int_t     *i, Int_t n);
00219    virtual void     ReadFastArray(UInt_t    *i, Int_t n);
00220    virtual void     ReadFastArray(Long_t    *l, Int_t n);
00221    virtual void     ReadFastArray(ULong_t   *l, Int_t n);
00222    virtual void     ReadFastArray(Long64_t  *l, Int_t n);
00223    virtual void     ReadFastArray(ULong64_t *l, Int_t n);
00224    virtual void     ReadFastArray(Float_t   *f, Int_t n);
00225    virtual void     ReadFastArray(Double_t  *d, Int_t n);
00226    virtual void     ReadFastArrayFloat16(Float_t  *f, Int_t n, TStreamerElement *ele=0);
00227    virtual void     ReadFastArrayDouble32(Double_t  *d, Int_t n, TStreamerElement *ele=0);
00228 
00229    virtual void     WriteArray(const Bool_t    *b, Int_t n);
00230    virtual void     WriteArray(const Char_t    *c, Int_t n);
00231    virtual void     WriteArray(const UChar_t   *c, Int_t n);
00232    virtual void     WriteArray(const Short_t   *h, Int_t n);
00233    virtual void     WriteArray(const UShort_t  *h, Int_t n);
00234    virtual void     WriteArray(const Int_t     *i, Int_t n);
00235    virtual void     WriteArray(const UInt_t    *i, Int_t n);
00236    virtual void     WriteArray(const Long_t    *l, Int_t n);
00237    virtual void     WriteArray(const ULong_t   *l, Int_t n);
00238    virtual void     WriteArray(const Long64_t  *l, Int_t n);
00239    virtual void     WriteArray(const ULong64_t *l, Int_t n);
00240    virtual void     WriteArray(const Float_t   *f, Int_t n);
00241    virtual void     WriteArray(const Double_t  *d, Int_t n);
00242    virtual void     WriteArrayFloat16(const Float_t  *f, Int_t n, TStreamerElement *ele=0);
00243    virtual void     WriteArrayDouble32(const Double_t  *d, Int_t n, TStreamerElement *ele=0);
00244    virtual void     ReadFastArray(void  *start , const TClass *cl, Int_t n=1, TMemberStreamer *s=0, const TClass *onFileClass=0 );
00245    virtual void     ReadFastArray(void **startp, const TClass *cl, Int_t n=1, Bool_t isPreAlloc=kFALSE, TMemberStreamer *s=0, const TClass *onFileClass=0);
00246 
00247    virtual void     WriteFastArray(const Bool_t    *b, Int_t n);
00248    virtual void     WriteFastArray(const Char_t    *c, Int_t n);
00249    virtual void     WriteFastArray(const UChar_t   *c, Int_t n);
00250    virtual void     WriteFastArray(const Short_t   *h, Int_t n);
00251    virtual void     WriteFastArray(const UShort_t  *h, Int_t n);
00252    virtual void     WriteFastArray(const Int_t     *i, Int_t n);
00253    virtual void     WriteFastArray(const UInt_t    *i, Int_t n);
00254    virtual void     WriteFastArray(const Long_t    *l, Int_t n);
00255    virtual void     WriteFastArray(const ULong_t   *l, Int_t n);
00256    virtual void     WriteFastArray(const Long64_t  *l, Int_t n);
00257    virtual void     WriteFastArray(const ULong64_t *l, Int_t n);
00258    virtual void     WriteFastArray(const Float_t   *f, Int_t n);
00259    virtual void     WriteFastArray(const Double_t  *d, Int_t n);
00260    virtual void     WriteFastArrayFloat16(const Float_t  *f, Int_t n, TStreamerElement *ele=0);
00261    virtual void     WriteFastArrayDouble32(const Double_t  *d, Int_t n, TStreamerElement *ele=0);
00262    virtual void     WriteFastArray(void  *start,  const TClass *cl, Int_t n=1, TMemberStreamer *s=0);
00263    virtual Int_t    WriteFastArray(void **startp, const TClass *cl, Int_t n=1, Bool_t isPreAlloc=kFALSE, TMemberStreamer *s=0);
00264 
00265    virtual void     StreamObject(void *obj, const type_info &typeinfo, const TClass* onFileClass = 0);
00266    virtual void     StreamObject(void *obj, const char *className, const TClass* onFileClass = 0 );
00267    virtual void     StreamObject(void *obj, const TClass *cl, const TClass* onFileClass = 0 );
00268    virtual void     StreamObject(TObject *obj);
00269    virtual void     StreamObject(void *obj, TMemberStreamer *streamer, const TClass *cl, Int_t n = 0, const TClass *onFileClass = 0);
00270 
00271    virtual   void     ReadBool(Bool_t       &b);
00272    virtual   void     ReadChar(Char_t       &c);
00273    virtual   void     ReadUChar(UChar_t     &c);
00274    virtual   void     ReadShort(Short_t     &s);
00275    virtual   void     ReadUShort(UShort_t   &s);
00276    virtual   void     ReadInt(Int_t         &i);
00277    virtual   void     ReadUInt(UInt_t       &i);
00278    virtual   void     ReadLong(Long_t       &l);
00279    virtual   void     ReadULong(ULong_t     &l);
00280    virtual   void     ReadLong64(Long64_t   &l);
00281    virtual   void     ReadULong64(ULong64_t &l);
00282    virtual   void     ReadFloat(Float_t     &f);
00283    virtual   void     ReadDouble(Double_t   &d);
00284    virtual   void     ReadCharP(Char_t      *c);
00285    virtual   void     ReadTString(TString   &s) ;
00286 
00287    virtual   void     WriteBool(Bool_t       b);
00288    virtual   void     WriteChar(Char_t       c);
00289    virtual   void     WriteUChar(UChar_t     c);
00290    virtual   void     WriteShort(Short_t     s);
00291    virtual   void     WriteUShort(UShort_t   s);
00292    virtual   void     WriteInt(Int_t         i);
00293    virtual   void     WriteUInt(UInt_t       i);
00294    virtual   void     WriteLong(Long_t       l);
00295    virtual   void     WriteULong(ULong_t     l);
00296    virtual   void     WriteLong64(Long64_t   l);
00297    virtual   void     WriteULong64(ULong64_t l);
00298    virtual   void     WriteFloat(Float_t     f);
00299    virtual   void     WriteDouble(Double_t   d);
00300    virtual   void     WriteCharP(const Char_t *c);
00301    virtual   void     WriteTString(const TString  &s);
00302 
00303    virtual Int_t ReadSequence(const TStreamerInfoActions::TActionSequence &sequence, void *object);
00304    virtual Int_t ReadSequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection);
00305    virtual Int_t ReadSequence(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection);
00306 
00307    static    void     SetFloatFormat(const char* fmt = "%e");
00308    static const char* GetFloatFormat();
00309 
00310    // end of redefined virtual functions
00311 
00312 ClassDef(TBufferSQL2,1);    //a specialized TBuffer to convert data to SQL statements or read data from SQL tables
00313 };
00314 
00315 #endif

Generated on Tue Jul 5 14:26:38 2011 for ROOT_528-00b_version by  doxygen 1.5.1