00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef DBCNV_IOODATABASE_H
00013 #define DBCNV_IOODATABASE_H
00014
00015
00016
00017 #include <string>
00018
00019
00020 #include "GaudiKernel/Kernel.h"
00021 #include "GaudiKernel/StatusCode.h"
00022 #include "GaudiKernel/StreamBuffer.h"
00023 #include "GaudiKernel/IInterface.h"
00024
00025 #include "GaudiDb/DbOOMs.h"
00026 #include "GaudiDb/DbLink.h"
00027 #include "GaudiDb/DbTypeInfo.h"
00028
00029
00030 class ISelectStatement;
00031
00053 class IDbSession {
00054
00055 friend DbSession;
00056 private:
00057
00058 virtual void release() = 0;
00059
00060 virtual DbResult open(DbAccessMode mode) = 0;
00061
00062 virtual DbResult close() = 0;
00063 };
00064
00086 class IDbFederation {
00088 friend DbFederation;
00089 private:
00091 virtual void release() = 0;
00093 virtual bool existsDbase(const std::string& name) const = 0;
00095 virtual DbResult close() const = 0;
00097 virtual DbResult open(dbHandle<DbSession>& sessionH, const std::string& name, DbAccessMode mode) const = 0;
00098 };
00099
00121 class IDbDataBase {
00123 friend DbDataBase;
00124 public:
00126 class Link : public dbHandle<DbLink> {
00128 friend DbDataBase;
00130 Link(const std::string& db, const std::string& cnt, const std::string& obj, const dbHandle<DbLink>& to, long int_id);
00132 Link() {
00133 }
00135 Link(const Link& copy) : dbHandle<DbLink>(copy), dbase(copy.dbase), container(copy.container), object(copy.object) {
00136 }
00138 virtual ~Link() {
00139 }
00140 public:
00142 std::string dbase;
00144 std::string container;
00146 std::string object;
00148 void serialize(StreamBuffer& buffer);
00150 void serialize(StreamBuffer& buffer) const;
00152 DbResult set(dbHandle<DbLink>& link) const;
00154 void print(IMessageSvc* msg, const std::string& tag, const char* opt) const;
00155 };
00156 class Type {
00157 public:
00158 std::string contName;
00159 std::string objType;
00160 std::string description;
00161 Type() {
00162 }
00163 Type(const Type& copy)
00164 : contName(copy.contName),
00165 objType(copy.objType),
00166 description(copy.description)
00167 {
00168 }
00169 Type(const std::string& cont, const std::string& obj, const std::string& desc="")
00170 : contName(cont), objType(obj), description(desc)
00171 {
00172 }
00173 virtual ~Type() {
00174 }
00176 void serialize(StreamBuffer& buffer);
00178 void serialize(StreamBuffer& buffer) const;
00180 void print(IMessageSvc* msg, const std::string& tag, const char* opt) const;
00181 };
00182 private:
00184 virtual void release() = 0;
00186 virtual bool isEqual(const Link* link, const dbHandle<DbLink>* test) = 0;
00188 virtual DbResult assocEntry(const std::vector<Link*>& links, const dbHandle<DbLink>& test, std::string& db, std::string& cnt, std::string& obj) = 0;
00190 virtual DbResult close(DbAccessMode mode) const = 0;
00192 virtual DbResult open(const dbHandle<DbFederation>& fedH, const std::string& name, DbAccessMode mode) const = 0;
00194 virtual DbResult find(dbHandle<DbContainer>& handle) = 0;
00195 };
00196
00214 class IDbCursor {
00215 public:
00217 virtual void release() = 0;
00219 virtual DbResult next(const dbHandle<DbContainer>& cntH, dbHandle<DbObject>& objH) = 0;
00220 };
00221
00243 class IDbContainer {
00245 friend DbContainer;
00246 private:
00248 virtual void release() = 0;
00250 virtual long size() const = 0;
00252 virtual DbResult close() const = 0;
00254 virtual DbResult open(const dbHandle<DbDataBase>& dbH, const std::string& name, const DbTypeInfo& info, DbAccessMode mode) const = 0;
00256 virtual DbResult select(ISelectStatement* criteria) const = 0;
00258 virtual DbResult unselect() const = 0;
00260 virtual DbResult find(const dbHandle<DbContainer>& cntH, dbHandle<DbObject>& handle, const dbHandle<DbLink>& link) const = 0;
00262 virtual DbResult addEntry(const dbHandle<DbObject>& handle) = 0;
00264 virtual DbResult updateEntry(const dbHandle<DbObject>& handle) = 0;
00266 virtual IDbCursor* makeCursor() const = 0;
00267 };
00268
00269
00270
00271 static const InterfaceID IID_IOODataBase(111, 1 , 0);
00272
00314 class IOODataBase : virtual public IInterface {
00315 public:
00317 static const InterfaceID& interfaceID() { return IID_IOODataBase; }
00319 typedef DbPersistent* (*CreateP)( const dbHandle<DbContainer>& cntH );
00321 typedef DbObject* (*CreateT)( void* buffer);
00322
00323 public:
00325 virtual StatusCode initialize (const std::string& nam) = 0;
00327 virtual StatusCode finalize (void) = 0;
00329 virtual IMessageSvc* msgSvc () = 0;
00331 virtual unsigned char type () const = 0;
00333 virtual const std::string& name () const = 0;
00335 virtual const std::string& driver () const = 0;
00337 virtual void setDriver (const std::string& drv) = 0;
00339 virtual const std::string& server () const = 0;
00341 virtual void setServer (const std::string& srv) = 0;
00343 virtual IDbSession* createSession (void) = 0;
00345 virtual IDbFederation* createFederation (void) = 0;
00347 virtual IDbDataBase* createDataBase (void) = 0;
00349 virtual IDbContainer* createContainer (void) = 0;
00351 virtual const DbTypeInfo* typeInfo (const std::string& nam) const = 0;
00353 virtual DbTypeInfo* typeInfo (const std::string& nam) = 0;
00355 virtual DbResult addTypeInfo (const std::string& nam, DbTypeInfo* info) = 0;
00357 virtual DbTypeInfo* addTypeInfo (const std::string& nam, const std::string& t_type, const std::string& p_type, const std::string& desc, std::vector<DbColumn*>& cols) = 0;
00359 virtual DbTypeInfo* addTypeInfo (const IDbDataBase::Type* pType) = 0;
00361 virtual DbResult prepareLink (const dbObjectHandle<DbObject>& objH, dbHandle<DbLink>& linkH, void* gene) = 0;
00362 };
00363
00364 #endif // DBCNV_IOODATABASE_H