--- parser3/src/include/pa_sql_driver_manager.h 2001/05/17 18:26:22 1.7 +++ parser3/src/include/pa_sql_driver_manager.h 2024/11/04 03:53:25 1.43 @@ -1,72 +1,85 @@ /** @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.7 2001/05/17 18:26:22 parser Exp $ - - global sql driver manager, must be thread-safe + + Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) + Authors: Konstantin Morshnev , Alexandr Petrosian */ #ifndef PA_SQL_DRIVER_MANAGER_H #define PA_SQL_DRIVER_MANAGER_H -#include "pa_config_includes.h" -#include "pa_pool.h" +#define IDENT_PA_SQL_DRIVER_MANAGER_H "$Id: pa_sql_driver_manager.h,v 1.43 2024/11/04 03:53:25 moko Exp $" + + #include "pa_sql_driver.h" #include "pa_hash.h" -#include "pa_stack.h" #include "pa_table.h" #include "pa_string.h" +#include "pa_cache_managers.h" +#include "pa_stack.h" + +// defines + +#define MAIN_SQL_NAME "SQL" +#define MAIN_SQL_DRIVERS_NAME "drivers" + +// forwards class SQL_Connection; /// sql driver manager -class SQL_Driver_manager : public Pooled { - friend SQL_Connection; +class SQL_Driver_manager: public Cache_manager { +public: + + typedef HashString driver_cache_type; + typedef Stack connection_cache_element_base_type; + typedef HashString connection_cache_type; + +private: + + friend class SQL_Connection; + + driver_cache_type driver_cache; + connection_cache_type connection_cache; + public: - SQL_Driver_manager(Pool& pool) : Pooled(pool), - driver_cache(pool), - connection_cache(pool), - prev_expiration_pass_time(0) { - } + SQL_Driver_manager(); + override ~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 *protocol2driver_and_client); + SQL_Connection* get_connection(const String& aurl, Table *protocol2driver_and_client, const char* arequest_charset, const char* adocument_root); private: // driver cache - SQL_Driver *get_driver_from_cache(const String& protocol); - void put_driver_to_cache(const String& protocol, SQL_Driver& driver); + SQL_Driver *get_driver_from_cache(driver_cache_type::key_type protocol); + void put_driver_to_cache(driver_cache_type::key_type protocol, driver_cache_type::value_type driver); private: // connection cache - SQL_Connection *get_connection_from_cache(const String& url); - void put_connection_to_cache(const String& url, SQL_Connection& connection); - void maybe_expire_connection_cache(); + SQL_Connection* get_connection_from_cache(connection_cache_type::key_type url); + void put_connection_to_cache(connection_cache_type::key_type url, SQL_Connection* connection); private: time_t prev_expiration_pass_time; private: // for SQL_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: +public: // Cache_manager + + override Value* get_status(); + override void maybe_expire_cache(); - Hash driver_cache; - Hash connection_cache; }; /// global -extern SQL_Driver_manager *SQL_driver_manager; +extern SQL_Driver_manager* SQL_driver_manager; #endif