create the DB connection on demand; some pages don't require one at all thanks to caching
This commit is contained in:
parent
98e7acc529
commit
d313cea8a7
@ -259,30 +259,44 @@ class Database {
|
|||||||
/**
|
/**
|
||||||
* The PDO database connection object, for anyone who wants direct access
|
* The PDO database connection object, for anyone who wants direct access
|
||||||
*/
|
*/
|
||||||
var $db;
|
private $db = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Meta info about the database engine
|
* Meta info about the database engine
|
||||||
*/
|
*/
|
||||||
var $engine = null;
|
private $engine = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The currently active cache engine
|
* The currently active cache engine
|
||||||
*/
|
*/
|
||||||
var $cache = null;
|
private $cache = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new database object using connection info
|
* Don't do anything yet; DB and cache connections will be created as
|
||||||
* stored in the config file
|
* and when they're needed
|
||||||
*/
|
*/
|
||||||
public function Database() {
|
public function Database() {
|
||||||
$this->connect_cache();
|
}
|
||||||
$this->connect_db();
|
|
||||||
|
public function __get($name) {
|
||||||
|
if($name == "engine") {
|
||||||
|
if(is_null($this->engine)) {
|
||||||
|
$this->connect_engine();
|
||||||
|
}
|
||||||
|
return $this->engine;
|
||||||
|
}
|
||||||
|
else if($name == "cache") {
|
||||||
|
if(is_null($this->cache)) {
|
||||||
|
$this->connect_cache();
|
||||||
|
}
|
||||||
|
return $this->cache;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $this->$name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function connect_cache() {
|
private function connect_cache() {
|
||||||
if(!is_null($this->cache)) return;
|
|
||||||
|
|
||||||
$matches = array();
|
$matches = array();
|
||||||
if(defined("CACHE_DSN") && CACHE_DSN && preg_match("#(memcache|apc)://(.*)#", CACHE_DSN, $matches)) {
|
if(defined("CACHE_DSN") && CACHE_DSN && preg_match("#(memcache|apc)://(.*)#", CACHE_DSN, $matches)) {
|
||||||
if($matches[1] == "memcache") {
|
if($matches[1] == "memcache") {
|
||||||
@ -298,8 +312,6 @@ class Database {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function connect_db() {
|
private function connect_db() {
|
||||||
if(!is_null($this->db)) return;
|
|
||||||
|
|
||||||
# FIXME: detect ADODB URI, automatically translate PDO DSN
|
# FIXME: detect ADODB URI, automatically translate PDO DSN
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -319,7 +331,16 @@ class Database {
|
|||||||
if(defined("HIPHOP")) $this->db = new PDO(DATABASE_DSN, $db_user, $db_pass);
|
if(defined("HIPHOP")) $this->db = new PDO(DATABASE_DSN, $db_user, $db_pass);
|
||||||
else $this->db = new PDO(DATABASE_DSN, $db_user, $db_pass, $db_params);
|
else $this->db = new PDO(DATABASE_DSN, $db_user, $db_pass, $db_params);
|
||||||
|
|
||||||
$db_proto = $this->db->getAttribute(PDO::ATTR_DRIVER_NAME);
|
$this->connect_engine();
|
||||||
|
$this->engine->init($this->db);
|
||||||
|
|
||||||
|
$this->db->beginTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function connect_engine() {
|
||||||
|
if(preg_match("/^([^:]*)/", DATABASE_DSN, $matches)) $db_proto=$matches[1];
|
||||||
|
else throw new SCoreException("Can't figure out database engine");
|
||||||
|
|
||||||
if($db_proto === "mysql") {
|
if($db_proto === "mysql") {
|
||||||
$this->engine = new MySQL();
|
$this->engine = new MySQL();
|
||||||
}
|
}
|
||||||
@ -332,8 +353,19 @@ class Database {
|
|||||||
else {
|
else {
|
||||||
die('Unknown PDO driver: '.$db_proto);
|
die('Unknown PDO driver: '.$db_proto);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$this->engine->init($this->db);
|
public function commit() {
|
||||||
|
if(!is_null($this->db)) $this->db->commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rollback() {
|
||||||
|
if(!is_null($this->db)) $this->db->rollback();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function escape($input) {
|
||||||
|
if(is_null($this->db)) $this->connect_db();
|
||||||
|
$this->db->Quote($input);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -341,6 +373,7 @@ class Database {
|
|||||||
*/
|
*/
|
||||||
public function execute($query, $args=array()) {
|
public function execute($query, $args=array()) {
|
||||||
try {
|
try {
|
||||||
|
if(is_null($this->db)) $this->connect_db();
|
||||||
_count_execs($this->db, $query, $args);
|
_count_execs($this->db, $query, $args);
|
||||||
$stmt = $this->db->prepare($query);
|
$stmt = $this->db->prepare($query);
|
||||||
if (!array_key_exists(0, $args)) {
|
if (!array_key_exists(0, $args)) {
|
||||||
|
@ -69,7 +69,7 @@ function url_escape($input) {
|
|||||||
*/
|
*/
|
||||||
function sql_escape($input) {
|
function sql_escape($input) {
|
||||||
global $database;
|
global $database;
|
||||||
return $database->db->Quote($input);
|
return $database->escape($input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user