Annotation of parser3/src/include/pa_db_connection.h, revision 1.16
1.1 parser 1: /** @file
1.9 paf 2: Parser: sql driver connection decl.
3: global sql driver connection, must be thread-safe
1.1 parser 4:
5: Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com)
6: Author: Alexander Petrosyan <paf@design.ru> (http://design.ru/paf)
7:
1.16 ! paf 8: $Id: pa_db_connection.h,v 1.15 2001/10/29 08:23:49 paf Exp $
1.1 parser 9: */
10:
11: #ifndef PA_DB_CONNECTION_H
12: #define PA_DB_CONNECTION_H
13:
14: #include "pa_config_includes.h"
15: #include "pa_pool.h"
1.9 paf 16: #include "pa_hash.h"
1.10 paf 17: #include "pa_db_table.h"
1.1 parser 18:
19: // defines
20:
1.2 parser 21: // forwards
22:
1.9 paf 23: class DB_Table;
1.10 paf 24: class DB_Connection_ptr;
1.1 parser 25:
1.9 paf 26: /// sql driver connection
1.1 parser 27: class DB_Connection : public Pooled {
1.15 paf 28: friend class DB_Table;
29: friend class DB_Connection_ptr;
1.1 parser 30: public:
31:
1.10 paf 32: DB_Connection(Pool& apool, const String& db_home);
33: ~DB_Connection();
1.1 parser 34:
35: bool expired(time_t older_dies) {
1.10 paf 36: return !used && time_used<older_dies;
1.1 parser 37: }
1.16 ! paf 38: time_t get_time_used() { return time_used; }
! 39: int get_users_count() { return used; }
1.1 parser 40:
1.9 paf 41: /**
1.16 ! paf 42: connect to specified file_name
1.9 paf 43: */
1.11 paf 44: DB_Table_ptr get_table_ptr(const String& file_name, const String *source);
1.9 paf 45:
1.10 paf 46: private: // connection usage methods
47:
48: void use() {
49: time_used=time(0); // they started to use at this time
50: used++;
51: }
52: void unuse() {
53: used--;
54: }
55:
56: private: // connection usage data
57:
58: int used;
59:
1.9 paf 60: private: // table cache
61:
62: DB_Table *get_table_from_cache(const String& file_name);
63: void put_table_to_cache(const String& file_name, DB_Table& table);
64: void maybe_expire_table_cache();
1.1 parser 65: private:
1.9 paf 66: time_t prev_expiration_pass_time;
1.1 parser 67:
1.9 paf 68: private: // for DB_Table
1.1 parser 69:
1.9 paf 70: /// caches table
71: void close_table(const String& file_name, DB_Table& table);
1.2 parser 72:
1.9 paf 73: private:
1.2 parser 74:
1.9 paf 75: time_t time_used;
1.2 parser 76:
1.9 paf 77: const String& fdb_home;
78: DB_ENV dbenv;
79: Hash table_cache;
1.2 parser 80:
1.1 parser 81: private:
82:
83: void check(const char *operation, const String *source, int error);
1.10 paf 84: };
85:
86: /// Auto-object used to track DB_Connection usage
87: class DB_Connection_ptr {
88: DB_Connection *fconnection;
89: public:
90: DB_Connection_ptr(DB_Connection *aconnection) : fconnection(aconnection) {
91: fconnection->use();
92: }
93: ~DB_Connection_ptr() {
94: fconnection->unuse();
95: }
96: DB_Connection* operator->() {
97: return fconnection;
98: }
99:
100: // copying
101: DB_Connection_ptr(const DB_Connection_ptr& src) : fconnection(src.fconnection) {
102: fconnection->use();
103: }
104: DB_Connection_ptr& operator =(const DB_Connection_ptr& src) {
105: // may do without this=src check
106: fconnection->unuse();
107: fconnection=src.fconnection;
108: fconnection->use();
109:
110: return *this;
111: }
1.1 parser 112: };
113:
114: #endif
E-mail: