// @(#)root/sql:$Id$ // Author: Sergey Linev 20/11/2005 /************************************************************************* * Copyright (C) 1995-2005, Rene Brun and Fons Rademakers. * * All rights reserved. * * * * For the licensing terms see $ROOTSYS/LICENSE. * * For the list of contributors see $ROOTSYS/README/CREDITS. * *************************************************************************/ #ifndef ROOT_TSQLFile #define ROOT_TSQLFile #ifndef ROOT_TFile #include "TFile.h" #endif #include class TList; class TStreamerElement; class TVirtualStreamerInfo; class TSQLServer; class TSQLStatement; class TSQLResult; class TSQLRow; class TKeySQL; class TBufferSQL2; class TSQLClassInfo; class TSQLFile : public TFile { friend class TBufferSQL2; friend class TKeySQL; friend class TSQLStructure; friend class TSQLTableData; friend class TSqlRegistry; friend class TSqlRawBuffer; friend class TSqlCmdsBuffer; protected: enum ELockingKinds { kLockFree = 0, kLockBusy = 1 }; // Interface to basic system I/O routines, suppressed virtual Int_t SysOpen(const char*, Int_t, UInt_t) { return 0; } virtual Int_t SysClose(Int_t) { return 0; } virtual Int_t SysRead(Int_t, void*, Int_t) { return 0; } virtual Int_t SysWrite(Int_t, const void*, Int_t) { return 0; } virtual Long64_t SysSeek(Int_t, Long64_t, Int_t) { return 0; } virtual Int_t SysStat(Int_t, Long_t*, Long64_t*, Long_t*, Long_t*) { return 0; } virtual Int_t SysSync(Int_t) { return 0; } // Overwrite methods for directory I/O virtual Long64_t DirCreateEntry(TDirectory*); virtual Int_t DirReadKeys(TDirectory*); virtual void DirWriteKeys(TDirectory*); virtual void DirWriteHeader(TDirectory*); // functions to manipulate basic tables (Configurations, Objects, Keys) in database void SaveToDatabase(); Bool_t ReadConfigurations(); Bool_t IsTablesExists(); void InitSqlDatabase(Bool_t create); void CreateBasicTables(); void IncrementModifyCounter(); void SetLocking(Int_t mode); Int_t GetLocking(); // function for read/write access infos Bool_t IsWriteAccess(); Bool_t IsReadAccess(); // generic sql functions TSQLResult* SQLQuery(const char* cmd, Int_t flag = 0, Bool_t* res = 0); Bool_t SQLCanStatement(); TSQLStatement* SQLStatement(const char* cmd, Int_t bufsize = 1000); void SQLDeleteStatement(TSQLStatement* stmt); Bool_t SQLApplyCommands(TObjArray* cmds); Bool_t SQLTestTable(const char* tablename); Long64_t SQLMaximumValue(const char* tablename, const char* columnname); void SQLDeleteAllTables(); Bool_t SQLStartTransaction(); Bool_t SQLCommit(); Bool_t SQLRollback(); Int_t SQLMaxIdentifierLength(); // operation with keys structures in database void DeleteKeyFromDB(Long64_t keyid); Bool_t WriteKeyData(TKeySQL* key); Bool_t UpdateKeyData(TKeySQL* key); TKeySQL* FindSQLKey(TDirectory* dir, Long64_t keyid); Long64_t DefineNextKeyId(); Int_t StreamKeysForDirectory(TDirectory* dir, Bool_t doupdate, Long64_t specialkeyid = -1, TKeySQL** specialkey = 0); // handling SQL class info structures TSQLClassInfo* FindSQLClassInfo(const char* clname, Int_t version); TSQLClassInfo* FindSQLClassInfo(const TClass* cl); TSQLClassInfo* RequestSQLClassInfo(const char* clname, Int_t version); TSQLClassInfo* RequestSQLClassInfo(const TClass* cl); Bool_t CreateClassTable(TSQLClassInfo* sqlinfo, TObjArray* colinfos); Bool_t CreateRawTable(TSQLClassInfo* sqlinfo); Bool_t ProduceClassSelectQuery(TVirtualStreamerInfo* info, TSQLClassInfo* sqlinfo, TString& columns, TString& tables, Int_t& tablecnt); void AddIdEntry(Long64_t tableid, Int_t subid, Int_t type, const char* name, const char* sqlname, const char* info); void ReadSQLClassInfos(); TString DefineTableName(const char* clname, Int_t version, Bool_t rawtable); Bool_t HasTable(const char* name); // operations with long string table TString CodeLongString(Long64_t objid, Int_t strid); Int_t IsLongStringCode(Long64_t objid, const char* value); Bool_t VerifyLongStringTable(); Bool_t GetLongString(Long64_t objid, Int_t strid, TString& value); // operation with object tables in database Long64_t VerifyObjectTable(); Bool_t SQLObjectInfo(Long64_t objid, TString& clname, Version_t &version); TObjArray* SQLObjectsInfo(Long64_t keyid); TSQLResult* GetNormalClassData(Long64_t objid, TSQLClassInfo* sqlinfo); TSQLResult* GetNormalClassDataAll(Long64_t minobjid, Long64_t maxobjid, TSQLClassInfo* sqlinfo); TSQLResult* GetBlobClassData(Long64_t objid, TSQLClassInfo* sqlinfo); TSQLStatement* GetBlobClassDataStmt(Long64_t objid, TSQLClassInfo* sqlinfo); Long64_t StoreObjectInTables(Long64_t keyid, const void* obj, const TClass* cl); Bool_t WriteSpecialObject(Long64_t keyid, TObject* obj, const char* name, const char* title); TObject* ReadSpecialObject(Long64_t keyid, TObject* obj = 0); // sql specific types const char* SQLCompatibleType(Int_t typ) const; const char* SQLIntType() const; const char* SQLSmallTextType() const { return fOtherTypes[0]; } Int_t SQLSmallTextTypeLimit() const { return atoi(fOtherTypes[1]); } const char* SQLBigTextType() const { return fOtherTypes[2]; } const char* SQLDatetimeType() const { return fOtherTypes[3]; } const char* SQLIdentifierQuote() const { return fOtherTypes[4]; } const char* SQLDirIdColumn() const { return fOtherTypes[5]; } const char* SQLKeyIdColumn() const { return fOtherTypes[6]; } const char* SQLObjectIdColumn() const { return fOtherTypes[7]; } const char* SQLRawIdColumn() const { return fOtherTypes[8]; } const char* SQLStrIdColumn() const { return fOtherTypes[9]; } const char* SQLNameSeparator() const { return fOtherTypes[10]; } const char* SQLValueQuote() const { return fOtherTypes[11]; } const char* SQLDefaultTableType() const { return fOtherTypes[12]; } TSQLServer* fSQL; ///