Annotation of parser3/src/include/pa_db_connection.h, revision 1.11
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.11 ! paf 8: $Id: pa_db_connection.h,v 1.10 2001/10/26 13:48:18 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: #ifdef HAVE_DB_H
20: # include <db.h>
21: #endif
22:
23: // defines
24:
1.2 parser 25: // forwards
26:
1.9 paf 27: class DB_Table;
1.10 paf 28: class DB_Connection_ptr;
1.1 parser 29:
1.9 paf 30: /// sql driver connection
1.1 parser 31: class DB_Connection : public Pooled {
1.9 paf 32: friend DB_Table;
1.10 paf 33: friend DB_Connection_ptr;
1.1 parser 34: public:
35:
1.10 paf 36: DB_Connection(Pool& apool, const String& db_home);
37: ~DB_Connection();
1.1 parser 38:
39: bool expired(time_t older_dies) {
1.10 paf 40: return !used && time_used<older_dies;
1.1 parser 41: }
42:
1.9 paf 43: /**
44: connect to specified file_name,
45: using driver dynamic library found in table, if not loaded yet
46: checks driver version
47: */
1.11 ! paf 48: DB_Table_ptr get_table_ptr(const String& file_name, const String *source);
1.9 paf 49: void clear_dbfile(const String& file_name);
50:
1.10 paf 51: private: // connection usage methods
52:
53: void use() {
54: time_used=time(0); // they started to use at this time
55: used++;
56: }
57: void unuse() {
58: used--;
59: }
60:
61: private: // connection usage data
62:
63: int used;
64:
1.9 paf 65: private: // table cache
66:
67: DB_Table *get_table_from_cache(const String& file_name);
68: void put_table_to_cache(const String& file_name, DB_Table& table);
69: void maybe_expire_table_cache();
1.1 parser 70: private:
1.9 paf 71: time_t prev_expiration_pass_time;
1.1 parser 72:
1.9 paf 73: private: // for DB_Table
1.1 parser 74:
1.9 paf 75: /// caches table
76: void close_table(const String& file_name, DB_Table& table);
1.2 parser 77:
1.9 paf 78: private:
1.2 parser 79:
1.9 paf 80: time_t time_used;
1.2 parser 81:
1.9 paf 82: const String& fdb_home;
83: DB_ENV dbenv;
84: Hash table_cache;
1.2 parser 85:
1.1 parser 86: private:
87:
88: void check(const char *operation, const String *source, int error);
1.10 paf 89: };
90:
91: /// Auto-object used to track DB_Connection usage
92: class DB_Connection_ptr {
93: DB_Connection *fconnection;
94: public:
95: DB_Connection_ptr(DB_Connection *aconnection) : fconnection(aconnection) {
96: fconnection->use();
97: }
98: ~DB_Connection_ptr() {
99: fconnection->unuse();
100: }
101: DB_Connection* operator->() {
102: return fconnection;
103: }
104:
105: // copying
106: DB_Connection_ptr(const DB_Connection_ptr& src) : fconnection(src.fconnection) {
107: fconnection->use();
108: }
109: DB_Connection_ptr& operator =(const DB_Connection_ptr& src) {
110: // may do without this=src check
111: fconnection->unuse();
112: fconnection=src.fconnection;
113: fconnection->use();
114:
115: return *this;
116: }
1.1 parser 117: };
118:
119: #endif
E-mail: