mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-19 05:49:44 +02:00
[ticket/10966] Introduce MySQL base class
PHPBB3-10966
This commit is contained in:
parent
a0d10cd7fc
commit
e2875a7e17
@ -24,7 +24,7 @@ if (!defined('IN_PHPBB'))
|
|||||||
* MySQL 5.0+
|
* MySQL 5.0+
|
||||||
* @package dbal
|
* @package dbal
|
||||||
*/
|
*/
|
||||||
class phpbb_db_driver_mysql extends phpbb_db_driver
|
class phpbb_db_driver_mysql extends phpbb_db_driver_mysql_base
|
||||||
{
|
{
|
||||||
var $multi_insert = true;
|
var $multi_insert = true;
|
||||||
var $connect_error = '';
|
var $connect_error = '';
|
||||||
@ -135,14 +135,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver
|
|||||||
return ($raw) ? $this->sql_server_version : 'MySQL ' . $this->sql_server_version;
|
return ($raw) ? $this->sql_server_version : 'MySQL ' . $this->sql_server_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function sql_concatenate($expr1, $expr2)
|
|
||||||
{
|
|
||||||
return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SQL Transaction
|
* SQL Transaction
|
||||||
* @access private
|
* @access private
|
||||||
@ -226,25 +218,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver
|
|||||||
return $this->query_result;
|
return $this->query_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Build LIMIT query
|
|
||||||
*/
|
|
||||||
function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0)
|
|
||||||
{
|
|
||||||
$this->query_result = false;
|
|
||||||
|
|
||||||
// if $total is set to 0 we do not want to limit the number of rows
|
|
||||||
if ($total == 0)
|
|
||||||
{
|
|
||||||
// Having a value of -1 was always a bug
|
|
||||||
$total = '18446744073709551615';
|
|
||||||
}
|
|
||||||
|
|
||||||
$query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total);
|
|
||||||
|
|
||||||
return $this->sql_query($query, $cache_ttl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return number of affected rows
|
* Return number of affected rows
|
||||||
*/
|
*/
|
||||||
@ -341,101 +314,6 @@ class phpbb_db_driver_mysql extends phpbb_db_driver
|
|||||||
return @mysql_real_escape_string($msg, $this->db_connect_id);
|
return @mysql_real_escape_string($msg, $this->db_connect_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the estimated number of rows in a specified table.
|
|
||||||
*
|
|
||||||
* @param string $table_name Table name
|
|
||||||
*
|
|
||||||
* @return string Number of rows in $table_name.
|
|
||||||
* Prefixed with ~ if estimated (otherwise exact).
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
function get_estimated_row_count($table_name)
|
|
||||||
{
|
|
||||||
$table_status = $this->get_table_status($table_name);
|
|
||||||
|
|
||||||
if (isset($table_status['Engine']))
|
|
||||||
{
|
|
||||||
if ($table_status['Engine'] === 'MyISAM')
|
|
||||||
{
|
|
||||||
return $table_status['Rows'];
|
|
||||||
}
|
|
||||||
else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000)
|
|
||||||
{
|
|
||||||
return '~' . $table_status['Rows'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::get_row_count($table_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the exact number of rows in a specified table.
|
|
||||||
*
|
|
||||||
* @param string $table_name Table name
|
|
||||||
*
|
|
||||||
* @return string Exact number of rows in $table_name.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
function get_row_count($table_name)
|
|
||||||
{
|
|
||||||
$table_status = $this->get_table_status($table_name);
|
|
||||||
|
|
||||||
if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM')
|
|
||||||
{
|
|
||||||
return $table_status['Rows'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::get_row_count($table_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets some information about the specified table.
|
|
||||||
*
|
|
||||||
* @param string $table_name Table name
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*
|
|
||||||
* @access protected
|
|
||||||
*/
|
|
||||||
function get_table_status($table_name)
|
|
||||||
{
|
|
||||||
$sql = "SHOW TABLE STATUS
|
|
||||||
LIKE '" . $this->sql_escape($table_name) . "'";
|
|
||||||
$result = $this->sql_query($sql);
|
|
||||||
$table_status = $this->sql_fetchrow($result);
|
|
||||||
$this->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $table_status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build LIKE expression
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
function _sql_like_expression($expression)
|
|
||||||
{
|
|
||||||
return $expression;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build db-specific query data
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
function _sql_custom_build($stage, $data)
|
|
||||||
{
|
|
||||||
switch ($stage)
|
|
||||||
{
|
|
||||||
case 'FROM':
|
|
||||||
$data = '(' . $data . ')';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return sql error array
|
* return sql error array
|
||||||
* @access private
|
* @access private
|
||||||
|
145
phpBB/includes/db/driver/mysql_base.php
Normal file
145
phpBB/includes/db/driver/mysql_base.php
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @package dbal
|
||||||
|
* @copyright (c) 2013 phpBB Group
|
||||||
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ignore
|
||||||
|
*/
|
||||||
|
if (!defined('IN_PHPBB'))
|
||||||
|
{
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Abstract MySQL Database Base Abstraction Layer
|
||||||
|
* @package dbal
|
||||||
|
*/
|
||||||
|
abstract class phpbb_db_driver_mysql_base extends phpbb_db_driver
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public function sql_concatenate($expr1, $expr2)
|
||||||
|
{
|
||||||
|
return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build LIMIT query
|
||||||
|
*/
|
||||||
|
function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0)
|
||||||
|
{
|
||||||
|
$this->query_result = false;
|
||||||
|
|
||||||
|
// if $total is set to 0 we do not want to limit the number of rows
|
||||||
|
if ($total == 0)
|
||||||
|
{
|
||||||
|
// MySQL 4.1+ no longer supports -1 in limit queries
|
||||||
|
$total = '18446744073709551615';
|
||||||
|
}
|
||||||
|
|
||||||
|
$query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total);
|
||||||
|
|
||||||
|
return $this->sql_query($query, $cache_ttl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the estimated number of rows in a specified table.
|
||||||
|
*
|
||||||
|
* @param string $table_name Table name
|
||||||
|
*
|
||||||
|
* @return string Number of rows in $table_name.
|
||||||
|
* Prefixed with ~ if estimated (otherwise exact).
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function get_estimated_row_count($table_name)
|
||||||
|
{
|
||||||
|
$table_status = $this->get_table_status($table_name);
|
||||||
|
|
||||||
|
if (isset($table_status['Engine']))
|
||||||
|
{
|
||||||
|
if ($table_status['Engine'] === 'MyISAM')
|
||||||
|
{
|
||||||
|
return $table_status['Rows'];
|
||||||
|
}
|
||||||
|
else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000)
|
||||||
|
{
|
||||||
|
return '~' . $table_status['Rows'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::get_row_count($table_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the exact number of rows in a specified table.
|
||||||
|
*
|
||||||
|
* @param string $table_name Table name
|
||||||
|
*
|
||||||
|
* @return string Exact number of rows in $table_name.
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
*/
|
||||||
|
function get_row_count($table_name)
|
||||||
|
{
|
||||||
|
$table_status = $this->get_table_status($table_name);
|
||||||
|
|
||||||
|
if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM')
|
||||||
|
{
|
||||||
|
return $table_status['Rows'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return parent::get_row_count($table_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets some information about the specified table.
|
||||||
|
*
|
||||||
|
* @param string $table_name Table name
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*
|
||||||
|
* @access protected
|
||||||
|
*/
|
||||||
|
function get_table_status($table_name)
|
||||||
|
{
|
||||||
|
$sql = "SHOW TABLE STATUS
|
||||||
|
LIKE '" . $this->sql_escape($table_name) . "'";
|
||||||
|
$result = $this->sql_query($sql);
|
||||||
|
$table_status = $this->sql_fetchrow($result);
|
||||||
|
$this->sql_freeresult($result);
|
||||||
|
|
||||||
|
return $table_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build LIKE expression
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _sql_like_expression($expression)
|
||||||
|
{
|
||||||
|
return $expression;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build db-specific query data
|
||||||
|
* @access private
|
||||||
|
*/
|
||||||
|
function _sql_custom_build($stage, $data)
|
||||||
|
{
|
||||||
|
switch ($stage)
|
||||||
|
{
|
||||||
|
case 'FROM':
|
||||||
|
$data = '(' . $data . ')';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
@ -21,7 +21,7 @@ if (!defined('IN_PHPBB'))
|
|||||||
* MySQL 4.1+ or MySQL 5.0+
|
* MySQL 4.1+ or MySQL 5.0+
|
||||||
* @package dbal
|
* @package dbal
|
||||||
*/
|
*/
|
||||||
class phpbb_db_driver_mysqli extends phpbb_db_driver
|
class phpbb_db_driver_mysqli extends phpbb_db_driver_mysql_base
|
||||||
{
|
{
|
||||||
var $multi_insert = true;
|
var $multi_insert = true;
|
||||||
var $connect_error = '';
|
var $connect_error = '';
|
||||||
@ -103,6 +103,7 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Version information about used database
|
* Version information about used database
|
||||||
|
* @param bool $raw if true, only return the fetched sql_server_version
|
||||||
* @param bool $use_cache If true, it is safe to retrieve the value from the cache
|
* @param bool $use_cache If true, it is safe to retrieve the value from the cache
|
||||||
* @return string sql server version
|
* @return string sql server version
|
||||||
*/
|
*/
|
||||||
@ -127,14 +128,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver
|
|||||||
return ($raw) ? $this->sql_server_version : 'MySQL(i) ' . $this->sql_server_version;
|
return ($raw) ? $this->sql_server_version : 'MySQL(i) ' . $this->sql_server_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritDoc}
|
|
||||||
*/
|
|
||||||
public function sql_concatenate($expr1, $expr2)
|
|
||||||
{
|
|
||||||
return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SQL Transaction
|
* SQL Transaction
|
||||||
* @access private
|
* @access private
|
||||||
@ -217,25 +210,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver
|
|||||||
return $this->query_result;
|
return $this->query_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Build LIMIT query
|
|
||||||
*/
|
|
||||||
function _sql_query_limit($query, $total, $offset = 0, $cache_ttl = 0)
|
|
||||||
{
|
|
||||||
$this->query_result = false;
|
|
||||||
|
|
||||||
// if $total is set to 0 we do not want to limit the number of rows
|
|
||||||
if ($total == 0)
|
|
||||||
{
|
|
||||||
// MySQL 4.1+ no longer supports -1 in limit queries
|
|
||||||
$total = '18446744073709551615';
|
|
||||||
}
|
|
||||||
|
|
||||||
$query .= "\n LIMIT " . ((!empty($offset)) ? $offset . ', ' . $total : $total);
|
|
||||||
|
|
||||||
return $this->sql_query($query, $cache_ttl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return number of affected rows
|
* Return number of affected rows
|
||||||
*/
|
*/
|
||||||
@ -327,101 +301,6 @@ class phpbb_db_driver_mysqli extends phpbb_db_driver
|
|||||||
return @mysqli_real_escape_string($this->db_connect_id, $msg);
|
return @mysqli_real_escape_string($this->db_connect_id, $msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the estimated number of rows in a specified table.
|
|
||||||
*
|
|
||||||
* @param string $table_name Table name
|
|
||||||
*
|
|
||||||
* @return string Number of rows in $table_name.
|
|
||||||
* Prefixed with ~ if estimated (otherwise exact).
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
function get_estimated_row_count($table_name)
|
|
||||||
{
|
|
||||||
$table_status = $this->get_table_status($table_name);
|
|
||||||
|
|
||||||
if (isset($table_status['Engine']))
|
|
||||||
{
|
|
||||||
if ($table_status['Engine'] === 'MyISAM')
|
|
||||||
{
|
|
||||||
return $table_status['Rows'];
|
|
||||||
}
|
|
||||||
else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000)
|
|
||||||
{
|
|
||||||
return '~' . $table_status['Rows'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::get_row_count($table_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the exact number of rows in a specified table.
|
|
||||||
*
|
|
||||||
* @param string $table_name Table name
|
|
||||||
*
|
|
||||||
* @return string Exact number of rows in $table_name.
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
*/
|
|
||||||
function get_row_count($table_name)
|
|
||||||
{
|
|
||||||
$table_status = $this->get_table_status($table_name);
|
|
||||||
|
|
||||||
if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM')
|
|
||||||
{
|
|
||||||
return $table_status['Rows'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::get_row_count($table_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets some information about the specified table.
|
|
||||||
*
|
|
||||||
* @param string $table_name Table name
|
|
||||||
*
|
|
||||||
* @return array
|
|
||||||
*
|
|
||||||
* @access protected
|
|
||||||
*/
|
|
||||||
function get_table_status($table_name)
|
|
||||||
{
|
|
||||||
$sql = "SHOW TABLE STATUS
|
|
||||||
LIKE '" . $this->sql_escape($table_name) . "'";
|
|
||||||
$result = $this->sql_query($sql);
|
|
||||||
$table_status = $this->sql_fetchrow($result);
|
|
||||||
$this->sql_freeresult($result);
|
|
||||||
|
|
||||||
return $table_status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build LIKE expression
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
function _sql_like_expression($expression)
|
|
||||||
{
|
|
||||||
return $expression;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build db-specific query data
|
|
||||||
* @access private
|
|
||||||
*/
|
|
||||||
function _sql_custom_build($stage, $data)
|
|
||||||
{
|
|
||||||
switch ($stage)
|
|
||||||
{
|
|
||||||
case 'FROM':
|
|
||||||
$data = '(' . $data . ')';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* return sql error array
|
* return sql error array
|
||||||
* @access private
|
* @access private
|
||||||
|
Loading…
x
Reference in New Issue
Block a user