mirror of
https://github.com/phpbb/phpbb.git
synced 2025-08-12 19:54:12 +02:00
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
This commit is contained in:
@@ -191,6 +191,67 @@ class dbal
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*/
|
||||
|
@@ -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;
|
||||
@@ -319,6 +319,15 @@ class dbal_firebird extends dbal
|
||||
return (@ini_get('magic_quotes_sybase') || strtolower(@ini_get('magic_quotes_sybase')) == 'on') ? str_replace('\\\'', '\'', addslashes($msg)) : str_replace('\'', '\'\'', stripslashes($msg));
|
||||
}
|
||||
|
||||
/**
|
||||
* 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];
|
||||
|
@@ -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'))
|
||||
@@ -333,6 +332,15 @@ class dbal_mssql extends dbal
|
||||
return $error;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build db-specific query data
|
||||
* @private
|
||||
*/
|
||||
function _sql_custom_build($stage, $data)
|
||||
{
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close sql connection
|
||||
* @private
|
||||
|
@@ -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;
|
||||
@@ -317,6 +316,15 @@ class dbal_mssql_odbc extends dbal
|
||||
return str_replace("'", "''", str_replace('\\', '\\\\', $msg));
|
||||
}
|
||||
|
||||
/**
|
||||
* Build db-specific query data
|
||||
* @private
|
||||
*/
|
||||
function _sql_custom_build($stage, $data)
|
||||
{
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* return sql error array
|
||||
* @private
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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);
|
||||
}
|
||||
@@ -178,6 +174,15 @@ class dbal_postgres extends dbal
|
||||
return ($this->query_result) ? $this->query_result : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build db-specific query data
|
||||
* @private
|
||||
*/
|
||||
function _sql_custom_build($stage, $data)
|
||||
{
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build LIMIT query
|
||||
*/
|
||||
|
@@ -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'))
|
||||
@@ -285,6 +284,15 @@ class dbal_sqlite extends dbal
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build db-specific query data
|
||||
* @private
|
||||
*/
|
||||
function _sql_custom_build($stage, $data)
|
||||
{
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close sql connection
|
||||
* @private
|
||||
|
Reference in New Issue
Block a user