--TEST--
DB::parseDSN
--SKIPIF--
<?php chdir(dirname(__FILE__)); require_once './skipif.inc'; ?>
--FILE--
<?php // -*- C++ -*-
require_once './include.inc';
require_once 'DB.php';

function test($dsn) {
    echo "DSN: $dsn\n";
    print_r(DB::parseDSN($dsn));
}

function testArray($dsn) {
    echo "DSN: array\n";
    print_r(DB::parseDSN($dsn));
}

print "testing DB::parseDSN...\n\n";

test("mysql");
test("odbc(mssql)");
test('odbc(db2)://user:password@/database');
test('odbc(access):///database');
test('odbc://admin@/datasourceName');
test("mysql://localhost");
test("mysql://remote.host.com/db");
test("oci8://system:manager@");
test("oci8://user:pass@tns-name");
test("odbc(solid)://foo:bar@tcp+localhost+1313");  // deprecated
test("pgsql://user@unix+localhost/pear");          // deprecated
test("ibase://user%40domain:password@host");
test("ibase://user@domain:pass@word@/database");   // also supported
test("ifx://user@domain:pass@word@host.com//usr/db/general.db");
test('ifx://remote.host.com/c:\windows\my.db');
test('oci8://SHOOTOUT:******@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.101.161)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TIS)))');

// new formats
test("odbc(solid)://foo:bar@localhost:1313");
test("pgsql://user@unix()/pear");
test("mysql://user@unix(/path/to/socket)/pear");
test("pgsql://user@tcp()/pear");
test("pgsql://user@tcp(somehost)/pear");
test("pgsql://user:pass@word@tcp(somehost:7777)/pear");

// special backend options
test('ibase://user:pass@localhost//var/lib/dbase.dbf?role=foo');
test('dbase://@/?role=foo&dialect=bar');
test('sqlite:////unix/path/to/database?option=value&anotheroption=anothervalue');
test('sqlite:///c:/win/path/to/database?option=value');

// some examples from manual
test('mysql://username@hostspec');
test('mysql://hostspec/database');
test('mysql://hostspec');
test('mysql:///database');

// array tests
$array = array(
    'phptype'  => 'mysql',
    'hostspec' => 'foobar',
);
testArray($array);

?>
--GET--
--POST--
--EXPECT--
testing DB::parseDSN...

