Index: src/com/caucho/quercus/script/QuercusScriptEngine.java =================================================================== --- src/com/caucho/quercus/script/QuercusScriptEngine.java (revision 2823) +++ src/com/caucho/quercus/script/QuercusScriptEngine.java (working copy) @@ -60,7 +60,7 @@ /** * Returns the Quercus object. */ - Quercus getQuercus() + public Quercus getQuercus() { return _quercus; } Index: src/com/caucho/quercus/lib/db/MysqlModule.java =================================================================== --- src/com/caucho/quercus/lib/db/MysqlModule.java (revision 2823) +++ src/com/caucho/quercus/lib/db/MysqlModule.java (working copy) @@ -61,7 +61,7 @@ public static final int MYSQL_USE_RESULT = 0x0; public static final int MYSQL_STORE_RESULT = 0x1; - + public MysqlModule() { } @@ -813,7 +813,7 @@ // Split host name and port from each other. // Use > 0 because sockets have a ':' at index 0. - if (portIndex > 0) { + if (portIndex > 0 && !host.startsWith("jdbc")) { port = 0; for (int j = portIndex + 1; j < length; j++) { @@ -827,7 +827,8 @@ host = host.substring(0, portIndex); } - + + Mysqli mysqli = new Mysqli(env, host, userName, password, "", port, "", 0, null, null); if (! mysqli.isConnected()) Index: src/com/caucho/quercus/lib/db/Mysqli.java =================================================================== --- src/com/caucho/quercus/lib/db/Mysqli.java (revision 2823) +++ src/com/caucho/quercus/lib/db/Mysqli.java (working copy) @@ -29,6 +29,18 @@ package com.caucho.quercus.lib.db; +import java.sql.Connection; +import java.sql.DataTruncation; +import java.sql.Driver; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; + +import com.caucho.quercus.QuercusModuleException; import com.caucho.quercus.UnimplementedException; import com.caucho.quercus.annotation.Optional; import com.caucho.quercus.annotation.ReturnNullAsFalse; @@ -40,16 +52,6 @@ import com.caucho.quercus.env.Value; import com.caucho.util.L10N; -import java.lang.reflect.Method; -import java.sql.Connection; -import java.sql.DataTruncation; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.logging.Level; -import java.util.logging.Logger; - /** * mysqli object oriented API facade */ @@ -134,12 +136,39 @@ driver = "com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"; } - if (url == null || url.equals("")) { + if (url == null || url.equals("") || !host.startsWith("jdbc")) { url = "jdbc:mysql://" + host + ":" + port + "/" + dbname; } - Connection jConn = env.getConnection(driver, url, userName, password); - + + if (host.startsWith("jdbc")) { + // url looks like this + // jdbc:mysql://hostpart/dbname?user=username&password=password + url = new String(host); + // extract the host + String hostPart = host.replace("jdbc:mysql://", ""); + if (hostPart.indexOf("/") != -1) + hostPart = hostPart.substring(0, hostPart.indexOf("/")); + // extract the database name + if (host.indexOf("/") != -1) { + dbname = host.substring(host.lastIndexOf("/")+1); + int idx = dbname.indexOf("?"); + if (idx != -1) + dbname = dbname.substring(0, idx); + } + host = hostPart; + } + + Connection jConn = null; + try { + jConn = env.getConnection(driver, url, userName, password); + } + catch (QuercusModuleException e) { + // load the driver + Class.forName(driver); + // try to get the datasource + jConn = DriverManager.getConnection(url, userName, password); + } setConnection(host, userName, password, dbname, port, jConn, driver, url); return true;