--- parser3/src/include/pa_sql_connection.h 2002/09/04 14:59:54 1.28 +++ parser3/src/include/pa_sql_connection.h 2003/01/27 16:19:11 1.30.2.2 @@ -1,14 +1,14 @@ /** @file Parser: sql fconnection decl. - Copyright (c) 2001, 2002 ArtLebedev Group (http://www.artlebedev.com) + Copyright (c) 2001, 2003 ArtLebedev Group (http://www.artlebedev.com) Author: Alexandr Petrosian (http://paf.design.ru) */ #ifndef PA_SQL_CONNECTION_H #define PA_SQL_CONNECTION_H -static const char* IDENT_SQL_CONNECTION_H="$Date: 2002/09/04 14:59:54 $"; +static const char* IDENT_SQL_CONNECTION_H="$Date: 2003/01/27 16:19:11 $"; #include "pa_pool.h" #include "pa_sql_driver.h" @@ -28,27 +28,25 @@ static const char* IDENT_SQL_CONNECTION_ #endif /// SQL connection. handy wrapper around low level SQL_Driver -class SQL_Connection : public Pooled { - - friend class SQL_Connection_ptr; +class SQL_Connection: public PA_Object { public: - SQL_Connection(Pool& pool, const String& aurl, SQL_Driver& adriver) : Pooled(pool), + SQL_Connection(ConstStringPtr aurl, SQL_Driver& adriver): furl(aurl), fdriver(adriver), fconnection(0), - time_used(0), used(0), + time_used(0), marked_to_rollback(false) { } - const String& get_url() { return furl; } + ConstStringPtr get_url() { return furl; } void set_services(SQL_Driver_services *aservices) { fservices=aservices; } bool expired(time_t older_dies) { - return !used && time_usedclose_connection(furl, *this); - } - -private: // connection usage methods - - void use() { - time_used=time(0); // they started to use at this time - used++; - } - void unuse() { - used--; - if(!used) - close(); + SQL_driver_manager.close_connection(furl, *this); } -private: // connection usage data - - int used; - private: - const String& furl; + ConstStringPtr furl; SQL_Driver& fdriver; SQL_Driver_services *fservices; void *fconnection; @@ -146,35 +131,4 @@ private: bool marked_to_rollback; }; -/// Auto-object used to track SQL_Connection usage -class SQL_Connection_ptr { - SQL_Connection *fconnection; -public: - explicit SQL_Connection_ptr(SQL_Connection *aconnection) : fconnection(aconnection) { - fconnection->use(); - } - ~SQL_Connection_ptr() { - fconnection->unuse(); - } - SQL_Connection* operator->() { - return fconnection; - } - SQL_Connection* get() const { - return fconnection; - } - - // copying - SQL_Connection_ptr(const SQL_Connection_ptr& src) : fconnection(src.fconnection) { - fconnection->use(); - } - SQL_Connection_ptr& operator =(const SQL_Connection_ptr& src) { - // may do without this=src check - fconnection->unuse(); - fconnection=src.fconnection; - fconnection->use(); - - return *this; - } -}; - #endif