Annotation of parser3/src/include/pa_sql_driver_manager.h, revision 1.32
1.1 paf 1: /** @file
1.2 paf 2: Parser: sql driver manager decl.
1.10 parser 3: global sql driver manager, must be thread-safe
1.1 paf 4:
1.32 ! paf 5: Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com)
1.23 paf 6: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 paf 7: */
8:
9: #ifndef PA_SQL_DRIVER_MANAGER_H
10: #define PA_SQL_DRIVER_MANAGER_H
1.24 paf 11:
1.32 ! paf 12: static const char * const IDENT_SQL_DRIVER_MANAGER_H="$Date: 2003/12/22 11:44:35 $";
1.27 paf 13:
1.1 paf 14:
15: #include "pa_sql_driver.h"
16: #include "pa_hash.h"
17: #include "pa_table.h"
18: #include "pa_string.h"
1.17 paf 19: #include "pa_cache_managers.h"
1.27 paf 20: #include "pa_stack.h"
1.8 parser 21:
22: // defines
23:
24: #define MAIN_SQL_NAME "SQL"
25: #define MAIN_SQL_DRIVERS_NAME "drivers"
26:
27: // forwards
1.1 paf 28:
29: class SQL_Connection;
30:
1.11 parser 31: /// sql driver manager
1.27 paf 32: class SQL_Driver_manager: public Cache_manager {
33: public:
34:
1.28 paf 35: typedef Hash<const String::Body, SQL_Driver *> driver_cache_type;
1.27 paf 36: typedef Stack<SQL_Connection*> connection_cache_element_base_type;
1.28 paf 37: typedef Hash<const String::Body, connection_cache_element_base_type*> connection_cache_type;
1.27 paf 38:
39: private:
40:
1.14 paf 41: friend class SQL_Connection;
1.27 paf 42:
43: bool is_dlinited;
44: driver_cache_type driver_cache;
45: connection_cache_type connection_cache;
46:
1.1 paf 47: public:
48:
1.27 paf 49: SQL_Driver_manager();
50: override ~SQL_Driver_manager();
1.1 paf 51:
52: /**
53: connect to specified url,
54: using driver dynamic library found in table, if not loaded yet
55: checks driver version
56: */
1.31 paf 57: SQL_Connection* get_connection(const String& aurl,
58: Table *protocol2driver_and_client,
59: const char* arequest_charset);
1.1 paf 60:
61: private: // driver cache
62:
1.27 paf 63: SQL_Driver *get_driver_from_cache(driver_cache_type::key_type protocol);
64: void put_driver_to_cache(driver_cache_type::key_type protocol, driver_cache_type::value_type driver);
1.1 paf 65:
66: private: // connection cache
67:
1.27 paf 68: SQL_Connection* get_connection_from_cache(connection_cache_type::key_type url);
69: void put_connection_to_cache(connection_cache_type::key_type url,
70: SQL_Connection* connection);
1.7 parser 71: private:
72: time_t prev_expiration_pass_time;
1.1 paf 73:
74: private: // for SQL_Connection
75:
76: /// caches connection
1.27 paf 77: void close_connection(connection_cache_type::key_type url,
78: SQL_Connection* connection);
1.15 paf 79:
1.17 paf 80: public: // Cache_manager
1.15 paf 81:
1.27 paf 82: override Value* get_status();
83: override void maybe_expire_cache();
1.15 paf 84:
1.1 paf 85: };
86:
87: /// global
1.30 paf 88: extern SQL_Driver_manager* SQL_driver_manager;
1.1 paf 89:
90: #endif
E-mail: