mirror of https://github.com/IoTcat/ushio-img.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
2.5 KiB
106 lines
2.5 KiB
<?php |
|
if (!defined('__TYPECHO_ROOT_DIR__')) exit; |
|
/** |
|
* Typecho Blog Platform |
|
* |
|
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) |
|
* @license GNU General Public License 2.0 |
|
* @version $Id$ |
|
*/ |
|
|
|
/** |
|
* 数据库Pdo_SQLite适配器 |
|
* |
|
* @package Db |
|
*/ |
|
class Typecho_Db_Adapter_Pdo_SQLite extends Typecho_Db_Adapter_Pdo |
|
{ |
|
/** |
|
* @var sqlite version 2.x |
|
*/ |
|
private $_isSQLite2 = false; |
|
|
|
/** |
|
* 判断适配器是否可用 |
|
* |
|
* @access public |
|
* @return boolean |
|
*/ |
|
public static function isAvailable() |
|
{ |
|
return parent::isAvailable() && in_array('sqlite', PDO::getAvailableDrivers()); |
|
} |
|
|
|
/** |
|
* 初始化数据库 |
|
* |
|
* @param Typecho_Config $config 数据库配置 |
|
* @access public |
|
* @return PDO |
|
*/ |
|
public function init(Typecho_Config $config) |
|
{ |
|
$pdo = new PDO("sqlite:{$config->file}"); |
|
$this->_isSQLite2 = version_compare($pdo->getAttribute(PDO::ATTR_SERVER_VERSION), '3.0.0', '<'); |
|
return $pdo; |
|
} |
|
|
|
/** |
|
* @param resource $resource |
|
* @return array |
|
*/ |
|
public function fetch($resource) |
|
{ |
|
return Typecho_Common::filterSQLite2ColumnName(parent::fetch($resource)); |
|
} |
|
|
|
/** |
|
* @param resource $resource |
|
* @return object |
|
*/ |
|
public function fetchObject($resource) |
|
{ |
|
return (object) $this->fetch($resource); |
|
} |
|
|
|
/** |
|
* 对象引号过滤 |
|
* |
|
* @access public |
|
* @param string $string |
|
* @return string |
|
*/ |
|
public function quoteColumn($string) |
|
{ |
|
return '"' . $string . '"'; |
|
} |
|
|
|
/** |
|
* 合成查询语句 |
|
* |
|
* @access public |
|
* @param array $sql 查询对象词法数组 |
|
* @return string |
|
*/ |
|
public function parseSelect(array $sql) |
|
{ |
|
if (!empty($sql['join'])) { |
|
foreach ($sql['join'] as $val) { |
|
list($table, $condition, $op) = $val; |
|
$sql['table'] = "{$sql['table']} {$op} JOIN {$table} ON {$condition}"; |
|
} |
|
} |
|
|
|
$sql['limit'] = (0 == strlen($sql['limit'])) ? NULL : ' LIMIT ' . $sql['limit']; |
|
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset']; |
|
|
|
$query = 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] . |
|
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset']; |
|
|
|
if ($this->_isSQLite2) { |
|
$query = Typecho_Common::filterSQLite2CountQuery($query); |
|
} |
|
|
|
return $query; |
|
} |
|
}
|
|
|