--- parser3/src/include/pa_sql_connection.h 2002/08/01 11:41:16 1.26 +++ parser3/src/include/pa_sql_connection.h 2002/09/17 09:30:07 1.29 @@ -8,7 +8,7 @@ #ifndef PA_SQL_CONNECTION_H #define PA_SQL_CONNECTION_H -static const char* IDENT_SQL_CONNECTION_H="$Date: 2002/08/01 11:41:16 $"; +static const char* IDENT_SQL_CONNECTION_H="$Date: 2002/09/17 09:30:07 $"; #include "pa_pool.h" #include "pa_sql_driver.h" @@ -17,11 +17,15 @@ static const char* IDENT_SQL_CONNECTION_ // defines /// @see SQL_Driver_services_impl::_throw -#define SQL_CONNECTION_SERVICED_FUNC_GUARDED(actions) \ - if(!fservices || !setjmp(fservices->mark)) { \ - actions; \ - } else \ - fservices->propagate_exception(); +#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 Pooled { @@ -72,12 +76,23 @@ public: void query( const char *statement, unsigned long offset, unsigned long limit, - SQL_Driver_query_event_handlers& handlers) { - SQL_CONNECTION_SERVICED_FUNC_GUARDED( - fdriver.query(*fservices, fconnection, - statement, offset, limit, - handlers) - ); + SQL_Driver_query_event_handlers& handlers, + const String& source) { + try { + SQL_CONNECTION_SERVICED_FUNC_GUARDED( + fdriver.query(*fservices, fconnection, + statement, offset, limit, + handlers) + ); + } catch(const Exception& e) { // query problem + if(strcmp(e.type(), "sql.connect")==0) { // if it is _throw exception, + // give more specific source [were url] + throw Exception("sql.execute", + &source, + "%s", e.comment()); + } else + /*re*/throw; + } } void mark_to_rollback() {