12 #ifndef ROOT_TSQLStructure
13 #define ROOT_TSQLStructure
29 class TStreamerElement;
37 class TSQLColumnData final :
public TObject {
43 Bool_t fNumeric{kFALSE};
45 TSQLColumnData(
const char *name,
const char *sqltype,
const char *value, Bool_t numeric);
47 TSQLColumnData(
const char *name, Long64_t value);
49 const char *GetName() const final {
return fName.Data(); }
50 const char *GetType()
const {
return fType.Data(); }
51 const char *GetValue()
const {
return fValue.Data(); }
52 Bool_t IsNumeric()
const {
return fNumeric; }
54 ClassDefOverride(TSQLColumnData, 1);
59 class TSQLTableData :
public TObject {
62 TSQLFile *fFile{
nullptr};
63 TSQLClassInfo *fInfo{
nullptr};
65 TObjArray *fColInfos{
nullptr};
67 TString DefineSQLName(
const char *fullname);
68 Bool_t HasSQLName(
const char *sqlname);
71 TSQLTableData(TSQLFile *f =
nullptr, TSQLClassInfo *info =
nullptr);
72 virtual ~TSQLTableData();
74 void AddColumn(
const char *name, Long64_t value);
75 void AddColumn(
const char *name,
const char *sqltype,
const char *value, Bool_t numeric);
77 TObjArray *TakeColInfos();
79 Int_t GetNumColumns();
80 const char *GetColumn(Int_t n);
81 Bool_t IsNumeric(Int_t n);
83 ClassDef(TSQLTableData, 1);
88 class TSQLStructure :
public TObject {
90 Bool_t CheckNormalClassPair(TSQLStructure *vers, TSQLStructure *info);
92 Long64_t FindMaxObjectId();
93 void PerformConversion(TSqlRegistry *reg, TSqlRawBuffer *blobs,
const char *topname, Bool_t useblob = kFALSE);
94 Bool_t StoreObject(TSqlRegistry *reg, Long64_t objid, TClass *cl, Bool_t registerobj = kTRUE);
95 Bool_t StoreObjectInNormalForm(TSqlRegistry *reg);
96 Bool_t StoreClassInNormalForm(TSqlRegistry *reg);
97 Bool_t StoreElementInNormalForm(TSqlRegistry *reg, TSQLTableData *columns);
98 Bool_t TryConvertObjectArray(TSqlRegistry *reg, TSqlRawBuffer *blobs);
100 Bool_t StoreTObject(TSqlRegistry *reg);
101 Bool_t StoreTString(TSqlRegistry *reg);
102 Bool_t RecognizeTString(
const char *&value);
104 TSQLStructure *fParent{
nullptr};
106 const void *fPointer{
nullptr};
108 Int_t fArrayIndex{-1};
114 virtual ~TSQLStructure();
116 TSQLStructure *GetParent()
const {
return fParent; }
117 void SetParent(TSQLStructure *p) { fParent = p; }
118 Int_t NumChilds()
const;
119 TSQLStructure *GetChild(Int_t n)
const;
121 void SetType(Int_t typ) { fType = typ; }
122 Int_t GetType()
const {
return fType; }
125 void SetObjectRef(Long64_t refid,
const TClass *cl);
126 void SetObjectPointer(Long64_t ptrid);
127 void SetVersion(
const TClass *cl, Int_t version = -100);
128 void SetClassStreamer(
const TClass *cl);
129 void SetStreamerInfo(
const TStreamerInfo *info);
130 void SetStreamerElement(
const TStreamerElement *elem, Int_t number);
131 void SetCustomClass(
const TClass *cl, Version_t version);
132 void SetCustomElement(TStreamerElement *elem);
133 void SetValue(
const char *value,
const char *tname = 0);
134 void SetArrayIndex(Int_t indx, Int_t cnt = 1);
135 void SetArray(Int_t sz = -1);
136 void ChangeValueOnly(
const char *value);
138 TClass *GetObjectClass()
const;
139 TClass *GetVersionClass()
const;
140 TStreamerInfo *GetStreamerInfo()
const;
141 TStreamerElement *GetElement()
const;
142 Int_t GetElementNumber()
const;
143 TClass *GetCustomClass()
const;
144 Version_t GetCustomClassVersion()
const;
145 Bool_t GetClassInfo(TClass *&cl, Version_t &version);
146 const char *GetValueType()
const;
147 const char *GetValue()
const;
148 Int_t GetArrayIndex()
const {
return fArrayIndex; }
149 Int_t GetRepeatCounter()
const {
return fRepeatCnt; }
151 void Add(TSQLStructure *child);
152 void AddVersion(
const TClass *cl, Int_t version = -100);
153 void AddValue(
const char *value,
const char *tname = 0);
154 void ChildArrayIndex(Int_t index, Int_t cnt = 1);
158 Long64_t DefineObjectId(Bool_t recursive = kTRUE);
160 void SetObjectData(TSQLObjectData *objdata);
161 void AddObjectData(TSQLObjectData *objdata);
162 TSQLObjectData *GetObjectData(Bool_t search =
false);
164 virtual void Print(Option_t *option =
"")
const;
165 void PrintLevel(Int_t level)
const;
167 Bool_t ConvertToTables(TSQLFile *f, Long64_t keyid, TObjArray *cmds);
169 Int_t LocateElementColumn(TSQLFile *f, TBufferSQL2 *buf, TSQLObjectData *data);
171 static Bool_t UnpackTObject(TSQLFile *f, TBufferSQL2 *buf, TSQLObjectData *data, Long64_t objid, Int_t clversion);
172 static Bool_t UnpackTString(TSQLFile *f, TBufferSQL2 *buf, TSQLObjectData *data, Long64_t objid, Int_t clversion);
173 static Bool_t IsNumericType(Int_t typ);
174 static const char *GetSimpleTypeName(Int_t typ);
175 static TString MakeArrayIndex(TStreamerElement *elem, Int_t n);
176 static Int_t DefineElementColumnType(TStreamerElement *elem, TSQLFile *f);
177 static TString DefineElementColumnName(TStreamerElement *elem, TSQLFile *f, Int_t indx = 0);
178 static void AddStrBrackets(TString &s,
const char *quote);
184 kSqlStreamerInfo = 10004,
185 kSqlClassStreamer = 10005,
189 kSqlObjectData = 10009,
190 kSqlCustomClass = 10010,
191 kSqlCustomElement = 10011
202 kColNormObjectArray = 7,
208 enum ESQLIdType { kIdTable = 0, kIdRawTable = 1, kIdColumn = 2 };
210 ClassDef(TSQLStructure, 1);
217 extern Long64_t atol64(
const char *value);
219 extern const Int_t Ids_NullPtr;
220 extern const Int_t Ids_RootDir;
221 extern const Int_t Ids_TSQLFile;
222 extern const Int_t Ids_StreamerInfos;
223 extern const Int_t Ids_FirstKey;
224 extern const Int_t Ids_FirstObject;
226 extern const char *ObjectRef;
227 extern const char *ObjectRef_Arr;
228 extern const char *ObjectPtr;
229 extern const char *ObjectInst;
230 extern const char *Version;
231 extern const char *TObjectUniqueId;
232 extern const char *TObjectBits;
233 extern const char *TObjectProcessId;
234 extern const char *TStringValue;
235 extern const char *IndexSepar;
236 extern const char *RawSuffix;
237 extern const char *ParentSuffix;
238 extern const char *ObjectSuffix;
239 extern const char *PointerSuffix;
240 extern const char *StrSuffix;
241 extern const char *LongStrPrefix;
243 extern const char *Array;
244 extern const char *Bool;
245 extern const char *Char;
246 extern const char *Short;
247 extern const char *Int;
248 extern const char *Long;
249 extern const char *Long64;
250 extern const char *Float;
251 extern const char *Double;
252 extern const char *UChar;
253 extern const char *UShort;
254 extern const char *UInt;
255 extern const char *ULong;
256 extern const char *ULong64;
257 extern const char *CharStar;
258 extern const char *True;
259 extern const char *False;
261 extern const char *KeysTable;
262 extern const char *KeysTableIndex;
263 extern const char *KT_Name;
264 extern const char *KT_Title;
265 extern const char *KT_Datetime;
266 extern const char *KT_Cycle;
267 extern const char *KT_Class;
269 extern const char *DT_Create;
270 extern const char *DT_Modified;
271 extern const char *DT_UUID;
273 extern const char *ObjectsTable;
274 extern const char *ObjectsTableIndex;
275 extern const char *OT_Class;
276 extern const char *OT_Version;
278 extern const char *IdsTable;
279 extern const char *IdsTableIndex;
280 extern const char *IT_TableID;
281 extern const char *IT_SubID;
282 extern const char *IT_Type;
283 extern const char *IT_FullName;
284 extern const char *IT_SQLName;
285 extern const char *IT_Info;
287 extern const char *BT_Field;
288 extern const char *BT_Value;
290 extern const char *StringsTable;
291 extern const char *ST_Value;
293 extern const char *ConfigTable;
294 extern const char *CT_Field;
295 extern const char *CT_Value;
297 extern const char *cfg_Version;
298 extern const char *cfg_UseSufixes;
299 extern const char *cfg_ArrayLimit;
300 extern const char *cfg_TablesType;
301 extern const char *cfg_UseTransactions;
302 extern const char *cfg_UseIndexes;
303 extern const char *cfg_LockingMode;
304 extern const char *cfg_ModifyCounter;