Вход Регистрация
Файл: phpbb/db/driver/mysql_base.php
Строк: 92
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/

namespace phpbbdbdriver;

/**
* Abstract MySQL Database Base Abstraction Layer
*/
abstract class mysql_base extends phpbbdbdriverdriver
{
    
/**
    * {@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);
    }

    
/**
    * {@inheritDoc}
    */
    
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);
    }

    
/**
    * {@inheritDoc}
    */
    
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 NOT LIKE expression
    * @access private
    */
    
function _sql_not_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;
    }
}
Онлайн: 2
Реклама