fixed bug #3419, moved DSN parsing to DB.php so the driver could properly be set to instantiate the correct db driver class.
diff --git a/system/database/DB.php b/system/database/DB.php
index 078f1ef..c3e7722 100644
--- a/system/database/DB.php
+++ b/system/database/DB.php
@@ -46,6 +46,29 @@
 		

 		$params = $db[$active_group];			

 	}

+	else

+	{

+		

+		/* parse the URL from the DSN string

+		*  Database settings can be passed as discreet

+	 	*  parameters or as a data source name in the first

+	 	*  parameter. DSNs must have this prototype:

+	 	*  $dsn = 'driver://username:password@hostname/database';

+		*/

+	

+		if (($dns = @parse_url($params)) === FALSE)

+		{

+			show_error('Invalid DB Connection String');

+		}

+		

+		$params = array(

+							'dbdriver'	=> $dns['scheme'],

+							'hostname'	=> (isset($dns['host'])) ? rawurldecode($dns['host']) : '',

+							'username'	=> (isset($dns['user'])) ? rawurldecode($dns['user']) : '',

+							'password'	=> (isset($dns['pass'])) ? rawurldecode($dns['pass']) : '',

+							'database'	=> (isset($dns['path'])) ? rawurldecode(substr($dns['host'], 1)) : ''

+						);

+	}

 	

 	// No DB specified yet?  Beat them senseless...

 	if ( ! isset($params['dbdriver']) OR $params['dbdriver'] == '')

diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index 6b3a74b..b101317 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -70,12 +70,7 @@
 	 * Constructor.  Accepts one parameter containing the database

 	 * connection settings.

 	 *

-	 * Database settings can be passed as discreet

-	 * parameters or as a data source name in the first

-	 * parameter. DSNs must have this prototype:

-	 * $dsn = 'driver://username:password@hostname/database';

-	 *

-	 * @param mixed. Can be an array or a DSN string

+	 * @param array

 	 */	

 	function CI_DB_driver($params)

 	{

@@ -86,24 +81,6 @@
 				$this->$key = $val;

 			}

 		}

-		elseif (strpos($params, '://'))

-		{

-			if (FALSE === ($dsn = @parse_url($params)))

-			{

-				log_message('error', 'Invalid DB Connection String');

-			

-				if ($this->db_debug)

-				{

-					return $this->display_error('db_invalid_connection_str');

-				}

-				return FALSE;			

-			}

-			

-			$this->hostname = ( ! isset($dsn['host'])) ? '' : rawurldecode($dsn['host']);

-			$this->username = ( ! isset($dsn['user'])) ? '' : rawurldecode($dsn['user']);

-			$this->password = ( ! isset($dsn['pass'])) ? '' : rawurldecode($dsn['pass']);

-			$this->database = ( ! isset($dsn['path'])) ? '' : rawurldecode(substr($dsn['path'], 1));

-		}

 

 		log_message('debug', 'Database Driver Class Initialized');

 	}