1
0
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:
David M
2006-05-05 22:06:17 +00:00
parent b6ffae82b9
commit 3d2a45ab04
19 changed files with 529 additions and 173 deletions

View File

@@ -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
*/

View File

@@ -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];

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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
*/

View File

@@ -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