aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/db
diff options
context:
space:
mode:
authorDavid M <davidmj@users.sourceforge.net>2006-05-05 22:06:17 +0000
committerDavid M <davidmj@users.sourceforge.net>2006-05-05 22:06:17 +0000
commit3d2a45ab049606701172c11552aa0c1006d2fbf1 (patch)
treeea65a291ac3901d723f33446c54e449e3218ea13 /phpBB/includes/db
parentb6ffae82b938eb3c40395234f14d79b53ba003c4 (diff)
downloadforums-3d2a45ab049606701172c11552aa0c1006d2fbf1.tar
forums-3d2a45ab049606701172c11552aa0c1006d2fbf1.tar.gz
forums-3d2a45ab049606701172c11552aa0c1006d2fbf1.tar.bz2
forums-3d2a45ab049606701172c11552aa0c1006d2fbf1.tar.xz
forums-3d2a45ab049606701172c11552aa0c1006d2fbf1.zip
I hope nothing broke!
- Added a query builder, it is currently only used for complex queries that involve a FROM clause with two tables and a left join - Changed some function calls in the DBAL - Made the viewtopic queries nicer git-svn-id: file:///svn/phpbb/trunk@5885 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/db')
-rw-r--r--phpBB/includes/db/dbal.php61
-rw-r--r--phpBB/includes/db/firebird.php13
-rw-r--r--phpBB/includes/db/mssql.php10
-rw-r--r--phpBB/includes/db/mssql_odbc.php10
-rw-r--r--phpBB/includes/db/mysql.php15
-rw-r--r--phpBB/includes/db/mysql4.php15
-rw-r--r--phpBB/includes/db/mysqli.php15
-rw-r--r--phpBB/includes/db/oracle.php6
-rw-r--r--phpBB/includes/db/postgres.php15
-rw-r--r--phpBB/includes/db/sqlite.php10
10 files changed, 159 insertions, 11 deletions
diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php
index acc64da799..1a8b8a4ddf 100644
--- a/phpBB/includes/db/dbal.php
+++ b/phpBB/includes/db/dbal.php
@@ -192,6 +192,67 @@ class dbal
}
/**
+ * Build sql statement from array for select and select distinct statements
+ *
+ * Possible query values: SELECT, SELECT_DISTINCT
+ */
+ function sql_build_query($query, $array)
+ {
+ $sql = '';
+ switch ($query)
+ {
+ case 'SELECT':
+ case 'SELECT_DISTINCT';
+
+ if ($query == 'SELECT_DISTINCT')
+ {
+ $sql .= 'SELECT DISTINCT';
+ }
+ else
+ {
+ $sql .= 'SELECT';
+ }
+
+ $sql .= ' ' . $array['SELECT'];
+ $sql .= ' FROM ';
+
+ $table_array = array();
+ foreach ($array['FROM'] as $table_name => $alias)
+ {
+ $table_array[] = $table_name . ' ' . $alias;
+ }
+
+ $sql .= $this->_sql_custom_build('FROM', implode(', ', $table_array));
+
+ if (!empty($array['LEFT_JOIN']))
+ {
+ foreach ($array['LEFT_JOIN'] as $join)
+ {
+ $sql .= ' LEFT JOIN ' . key($join['FROM']) . ' ' . current($join['FROM']) . ' ON (' . $join['ON'] . ')';
+ }
+ }
+
+ if (!empty($array['WHERE']))
+ {
+ $sql .= ' WHERE ' . $this->_sql_custom_build('WHERE', $array['WHERE']);
+ }
+
+ if (!empty($array['GROUP_BY']))
+ {
+ $sql .= ' GROUP BY ' . $array['GROUP_BY'];
+ }
+
+ if (!empty($array['ORDER_BY']))
+ {
+ $sql .= ' ORDER BY ' . $array['ORDER_BY'];
+ }
+
+ break;
+ }
+ return $sql;
+ }
+
+ /**
* display sql error page
*/
function sql_error($sql = '')
diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php
index c94fd00882..e4eca60772 100644
--- a/phpBB/includes/db/firebird.php
+++ b/phpBB/includes/db/firebird.php
@@ -56,6 +56,7 @@ class dbal_firebird extends dbal
switch ($status)
{
case 'begin':
+ $result = true;
$this->transaction = true;
break;
@@ -90,7 +91,6 @@ class dbal_firebird extends dbal
{
global $cache;
- $query = preg_replace('#FROM \(([^)]*)\)(,|[\n\r\t ]+(?:WHERE|LEFT JOIN)) #', 'FROM \1\2 ', $query);
$this->last_query_text = $query;
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
@@ -320,6 +320,15 @@ class dbal_firebird extends dbal
}
/**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ return $data;
+ }
+
+ /**
* return sql error array
* @private
*/
@@ -360,7 +369,7 @@ class dbal_firebird extends dbal
{
// Take the time spent on parsing rows into account
}
- @ibase_freeresult($result);
+ @ibase_free_result($result);
$splittime = explode(' ', microtime());
$splittime = $splittime[0] + $splittime[1];
diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php
index 0e7ee89196..e1082d282c 100644
--- a/phpBB/includes/db/mssql.php
+++ b/phpBB/includes/db/mssql.php
@@ -98,7 +98,6 @@ class dbal_mssql extends dbal
{
global $cache;
- $query = preg_replace('#FROM \(([^)]*)\)(,|[\n\r\t ]+(?:WHERE|LEFT JOIN)) #', 'FROM \1\2 ', $query);
// EXPLAIN only in extra debug mode
if (defined('DEBUG_EXTRA'))
@@ -334,6 +333,15 @@ class dbal_mssql extends dbal
}
/**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ return $data;
+ }
+
+ /**
* Close sql connection
* @private
*/
diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php
index 1e219f985e..a31c6074bc 100644
--- a/phpBB/includes/db/mssql_odbc.php
+++ b/phpBB/includes/db/mssql_odbc.php
@@ -101,7 +101,6 @@ class dbal_mssql_odbc extends dbal
$this->sql_report('start', $query);
}
- $query = preg_replace('#FROM \(([^)]*)\)(,|[\n\r\t ]+(?:WHERE|LEFT JOIN)) #', 'FROM \1\2 ', $query);
$this->last_query_text = $query;
$this->query_result = ($cache_ttl && method_exists($cache, 'sql_load')) ? $cache->sql_load($query) : false;
@@ -318,6 +317,15 @@ class dbal_mssql_odbc extends dbal
}
/**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ return $data;
+ }
+
+ /**
* return sql error array
* @private
*/
diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php
index 625c6876ee..d9369f3a75 100644
--- a/phpBB/includes/db/mysql.php
+++ b/phpBB/includes/db/mysql.php
@@ -290,6 +290,21 @@ class dbal_mysql extends dbal
return @mysql_real_escape_string($msg, $this->db_connect_id);
}
+
+ /**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ switch ($stage)
+ {
+ case 'FROM':
+ $data = '(' . $data . ')';
+ break;
+ }
+ return $data;
+ }
/**
* return sql error array
diff --git a/phpBB/includes/db/mysql4.php b/phpBB/includes/db/mysql4.php
index c388987e40..47c1ebc41f 100644
--- a/phpBB/includes/db/mysql4.php
+++ b/phpBB/includes/db/mysql4.php
@@ -293,6 +293,21 @@ class dbal_mysql4 extends dbal
return @mysql_real_escape_string($msg, $this->db_connect_id);
}
+
+ /**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ switch ($stage)
+ {
+ case 'FROM':
+ $data = '(' . $data . ')';
+ break;
+ }
+ return $data;
+ }
/**
* return sql error array
diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php
index 137ca39591..0233c7092f 100644
--- a/phpBB/includes/db/mysqli.php
+++ b/phpBB/includes/db/mysqli.php
@@ -284,6 +284,21 @@ class dbal_mysqli extends dbal
{
return @mysqli_real_escape_string($this->db_connect_id, $msg);
}
+
+ /**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ switch ($stage)
+ {
+ case 'FROM':
+ $data = '(' . $data . ')';
+ break;
+ }
+ return $data;
+ }
/**
* return sql error array
diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php
index 2a4898ca0d..72732d2a50 100644
--- a/phpBB/includes/db/oracle.php
+++ b/phpBB/includes/db/oracle.php
@@ -90,7 +90,6 @@ class dbal_oracle extends dbal
{
global $cache;
- $query = preg_replace('#FROM \(([^)]*)\)(,|[\n\r\t ]+(?:WHERE|LEFT JOIN)) #', 'FROM \1\2 ', $query);
// EXPLAIN only in extra debug mode
if (defined('DEBUG_EXTRA'))
@@ -361,6 +360,11 @@ class dbal_oracle extends dbal
return str_replace("'", "''", str_replace('\\', '\\\\', $msg));
}
+ function _sql_custom_build($stage, $data)
+ {
+ return $data;
+ }
+
/**
* return sql error array
* @private
diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php
index d9e8bc2bfa..eb5f2d17e8 100644
--- a/phpBB/includes/db/postgres.php
+++ b/phpBB/includes/db/postgres.php
@@ -127,10 +127,6 @@ class dbal_postgres extends dbal
{
global $cache;
- if (strpos($query, 'SELECT') === 0 && strpos($query, 'FROM (') !== false)
- {
- $query = preg_replace('#FROM \(([^)]+)\)\s#', 'FROM \1 ', $query);
- }
// EXPLAIN only in extra debug mode
if (defined('DEBUG_EXTRA'))
@@ -145,7 +141,7 @@ class dbal_postgres extends dbal
{
$this->num_queries++;
- if (($this->query_result = @pg_exec($this->db_connect_id, $query)) === false)
+ if (($this->query_result = @pg_query($this->db_connect_id, $query)) === false)
{
$this->sql_error($query);
}
@@ -179,6 +175,15 @@ class dbal_postgres extends dbal
}
/**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ return $data;
+ }
+
+ /**
* Build LIMIT query
*/
function sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0)
diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php
index 16319aec83..f2f3ceb1f1 100644
--- a/phpBB/includes/db/sqlite.php
+++ b/phpBB/includes/db/sqlite.php
@@ -94,7 +94,6 @@ class dbal_sqlite extends dbal
{
global $cache;
- $query = preg_replace('#FROM \(([^)]*)\)(,|[\n\r\t ]+(?:WHERE|LEFT JOIN)) #', 'FROM \1\2 ', $query);
// EXPLAIN only in extra debug mode
if (defined('DEBUG_EXTRA'))
@@ -286,6 +285,15 @@ class dbal_sqlite extends dbal
}
/**
+ * Build db-specific query data
+ * @private
+ */
+ function _sql_custom_build($stage, $data)
+ {
+ return $data;
+ }
+
+ /**
* Close sql connection
* @private
*/