--- parser3/src/include/pa_sql_driver_manager.h 2001/04/04 11:47:28 1.2 +++ parser3/src/include/pa_sql_driver_manager.h 2003/01/21 15:51:11 1.26 @@ -1,45 +1,48 @@ /** @file Parser: sql driver manager decl. - - Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - - Author: Alexander Petrosyan (http://design.ru/paf) - - $Id: pa_sql_driver_manager.h,v 1.2 2001/04/04 11:47:28 paf Exp $ - - global sql driver manager, must be thread-safe + + Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com) + Author: Alexandr Petrosian (http://paf.design.ru) */ #ifndef PA_SQL_DRIVER_MANAGER_H #define PA_SQL_DRIVER_MANAGER_H +static const char* IDENT_SQL_DRIVER_MANAGER_H="$Date: 2003/01/21 15:51:11 $"; + #include "pa_pool.h" #include "pa_sql_driver.h" #include "pa_hash.h" -#include "pa_stack.h" -#include "pa_threads.h" #include "pa_table.h" #include "pa_string.h" +#include "pa_cache_managers.h" + +// defines + +#define MAIN_SQL_NAME "SQL" +#define MAIN_SQL_DRIVERS_NAME "drivers" + +// forwards class SQL_Connection; +class SQL_Connection_ptr; /// sql driver manager -class SQL_Driver_manager : public Pooled { - friend SQL_Connection; +class SQL_Driver_manager : public Cache_manager { + friend class SQL_Connection; public: - SQL_Driver_manager(Pool& pool) : Pooled(pool), - driver_cache(pool), - connection_cache(pool) { - } + SQL_Driver_manager(Pool& apool); + virtual ~SQL_Driver_manager(); /** connect to specified url, using driver dynamic library found in table, if not loaded yet checks driver version */ - SQL_Connection& get_connection(const String& url, Table *protocol2library); + SQL_Connection_ptr get_connection(const String& url, const String& request_origin, + Table *protocol2driver_and_client); private: // driver cache @@ -50,6 +53,8 @@ private: // connection cache SQL_Connection *get_connection_from_cache(const String& url); void put_connection_to_cache(const String& url, SQL_Connection& connection); +private: + time_t prev_expiration_pass_time; private: // for SQL_Connection @@ -60,6 +65,12 @@ private: Hash driver_cache; Hash connection_cache; + +public: // Cache_manager + + virtual Value& get_status(Pool& pool, const String *source); + virtual void maybe_expire_cache(); + }; /// global