TSQLStructure.h

Go to the documentation of this file.
00001 // @(#)root/sql:$Id: TSQLStructure.h 32337 2010-02-12 16:09:35Z pcanal $
00002 // Author: Sergey Linev  20/11/2005
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #ifndef ROOT_TSQLStructure
00013 #define ROOT_TSQLStructure
00014 
00015 
00016 /////////////////////////////////////////////////////////////////////////
00017 //                                                                     //
00018 // TSQLStructure is special class, used in TSQLBuffer for data convers //
00019 //                                                                     //
00020 /////////////////////////////////////////////////////////////////////////
00021 
00022 
00023 
00024 #ifndef ROOT_TNamed
00025 #include "TNamed.h"
00026 #endif
00027 
00028 #ifndef ROOT_TObjArray
00029 #include "TObjArray.h"
00030 #endif
00031 
00032 #ifndef ROOT_TAttAxis
00033 #include "TAttAxis.h"
00034 #endif
00035 
00036 class TStreamerInfo;
00037 class TStreamerInfo;
00038 class TStreamerElement;
00039 class TSQLFile;
00040 class TSqlRegistry;
00041 class TSqlRawBuffer;
00042 class TSQLObjectData;
00043 class TSQLClassInfo;
00044 class TBufferSQL2;
00045 
00046 class TSQLColumnData : public TObject {
00047     
00048 protected:   
00049    TString     fName;             //!  name of the table column
00050    TString     fType;             //!  type of the table column
00051    TString     fValue;            //!  value of the table column
00052    Bool_t      fNumeric;          //!  for numeric quotes (double quotes) are not required
00053 public:
00054    TSQLColumnData();
00055    TSQLColumnData(const char* name,   
00056                   const char* sqltype, 
00057                   const char* value, 
00058                   Bool_t numeric);
00059 
00060    TSQLColumnData(const char* name, Long64_t value);
00061    virtual ~TSQLColumnData();
00062   
00063    virtual const char* GetName() const { return fName.Data(); }
00064    const char* GetType() const { return fType.Data(); }
00065    const char* GetValue() const { return fValue.Data(); }
00066    Bool_t IsNumeric() const { return fNumeric; }
00067   
00068    ClassDef(TSQLColumnData, 1); // Single SQL column data.
00069 };
00070 
00071 //______________________________________________________________________
00072 
00073 class TSQLTableData : public TObject {
00074   
00075 protected:
00076    TSQLFile*      fFile;           //!
00077    TSQLClassInfo* fInfo;           //!
00078    TObjArray      fColumns;        //! collection of columns
00079    TObjArray*     fColInfos;       //! array with TSQLClassColumnInfo, used later for TSQLClassInfo
00080    
00081    TString DefineSQLName(const char* fullname);
00082    Bool_t HasSQLName(const char* sqlname);
00083    
00084 public:
00085    TSQLTableData(TSQLFile* f = 0, TSQLClassInfo* info = 0);
00086    virtual ~TSQLTableData();
00087 
00088    void AddColumn(const char* name, Long64_t value);
00089    void AddColumn(const char* name, 
00090                   const char* sqltype, 
00091                   const char* value, 
00092                   Bool_t numeric);
00093    
00094    TObjArray* TakeColInfos();
00095    
00096    Int_t GetNumColumns();
00097    const char* GetColumn(Int_t n);
00098    Bool_t IsNumeric(Int_t n);
00099    
00100    ClassDef(TSQLTableData, 1); // Collection of columns data for single SQL table
00101 };
00102 
00103 //______________________________________________________________________
00104 
00105 class TSQLStructure : public TObject {
00106 protected:   
00107 
00108    Bool_t           CheckNormalClassPair(TSQLStructure* vers, TSQLStructure* info);
00109 
00110    Long64_t         FindMaxObjectId();
00111    void             PerformConversion(TSqlRegistry* reg, TSqlRawBuffer* blobs, const char* topname, Bool_t useblob = kFALSE);
00112    Bool_t           StoreObject(TSqlRegistry* reg, Long64_t objid, TClass* cl, Bool_t registerobj = kTRUE);
00113    Bool_t           StoreObjectInNormalForm(TSqlRegistry* reg);
00114    Bool_t           StoreClassInNormalForm(TSqlRegistry* reg);
00115    Bool_t           StoreElementInNormalForm(TSqlRegistry* reg, TSQLTableData* columns);
00116    Bool_t           TryConvertObjectArray(TSqlRegistry* reg, TSqlRawBuffer* blobs);
00117 
00118    Bool_t           StoreTObject(TSqlRegistry* reg);
00119    Bool_t           StoreTString(TSqlRegistry* reg);
00120    Bool_t           RecognizeTString(const char* &value);
00121 
00122    TSQLStructure*   fParent;     //!
00123    Int_t            fType;       //!
00124    const void*      fPointer;    //!
00125    TString          fValue;      //!
00126    Int_t            fArrayIndex; //!
00127    Int_t            fRepeatCnt;  //!
00128    TObjArray        fChilds;     //!
00129 
00130 public:
00131    TSQLStructure();
00132    virtual ~TSQLStructure();
00133   
00134    TSQLStructure*   GetParent() const { return fParent; }
00135    void             SetParent(TSQLStructure* p) { fParent = p; }
00136    Int_t            NumChilds() const;
00137    TSQLStructure*   GetChild(Int_t n) const;
00138  
00139    void             SetType(Int_t typ) { fType = typ; }
00140    Int_t            GetType() const { return fType; }
00141    
00142    // this part requried for writing to SQL tables
00143    void             SetObjectRef(Long64_t refid, const TClass* cl);
00144    void             SetObjectPointer(Long64_t ptrid);
00145    void             SetVersion(const TClass* cl, Int_t version = -100);
00146    void             SetClassStreamer(const TClass* cl);
00147    void             SetStreamerInfo(const TStreamerInfo* info);
00148    void             SetStreamerElement(const TStreamerElement* elem, Int_t number);
00149    void             SetCustomClass(const TClass* cl, Version_t version);
00150    void             SetCustomElement(TStreamerElement* elem);
00151    void             SetValue(const char* value, const char* tname = 0);
00152    void             SetArrayIndex(Int_t indx, Int_t cnt=1);
00153    void             SetArray(Int_t sz = -1);
00154    void             ChangeValueOnly(const char* value);
00155    
00156    TClass*          GetObjectClass() const;
00157    TClass*          GetVersionClass() const;
00158    TStreamerInfo*   GetStreamerInfo() const;
00159    TStreamerElement* GetElement() const;
00160    Int_t            GetElementNumber() const;
00161    TClass*          GetCustomClass() const;
00162    Version_t        GetCustomClassVersion() const;
00163    Bool_t           GetClassInfo(TClass* &cl, Version_t &version);
00164    const char*      GetValueType() const;
00165    const char*      GetValue() const;
00166    Int_t            GetArrayIndex() const { return fArrayIndex; }
00167    Int_t            GetRepeatCounter() const { return fRepeatCnt; }
00168   
00169    void             Add(TSQLStructure* child);
00170    void             AddVersion(const TClass* cl, Int_t version = -100);
00171    void             AddValue(const char* value, const char* tname = 0);
00172    void             ChildArrayIndex(Int_t index, Int_t cnt = 1);
00173 
00174    // this is part specially for reading of sql tables
00175   
00176    Long64_t         DefineObjectId(Bool_t recursive = kTRUE);
00177   
00178    void             SetObjectData(TSQLObjectData* objdata);
00179    void             AddObjectData(TSQLObjectData* objdata);
00180    TSQLObjectData*  GetObjectData(Bool_t search = false);
00181   
00182    virtual void     Print(Option_t* option = "") const;
00183    void             PrintLevel(Int_t level) const;
00184   
00185    Bool_t           ConvertToTables(TSQLFile* f, Long64_t keyid, TObjArray* cmds);
00186   
00187    Int_t            LocateElementColumn(TSQLFile* f, TBufferSQL2* buf, TSQLObjectData* data);
00188 
00189    static Bool_t    UnpackTObject(TSQLFile* f, TBufferSQL2* buf, TSQLObjectData* data, Long64_t objid, Int_t clversion);
00190    static Bool_t    UnpackTString(TSQLFile* f, TBufferSQL2* buf, TSQLObjectData* data, Long64_t objid, Int_t clversion);
00191    static Bool_t    IsNumericType(Int_t typ);
00192    static const char* GetSimpleTypeName(Int_t typ);
00193    static TString   MakeArrayIndex(TStreamerElement* elem, Int_t n);
00194    static Int_t     DefineElementColumnType(TStreamerElement* elem, TSQLFile* f);
00195    static TString   DefineElementColumnName(TStreamerElement* elem, TSQLFile* f, Int_t indx = 0);
00196    static void      AddStrBrackets(TString &s, const char* quote);
00197   
00198    enum ESQLTypes {
00199       kSqlObject       = 10001,
00200       kSqlPointer      = 10002,
00201       kSqlVersion      = 10003,
00202       kSqlStreamerInfo = 10004,
00203       kSqlClassStreamer= 10005,
00204       kSqlElement      = 10006,
00205       kSqlValue        = 10007,
00206       kSqlArray        = 10008,
00207       kSqlObjectData   = 10009,
00208       kSqlCustomClass  = 10010,
00209       kSqlCustomElement= 10011
00210    };
00211    
00212    enum ESQLColumns {
00213       kColUnknown      = 0,
00214       kColSimple       = 1,
00215       kColSimpleArray  = 2,
00216       kColParent       = 3,
00217       kColObject       = 4,
00218       kColObjectArray  = 5,
00219       kColNormObject   = 6,
00220       kColNormObjectArray = 7,
00221       kColObjectPtr    = 8,
00222       kColTString      = 9,
00223       kColRawData      = 10
00224    };
00225    
00226    enum ESQLIdType {
00227       kIdTable    = 0,
00228       kIdRawTable = 1,
00229       kIdColumn   = 2
00230    }; 
00231        
00232   
00233    ClassDef(TSQLStructure, 1); // Table/structure description used internally by YBufferSQL.
00234 };
00235 
00236 // text constants, used in SQL I/O
00237 
00238 namespace sqlio {
00239     
00240    extern Long64_t atol64(const char* value);
00241     
00242    extern const Int_t Ids_NullPtr;
00243    extern const Int_t Ids_RootDir;
00244    extern const Int_t Ids_TSQLFile;
00245    extern const Int_t Ids_StreamerInfos;
00246    extern const Int_t Ids_FirstKey;
00247    extern const Int_t Ids_FirstObject;
00248     
00249    extern const char* ObjectRef;
00250    extern const char* ObjectRef_Arr;
00251    extern const char* ObjectPtr;
00252    extern const char* ObjectInst;
00253    extern const char* Version;
00254    extern const char* TObjectUniqueId;
00255    extern const char* TObjectBits;
00256    extern const char* TObjectProcessId;
00257    extern const char* TStringValue;
00258    extern const char* IndexSepar;
00259    extern const char* RawSuffix;
00260    extern const char* ParentSuffix;
00261    extern const char* ObjectSuffix;
00262    extern const char* PointerSuffix;
00263    extern const char* StrSuffix;
00264    extern const char* LongStrPrefix;
00265     
00266    extern const char* Array;
00267    extern const char* Bool;
00268    extern const char* Char;
00269    extern const char* Short;
00270    extern const char* Int;
00271    extern const char* Long;
00272    extern const char* Long64;
00273    extern const char* Float;
00274    extern const char* Double;
00275    extern const char* UChar;
00276    extern const char* UShort;
00277    extern const char* UInt;
00278    extern const char* ULong;
00279    extern const char* ULong64;
00280    extern const char* CharStar;
00281    extern const char* True;
00282    extern const char* False;
00283     
00284    extern const char* KeysTable;
00285    extern const char* KeysTableIndex;
00286    extern const char* KT_Name;
00287    extern const char* KT_Title;
00288    extern const char* KT_Datetime;
00289    extern const char* KT_Cycle;
00290    extern const char* KT_Class;
00291 
00292    extern const char* DT_Create;
00293    extern const char* DT_Modified;
00294    extern const char* DT_UUID;
00295     
00296    extern const char* ObjectsTable;
00297    extern const char* ObjectsTableIndex;
00298    extern const char* OT_Class;
00299    extern const char* OT_Version;
00300    
00301    extern const char* IdsTable;
00302    extern const char* IdsTableIndex;
00303    extern const char* IT_TableID;
00304    extern const char* IT_SubID;
00305    extern const char* IT_Type;
00306    extern const char* IT_FullName;
00307    extern const char* IT_SQLName;
00308    extern const char* IT_Info;
00309     
00310    extern const char* BT_Field;
00311    extern const char* BT_Value;
00312     
00313    extern const char* StringsTable;
00314    extern const char* ST_Value;
00315     
00316    extern const char* ConfigTable;
00317    extern const char* CT_Field;
00318    extern const char* CT_Value;
00319     
00320    extern const char* cfg_Version;
00321    extern const char* cfg_UseSufixes;
00322    extern const char* cfg_ArrayLimit;
00323    extern const char* cfg_TablesType;
00324    extern const char* cfg_UseTransactions;
00325    extern const char* cfg_UseIndexes;
00326    extern const char* cfg_LockingMode;
00327    extern const char* cfg_ModifyCounter;
00328 }
00329 
00330 #endif

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