aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/db
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/db')
-rw-r--r--phpBB/includes/db/dbal.php31
-rw-r--r--phpBB/includes/db/mysql.php1
-rw-r--r--phpBB/includes/db/mysqli.php2
-rw-r--r--phpBB/includes/db/postgres.php38
4 files changed, 42 insertions, 30 deletions
diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php
index dbc0859733..cfd13fd118 100644
--- a/phpBB/includes/db/dbal.php
+++ b/phpBB/includes/db/dbal.php
@@ -38,6 +38,9 @@ class dbal
// Holding the last sql query on sql error
var $sql_error_sql = '';
+ // Supports multi inserts?
+ var $multi_insert = false;
+
/**
* Current sql layer
*/
@@ -364,25 +367,21 @@ class dbal
return false;
}
- switch ($this->sql_layer)
+ if ($this->multi_insert)
{
- case 'mysql':
- case 'mysql4':
- case 'mysqli':
- $this->sql_query('INSERT INTO ' . $table . ' ' . $this->sql_build_array('MULTI_INSERT', $sql_ary));
- break;
-
- default:
- foreach ($sql_ary as $ary)
+ $this->sql_query('INSERT INTO ' . $table . ' ' . $this->sql_build_array('MULTI_INSERT', $sql_ary));
+ }
+ else
+ {
+ foreach ($sql_ary as $ary)
+ {
+ if (!is_array($ary))
{
- if (!is_array($ary))
- {
- return false;
- }
-
- $this->sql_query('INSERT INTO ' . $table . ' ' . $this->sql_build_array('INSERT', $ary));
+ return false;
}
- break;
+
+ $this->sql_query('INSERT INTO ' . $table . ' ' . $this->sql_build_array('INSERT', $ary));
+ }
}
return true;
diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php
index dfa4823a87..c20e73315a 100644
--- a/phpBB/includes/db/mysql.php
+++ b/phpBB/includes/db/mysql.php
@@ -30,6 +30,7 @@ include_once($phpbb_root_path . 'includes/db/dbal.' . $phpEx);
class dbal_mysql extends dbal
{
var $mysql_version;
+ var $multi_insert = true;
/**
* Connect to server
diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php
index c03c117085..6f54b5c8b3 100644
--- a/phpBB/includes/db/mysqli.php
+++ b/phpBB/includes/db/mysqli.php
@@ -26,6 +26,8 @@ include_once($phpbb_root_path . 'includes/db/dbal.' . $phpEx);
*/
class dbal_mysqli extends dbal
{
+ var $multi_insert = true;
+
/**
* Connect to server
*/
diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php
index bdaab439ea..94bc70fa6a 100644
--- a/phpBB/includes/db/postgres.php
+++ b/phpBB/includes/db/postgres.php
@@ -26,6 +26,7 @@ include_once($phpbb_root_path . 'includes/db/dbal.' . $phpEx);
class dbal_postgres extends dbal
{
var $last_query_text = '';
+ var $pgsql_version;
/**
* Connect to server
@@ -80,6 +81,28 @@ class dbal_postgres extends dbal
if ($this->db_connect_id)
{
+ // determine what version of PostgreSQL is running, we can be more efficient if they are running 8.2+
+ if (version_compare(PHP_VERSION, '5.0.0', '>='))
+ {
+ $this->pgsql_version = @pg_parameter_status($this->db_connect_id, 'server_version');
+ }
+ else
+ {
+ $query_id = @pg_query($this->db_connect_id, 'SELECT VERSION()');
+ $row = @pg_fetch_assoc($query_id, null);
+ @pg_free_result($query_id);
+
+ if (!empty($row['version']))
+ {
+ $this->pgsql_version = substr($row['version'], 10);
+ }
+ }
+
+ if (!empty($this->pgsql_version) && $this->pgsql_version[0] >= '8' && $this->pgsql_version[2] >= '2')
+ {
+ $this->multi_insert = true;
+ }
+
if ($schema !== '')
{
@pg_query($this->db_connect_id, 'SET search_path TO ' . $schema);
@@ -95,20 +118,7 @@ class dbal_postgres extends dbal
*/
function sql_server_info()
{
- if (version_compare(PHP_VERSION, '5.0.0', '>='))
- {
- $version = @pg_version($this->db_connect_id);
- return 'PostgreSQL' . ((!empty($version)) ? ' ' . $version['client'] : '');
- }
- else
- {
- $query_id = @pg_query($this->db_connect_id, 'select version()');
- $row = @pg_fetch_assoc($query_id, null);
- @pg_free_result($query_id);
-
- $version = $row['version'];
- return ((!empty($version)) ? ' ' . $version : '');
- }
+ return 'PostgreSQL ' . $this->pgsql_version;
}
/**