--- parser3/src/main/pa_sql_driver_manager.C 2001/04/17 19:00:41 1.7 +++ parser3/src/main/pa_sql_driver_manager.C 2001/05/07 13:30:04 1.10 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: pa_sql_driver_manager.C,v 1.7 2001/04/17 19:00:41 paf Exp $ + $Id: pa_sql_driver_manager.C,v 1.10 2001/05/07 13:30:04 paf Exp $ */ #include "pa_config_includes.h" @@ -25,10 +25,10 @@ const int MAX_PROTOCOL=20; const char *LIBRARY_CREATE_FUNC_NAME="create"; -/// Services_for_SQL_driver implementation -class Services_for_SQL_driver_impl : public Services_for_SQL_driver, public Pooled { +/// SQL_Driver_services Pooled implementation +class SQL_Driver_services_impl : public SQL_Driver_services, public Pooled { public: - Services_for_SQL_driver_impl(Pool& apool, const String& aurl) : Pooled(apool), + SQL_Driver_services_impl(Pool& apool, const String& aurl) : Pooled(apool), furl(aurl) { } @@ -52,35 +52,37 @@ private: // url: // protocol://user:pass@host:port/database // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this is driver-dependent -SQL_Connection& SQL_Driver_manager::get_connection(const String& url, +SQL_Connection& SQL_Driver_manager::get_connection(const String& request_owned_url, Table *protocol2driver_and_client) { SYNCHRONIZED(true); - Pool& pool=url.pool(); // request pool + Pool& pool=request_owned_url.pool(); // request pool // we have table for locating protocol's library if(!protocol2driver_and_client) PTHROW(0, 0, - &url, + &request_owned_url, "$SQL:drivers table must be defined"); // first trying to get cached connection - if(SQL_Connection *result=get_connection_from_cache(url)) + if(SQL_Connection *result=get_connection_from_cache(request_owned_url)) if(result->ping()) return *result; else result->disconnect(); // kill unpingabe=dead connection // no cached connection - int pos=url.pos("://", 3); + int pos=request_owned_url.pos("://", 3); if(pos<0) PTHROW(0, 0, - &url, + &request_owned_url, "no protocol specified"); // NOTE: not THROW, but PTHROW - // make url string on global pool + // make url C-string on global pool char *url_cstr=(char *)malloc(MAX_STRING); - strncpy(url_cstr, url.cstr(String::UL_AS_IS), MAX_STRING); + strncpy(url_cstr, request_owned_url.cstr(String::UL_AS_IS), MAX_STRING); + // make url string on global pool + String& url=*new(this->pool()) String(this->pool(), url_cstr); char *protocol_cstr=lsplit(&url_cstr, ':'); String& protocol=*new(this->pool()) String(this->pool(), protocol_cstr); @@ -148,8 +150,8 @@ SQL_Connection& SQL_Driver_manager::get_ } // services associated with request - Services_for_SQL_driver_impl& services= - *new(pool) Services_for_SQL_driver_impl(pool, url); + SQL_Driver_services_impl& services= + *new(pool) SQL_Driver_services_impl(pool, url); // allocate in global pool // associate with services[request], deassociates at close @@ -192,7 +194,7 @@ SQL_Connection *SQL_Driver_manager::get_ return 0; } -/// @todo cache expiration[use SQL_Driver::disconnect], pinging. +/// @todo cache expiration[use SQL_Driver::disconnect] void SQL_Driver_manager::put_connection_to_cache(const String& url, SQL_Connection& connection) { Stack *connections;