XSDatabaseDataSource

包 XS.util
继承关系 class XSDatabaseDataSource » XSDataSource
版本 1.0.0
源代码 sdk/php/util/XSDataSource.class.php
SQL 数据库源

Protected 属性

隐去继承来的属性

名称类型描述定义于
arg XSDataSource
inCli XSDataSource
type XSDataSource

Public 方法

隐去继承来的方法

名称描述定义于
__construct() 构造函数 XSDataSource
getCharset() 返回数据库输出字符集 XSDatabaseDataSource
getData() 从数据源中提取一条数据 XSDataSource
instance() 取得数据源对象实例 XSDataSource

Protected 方法

隐去继承来的方法

名称描述定义于
deinit() XSDatabaseDataSource
getDataList() 返回一批数据 XSDatabaseDataSource
init() XSDatabaseDataSource

方法明细

deinit() 方法
protected void deinit()
源码: sdk/php/util/XSDataSource.class.php#L211 (显示)
protected function deinit()
{
    
$this->db->close();
}

getCharset() 方法
public mixed getCharset()
{return} mixed 如果数据库不支持 UTF-8 转换则返回 false
源码: sdk/php/util/XSDataSource.class.php#L138 (显示)
public function getCharset()
{
    if (
$this->db->setUtf8()) {
        return 
'UTF-8';
    }
    return 
parent::getCharset();
}

返回数据库输出字符集

getDataList() 方法
protected 结果数组, getDataList()
{return} 结果数组, 没有更多数据时返回 false
源码: sdk/php/util/XSDataSource.class.php#L220 (显示)
protected function getDataList()
{
    if (
$this->limit <= 0) {
        return 
false;
    }
    
$sql = $this->sql . ' LIMIT ' . min(self::PLIMIT, $this->limit) . ' OFFSET ' . $this->offset;
    
$this->limit -= self::PLIMIT;
    
$this->offset += self::PLIMIT;
    return 
$this->db->query($sql);
}

返回一批数据

init() 方法
protected void init()
源码: sdk/php/util/XSDataSource.class.php#L146 (显示)
protected function init()
{
    if (
strstr($this->type, 'sqlite')) {
        
$pos = strpos($this->type, ':');
        
$param = array('scheme' => substr($this->type, 0, $pos));
        
$param['path'] = substr($this->type, $pos + (substr($this->type, $pos + 1, 2) === '//' ? 3 : 1));
    } elseif (!(
$param = parse_url($this->type))) {
        throw new 
XSException('Wrong format of DB connection parameter');
    } else {
        if (isset(
$param['user'])) {
            
$param['user'] = urldecode($param['user']);
        }
        if (isset(
$param['pass'])) {
            
$param['pass'] = urldecode($param['pass']);
        }
        
$param['path'] = isset($param['path']) ? trim($param['path'], '/') : '';
        if (empty(
$param['path'])) {
            throw new 
XSException('Not contain dbname of DB connection parameter');
        }
        if ((
$pos = strpos($param['path'], '/')) === false) {
            
$param['dbname'] = $param['path'];
        } else {
            
$param['dbname'] = substr($param['path'], 0, $pos);
            
$param['table'] = substr($param['path'], $pos + 1);
        }
    }

    
// get driver
    
$driver = self::getDriverName($param['scheme']);
    
$class = 'XSDatabase' . ucfirst($driver);
    if (!
class_exists($class)) {
        throw new 
XSException("Undefined database driver: '$driver'");
    }
    
$this->db = new $class;
    
$this->db->connect($param);

    
// set SQL & parse limit/offset
    
$this->limit = $this->offset = 0;
    
$sql = $this->arg;
    if (empty(
$sql)) {
        if (!isset(
$param['table'])) {
            throw new 
XSException('Not specified any query SQL or db table');
        }
        
$sql = 'SELECT * FROM ' . $param['table'];
    } elseif (
preg_match('/ limit\s+(\d+)(?:\s*,\s*(\d+)|\s+offset\s+(\d+))?\s*$/i', $sql, $match)) {
        if (isset(
$match[3])) {  // LIMIT xxx OFFSET yyy
            
$this->offset = intval($match[3]);
            
$this->limit = intval($match[1]);
        } elseif (isset(
$match[2])) { // LIMIT yyy, xxx
            
$this->offset = intval($match[1]);
            
$this->limit = intval($match[2]);
        } else { 
// lIMIT xxx
            
$this->limit = intval($match[1]);
        }
        
$sql = substr($sql, 0, strlen($sql) - strlen($match[0]));
    }

    
$this->sql = $sql;
    if (
$this->limit == 0) {
        
$sql = preg_replace('/SELECT\s+.+?\sFROM\s/is', 'SELECT COUNT(*) AS count FROM ', $sql);
        
$res = $this->db->query1($sql);
        
$this->limit = $res['count'] - $this->offset;
    }
}

XSDatabaseDataSource - 类参考 - 迅搜(xunsearch) - 开源免费中文全文搜索引擎

