diff --git a/classes/query_builder.php b/classes/query_builder.php index 679c26c..0d28e82 100644 --- a/classes/query_builder.php +++ b/classes/query_builder.php @@ -158,7 +158,13 @@ class Query_Builder { // Convert array to object if (is_array($params)) { - $p = new ArrayObject($params, ArrayObject::ARRAY_AS_PROPS); + $p = new stdClass(); + + foreach($params as $k => $v) + { + $p->$k = $v; + } + $params = $p; } @@ -171,12 +177,20 @@ class Query_Builder { $params->type = strtolower($params->type); $dbtype = ($params->type !== 'postgresql') ? $params->type : 'pgsql'; + + $dsn = ''; + + // Add the driver type to the dsn + if ($dbtype !== 'firebird' && $dbtype !== 'sqlite') + { + $dsn = strtolower($dbtype).':'.$dsn; + } // Create the dsn for the database to connect to switch($dbtype) { default: - $dsn = "dbname={$params->conn_db}"; + $dsn .= "dbname={$params->conn_db}"; if ( ! empty($params->host)) { @@ -191,14 +205,14 @@ class Query_Builder { break; case "sqlite": - $dsn = $params->file; + $dsn .= $params->file; break; case "firebird": $dsn = "{$params->host}:{$params->file}"; break; } - + // Create the database connection if ( ! empty($params->user)) { @@ -1209,7 +1223,7 @@ class Query_Builder { // Only unset class variables that // are not callable. Otherwise, we'll // delete class methods! - foreach($this as $name => &$var) + foreach($this as $name => $var) { // Skip properties that are needed for every query if (in_array($name, array( diff --git a/drivers/mysql/mysql_driver.php b/drivers/mysql/mysql_driver.php index a8dd9f1..630eac9 100644 --- a/drivers/mysql/mysql_driver.php +++ b/drivers/mysql/mysql_driver.php @@ -38,11 +38,19 @@ class MySQL extends DB_PDO { */ public function __construct($dsn, $username=null, $password=null, $options=array()) { - $options = array_merge($options, array( - PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF-8 COLLATE 'UTF-8'", - )); - - parent::__construct("mysql:{$dsn}", $username, $password, $options); + if (defined('PDO::MYSQL_ATTR_INIT_COMMAND')) + { + $options = array_merge($options, array( + PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF-8 COLLATE 'UTF-8'", + )); + } + + if (strpos($dsn, 'mysql') === FALSE) + { + $dsn = 'mysql:'.$dsn; + } + + parent::__construct($dsn, $username, $password, $options); } // -------------------------------------------------------------------------- diff --git a/drivers/mysql/mysql_util.php b/drivers/mysql/mysql_util.php index 79b818e..005e7cb 100644 --- a/drivers/mysql/mysql_util.php +++ b/drivers/mysql/mysql_util.php @@ -171,7 +171,7 @@ class MySQL_Util extends DB_Util { $output_sql = ''; // Select the rows from each Table - foreach($tables as &$t) + foreach($tables as $t) { $sql = "SELECT * FROM `{$t}`"; $res = $this->query($sql); @@ -188,10 +188,15 @@ class MySQL_Util extends DB_Util { $insert_rows = array(); // Create the insert statements - foreach($rows as &$row) + foreach($rows as $row) { $row = array_values($row); - $row = array_map(array(&$this, 'quote'), $row); + + // Workaround for Quercus + foreach($row as &$r) + { + $r = $this->quote($r); + } $row = array_map('trim', $row); $row_string = 'INSERT INTO `'.trim($t).'` (`'.implode('`,`', $columns).'`) VALUES ('.implode(',', $row).');'; diff --git a/drivers/pgsql/pgsql_driver.php b/drivers/pgsql/pgsql_driver.php index a0ac49e..1caa7d5 100644 --- a/drivers/pgsql/pgsql_driver.php +++ b/drivers/pgsql/pgsql_driver.php @@ -31,7 +31,12 @@ class PgSQL extends DB_PDO { */ public function __construct($dsn, $username=null, $password=null, $options=array()) { - parent::__construct("pgsql:{$dsn}", $username, $password, $options); + if (strpos($dsn, 'pgsql') === FALSE) + { + $dsn = 'pgsql:'.$dsn; + } + + parent::__construct($dsn, $username, $password, $options); } // -------------------------------------------------------------------------- diff --git a/drivers/sqlite/sqlite_driver.php b/drivers/sqlite/sqlite_driver.php index b042658..213d6dd 100644 --- a/drivers/sqlite/sqlite_driver.php +++ b/drivers/sqlite/sqlite_driver.php @@ -36,7 +36,7 @@ class SQLite extends DB_PDO { * @param string $pass */ public function __construct($dsn, $user=NULL, $pass=NULL) - { + { // DSN is simply `sqlite:/path/to/db` parent::__construct("sqlite:{$dsn}", $user, $pass); } diff --git a/tests/databases/mysql/mysql-qb.php b/tests/databases/mysql/mysql-qb.php index 6dbbb1f..f9c7c2b 100644 --- a/tests/databases/mysql/mysql-qb.php +++ b/tests/databases/mysql/mysql-qb.php @@ -24,7 +24,7 @@ class MySQLQBTest extends QBTest { { $params = json_decode(file_get_contents(QBASE_DIR . "test_config.json")); $params = $params->mysql; - $params->type = "mysql"; + $params->type = "MySQL"; $this->db = new Query_Builder($params); diff --git a/tests/databases/mysql/mysql.php b/tests/databases/mysql/mysql.php index 4bdd116..ddb2c04 100644 --- a/tests/databases/mysql/mysql.php +++ b/tests/databases/mysql/mysql.php @@ -25,10 +25,10 @@ class MySQLTest extends DBTest { // Attempt to connect, if there is a test config file if (is_file(QBASE_DIR . "test_config.json")) { - $params = json_decode(file_get_contents(QBASE_DIR . "test_config.json"), TRUE); - $params = $params['mysql']; + $params = json_decode(file_get_contents(QBASE_DIR . "test_config.json")); + $params = $params->mysql; - $this->db = new MySQL("host={$params['host']};port={$params['port']};dbname={$params['database']}", $params['user'], $params['pass']); + $this->db = new MySQL("mysql:host={$params->host};dbname={$params->database}", $params->user, $params->pass); } elseif (($var = getenv('CI'))) { diff --git a/tests/databases/pgsql/pgsql-qb.php b/tests/databases/pgsql/pgsql-qb.php index 295e51a..4619898 100644 --- a/tests/databases/pgsql/pgsql-qb.php +++ b/tests/databases/pgsql/pgsql-qb.php @@ -49,6 +49,6 @@ class PgSQLQBTest extends QBTest { public function TestExists() { - $this->assertTrue(in_array('pgsql', pdo_drivers())); + $this->assertTrue(in_array('pgsql', PDO::getAvailableDrivers())); } } \ No newline at end of file diff --git a/tests/databases/pgsql/pgsql.php b/tests/databases/pgsql/pgsql.php index dfb9f56..b1be75a 100644 --- a/tests/databases/pgsql/pgsql.php +++ b/tests/databases/pgsql/pgsql.php @@ -34,7 +34,7 @@ class PgTest extends DBTest { $params = json_decode(file_get_contents(QBASE_DIR . "test_config.json")); $params = $params->pgsql; - $this->db = new PgSQL("host={$params->host};port={$params->port};dbname={$params->database}", $params->user, $params->pass); + $this->db = new PgSQL("pgsql:host={$params->host};dbname={$params->database}", $params->user, $params->pass); } elseif (($var = getenv('CI'))) { @@ -46,7 +46,7 @@ class PgTest extends DBTest { public function TestExists() { - $this->assertTrue(in_array('pgsql', pdo_drivers())); + $this->assertTrue(in_array('pgsql', PDO::getAvailableDrivers())); } // -------------------------------------------------------------------------- diff --git a/tests/db_files/FB_TEST_DB.FDB b/tests/db_files/FB_TEST_DB.FDB index 4914d5f..a61d68f 100644 Binary files a/tests/db_files/FB_TEST_DB.FDB and b/tests/db_files/FB_TEST_DB.FDB differ