DSN: mysql
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => 
    [password] => 
    [protocol] => 
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => 
)
DSN: odbc(mssql)
Array
(
    [phptype] => odbc
    [dbsyntax] => mssql
    [username] => 
    [password] => 
    [protocol] => 
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => 
)
DSN: odbc(db2)://user:password@/database
Array
(
    [phptype] => odbc
    [dbsyntax] => db2
    [username] => user
    [password] => password
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => database
)
DSN: odbc(access):///database
Array
(
    [phptype] => odbc
    [dbsyntax] => access
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => database
)
DSN: odbc://admin@/datasourceName
Array
(
    [phptype] => odbc
    [dbsyntax] => odbc
    [username] => admin
    [password] => 
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => datasourceName
)
DSN: mysql://localhost
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => localhost
    [port] => 
    [socket] => 
    [database] => 
)
DSN: mysql://remote.host.com/db
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => remote.host.com
    [port] => 
    [socket] => 
    [database] => db
)
DSN: oci8://system:manager@
Array
(
    [phptype] => oci8
    [dbsyntax] => oci8
    [username] => system
    [password] => manager
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => 
)
DSN: oci8://user:pass@tns-name
Array
(
    [phptype] => oci8
    [dbsyntax] => oci8
    [username] => user
    [password] => pass
    [protocol] => tcp
    [hostspec] => tns-name
    [port] => 
    [socket] => 
    [database] => 
)
DSN: odbc(solid)://foo:bar@tcp+localhost+1313
Array
(
    [phptype] => odbc
    [dbsyntax] => solid
    [username] => foo
    [password] => bar
    [protocol] => tcp
    [hostspec] => localhost+1313
    [port] => 
    [socket] => 
    [database] => 
)
DSN: pgsql://user@unix+localhost/pear
Array
(
    [phptype] => pgsql
    [dbsyntax] => pgsql
    [username] => user
    [password] => 
    [protocol] => unix
    [hostspec] => 
    [port] => 
    [socket] => localhost
    [database] => pear
)
DSN: ibase://user%40domain:password@host
Array
(
    [phptype] => ibase
    [dbsyntax] => ibase
    [username] => user@domain
    [password] => password
    [protocol] => tcp
    [hostspec] => host
    [port] => 
    [socket] => 
    [database] => 
)
DSN: ibase://user@domain:pass@word@/database
Array
(
    [phptype] => ibase
    [dbsyntax] => ibase
    [username] => user@domain
    [password] => pass@word
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => database
)
DSN: ifx://user@domain:pass@word@host.com//usr/db/general.db
Array
(
    [phptype] => ifx
    [dbsyntax] => ifx
    [username] => user@domain
    [password] => pass@word
    [protocol] => tcp
    [hostspec] => host.com
    [port] => 
    [socket] => 
    [database] => /usr/db/general.db
)
DSN: ifx://remote.host.com/c:\windows\my.db
Array
(
    [phptype] => ifx
    [dbsyntax] => ifx
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => remote.host.com
    [port] => 
    [socket] => 
    [database] => c:\windows\my.db
)
DSN: oci8://SHOOTOUT:******@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.101.161)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TIS)))
Array
(
    [phptype] => oci8
    [dbsyntax] => oci8
    [username] => SHOOTOUT
    [password] => ******
    [protocol] => tcp
    [hostspec] => (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.101.161)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=TIS)))
    [port] => 
    [socket] => 
    [database] => 
)
DSN: odbc(solid)://foo:bar@localhost:1313
Array
(
    [phptype] => odbc
    [dbsyntax] => solid
    [username] => foo
    [password] => bar
    [protocol] => tcp
    [hostspec] => localhost
    [port] => 1313
    [socket] => 
    [database] => 
)
DSN: pgsql://user@unix()/pear
Array
(
    [phptype] => pgsql
    [dbsyntax] => pgsql
    [username] => user
    [password] => 
    [protocol] => unix
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => pear
)
DSN: mysql://user@unix(/path/to/socket)/pear
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => user
    [password] => 
    [protocol] => unix
    [hostspec] => 
    [port] => 
    [socket] => /path/to/socket
    [database] => pear
)
DSN: pgsql://user@tcp()/pear
Array
(
    [phptype] => pgsql
    [dbsyntax] => pgsql
    [username] => user
    [password] => 
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => pear
)
DSN: pgsql://user@tcp(somehost)/pear
Array
(
    [phptype] => pgsql
    [dbsyntax] => pgsql
    [username] => user
    [password] => 
    [protocol] => tcp
    [hostspec] => somehost
    [port] => 
    [socket] => 
    [database] => pear
)
DSN: pgsql://user:pass@word@tcp(somehost:7777)/pear
Array
(
    [phptype] => pgsql
    [dbsyntax] => pgsql
    [username] => user
    [password] => pass@word
    [protocol] => tcp
    [hostspec] => somehost
    [port] => 7777
    [socket] => 
    [database] => pear
)
DSN: ibase://user:pass@localhost//var/lib/dbase.dbf?role=foo
Array
(
    [phptype] => ibase
    [dbsyntax] => ibase
    [username] => user
    [password] => pass
    [protocol] => tcp
    [hostspec] => localhost
    [port] => 
    [socket] => 
    [database] => /var/lib/dbase.dbf
    [role] => foo
)
DSN: dbase://@/?role=foo&dialect=bar
Array
(
    [phptype] => dbase
    [dbsyntax] => dbase
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => 
    [role] => foo
    [dialect] => bar
)
DSN: sqlite:////unix/path/to/database?option=value&anotheroption=anothervalue
Array
(
    [phptype] => sqlite
    [dbsyntax] => sqlite
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => /unix/path/to/database
    [option] => value
    [anotheroption] => anothervalue
)
DSN: sqlite:///c:/win/path/to/database?option=value
Array
(
    [phptype] => sqlite
    [dbsyntax] => sqlite
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => c:/win/path/to/database
    [option] => value
)
DSN: mysql://username@hostspec
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => username
    [password] => 
    [protocol] => tcp
    [hostspec] => hostspec
    [port] => 
    [socket] => 
    [database] => 
)
DSN: mysql://hostspec/database
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => hostspec
    [port] => 
    [socket] => 
    [database] => database
)
DSN: mysql://hostspec
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => hostspec
    [port] => 
    [socket] => 
    [database] => 
)
DSN: mysql:///database
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => 
    [password] => 
    [protocol] => tcp
    [hostspec] => 
    [port] => 
    [socket] => 
    [database] => database
)
DSN: array
Array
(
    [phptype] => mysql
    [dbsyntax] => mysql
    [username] => 
    [password] => 
    [protocol] => 
    [hostspec] => foobar
    [port] => 
    [socket] => 
    [database] => 
)
