aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/db/postgres.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/db/postgres.php')
-rw-r--r--phpBB/includes/db/postgres.php66
1 files changed, 64 insertions, 2 deletions
diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php
index ad8e0a01da..1836952346 100644
--- a/phpBB/includes/db/postgres.php
+++ b/phpBB/includes/db/postgres.php
@@ -22,7 +22,7 @@ if (!defined('SQL_LAYER'))
{
define('SQL_LAYER', 'postgres');
- include($phpbb_root_path . 'includes/db/dbal.' . $phpEx);
+ include_once($phpbb_root_path . 'includes/db/dbal.' . $phpEx);
/**
* PostgreSQL Database Abstraction Layer
@@ -85,6 +85,25 @@ class dbal_postgres extends dbal
}
/**
+ * Version information about used database
+ */
+ function sql_server_info()
+ {
+ if (version_compare(phpversion(), '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);
+ $version = $row['version'];
+ return ((!empty($version)) ? ' ' . $version : '');
+ }
+ }
+
+ /**
* SQL Transaction
* @access: private
*/
@@ -110,6 +129,12 @@ class dbal_postgres extends dbal
/**
* Base query method
+ *
+ * @param string $query Contains the SQL query which shall be executed
+ * @param int $cache_ttl Either 0 to avoid caching or the time in seconds which the result shall be kept in cache
+ * @return mixed When casted to bool the returned value returns true on success and false on failure
+ *
+ * @access public
*/
function sql_query($query = '', $cache_ttl = 0)
{
@@ -202,11 +227,18 @@ class dbal_postgres extends dbal
*/
function sql_numrows($query_id = false)
{
+ global $cache;
+
if (!$query_id)
{
$query_id = $this->query_result;
}
+ if (isset($cache->sql_rowset[$query_id]))
+ {
+ return $cache->sql_numrows($query_id);
+ }
+
return ($query_id) ? @pg_num_rows($query_id) : false;
}
@@ -235,7 +267,16 @@ class dbal_postgres extends dbal
return $cache->sql_fetchrow($query_id);
}
- return ($query_id) ? @pg_fetch_assoc($query_id, NULL) : false;
+ $row = @pg_fetch_assoc($query_id, null);
+ if ($row)
+ {
+ foreach ($row as $key => $value)
+ {
+ $row[$key] = (strpos($key, 'bitfield') === false) ? $value : pg_unescape_bytea($value);
+ }
+ }
+
+ return ($query_id) ? $row : false;
}
/**
@@ -244,6 +285,8 @@ class dbal_postgres extends dbal
*/
function sql_fetchfield($field, $rownum = false, $query_id = false)
{
+ global $cache;
+
if (!$query_id)
{
$query_id = $this->query_result;
@@ -256,6 +299,11 @@ class dbal_postgres extends dbal
$this->sql_rowseek($rownum, $query_id);
}
+ if (isset($cache->sql_rowset[$query_id]))
+ {
+ return $cache->sql_fetchfield($query_id, $field);
+ }
+
$row = $this->sql_fetchrow($query_id);
return isset($row[$field]) ? $row[$field] : false;
}
@@ -269,11 +317,18 @@ class dbal_postgres extends dbal
*/
function sql_rowseek($rownum, $query_id = false)
{
+ global $cache;
+
if (!$query_id)
{
$query_id = $this->query_result;
}
+ if (isset($cache->sql_rowset[$query_id]))
+ {
+ return $cache->sql_rowseek($query_id, $rownum);
+ }
+
return ($query_id) ? @pg_result_seek($query_id, $rownum) : false;
}
@@ -311,11 +366,18 @@ class dbal_postgres extends dbal
*/
function sql_freeresult($query_id = false)
{
+ global $cache;
+
if (!$query_id)
{
$query_id = $this->query_result;
}
+ if (isset($cache->sql_rowset[$query_id]))
+ {
+ return $cache->sql_freeresult($query_id);
+ }
+
if (isset($this->open_queries[(int) $query_id]))
{
unset($this->open_queries[(int) $query_id]);