19 class TStreamerElement;
20 class TVirtualStreamerInfo;
30 class TSQLFile final :
public TFile {
32 friend class TBufferSQL2;
34 friend class TSQLStructure;
35 friend class TSQLTableData;
36 friend class TSqlRegistry;
37 friend class TSqlRawBuffer;
38 friend class TSqlCmdsBuffer;
41 enum ELockingKinds { kLockFree = 0, kLockBusy = 1 };
44 Int_t SysOpen(
const char *, Int_t, UInt_t) final {
return 0; }
45 Int_t SysClose(Int_t) final {
return 0; }
46 Int_t SysRead(Int_t,
void *, Int_t) final {
return 0; }
47 Int_t SysWrite(Int_t,
const void *, Int_t) final {
return 0; }
48 Long64_t SysSeek(Int_t, Long64_t, Int_t) final {
return 0; }
49 Int_t SysStat(Int_t, Long_t *, Long64_t *, Long_t *, Long_t *) final {
return 0; }
50 Int_t SysSync(Int_t) final {
return 0; }
53 Long64_t DirCreateEntry(TDirectory *) final;
54 Int_t DirReadKeys(TDirectory *) final;
55 void DirWriteKeys(TDirectory *) final;
56 void DirWriteHeader(TDirectory *) final;
58 InfoListRet GetStreamerInfoListImpl(
bool) final;
61 void SaveToDatabase();
62 Bool_t ReadConfigurations();
63 Bool_t IsTablesExists();
64 void InitSqlDatabase(Bool_t create);
65 void CreateBasicTables();
66 void IncrementModifyCounter();
67 void SetLocking(Int_t mode);
71 Bool_t IsWriteAccess();
72 Bool_t IsReadAccess();
75 TSQLResult *SQLQuery(const
char *cmd, Int_t flag = 0, Bool_t *res = 0);
76 Bool_t SQLCanStatement();
77 TSQLStatement *SQLStatement(const
char *cmd, Int_t bufsize = 1000);
78 void SQLDeleteStatement(TSQLStatement *stmt);
79 Bool_t SQLApplyCommands(TObjArray *cmds);
80 Bool_t SQLTestTable(const
char *tablename);
81 Long64_t SQLMaximumValue(const
char *tablename, const
char *columnname);
82 void SQLDeleteAllTables();
83 Bool_t SQLStartTransaction();
86 Int_t SQLMaxIdentifierLength();
89 void DeleteKeyFromDB(Long64_t keyid);
90 Bool_t WriteKeyData(TKeySQL *key);
91 Bool_t UpdateKeyData(TKeySQL *key);
92 TKeySQL *FindSQLKey(TDirectory *dir, Long64_t keyid);
93 Long64_t DefineNextKeyId();
94 Int_t StreamKeysForDirectory(TDirectory *dir, Bool_t doupdate, Long64_t specialkeyid = -1, TKeySQL **specialkey = 0);
97 TSQLClassInfo *FindSQLClassInfo(const
char *clname, Int_t version);
98 TSQLClassInfo *FindSQLClassInfo(const TClass *cl);
99 TSQLClassInfo *RequestSQLClassInfo(const
char *clname, Int_t version);
100 TSQLClassInfo *RequestSQLClassInfo(const TClass *cl);
101 Bool_t CreateClassTable(TSQLClassInfo *sqlinfo, TObjArray *colinfos);
102 Bool_t CreateRawTable(TSQLClassInfo *sqlinfo);
104 Bool_t ProduceClassSelectQuery(TVirtualStreamerInfo *info, TSQLClassInfo *sqlinfo, TString &columns, TString &tables,
106 void AddIdEntry(Long64_t tableid, Int_t subid, Int_t type, const
char *name, const
char *sqlname, const
char *info);
107 void ReadSQLClassInfos();
108 TString DefineTableName(const
char *clname, Int_t version, Bool_t rawtable);
109 Bool_t HasTable(const
char *name);
112 TString CodeLongString(Long64_t objid, Int_t strid);
113 Int_t IsLongStringCode(Long64_t objid, const
char *value);
114 Bool_t VerifyLongStringTable();
115 Bool_t GetLongString(Long64_t objid, Int_t strid, TString &value);
118 Long64_t VerifyObjectTable();
119 Bool_t SQLObjectInfo(Long64_t objid, TString &clname, Version_t &version);
120 TObjArray *SQLObjectsInfo(Long64_t keyid);
121 TSQLResult *GetNormalClassData(Long64_t objid, TSQLClassInfo *sqlinfo);
122 TSQLResult *GetNormalClassDataAll(Long64_t minobjid, Long64_t maxobjid, TSQLClassInfo *sqlinfo);
123 TSQLResult *GetBlobClassData(Long64_t objid, TSQLClassInfo *sqlinfo);
124 TSQLStatement *GetBlobClassDataStmt(Long64_t objid, TSQLClassInfo *sqlinfo);
125 Long64_t StoreObjectInTables(Long64_t keyid, const
void *obj, const TClass *cl);
126 Bool_t WriteSpecialObject(Long64_t keyid, TObject *obj, const
char *name, const
char *title);
127 TObject *ReadSpecialObject(Long64_t keyid, TObject *obj = 0);
130 const
char *SQLCompatibleType(Int_t typ) const;
131 const
char *SQLIntType() const;
132 const
char *SQLSmallTextType()
const {
return fOtherTypes[0]; }
133 Int_t SQLSmallTextTypeLimit()
const {
return atoi(fOtherTypes[1]); }
134 const char *SQLBigTextType()
const {
return fOtherTypes[2]; }
135 const char *SQLDatetimeType()
const {
return fOtherTypes[3]; }
136 const char *SQLIdentifierQuote()
const {
return fOtherTypes[4]; }
137 const char *SQLDirIdColumn()
const {
return fOtherTypes[5]; }
138 const char *SQLKeyIdColumn()
const {
return fOtherTypes[6]; }
139 const char *SQLObjectIdColumn()
const {
return fOtherTypes[7]; }
140 const char *SQLRawIdColumn()
const {
return fOtherTypes[8]; }
141 const char *SQLStrIdColumn()
const {
return fOtherTypes[9]; }
142 const char *SQLNameSeparator()
const {
return fOtherTypes[10]; }
143 const char *SQLValueQuote()
const {
return fOtherTypes[11]; }
144 const char *SQLDefaultTableType()
const {
return fOtherTypes[12]; }
148 TList *fSQLClassInfos;
153 Bool_t fCanChangeConfig;
155 Int_t fUseTransactions;
157 Int_t fModifyCounter;
158 Int_t fQuerisCounter;
160 const char **fBasicTypes;
161 const char **fOtherTypes;
165 std::ofstream *fLogFile;
167 Bool_t fIdsTableExists;
171 TSQLFile(
const TSQLFile &) =
delete;
172 void operator=(
const TSQLFile &) =
delete;
175 enum ETransactionKinds { kTransactionsOff = 0, kTransactionsAuto = 1, kTransactionsUser = 2 };
177 enum EIndexesKinds { kIndexesNone = 0, kIndexesBasic = 1, kIndexesClass = 2, kIndexesAll = 3 };
180 TSQLFile(
const char *dbname, Option_t *option =
"read",
const char *user =
"user",
const char *pass =
"pass");
184 Bool_t GetUseSuffixes()
const {
return fUseSuffixes; }
185 void SetUseSuffixes(Bool_t on = kTRUE);
186 Int_t GetArrayLimit()
const {
return fArrayLimit; }
187 void SetArrayLimit(Int_t limit = 20);
188 void SkipArrayLimit() { SetArrayLimit(-1); }
189 void SetTablesType(
const char *table_type);
190 const char *GetTablesType()
const {
return fTablesType.Data(); }
191 void SetUseTransactions(Int_t mode = kTransactionsAuto);
192 Int_t GetUseTransactions()
const {
return fUseTransactions; }
193 void SetUseIndexes(Int_t use_type = kIndexesBasic);
194 Int_t GetUseIndexes()
const {
return fUseIndexes; }
195 Int_t GetQuerisCounter()
const {
return fQuerisCounter; }
196 Int_t GetIOVersion()
const {
return fSQLIOversion; }
198 TString MakeSelectQuery(TClass *cl);
199 Bool_t StartTransaction();
204 void StartLogFile(
const char *fname);
207 void Close(Option_t *option =
"") final;
208 TKey *CreateKey(TDirectory *mother, const TObject *obj, const
char *name, Int_t bufsize) final;
209 TKey *CreateKey(TDirectory *mother, const
void *obj, const TClass *cl, const
char *name, Int_t bufsize) final;
210 void DrawMap(const
char * = "*", Option_t * = "") final {}
211 void FillBuffer(
char *&) final {}
212 void Flush() final {}
214 Long64_t GetEND() const final {
return 0; }
215 Int_t GetErrno() const final {
return 0; }
216 void ResetErrno() const final {}
218 const char *GetDataBaseName()
const;
219 Int_t GetNfree() const final {
return 0; }
220 Int_t GetNbytesInfo() const final{
return 0; }
221 Int_t GetNbytesFree() const final {
return 0; }
222 Long64_t GetSeekFree() const final {
return 0; }
223 Long64_t GetSeekInfo() const final {
return 0; }
224 Long64_t GetSize() const final {
return 0; }
226 Bool_t IsOpen() const final;
227 Bool_t IsMySQL() const;
228 Bool_t IsOracle() const;
229 Bool_t IsODBC() const;
231 void MakeFree(Long64_t, Long64_t) final {}
232 void MakeProject(
const char *,
const char * =
"*", Option_t * =
"new") final {}
233 void Map(Option_t *) final {}
235 void Paint(Option_t * =
"") final {}
236 void Print(Option_t * =
"") const final {}
237 Bool_t ReadBuffer(
char *, Int_t) final {
return kFALSE; }
238 Bool_t ReadBuffer(
char *, Long64_t, Int_t) final {
return kFALSE; }
239 void ReadFree() final {}
240 Int_t Recover() final {
return 0; }
241 Int_t ReOpen(Option_t *mode)
final;
242 void Seek(Long64_t, ERelativeTo = kBeg) final {}
244 void SetEND(Long64_t) final {}
245 Int_t Sizeof() const final {
return 0; }
247 Bool_t WriteBuffer(
const char *, Int_t) final {
return kFALSE; }
248 Int_t Write(
const char * =
nullptr, Int_t = 0, Int_t = 0) final {
return 0; }
249 Int_t Write(
const char * =
nullptr, Int_t = 0, Int_t = 0) const final {
return 0; }
250 void WriteFree() final {}
251 void WriteHeader() final;
252 void WriteStreamerInfo() final;
254 ClassDefOverride(TSQLFile, 1)