![]() |
Database Class ReferenceConnection information and pool. More...
Collaboration diagram for Database: ![]()
Detailed DescriptionConnection information and pool.
Definition at line 61 of file Database.h. Member Typedef Documentation
Definition at line 96 of file Database.h.
Constructor & Destructor Documentation
Use file.
Definition at line 54 of file Database.cpp. 00055 :database(d) 00056 ,m_errhandler(e) 00057 ,m_embedded(true) 00058 ,m_mutex(m_mutex) 00059 ,m_b_use_mutex(false) 00060 { 00061 }
Use file + thread safe.
Definition at line 64 of file Database.cpp. 00065 :database(d) 00066 ,m_errhandler(e) 00067 ,m_embedded(true) 00068 ,m_mutex(m) 00069 ,m_b_use_mutex(true) 00070 { 00071 }
Definition at line 74 of file Database.cpp. References error(), and m_opendbs. 00075 { 00076 for (opendb_v::iterator it = m_opendbs.begin(); it != m_opendbs.end(); it++) 00077 { 00078 OPENDB *p = *it; 00079 sqlite3_close(p -> db); 00080 } 00081 while (m_opendbs.size()) 00082 { 00083 opendb_v::iterator it = m_opendbs.begin(); 00084 OPENDB *p = *it; 00085 if (p -> busy) 00086 { 00087 error("destroying Database object before Query object"); 00088 } 00089 delete p; 00090 m_opendbs.erase(it); 00091 } 00092 }
Member Function Documentation
Definition at line 95 of file Database.cpp. References m_errhandler. 00096 { 00097 m_errhandler = p; 00098 }
Definition at line 173 of file Database.cpp. References m_errhandler. Referenced by Query::error(), error(), Query::execute(), Query::fetch_row(), Query::get_result(), grabdb(), ~Database(), and Query::~Query(). 00174 { 00175 if (m_errhandler) 00176 { 00177 va_list ap; 00178 char errstr[5000]; 00179 va_start(ap, format); 00180 #ifdef WIN32 00181 vsprintf(errstr, format, ap); 00182 #else 00183 vsnprintf(errstr, 5000, format, ap); 00184 #endif 00185 va_end(ap); 00186 m_errhandler -> error(*this, q, errstr); 00187 } 00188 }
Definition at line 191 of file Database.cpp. References error(), and m_errhandler. 00192 { 00193 if (m_errhandler) 00194 { 00195 m_errhandler -> error(*this, q, msg); 00196 } 00197 }
Request a database connection. The "grabdb" method is used by the Query class, so that each object instance of Query gets a unique database connection. I will reimplement your connection check logic in the Query class, as that's where the database connection is really used. It should be used something like this. { Query q(db); if (!q.Connected()) return false; q.execute("delete * from user"); // well maybe not } When the Query object is deleted, then "freedb" is called - the database connection stays open in the m_opendbs vector. New Query objects can then reuse old connections. Definition at line 101 of file Database.cpp. References database, error(), m_b_use_mutex, m_mutex, and m_opendbs. Referenced by Connected(). 00102 { 00103 Lock lck(m_mutex, m_b_use_mutex); 00104 OPENDB *odb = NULL; 00105 00106 for (opendb_v::iterator it = m_opendbs.begin(); it != m_opendbs.end(); it++) 00107 { 00108 odb = *it; 00109 if (!odb -> busy) 00110 { 00111 break; 00112 } 00113 else 00114 { 00115 odb = NULL; 00116 } 00117 } 00118 if (!odb) 00119 { 00120 odb = new OPENDB; 00121 if (!odb) 00122 { 00123 error("grabdb: OPENDB struct couldn't be created"); 00124 return NULL; 00125 } 00126 int rc = sqlite3_open(database.c_str(), &odb -> db); 00127 if (rc) 00128 { 00129 error("Can't open database: %s\n", sqlite3_errmsg(odb -> db)); 00130 sqlite3_close(odb -> db); 00131 delete odb; 00132 return NULL; 00133 } 00134 odb -> busy = true; 00135 m_opendbs.push_back(odb); 00136 } 00137 else 00138 { 00139 odb -> busy = true; 00140 } 00141 return odb; 00142 }
Definition at line 145 of file Database.cpp. References m_b_use_mutex, and m_mutex. Referenced by Connected(), and Query::~Query(). 00146 { 00147 Lock lck(m_mutex, m_b_use_mutex); 00148 if (odb) 00149 { 00150 odb -> busy = false; 00151 } 00152 }
Escape string - change all ' to ''.
Definition at line 271 of file Database.cpp. 00272 { 00273 std::string str2; 00274 for (size_t i = 0; i < str.size(); i++) 00275 { 00276 switch (str[i]) 00277 { 00278 case '\'': 00279 case '\\': 00280 case 34: 00281 str2 += '\''; 00282 default: 00283 str2 += str[i]; 00284 } 00285 } 00286 return str2; 00287 }
Make string xml safe.
Definition at line 290 of file Database.cpp. 00291 { 00292 std::string str2; 00293 for (size_t i = 0; i < str.size(); i++) 00294 { 00295 switch (str[i]) 00296 { 00297 case '&': 00298 str2 += "&"; 00299 break; 00300 case '<': 00301 str2 += "<"; 00302 break; 00303 case '>': 00304 str2 += ">"; 00305 break; 00306 case '"': 00307 str2 += """; 00308 break; 00309 case '\'': 00310 str2 += "'"; 00311 break; 00312 default: 00313 str2 += str[i]; 00314 } 00315 } 00316 return str2; 00317 }
Convert string to 64-bit integer.
Definition at line 320 of file Database.cpp. 00321 { 00322 int64_t val = 0; 00323 bool sign = false; 00324 size_t i = 0; 00325 if (str[i] == '-') 00326 { 00327 sign = true; 00328 i++; 00329 } 00330 for (; i < str.size(); i++) 00331 { 00332 val = val * 10 + (str[i] - 48); 00333 } 00334 return sign ? -val : val; 00335 }
Convert string to unsigned 64-bit integer.
Definition at line 338 of file Database.cpp. 00339 { 00340 uint64_t val = 0; 00341 for (size_t i = 0; i < str.size(); i++) 00342 { 00343 val = val * 10 + (str[i] - 48); 00344 } 00345 return val; 00346 }
Definition at line 155 of file Database.cpp. References error(), and m_errhandler. 00156 { 00157 if (m_errhandler) 00158 { 00159 va_list ap; 00160 char errstr[5000]; 00161 va_start(ap, format); 00162 #ifdef WIN32 00163 vsprintf(errstr, format, ap); 00164 #else 00165 vsnprintf(errstr, 5000, format, ap); 00166 #endif 00167 va_end(ap); 00168 m_errhandler -> error(*this, errstr); 00169 } 00170 }
Member Data Documentation
Definition at line 152 of file Database.h.
The documentation for this class was generated from the following files: |