|
|
| version 1.6, 2001/04/05 13:19:43 | version 1.6.2.1, 2001/04/17 15:02:04 |
|---|---|
| Line 53 private: | Line 53 private: |
| // protocol://user:pass@host:port/database | // protocol://user:pass@host:port/database |
| // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this is driver-dependent | // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ this is driver-dependent |
| SQL_Connection& SQL_Driver_manager::get_connection(const String& url, | SQL_Connection& SQL_Driver_manager::get_connection(const String& url, |
| Table *protocol2library) { | Table *protocol2driver_and_client) { |
| SYNCHRONIZED(true); | SYNCHRONIZED(true); |
| Pool& pool=url.pool(); // request pool | Pool& pool=url.pool(); // request pool |
| // we have table for locating protocol's library | // we have table for locating protocol's library |
| if(!protocol2library) | if(!protocol2driver_and_client) |
| PTHROW(0, 0, | PTHROW(0, 0, |
| &url, | &url, |
| "$SQL:drivers table must be defined"); | "$SQL:drivers table must be defined"); |
| Line 90 SQL_Connection& SQL_Driver_manager::get_ | Line 90 SQL_Connection& SQL_Driver_manager::get_ |
| url_cstr++; | url_cstr++; |
| SQL_Driver *driver; | SQL_Driver *driver; |
| const String *dlopen_file_spec=0; | |
| // first trying to get cached driver | // first trying to get cached driver |
| if(!(driver=get_driver_from_cache(protocol))) { | if(!(driver=get_driver_from_cache(protocol))) { |
| // no cached | // no cached |
| const String *library=0; | const String *library=0; |
| if(protocol2library->locate(0, protocol)) { | if(protocol2driver_and_client->locate(0, protocol)) { |
| if(!(library=protocol2library->item(1)) || library->size()==0) | if(!(library=protocol2driver_and_client->item(1)) || library->size()==0) |
| PTHROW(0, 0, | PTHROW(0, 0, |
| protocol2library->origin_string(), | protocol2driver_and_client->origin_string(), |
| "library column for protocol '%s' is empty", protocol_cstr); | "driver library column for protocol '%s' is empty", protocol_cstr); |
| if(!(dlopen_file_spec=protocol2driver_and_client->item(2)) || dlopen_file_spec->size()==0) | |
| PTHROW(0, 0, | |
| protocol2driver_and_client->origin_string(), | |
| "client library column for protocol '%s' is empty", protocol_cstr); | |
| } else | } else |
| PTHROW(0, 0, | PTHROW(0, 0, |
| &url, | &url, |
| Line 123 SQL_Connection& SQL_Driver_manager::get_ | Line 128 SQL_Connection& SQL_Driver_manager::get_ |
| // validate driver api version | // validate driver api version |
| int driver_api_version=driver->api_version(); | int driver_api_version=driver->api_version(); |
| if(driver_api_version<SQL_DRIVER_API_VERSION) | if(driver_api_version!=SQL_DRIVER_API_VERSION) |
| PTHROW(0, 0, | PTHROW(0, 0, |
| library, | library, |
| "driver API version is 0x%04X while current minimum is 0x%04X", | "driver implements API version 0x%04X not equal to 0x%04X", |
| driver_api_version, SQL_DRIVER_API_VERSION); | driver_api_version, SQL_DRIVER_API_VERSION); |
| // initialise by connecting to sql client dynamic link library | |
| const char *dlopen_file_spec_cstr=dlopen_file_spec->cstr(String::UL_FILE_NAME); | |
| if(const char *error=driver->initialize( | |
| dlopen_file_spec_cstr)) | |
| PTHROW(0, 0, | |
| library, | |
| "driver failed to initialize client library '%s', %s", | |
| dlopen_file_spec_cstr, error); | |
| // cache it | // cache it |
| put_driver_to_cache(protocol, *driver); | put_driver_to_cache(protocol, *driver); |
| } | } |
| Line 140 SQL_Connection& SQL_Driver_manager::get_ | Line 154 SQL_Connection& SQL_Driver_manager::get_ |
| // allocate in global pool | // allocate in global pool |
| // associate with services[request], deassociates at close | // associate with services[request], deassociates at close |
| SQL_Connection& result= | SQL_Connection& result= |
| *new(this->pool()) SQL_Connection(this->pool(), url, *driver, services, url_cstr); | *new(this->pool()) SQL_Connection(this->pool(), |
| url, *driver, services, url_cstr); | |
| return result; | return result; |
| } | } |