--- parser3/src/main/pa_sql_driver_manager.C 2001/04/17 19:31:14 1.8 +++ parser3/src/main/pa_sql_driver_manager.C 2001/05/16 08:10:22 1.11 @@ -5,7 +5,7 @@ Author: Alexander Petrosyan (http://design.ru/paf) - $Id: pa_sql_driver_manager.C,v 1.8 2001/04/17 19:31:14 paf Exp $ + $Id: pa_sql_driver_manager.C,v 1.11 2001/05/16 08:10:22 parser Exp $ */ #include "pa_config_includes.h" @@ -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 global_owned_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 global_owned_url string on global pool + String& global_owned_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); @@ -106,7 +108,7 @@ SQL_Connection& SQL_Driver_manager::get_ "client library column for protocol '%s' is empty", protocol_cstr); } else PTHROW(0, 0, - &url, + &request_owned_url, "undefined protocol '%s'", protocol_cstr); const char *filename=library->cstr(String::UL_FILE_NAME); @@ -149,13 +151,13 @@ SQL_Connection& SQL_Driver_manager::get_ // services associated with request SQL_Driver_services_impl& services= - *new(pool) SQL_Driver_services_impl(pool, url); + *new(pool) SQL_Driver_services_impl(pool, request_owned_url); // allocate in global pool // associate with services[request], deassociates at close SQL_Connection& result= *new(this->pool()) SQL_Connection(this->pool(), - url, *driver, services, url_cstr); + global_owned_url, *driver, services, url_cstr); return result; } @@ -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;