00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef RESOURCEPOOL_SQL_FACTORY_HH
00025 #define RESOURCEPOOL_SQL_FACTORY_HH
00026
00027 #include "mm/gc_ptr.hh"
00028 #include "Thread/Lock.hh"
00029
00030 namespace fatalmind {
00031 namespace SQL {
00032
00033 template<class TM = DefaultThreadedModel>
00034 class SQLFactory;
00035
00036 }
00037 }
00038
00039 #include "ResourcePool/SQL/Resource.hh"
00040 #include "ResourcePool/SQL/SQLFactoryInterface.hh"
00041 #include "ResourcePool/ResourcePoolStreamLogger.hh"
00042
00043 namespace fatalmind {
00044 namespace SQL {
00045
00046 template<class TM> class SQLFactory_Impl;
00047
00048 template<class TM>
00049 class SQLFactory : public SQLFactoryInterface {
00050 typedef SQLFactoryInterface super;
00051 public:
00055 SQLFactory(const std::string& logon, ResourcePoolEventObserver& e = ResourcePoolStreamLogger::defaultLogger);
00056 SQLFactory(const SQLFactory&);
00057 ~SQLFactory() throw();
00058
00059 DummySQLResource<TM>* create_resource() const;
00060
00061 virtual databaseType_t getDatabaseType() const;
00062
00063
00064
00065 gc_ptr<ResourcePoolEventObserver> getEventObserver() const {
00066 return _realFactory->getEventObserver();
00067 }
00068
00069 protected:
00070 virtual Clone* DoClone() const;
00071
00072 private:
00073 gc_ptr<SQLFactory_Impl<TM> > _realFactory;
00074 databaseType_t resourceTypeCode;
00075 };
00076
00077 }
00078 }
00079
00080 #endif