文档说明

XSDatabaseDataSource

包 XS.util
继承关系 class XSDatabaseDataSource » XSDataSource
版本 1.0.0
源代码 sdk/php/util/XSDataSource.class.php
SQL 数据库源

Protected 属性

隐去继承来的属性

名称类型描述定义于
arg XSDataSource
inCli XSDataSource
type XSDataSource

Public 方法

隐去继承来的方法

名称描述定义于
__construct() 构造函数 XSDataSource
getCharset() 返回数据库输出字符集 XSDatabaseDataSource
getData() 从数据源中提取一条数据 XSDataSource
instance() 取得数据源对象实例 XSDataSource

Protected 方法

隐去继承来的方法

名称描述定义于
deinit() XSDatabaseDataSource
getDataList() 返回一批数据 XSDatabaseDataSource
init() XSDatabaseDataSource

方法明细

deinit() 方法
protected void deinit()
源码: sdk/php/util/XSDataSource.class.php#L211 (显示)
protected function deinit()
{
    
$this->db->close();
}

getCharset() 方法
public mixed getCharset()
{return} mixed 如果数据库不支持 UTF-8 转换则返回 false
源码: sdk/php/util/XSDataSource.class.php#L138 (显示)
public function getCharset()
{
    if (
$this->db->setUtf8()) {
        return 
'UTF-8';
    }
    return 
parent::getCharset();
}

返回数据库输出字符集

getDataList() 方法
protected 结果数组, getDataList()
{return} 结果数组, 没有更多数据时返回 false
源码: sdk/php/util/XSDataSource.class.php#L220 (显示)
protected function getDataList()
{
    if (
$this->limit <= 0) {
        return 
false;
    }
    
$sql = $this->sql . ' LIMIT ' . min(self::PLIMIT, $this->limit) . ' OFFSET ' . $this->offset;
    
$this->limit -= self::PLIMIT;
    
$this->offset += self::PLIMIT;
    return 
$this->db->query($sql);
}

返回一批数据

init() 方法
protected void init()
源码: sdk/php/util/XSDataSource.class.php#L146 (显示)
protected function init()
{
    if (
strstr($this->type, 'sqlite')) {
        
$pos = strpos($this->type, ':');
        
$param = array('scheme' => substr($this->type, 0, $pos));
        
$param['path'] = substr($this->type, $pos + (substr($this->type, $pos + 1, 2) === '//' ? 3 : 1));
    } elseif (!(
$param = parse_url($this->type))) {
        throw new 
XSException('Wrong format of DB connection parameter');
    } else {
        if (isset(
$param['user'])) {
            
$param['user'] = urldecode($param['user']);
        }
        if (isset(
$param['pass'])) {
            
$param['pass'] = urldecode($param['pass']);
        }
        
$param['path'] = isset($param['path']) ? trim($param['path'], '/') : '';
        if (empty(
$param['path'])) {
            throw new 
XSException('Not contain dbname of DB connection parameter');
        }
        if ((
$pos = strpos($param['path'], '/')) === false) {
            
$param['dbname'] = $param['path'];
        } else {
            
$param['dbname'] = substr($param['path'], 0, $pos);
            
$param['table'] = substr($param['path'], $pos + 1);
        }
    }

    
// get driver
    
$driver = self::getDriverName($param['scheme']);
    
$class = 'XSDatabase' . ucfirst($driver);
    if (!
class_exists($class)) {
        throw new 
XSException("Undefined database driver: '$driver'");
    }
    
$this->db = new $class;
    
$this->db->connect($param);

    
// set SQL & parse limit/offset
    
$this->limit = $this->offset = 0;
    
$sql = $this->arg;
    if (empty(
$sql)) {
        if (!isset(
$param['table'])) {
            throw new 
XSException('Not specified any query SQL or db table');
        }
        
$sql = 'SELECT * FROM ' . $param['table'];
    } elseif (
preg_match('/ limit\s+(\d+)(?:\s*,\s*(\d+)|\s+offset\s+(\d+))?\s*$/i', $sql, $match)) {
        if (isset(
$match[3])) {  // LIMIT xxx OFFSET yyy
            
$this->offset = intval($match[3]);
            
$this->limit = intval($match[1]);
        } elseif (isset(
$match[2])) { // LIMIT yyy, xxx
            
$this->offset = intval($match[1]);
            
$this->limit = intval($match[2]);
        } else { 
// lIMIT xxx
            
$this->limit = intval($match[1]);
        }
        
$sql = substr($sql, 0, strlen($sql) - strlen($match[0]));
    }

    
$this->sql = $sql;
    if (
$this->limit == 0) {
        
$sql = preg_replace('/SELECT\s+.+?\sFROM\s/is', 'SELECT COUNT(*) AS count FROM ', $sql);
        
$res = $this->db->query1($sql);
        
$this->limit = $res['count'] - $this->offset;
    }
}

留下一条评论吧!

请到论坛 登录 后刷新本页面!