00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TSQLStructure
00013 #define ROOT_TSQLStructure
00014
00015
00016
00017
00018
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;
00050 TString fType;
00051 TString fValue;
00052 Bool_t fNumeric;
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);
00069 };
00070
00071
00072
00073 class TSQLTableData : public TObject {
00074
00075 protected:
00076 TSQLFile* fFile;
00077 TSQLClassInfo* fInfo;
00078 TObjArray fColumns;
00079 TObjArray* fColInfos;
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);
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
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
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);
00234 };
00235
00236
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