|
|
| version 1.18, 2001/11/08 14:47:31 | version 1.27.4.1, 2003/09/24 14:32:06 |
|---|---|
| Line 2 | Line 2 |
| Parser: sql driver manager decl. | Parser: sql driver manager decl. |
| global sql driver manager, must be thread-safe | global sql driver manager, must be thread-safe |
| Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) | Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) |
| Author: Alexander Petrosyan <paf@design.ru> (http://paf.design.ru) | Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru) |
| $Id$ | |
| */ | */ |
| #ifndef PA_SQL_DRIVER_MANAGER_H | #ifndef PA_SQL_DRIVER_MANAGER_H |
| #define PA_SQL_DRIVER_MANAGER_H | #define PA_SQL_DRIVER_MANAGER_H |
| #include "pa_config_includes.h" | static const char* IDENT_SQL_DRIVER_MANAGER_H="$Date$"; |
| #include "pa_pool.h" | |
| #include "pa_sql_driver.h" | #include "pa_sql_driver.h" |
| #include "pa_hash.h" | #include "pa_hash.h" |
| #include "pa_table.h" | #include "pa_table.h" |
| #include "pa_string.h" | #include "pa_string.h" |
| #include "pa_cache_managers.h" | #include "pa_cache_managers.h" |
| #include "pa_stack.h" | |
| // defines | // defines |
| Line 29 | Line 29 |
| class SQL_Connection; | class SQL_Connection; |
| /// sql driver manager | /// sql driver manager |
| class SQL_Driver_manager : public Cache_manager { | class SQL_Driver_manager: public Cache_manager { |
| public: | |
| typedef Hash<const String::Body, SQL_Driver *> driver_cache_type; | |
| typedef Stack<SQL_Connection*> connection_cache_element_base_type; | |
| typedef Hash<const String::Body, connection_cache_element_base_type*> connection_cache_type; | |
| private: | |
| friend class SQL_Connection; | friend class SQL_Connection; |
| bool is_dlinited; | |
| driver_cache_type driver_cache; | |
| connection_cache_type connection_cache; | |
| public: | public: |
| SQL_Driver_manager(Pool& apool); | SQL_Driver_manager(); |
| ~SQL_Driver_manager(); | override ~SQL_Driver_manager(); |
| /** | /** |
| connect to specified url, | connect to specified url, |
| using driver dynamic library found in table, if not loaded yet | using driver dynamic library found in table, if not loaded yet |
| checks driver version | checks driver version |
| */ | */ |
| SQL_Connection& get_connection(const String& url, const String& request_origin, | SQL_Connection* get_connection(const String& aurl, Table *protocol2driver_and_client); |
| Table *protocol2driver_and_client); | |
| private: // driver cache | private: // driver cache |
| SQL_Driver *get_driver_from_cache(const String& protocol); | SQL_Driver *get_driver_from_cache(driver_cache_type::key_type protocol); |
| void put_driver_to_cache(const String& protocol, SQL_Driver& driver); | void put_driver_to_cache(driver_cache_type::key_type protocol, driver_cache_type::value_type driver); |
| private: // connection cache | private: // connection cache |
| SQL_Connection *get_connection_from_cache(const String& url); | SQL_Connection* get_connection_from_cache(connection_cache_type::key_type url); |
| void put_connection_to_cache(const String& url, SQL_Connection& connection); | void put_connection_to_cache(connection_cache_type::key_type url, |
| SQL_Connection* connection); | |
| private: | private: |
| time_t prev_expiration_pass_time; | time_t prev_expiration_pass_time; |
| private: // for SQL_Connection | private: // for SQL_Connection |
| /// caches connection | /// caches connection |
| void close_connection(const String& url, SQL_Connection& connection); | void close_connection(connection_cache_type::key_type url, |
| SQL_Connection* connection); | |
| private: | |
| Hash driver_cache; | |
| Hash connection_cache; | |
| public: // Cache_manager | public: // Cache_manager |
| virtual Value& get_status(Pool& pool, const String *source); | override Value* get_status(); |
| virtual void maybe_expire_cache(); | override void maybe_expire_cache(); |
| }; | }; |
| /// global | /// global |
| extern SQL_Driver_manager *SQL_driver_manager; | extern SQL_Driver_manager SQL_driver_manager; |
| #endif | #endif |