--- parser3/src/include/pa_sql_connection.h 2001/08/24 07:04:52 1.12 +++ parser3/src/include/pa_sql_connection.h 2003/01/27 16:00:41 1.30.2.1 @@ -1,67 +1,125 @@ /** @file Parser: sql fconnection decl. - Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - - Author: Alexander Petrosyan (http://design.ru/paf) - - $Id: pa_sql_connection.h,v 1.12 2001/08/24 07:04:52 parser Exp $ + 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 -#include "pa_config_includes.h" +static const char* IDENT_SQL_CONNECTION_H="$Date: 2003/01/27 16:00:41 $"; + #include "pa_pool.h" #include "pa_sql_driver.h" #include "pa_sql_driver_manager.h" -/// SQL fconnection. handy wrapper around low level SQL_Driver -class SQL_Connection : public Pooled { +// defines + +/// @see SQL_Driver_services_impl::_throw +#ifdef PA_WITH_SJLJ_EXCEPTIONS + #define SQL_CONNECTION_SERVICED_FUNC_GUARDED(actions) actions +#else + #define SQL_CONNECTION_SERVICED_FUNC_GUARDED(actions) \ + if(!fservices || !setjmp(fservices->mark)) { \ + actions; \ + } else \ + fservices->propagate_exception(); +#endif + +/// SQL connection. handy wrapper around low level SQL_Driver +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) : Pooled(pool), furl(aurl), fdriver(adriver), fconnection(0), - time_stamp(0) { + time_used(0), used(0), + marked_to_rollback(false) { } - const String& url() { return furl; } + const String& get_url() { return furl; } void set_services(SQL_Driver_services *aservices) { - time_stamp=time(0); // they started to use at this time fservices=aservices; } bool expired(time_t older_dies) { - return time_stampclose_connection(furl, *this); + return !used && time_usedclose_connection(furl, *this); + } private: @@ -69,7 +127,8 @@ private: SQL_Driver& fdriver; SQL_Driver_services *fservices; void *fconnection; - time_t time_stamp; + time_t time_used; + bool marked_to_rollback; }; #endif