// @(#)root/sql:$Id: TSQLObjectData.h 34907 2010-08-20 17:51:15Z pcanal $ // 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_TSQLObjectData #define ROOT_TSQLObjectData ///////////////////////////////////////////////////////////////////////// // // // TSQLObjectData keeps data, requested from SQL server for object // // // ///////////////////////////////////////////////////////////////////////// #ifndef ROOT_TObject #include "TObject.h" #endif #ifndef ROOT_TString #include "TString.h" #endif class TObjArray; class TList; class TSQLClassInfo; class TSQLResult; class TSQLRow; class TSQLStatement; class TSQLObjectInfo : public TObject { public: TSQLObjectInfo(); TSQLObjectInfo(Long64_t objid, const char* classname, Version_t version); virtual ~TSQLObjectInfo(); Long64_t GetObjId() const { return fObjId; } const char* GetObjClassName() const { return fClassName.Data(); } Version_t GetObjVersion() const { return fVersion; } protected: Long64_t fObjId; TString fClassName; Version_t fVersion; ClassDef(TSQLObjectInfo, 1) //Info (classname, version) about object in database }; //======================================================================= class TSQLObjectData : public TObject { public: TSQLObjectData(); TSQLObjectData(TSQLClassInfo* sqlinfo, Long64_t objid, TSQLResult* classdata, TSQLRow* classrow, TSQLResult* blobdata, TSQLStatement* blobstmt); virtual ~TSQLObjectData(); Long64_t GetObjId() const { return fObjId; } TSQLClassInfo* GetInfo() const { return fInfo; } Bool_t LocateColumn(const char* colname, Bool_t isblob = kFALSE); Bool_t IsBlobData() const { return fCurrentBlob || (fUnpack!=0); } void ShiftToNextValue(); void AddUnpack(const char* tname, const char* value); void AddUnpackInt(const char* tname, Int_t value); const char* GetValue() const { return fLocatedValue; } const char* GetLocatedField() const { return fLocatedField; } const char* GetBlobPrefixName() const { return fBlobPrefixName; } const char* GetBlobTypeName() const { return fBlobTypeName; } Bool_t VerifyDataType(const char* tname, Bool_t errormsg = kTRUE); Bool_t PrepareForRawData(); protected: Bool_t ExtractBlobValues(); Bool_t ShiftBlobRow(); Int_t GetNumClassFields(); const char* GetClassFieldName(Int_t n); TSQLClassInfo* fInfo; //! Long64_t fObjId; //! Bool_t fOwner; //! TSQLResult* fClassData; //! TSQLResult* fBlobData; //! TSQLStatement* fBlobStmt; //! Int_t fLocatedColumn; //! TSQLRow* fClassRow; //! TSQLRow* fBlobRow; //! const char* fLocatedField; //! const char* fLocatedValue; //! Bool_t fCurrentBlob; //! const char* fBlobPrefixName; //! name prefix in current blob row const char* fBlobTypeName; //! name type (without prefix) in current blob row TObjArray* fUnpack; //! ClassDef(TSQLObjectData, 1) // Keeps the data requested from the SQL server for an object. }; // ====================================================================== class TSQLObjectDataPool : public TObject { public: TSQLObjectDataPool(); TSQLObjectDataPool(TSQLClassInfo* info, TSQLResult* data); virtual ~TSQLObjectDataPool(); TSQLClassInfo* GetSqlInfo() const { return fInfo; } TSQLResult* GetClassData() const { return fClassData; } TSQLRow* GetObjectRow(Long64_t objid); protected: TSQLClassInfo* fInfo; //! classinfo, for which pool is created TSQLResult* fClassData; //! results with request to selected table Bool_t fIsMoreRows; //! indicates if class data has not yet read rows TList* fRowsPool; //! pool of extrcted, but didnot used rows ClassDef(TSQLObjectDataPool,1) // XML object keeper class }; #endif