mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Database should work now. I have introduced some semi-singelton magic in dbo. DboFactory is no longer needed. This is not tested properly, and tests will most likely fail! Follow up soon.
git-svn-id: https://svn.cakephp.org/repo/trunk/cake@274 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
9206b074d3
commit
ba139f10bb
5 changed files with 1309 additions and 1212 deletions
|
@ -19,27 +19,23 @@
|
|||
* Database configuration class.
|
||||
* You can specify multiple configurations for production, development and testing.
|
||||
*/
|
||||
class DATABASE_CONFIG {
|
||||
class DATABASE_CONFIG
|
||||
{
|
||||
var $default = array(
|
||||
'driver' => 'mysql',
|
||||
'host' => 'localhost',
|
||||
'login' => 'www',
|
||||
'password' => '',
|
||||
'database' => 'project_name'
|
||||
);
|
||||
|
||||
function devel () {
|
||||
return array(
|
||||
'driver' => 'mysql',
|
||||
'host' => 'localhost',
|
||||
'login' => 'www',
|
||||
'password' => '',
|
||||
'database' => 'project_name'
|
||||
);
|
||||
}
|
||||
|
||||
function test () {
|
||||
return array(
|
||||
'driver' => 'mysql',
|
||||
'host' => 'localhost',
|
||||
'login' => 'www-test',
|
||||
'password' => '',
|
||||
'database' => 'project_name-test'
|
||||
);
|
||||
}
|
||||
var $test = array(
|
||||
'driver' => 'mysql',
|
||||
'host' => 'localhost',
|
||||
'login' => 'www-test',
|
||||
'password' => '',
|
||||
'database' => 'project_name-test'
|
||||
);
|
||||
}
|
||||
|
||||
?>
|
|
@ -117,14 +117,19 @@ class Controller extends Template
|
|||
|
||||
$model_class = Inflector::singularize($this->name);
|
||||
|
||||
if (class_exists($model_class) && $this->db && ($this->uses === false))
|
||||
//Is this needed?
|
||||
$this->db = DBO::getInstance();
|
||||
|
||||
if (class_exists($model_class) && ($this->uses === false))
|
||||
{
|
||||
$this->$model_class = new $model_class ();
|
||||
$this->$model_class = new $model_class();
|
||||
}
|
||||
elseif ($this->uses)
|
||||
{
|
||||
if (!$this->db)
|
||||
die("Controller::__construct() : ".$this->name." controller needs database access, exiting.");
|
||||
{
|
||||
die("Controller::__construct() : ".$this->name." controller needs database access, exiting.");
|
||||
}
|
||||
|
||||
$uses = is_array($this->uses)? $this->uses: array($this->uses);
|
||||
|
||||
|
|
640
libs/dbo.php
640
libs/dbo.php
|
@ -14,235 +14,312 @@
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Purpose: DBO/ADO
|
||||
*
|
||||
* Description:
|
||||
* A MySQL functions wrapper. Provides ability to get results as arrays
|
||||
* and query logging (with execution time).
|
||||
*
|
||||
* Example usage:
|
||||
*
|
||||
* <code>
|
||||
* require_once('dbo_mysql.php'); // or 'dbo_postgres.php'
|
||||
*
|
||||
* // create and connect the object
|
||||
* $db = new DBO_MySQL(array( // or 'DBO_Postgres'
|
||||
* 'host'=>'localhost',
|
||||
* 'login'=>'username',
|
||||
* 'password'=>'password',
|
||||
* 'database'=>'database'));
|
||||
*
|
||||
* // read the whole query result array (of rows)
|
||||
* $all_rows = $db->all("SELECT a,b,c FROM table");
|
||||
*
|
||||
* // read the first row with debugging on
|
||||
* $first_row_only = $db->one("SELECT a,b,c FROM table WHERE a=1", TRUE);
|
||||
*
|
||||
* // emulate the usual way of reading query results
|
||||
* if ($db->query("SELECT a,b,c FROM table")) {
|
||||
* while ( $row = $db->farr() ) {
|
||||
* print $row['a'].$row['b'].$row['c'];
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* // show a log of all queries, sorted by execution time
|
||||
* $db->showLog(TRUE);
|
||||
* </code>
|
||||
*
|
||||
* @filesource
|
||||
* @author Cake Authors/Developers
|
||||
* @copyright Copyright (c) 2005, Cake Authors/Developers
|
||||
* @link https://developers.nextco.com/cake/wiki/Authors Authors/Developers
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
* @version $Revision$
|
||||
* @modifiedby $LastChangedBy$
|
||||
* @lastmodified $Date$
|
||||
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
||||
*
|
||||
*/
|
||||
* Purpose: DBO/ADO
|
||||
*
|
||||
* Description:
|
||||
* A MySQL functions wrapper. Provides ability to get results as arrays
|
||||
* and query logging (with execution time).
|
||||
*
|
||||
* Example usage:
|
||||
*
|
||||
* <code>
|
||||
* require_once('dbo_mysql.php'); // or 'dbo_postgres.php'
|
||||
*
|
||||
* // create and connect the object
|
||||
* $db = new DBO_MySQL(array( // or 'DBO_Postgres'
|
||||
* 'host'=>'localhost',
|
||||
* 'login'=>'username',
|
||||
* 'password'=>'password',
|
||||
* 'database'=>'database'));
|
||||
*
|
||||
* // read the whole query result array (of rows)
|
||||
* $all_rows = $db->all("SELECT a,b,c FROM table");
|
||||
*
|
||||
* // read the first row with debugging on
|
||||
* $first_row_only = $db->one("SELECT a,b,c FROM table WHERE a=1", TRUE);
|
||||
*
|
||||
* // emulate the usual way of reading query results
|
||||
* if ($db->query("SELECT a,b,c FROM table")) {
|
||||
* while ( $row = $db->farr() ) {
|
||||
* print $row['a'].$row['b'].$row['c'];
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* // show a log of all queries, sorted by execution time
|
||||
* $db->showLog(TRUE);
|
||||
* </code>
|
||||
*
|
||||
* @filesource
|
||||
* @author Cake Authors/Developers
|
||||
* @copyright Copyright (c) 2005, Cake Authors/Developers
|
||||
* @link https://developers.nextco.com/cake/wiki/Authors Authors/Developers
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
* @version $Revision$
|
||||
* @modifiedby $LastChangedBy$
|
||||
* @lastmodified $Date$
|
||||
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
*/
|
||||
* Enter description here...
|
||||
*
|
||||
*/
|
||||
uses('object');
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
*
|
||||
*/
|
||||
class DBO extends Object {
|
||||
* Enter description here...
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
*/
|
||||
class DBO extends Object
|
||||
{
|
||||
|
||||
/**
|
||||
* Are we connected to the database?
|
||||
*
|
||||
* @var boolean
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* Are we connected to the database?
|
||||
*
|
||||
* @var boolean
|
||||
* @access public
|
||||
*/
|
||||
var $connected=FALSE;
|
||||
|
||||
/**
|
||||
* Connection configuration.
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* Connection configuration.
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
var $config=FALSE;
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var boolean
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var boolean
|
||||
* @access public
|
||||
*/
|
||||
var $debug=FALSE;
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var boolean
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var boolean
|
||||
* @access public
|
||||
*/
|
||||
var $fullDebug=FALSE;
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
var $error=NULL;
|
||||
|
||||
/**
|
||||
* String to hold how many rows were affected by the last SQL operation.
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* String to hold how many rows were affected by the last SQL operation.
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
var $affected=NULL;
|
||||
|
||||
/**
|
||||
* Number of rows in current resultset
|
||||
*
|
||||
* @var int
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* Number of rows in current resultset
|
||||
*
|
||||
* @var int
|
||||
* @access public
|
||||
*/
|
||||
var $numRows=NULL;
|
||||
|
||||
/**
|
||||
* Time the last query took
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
/**
|
||||
* Time the last query took
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
var $took=NULL;
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_conn=NULL;
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_conn=NULL;
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_result=NULL;
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_result=NULL;
|
||||
|
||||
/**
|
||||
* Queries count.
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_queriesCnt=0;
|
||||
/**
|
||||
* Queries count.
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_queriesCnt=0;
|
||||
|
||||
/**
|
||||
* Total duration of all queries.
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_queriesTime=NULL;
|
||||
/**
|
||||
* Total duration of all queries.
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_queriesTime=NULL;
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access private
|
||||
*/
|
||||
var $_queriesLog=array();
|
||||
|
||||
/**
|
||||
* Maximum number of items in query log, to prevent query log taking over
|
||||
* too much memory on large amounts of queries -- I we've had problems at
|
||||
* >6000 queries on one system.
|
||||
*
|
||||
* @var int Maximum number of queries in the queries log.
|
||||
* @access private
|
||||
*/
|
||||
/**
|
||||
* Maximum number of items in query log, to prevent query log taking over
|
||||
* too much memory on large amounts of queries -- I we've had problems at
|
||||
* >6000 queries on one system.
|
||||
*
|
||||
* @var int Maximum number of queries in the queries log.
|
||||
* @access private
|
||||
*/
|
||||
var $_queriesLogMax=200;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor. Sets the level of debug for dbo (fullDebug or debug).
|
||||
*
|
||||
* @param array $config
|
||||
* @return unknown
|
||||
*/
|
||||
function __construct ($config=NULL) {
|
||||
/**
|
||||
* Constructor. Sets the level of debug for dbo (fullDebug or debug).
|
||||
*
|
||||
* @param array $config
|
||||
* @return unknown
|
||||
*/
|
||||
function __construct($config=NULL)
|
||||
{
|
||||
$this->debug = DEBUG > 0;
|
||||
$this->fullDebug = DEBUG > 1;
|
||||
parent::__construct();
|
||||
return $this->connect($config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor. Closes connection to the database.
|
||||
*
|
||||
*/
|
||||
function __destructor () {
|
||||
/**
|
||||
* Destructor. Closes connection to the database.
|
||||
*
|
||||
*/
|
||||
function __destructor()
|
||||
{
|
||||
$this->close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string with a USE [databasename] SQL statement.
|
||||
*
|
||||
* @param string $db_name Name of database to use
|
||||
* @return unknown Result of the query
|
||||
*/
|
||||
function useDb ($db_name) {
|
||||
/**
|
||||
* A semi-singelton. Returns actual instance, or creates a new one with given config.
|
||||
*
|
||||
* @param string $config Name of key of $dbConfig array to be used.
|
||||
* @return mixed
|
||||
*/
|
||||
function getInstance($config = null)
|
||||
{
|
||||
static $instance;
|
||||
|
||||
if (!isset($instance))
|
||||
{
|
||||
if ($config == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$configs = get_class_vars('DATABASE_CONFIG');
|
||||
$config = $configs[$config];
|
||||
|
||||
// special case for AdoDB -- driver name in the form of 'adodb-drivername'
|
||||
if (preg_match('#^adodb[\-_](.*)$#i', $config['driver'], $res))
|
||||
{
|
||||
uses('dbo/dbo_adodb');
|
||||
$config['driver'] = $res[1];
|
||||
|
||||
$instance = array(DBO_AdoDB($config));
|
||||
}
|
||||
// special case for PEAR:DB -- driver name in the form of 'pear-drivername'
|
||||
elseif (preg_match('#^pear[\-_](.*)$#i', $config['driver'], $res))
|
||||
{
|
||||
uses('dbo/dbo_pear');
|
||||
$config['driver'] = $res[1];
|
||||
|
||||
$instance = array(new DBO_Pear($config));
|
||||
}
|
||||
// regular, Cake-native db drivers
|
||||
else
|
||||
{
|
||||
$db_driver_class = 'DBO_'.$config['driver'];
|
||||
$db_driver_fn = LIBS.strtolower('dbo'.DS.$db_driver_class.'.php');
|
||||
|
||||
if (file_exists($db_driver_fn))
|
||||
{
|
||||
uses(strtolower('dbo'.DS.$db_driver_class));
|
||||
$instance = array(new $db_driver_class($config));
|
||||
}
|
||||
else
|
||||
{
|
||||
trigger_error(ERROR_UNKNOWN_DATABASE_DRIVER, E_USER_ERROR);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $instance[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets config to use. If there is already a connection, close it first.
|
||||
*
|
||||
* @param string $configName Name of the config array key to use.
|
||||
* @return mixed
|
||||
*/
|
||||
function setConfig($config)
|
||||
{
|
||||
if ($this->connected === true)
|
||||
{
|
||||
$this->close();
|
||||
}
|
||||
|
||||
return $this->getInstance($config);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string with a USE [databasename] SQL statement.
|
||||
*
|
||||
* @param string $db_name Name of database to use
|
||||
* @return unknown Result of the query
|
||||
*/
|
||||
function useDb($db_name)
|
||||
{
|
||||
return $this->query("USE {$db_name}");
|
||||
}
|
||||
|
||||
/**
|
||||
* Disconnects database, kills the connection and says the connection is closed, and if DEBUG is turned on, the log for this object is shown.
|
||||
*
|
||||
*/
|
||||
function close () {
|
||||
/**
|
||||
* Disconnects database, kills the connection and says the connection is closed, and if DEBUG is turned on, the log for this object is shown.
|
||||
*
|
||||
*/
|
||||
function close ()
|
||||
{
|
||||
if ($this->fullDebug) $this->showLog();
|
||||
$this->disconnect();
|
||||
$this->_conn = NULL;
|
||||
$this->connected = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prepares a value, or an array of values for database queries by quoting and escaping them.
|
||||
*
|
||||
* @param mixed $data A value or an array of values to prepare.
|
||||
* @return mixed Prepared value or array of values.
|
||||
*/
|
||||
/**
|
||||
* Prepares a value, or an array of values for database queries by quoting and escaping them.
|
||||
*
|
||||
* @param mixed $data A value or an array of values to prepare.
|
||||
* @return mixed Prepared value or array of values.
|
||||
*/
|
||||
function prepare ($data)
|
||||
{
|
||||
if (is_array($data))
|
||||
|
@ -265,25 +342,26 @@ class DBO extends Object {
|
|||
return array_map('strtolower', $this->tablesList());
|
||||
}
|
||||
|
||||
/**
|
||||
* Executes given SQL statement.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return unknown
|
||||
*/
|
||||
function rawQuery ($sql) {
|
||||
/**
|
||||
* Executes given SQL statement.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return unknown
|
||||
*/
|
||||
function rawQuery ($sql)
|
||||
{
|
||||
$this->took = $this->error = $this->numRows = false;
|
||||
return $this->execute($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Queries the database with given SQL statement, and obtains some metadata about the result
|
||||
* (rows affected, timing, any errors, number of rows in resultset). The query is also logged.
|
||||
* If DEBUG is set, the log is shown all the time, else it is only shown on errors.
|
||||
*
|
||||
* @param string $sql
|
||||
* @return unknown
|
||||
*/
|
||||
/**
|
||||
* Queries the database with given SQL statement, and obtains some metadata about the result
|
||||
* (rows affected, timing, any errors, number of rows in resultset). The query is also logged.
|
||||
* If DEBUG is set, the log is shown all the time, else it is only shown on errors.
|
||||
*
|
||||
* @param string $sql
|
||||
* @return unknown
|
||||
*/
|
||||
function query($sql)
|
||||
{
|
||||
$t = getMicrotime();
|
||||
|
@ -294,17 +372,17 @@ class DBO extends Object {
|
|||
$this->numRows = $this->lastNumRows($this->_result);
|
||||
$this->logQuery($sql);
|
||||
if (($this->debug && $this->error) || ($this->fullDebug))
|
||||
$this->showQuery($sql);
|
||||
$this->showQuery($sql);
|
||||
|
||||
return $this->error? false: $this->_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a single row of results from the _last_ SQL query.
|
||||
*
|
||||
* @param resource $res
|
||||
* @return array A single row of results
|
||||
*/
|
||||
/**
|
||||
* Returns a single row of results from the _last_ SQL query.
|
||||
*
|
||||
* @param resource $res
|
||||
* @return array A single row of results
|
||||
*/
|
||||
function farr ($assoc=false)
|
||||
{
|
||||
if ($assoc === false)
|
||||
|
@ -317,25 +395,28 @@ class DBO extends Object {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a single row of results for a _given_ SQL query.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return array A single row of results
|
||||
*/
|
||||
function one ($sql) {
|
||||
/**
|
||||
* Returns a single row of results for a _given_ SQL query.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return array A single row of results
|
||||
*/
|
||||
function one ($sql)
|
||||
{
|
||||
return $this->query($sql)? $this->farr(): false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of all result rows for a given SQL query.
|
||||
* Returns false if no rows matched.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return array Array of resultset rows, or false if no rows matched
|
||||
*/
|
||||
function all ($sql) {
|
||||
if($this->query($sql)) {
|
||||
/**
|
||||
* Returns an array of all result rows for a given SQL query.
|
||||
* Returns false if no rows matched.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return array Array of resultset rows, or false if no rows matched
|
||||
*/
|
||||
function all ($sql)
|
||||
{
|
||||
if($this->query($sql))
|
||||
{
|
||||
$out=array();
|
||||
while ($item = $this->farr(null, true))
|
||||
{
|
||||
|
@ -343,104 +424,117 @@ class DBO extends Object {
|
|||
}
|
||||
return $out;
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a single field of the first of query results for a given SQL query, or false if empty.
|
||||
*
|
||||
* @param string $name Name of the field
|
||||
* @param string $sql SQL query
|
||||
* @return unknown
|
||||
*/
|
||||
function field ($name, $sql) {
|
||||
/**
|
||||
* Returns a single field of the first of query results for a given SQL query, or false if empty.
|
||||
*
|
||||
* @param string $name Name of the field
|
||||
* @param string $sql SQL query
|
||||
* @return unknown
|
||||
*/
|
||||
function field ($name, $sql)
|
||||
{
|
||||
$data = $this->one($sql);
|
||||
return empty($data[$name])? false: $data[$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the specified table contains any record matching specified SQL
|
||||
*
|
||||
* @param string $table Name of table to look in
|
||||
* @param string $sql SQL WHERE clause (condition only, not the "WHERE" part)
|
||||
* @return boolean True if the table has a matching record, else false
|
||||
*/
|
||||
function hasAny($table, $sql) {
|
||||
/**
|
||||
* Checks if the specified table contains any record matching specified SQL
|
||||
*
|
||||
* @param string $table Name of table to look in
|
||||
* @param string $sql SQL WHERE clause (condition only, not the "WHERE" part)
|
||||
* @return boolean True if the table has a matching record, else false
|
||||
*/
|
||||
function hasAny($table, $sql)
|
||||
{
|
||||
$out = $this->one("SELECT COUNT(*) AS count FROM {$table}".($sql? " WHERE {$sql}":""));
|
||||
return is_array($out)? $out['count']: false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if it's connected to the database
|
||||
*
|
||||
* @return boolean True if the database is connected, else false
|
||||
*/
|
||||
function isConnected() {
|
||||
/**
|
||||
* Checks if it's connected to the database
|
||||
*
|
||||
* @return boolean True if the database is connected, else false
|
||||
*/
|
||||
function isConnected()
|
||||
{
|
||||
return $this->connected;
|
||||
}
|
||||
|
||||
/**
|
||||
* Outputs the contents of the log.
|
||||
*
|
||||
* @param boolean $sorted
|
||||
*/
|
||||
function showLog($sorted=false) {
|
||||
/**
|
||||
* Outputs the contents of the log.
|
||||
*
|
||||
* @param boolean $sorted
|
||||
*/
|
||||
function showLog($sorted=false)
|
||||
{
|
||||
$log = $sorted?
|
||||
sortByKey($this->_queriesLog, 'took', 'desc', SORT_NUMERIC):
|
||||
$this->_queriesLog;
|
||||
sortByKey($this->_queriesLog, 'took', 'desc', SORT_NUMERIC):
|
||||
$this->_queriesLog;
|
||||
|
||||
print("<table border=1>\n<tr><th colspan=7>{$this->_queriesCnt} queries took {$this->_queriesTime} ms</th></tr>\n");
|
||||
print("<tr><td>Nr</td><td>Query</td><td>Error</td><td>Affected</td><td>Num. rows</td><td>Took (ms)</td></tr>\n");
|
||||
|
||||
foreach($log AS $k=>$i) {
|
||||
foreach($log AS $k=>$i)
|
||||
{
|
||||
print("<tr><td>".($k+1)."</td><td>{$i['query']}</td><td>{$i['error']}</td><td align='right'>{$i['affected']}</td><td align='right'>{$i['numRows']}</td><td align='right'>{$i['took']}</td></tr>\n");
|
||||
}
|
||||
|
||||
print("</table>\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Log given SQL query.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
*/
|
||||
function logQuery($sql) {
|
||||
/**
|
||||
* Log given SQL query.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
*/
|
||||
function logQuery($sql)
|
||||
{
|
||||
$this->_queriesCnt++;
|
||||
$this->_queriesTime += $this->took;
|
||||
|
||||
$this->_queriesLog[] = array(
|
||||
'query'=>$sql,
|
||||
'error'=>$this->error,
|
||||
'affected'=>$this->affected,
|
||||
'numRows'=>$this->numRows,
|
||||
'took'=>$this->took
|
||||
);
|
||||
'query'=>$sql,
|
||||
'error'=>$this->error,
|
||||
'affected'=>$this->affected,
|
||||
'numRows'=>$this->numRows,
|
||||
'took'=>$this->took
|
||||
);
|
||||
|
||||
if (count($this->_queriesLog) > $this->_queriesLogMax) {
|
||||
if (count($this->_queriesLog) > $this->_queriesLogMax)
|
||||
{
|
||||
array_pop($this->_queriesLog);
|
||||
}
|
||||
|
||||
if ($this->error)
|
||||
false; // shouldn't we be logging errors somehow?
|
||||
return false; // shouldn't we be logging errors somehow?
|
||||
}
|
||||
|
||||
/**
|
||||
* Output information about an SQL query. The SQL statement, number of rows in resultset,
|
||||
* and execution time in microseconds. If the query fails, and error is output instead.
|
||||
*
|
||||
* @param string $sql
|
||||
*/
|
||||
function showQuery($sql) {
|
||||
/**
|
||||
* Output information about an SQL query. The SQL statement, number of rows in resultset,
|
||||
* and execution time in microseconds. If the query fails, and error is output instead.
|
||||
*
|
||||
* @param string $sql
|
||||
*/
|
||||
function showQuery($sql)
|
||||
{
|
||||
$error = $this->error;
|
||||
|
||||
if (strlen($sql)>200 && !$this->fullDebug)
|
||||
{
|
||||
$sql = substr($sql, 0, 200) .'[...]';
|
||||
}
|
||||
|
||||
if ($this->debug || $error) {
|
||||
if ($this->debug || $error)
|
||||
{
|
||||
print("<p style=\"text-align:left\"><b>Query:</b> {$sql} <small>[Aff:{$this->affected} Num:{$this->numRows} Took:{$this->took}ms]</small>");
|
||||
if($error) {
|
||||
if($error)
|
||||
{
|
||||
print("<br /><span style=\"color:Red;text-align:left\"><b>ERROR:</b> {$this->error}</span>");
|
||||
}
|
||||
print('</p>');
|
||||
|
|
514
libs/model.php
514
libs/model.php
|
@ -14,152 +14,152 @@
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
* Purpose: Model
|
||||
* DBO-backed object data model, loosely based on RoR (www.rubyonrails.com).
|
||||
* Automatically selects a database table name based on a pluralized lowercase object class name
|
||||
* (i.e. class 'User' => table 'users'; class 'Man' => table 'men')
|
||||
* The table is required to have at least 'id auto_increment', 'created datetime',
|
||||
* and 'modified datetime' fields
|
||||
*
|
||||
* To do:
|
||||
* - schema-related cross-table ($has_one, $has_many, $belongs_to)
|
||||
*
|
||||
* @filesource
|
||||
* @author Cake Authors/Developers
|
||||
* @copyright Copyright (c) 2005, Cake Authors/Developers
|
||||
* @link https://developers.nextco.com/cake/wiki/Authors Authors/Developers
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
* @version $Revision$
|
||||
* @modifiedby $LastChangedBy$
|
||||
* @lastmodified $Date$
|
||||
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
||||
*/
|
||||
* Purpose: Model
|
||||
* DBO-backed object data model, loosely based on RoR (www.rubyonrails.com).
|
||||
* Automatically selects a database table name based on a pluralized lowercase object class name
|
||||
* (i.e. class 'User' => table 'users'; class 'Man' => table 'men')
|
||||
* The table is required to have at least 'id auto_increment', 'created datetime',
|
||||
* and 'modified datetime' fields
|
||||
*
|
||||
* To do:
|
||||
* - schema-related cross-table ($has_one, $has_many, $belongs_to)
|
||||
*
|
||||
* @filesource
|
||||
* @author Cake Authors/Developers
|
||||
* @copyright Copyright (c) 2005, Cake Authors/Developers
|
||||
* @link https://developers.nextco.com/cake/wiki/Authors Authors/Developers
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
* @version $Revision$
|
||||
* @modifiedby $LastChangedBy$
|
||||
* @lastmodified $Date$
|
||||
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
|
||||
*/
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*/
|
||||
* Enter description here...
|
||||
*/
|
||||
uses('object', 'validators', 'inflector');
|
||||
|
||||
/**
|
||||
* DBO-backed object data model, loosely based on RoR (www.rubyonrails.com).
|
||||
* Automatically selects a database table name based on a pluralized lowercase object class name
|
||||
* (i.e. class 'User' => table 'users'; class 'Man' => table 'men')
|
||||
* The table is required to have at least 'id auto_increment', 'created datetime',
|
||||
* and 'modified datetime' fields.
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
*
|
||||
*/
|
||||
* DBO-backed object data model, loosely based on RoR (www.rubyonrails.com).
|
||||
* Automatically selects a database table name based on a pluralized lowercase object class name
|
||||
* (i.e. class 'User' => table 'users'; class 'Man' => table 'men')
|
||||
* The table is required to have at least 'id auto_increment', 'created datetime',
|
||||
* and 'modified datetime' fields.
|
||||
*
|
||||
* @package cake
|
||||
* @subpackage cake.libs
|
||||
* @since Cake v 0.2.9
|
||||
*
|
||||
*/
|
||||
class Model extends Object
|
||||
{
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
var $parent = false;
|
||||
|
||||
/**
|
||||
* Custom database table name
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
* Custom database table name
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
var $use_table = false;
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
* Enter description here...
|
||||
*
|
||||
* @var unknown_type
|
||||
* @access public
|
||||
*/
|
||||
var $id = false;
|
||||
|
||||
/**
|
||||
* Container for the data that this model gets from persistent storage (the database).
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
* Container for the data that this model gets from persistent storage (the database).
|
||||
*
|
||||
* @var array
|
||||
* @access public
|
||||
*/
|
||||
var $data = array();
|
||||
|
||||
/**
|
||||
* Table name for this Model.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
* Table name for this Model.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
var $table = false;
|
||||
// private
|
||||
/**
|
||||
* Table metadata
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
* Table metadata
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
var $_table_info = null;
|
||||
|
||||
/**
|
||||
* Array of other Models this Model references in a one-to-many relationship.
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
* Array of other Models this Model references in a one-to-many relationship.
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
var $_oneToMany = array();
|
||||
|
||||
/**
|
||||
* Array of other Models this Model references in a one-to-one relationship.
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
* Array of other Models this Model references in a one-to-one relationship.
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
var $_oneToOne = array();
|
||||
|
||||
/**
|
||||
* Array of other Models this Model references in a has-many relationship.
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
* Array of other Models this Model references in a has-many relationship.
|
||||
*
|
||||
* @var array
|
||||
* @access private
|
||||
*/
|
||||
var $_hasMany = array();
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* append entries for validation as ('field_name' => '/^perl_compat_regexp$/') that has to match with preg_match()
|
||||
* validate with Model::validate()
|
||||
* @var array
|
||||
*/
|
||||
* Enter description here...
|
||||
*
|
||||
* append entries for validation as ('field_name' => '/^perl_compat_regexp$/') that has to match with preg_match()
|
||||
* validate with Model::validate()
|
||||
* @var array
|
||||
*/
|
||||
var $validate = array();
|
||||
|
||||
/**
|
||||
* Append entries for validation as ('field_name' => '/^perl_compat_regexp$/') that has to match with preg_match()
|
||||
* validate with Model::validate()
|
||||
* @var array
|
||||
*/
|
||||
* Append entries for validation as ('field_name' => '/^perl_compat_regexp$/') that has to match with preg_match()
|
||||
* validate with Model::validate()
|
||||
* @var array
|
||||
*/
|
||||
var $validationErrors = null;
|
||||
|
||||
/**
|
||||
* Constructor. Binds the Model's database table to the object.
|
||||
*
|
||||
* @param unknown_type $id
|
||||
* @param string $table Database table to use.
|
||||
* @param unknown_type $db Database connection object.
|
||||
*/
|
||||
* Constructor. Binds the Model's database table to the object.
|
||||
*
|
||||
* @param unknown_type $id
|
||||
* @param string $table Database table to use.
|
||||
* @param unknown_type $db Database connection object.
|
||||
*/
|
||||
function __construct ($id=false, $table=null, $db=null)
|
||||
{
|
||||
global $DB;
|
||||
|
||||
$this->db = $db? $db: $DB;
|
||||
$this->db = $db? $db: DBO::getInstance();
|
||||
|
||||
if ($id)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
$table_name = $table? $table: ($this->use_table? $this->use_table: Inflector::tableize(get_class($this)));
|
||||
$this->useTable ($table_name);
|
||||
|
@ -168,10 +168,10 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Creates has-many relationships, and then call relink.
|
||||
*
|
||||
* @see relink()
|
||||
*/
|
||||
* Creates has-many relationships, and then call relink.
|
||||
*
|
||||
* @see relink()
|
||||
*/
|
||||
function createLinks ()
|
||||
{
|
||||
if (!empty($this->hasMany))
|
||||
|
@ -188,10 +188,10 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Updates this model's many-to-one links, by emptying the links list, and then linkManyToOne again.
|
||||
*
|
||||
* @see linkManyToOne()
|
||||
*/
|
||||
* Updates this model's many-to-one links, by emptying the links list, and then linkManyToOne again.
|
||||
*
|
||||
* @see linkManyToOne()
|
||||
*/
|
||||
function relink ()
|
||||
{
|
||||
foreach ($this->_hasMany as $model)
|
||||
|
@ -203,13 +203,13 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Creates a many-to-one link for given $model_name.
|
||||
* First it gets Inflector to derive a table name and a foreign key field name.
|
||||
* Then, these are stored in the Model.
|
||||
*
|
||||
* @param string $model_name Name of model to link to
|
||||
* @param unknown_type $value Defaults to NULL.
|
||||
*/
|
||||
* Creates a many-to-one link for given $model_name.
|
||||
* First it gets Inflector to derive a table name and a foreign key field name.
|
||||
* Then, these are stored in the Model.
|
||||
*
|
||||
* @param string $model_name Name of model to link to
|
||||
* @param unknown_type $value Defaults to NULL.
|
||||
*/
|
||||
function linkManyToOne ($model_name, $value=null)
|
||||
{
|
||||
$table_name = Inflector::tableize($model_name);
|
||||
|
@ -218,19 +218,19 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Removes all one-to-many links to other Models.
|
||||
*
|
||||
*/
|
||||
* Removes all one-to-many links to other Models.
|
||||
*
|
||||
*/
|
||||
function clearLinks ()
|
||||
{
|
||||
$this->_one_to_many = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a custom table for your controller class. Used by your controller to select a database table.
|
||||
*
|
||||
* @param string $table_name Name of the custom table
|
||||
*/
|
||||
* Sets a custom table for your controller class. Used by your controller to select a database table.
|
||||
*
|
||||
* @param string $table_name Name of the custom table
|
||||
*/
|
||||
function useTable ($table_name)
|
||||
{
|
||||
if (!in_array(strtolower($table_name), $this->db->tables()))
|
||||
|
@ -247,17 +247,17 @@ class Model extends Object
|
|||
|
||||
|
||||
/**
|
||||
* This function does two things: 1) it scans the array $one for they key 'id',
|
||||
* and if that's found, it sets the current id to the value of $one[id].
|
||||
* For all other keys than 'id' the keys and values of $one are copied to the 'data' property of this object.
|
||||
* 2) Returns an array with all of $one's keys and values.
|
||||
* (Alternative indata: two strings, which are mangled to
|
||||
* a one-item, two-dimensional array using $one for a key and $two as its value.)
|
||||
*
|
||||
* @param mixed $one Array or string of data
|
||||
* @param string $two Value string for the alternative indata method
|
||||
* @return unknown
|
||||
*/
|
||||
* This function does two things: 1) it scans the array $one for they key 'id',
|
||||
* and if that's found, it sets the current id to the value of $one[id].
|
||||
* For all other keys than 'id' the keys and values of $one are copied to the 'data' property of this object.
|
||||
* 2) Returns an array with all of $one's keys and values.
|
||||
* (Alternative indata: two strings, which are mangled to
|
||||
* a one-item, two-dimensional array using $one for a key and $two as its value.)
|
||||
*
|
||||
* @param mixed $one Array or string of data
|
||||
* @param string $two Value string for the alternative indata method
|
||||
* @return unknown
|
||||
*/
|
||||
function set ($one, $two=null)
|
||||
{
|
||||
$this->validationErrors = null;
|
||||
|
@ -279,10 +279,10 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets current Model id to given $id.
|
||||
*
|
||||
* @param int $id Id
|
||||
*/
|
||||
* Sets current Model id to given $id.
|
||||
*
|
||||
* @param int $id Id
|
||||
*/
|
||||
function setId ($id)
|
||||
{
|
||||
$this->id = $id;
|
||||
|
@ -290,10 +290,10 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns an array of table metadata (column names and types) from the database.
|
||||
*
|
||||
* @return array Array of table metadata
|
||||
*/
|
||||
* Returns an array of table metadata (column names and types) from the database.
|
||||
*
|
||||
* @return array Array of table metadata
|
||||
*/
|
||||
function loadInfo ()
|
||||
{
|
||||
if (empty($this->_table_info))
|
||||
|
@ -302,12 +302,12 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if given field name exists in this Model's database table.
|
||||
* Starts by loading the metadata into the private property table_info if that is not already set.
|
||||
*
|
||||
* @param string $name Name of table to look in
|
||||
* @return boolean
|
||||
*/
|
||||
* Returns true if given field name exists in this Model's database table.
|
||||
* Starts by loading the metadata into the private property table_info if that is not already set.
|
||||
*
|
||||
* @param string $name Name of table to look in
|
||||
* @return boolean
|
||||
*/
|
||||
function hasField ($name)
|
||||
{
|
||||
if (empty($this->_table_info)) $this->loadInfo();
|
||||
|
@ -315,11 +315,11 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a list of fields from the database
|
||||
*
|
||||
* @param mixed $fields String of single fieldname, or an array of fieldnames.
|
||||
* @return array Array of database fields
|
||||
*/
|
||||
* Returns a list of fields from the database
|
||||
*
|
||||
* @param mixed $fields String of single fieldname, or an array of fieldnames.
|
||||
* @return array Array of database fields
|
||||
*/
|
||||
function read ($fields=null)
|
||||
{
|
||||
$this->validationErrors = null;
|
||||
|
@ -327,12 +327,12 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns contents of a field in a query matching given conditions.
|
||||
*
|
||||
* @param string $name Name of field to get
|
||||
* @param string $conditions SQL conditions (defaults to NULL)
|
||||
* @return field contents
|
||||
*/
|
||||
* Returns contents of a field in a query matching given conditions.
|
||||
*
|
||||
* @param string $name Name of field to get
|
||||
* @param string $conditions SQL conditions (defaults to NULL)
|
||||
* @return field contents
|
||||
*/
|
||||
function field ($name, $conditions=null, $order=null)
|
||||
{
|
||||
if ($conditions)
|
||||
|
@ -359,24 +359,24 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Saves a single field to the database.
|
||||
*
|
||||
* @param string $name Name of the table field
|
||||
* @param mixed $value Value of the field
|
||||
* @return boolean True on success save
|
||||
*/
|
||||
* Saves a single field to the database.
|
||||
*
|
||||
* @param string $name Name of the table field
|
||||
* @param mixed $value Value of the field
|
||||
* @return boolean True on success save
|
||||
*/
|
||||
function saveField($name, $value)
|
||||
{
|
||||
return $this->save(array($name=>$value), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves model data to the database.
|
||||
*
|
||||
* @param array $data Data to save.
|
||||
* @param boolean $validate
|
||||
* @return boolean success
|
||||
*/
|
||||
* Saves model data to the database.
|
||||
*
|
||||
* @param array $data Data to save.
|
||||
* @param boolean $validate
|
||||
* @return boolean success
|
||||
*/
|
||||
function save ($data=null, $validate=true)
|
||||
{
|
||||
if ($data) $this->set($data);
|
||||
|
@ -452,23 +452,23 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Synonym for del().
|
||||
*
|
||||
* @param mixed $id
|
||||
* @see function del
|
||||
* @return boolean True on success
|
||||
*/
|
||||
* Synonym for del().
|
||||
*
|
||||
* @param mixed $id
|
||||
* @see function del
|
||||
* @return boolean True on success
|
||||
*/
|
||||
function remove ($id=null)
|
||||
{
|
||||
return $this->del($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes record for given id. If no id is given, the current id is used. Returns true on success.
|
||||
*
|
||||
* @param mixed $id Id of database record to delete
|
||||
* @return boolean True on success
|
||||
*/
|
||||
* Removes record for given id. If no id is given, the current id is used. Returns true on success.
|
||||
*
|
||||
* @param mixed $id Id of database record to delete
|
||||
* @return boolean True on success
|
||||
*/
|
||||
function del ($id=null)
|
||||
{
|
||||
if ($id) $this->id = $id;
|
||||
|
@ -482,10 +482,10 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns true if a record with set id exists.
|
||||
*
|
||||
* @return boolean True if such a record exists
|
||||
*/
|
||||
* Returns true if a record with set id exists.
|
||||
*
|
||||
* @return boolean True if such a record exists
|
||||
*/
|
||||
function exists ()
|
||||
{
|
||||
return $this->id? $this->db->hasAny($this->table, "id = '{$this->id}'"): false;
|
||||
|
@ -493,10 +493,10 @@ class Model extends Object
|
|||
|
||||
|
||||
/**
|
||||
* Returns true if a record that meets given conditions exists
|
||||
*
|
||||
* @return boolean True if such a record exists
|
||||
*/
|
||||
* Returns true if a record that meets given conditions exists
|
||||
*
|
||||
* @return boolean True if such a record exists
|
||||
*/
|
||||
function hasAny ($conditions = null)
|
||||
{
|
||||
return $this->findCount($conditions);
|
||||
|
@ -504,13 +504,13 @@ class Model extends Object
|
|||
|
||||
|
||||
/**
|
||||
* Return a single row as a resultset array.
|
||||
*
|
||||
* @param string $conditions SQL conditions
|
||||
* @param mixed $fields Either a single string of a field name, or an array of field names
|
||||
* @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC")
|
||||
* @return array Array of records
|
||||
*/
|
||||
* Return a single row as a resultset array.
|
||||
*
|
||||
* @param string $conditions SQL conditions
|
||||
* @param mixed $fields Either a single string of a field name, or an array of field names
|
||||
* @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC")
|
||||
* @return array Array of records
|
||||
*/
|
||||
function find ($conditions = null, $fields = null, $order = null)
|
||||
{
|
||||
$data = $this->findAll($conditions, $fields, $order, 1);
|
||||
|
@ -518,9 +518,9 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/** parses conditions array (or just passes it if it's a string)
|
||||
* @return string
|
||||
*
|
||||
*/
|
||||
* @return string
|
||||
*
|
||||
*/
|
||||
function parseConditions ($conditions)
|
||||
{
|
||||
if (is_string($conditions))
|
||||
|
@ -543,15 +543,15 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a resultset array with specified fields from database matching given conditions.
|
||||
*
|
||||
* @param mixed $conditions SQL conditions as a string or as an array('field'=>'value',...)
|
||||
* @param mixed $fields Either a single string of a field name, or an array of field names
|
||||
* @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC")
|
||||
* @param int $limit SQL LIMIT clause, for calculating items per page
|
||||
* @param int $page Page number
|
||||
* @return array Array of records
|
||||
*/
|
||||
* Returns a resultset array with specified fields from database matching given conditions.
|
||||
*
|
||||
* @param mixed $conditions SQL conditions as a string or as an array('field'=>'value',...)
|
||||
* @param mixed $fields Either a single string of a field name, or an array of field names
|
||||
* @param string $order SQL ORDER BY conditions (e.g. "price DESC" or "name ASC")
|
||||
* @param int $limit SQL LIMIT clause, for calculating items per page
|
||||
* @param int $page Page number
|
||||
* @return array Array of records
|
||||
*/
|
||||
function findAll ($conditions = null, $fields = null, $order = null, $limit=50, $page=1)
|
||||
{
|
||||
$conditions = $this->parseConditions($conditions);
|
||||
|
@ -596,22 +596,22 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns an array of all rows for given SQL statement.
|
||||
*
|
||||
* @param string $sql SQL query
|
||||
* @return array
|
||||
*/
|
||||
* Returns an array of all rows for given SQL statement.
|
||||
*
|
||||
* @param string $sql SQL query
|
||||
* @return array
|
||||
*/
|
||||
function findBySql ($sql)
|
||||
{
|
||||
return $this->db->all($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns number of rows matching given SQL condition.
|
||||
*
|
||||
* @param string $conditions SQL conditions (WHERE clause conditions)
|
||||
* @return int Number of matching rows
|
||||
*/
|
||||
* Returns number of rows matching given SQL condition.
|
||||
*
|
||||
* @param string $conditions SQL conditions (WHERE clause conditions)
|
||||
* @return int Number of matching rows
|
||||
*/
|
||||
function findCount ($conditions)
|
||||
{
|
||||
list($data) = $this->findAll($conditions, 'COUNT(*) AS count');
|
||||
|
@ -619,24 +619,24 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @param string $conditions SQL conditions (WHERE clause conditions)
|
||||
* @param unknown_type $fields
|
||||
* @return unknown
|
||||
*/
|
||||
* Enter description here...
|
||||
*
|
||||
* @param string $conditions SQL conditions (WHERE clause conditions)
|
||||
* @param unknown_type $fields
|
||||
* @return unknown
|
||||
*/
|
||||
function findAllThreaded ($conditions=null, $fields=null, $sort=null)
|
||||
{
|
||||
return $this->_doThread($this->findAll($conditions, $fields, $sort), null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enter description here...
|
||||
*
|
||||
* @param unknown_type $data
|
||||
* @param unknown_type $root NULL or id for root node of operation
|
||||
* @return array
|
||||
*/
|
||||
* Enter description here...
|
||||
*
|
||||
* @param unknown_type $data
|
||||
* @param unknown_type $root NULL or id for root node of operation
|
||||
* @return array
|
||||
*/
|
||||
function _doThread ($data, $root)
|
||||
{
|
||||
$out = array();
|
||||
|
@ -655,14 +655,14 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns an array with keys "prev" and "next" that holds the id's of neighbouring data,
|
||||
* which is useful when creating paged lists.
|
||||
*
|
||||
* @param string $conditions SQL conditions for matching rows
|
||||
* @param unknown_type $field
|
||||
* @param unknown_type $value
|
||||
* @return array Array with keys "prev" and "next" that holds the id's
|
||||
*/
|
||||
* Returns an array with keys "prev" and "next" that holds the id's of neighbouring data,
|
||||
* which is useful when creating paged lists.
|
||||
*
|
||||
* @param string $conditions SQL conditions for matching rows
|
||||
* @param unknown_type $field
|
||||
* @param unknown_type $value
|
||||
* @return array Array with keys "prev" and "next" that holds the id's
|
||||
*/
|
||||
function findNeighbours ($conditions, $field, $value)
|
||||
{
|
||||
list($prev) = $this->findAll($conditions." AND {$field} < '{$value}'", $field, "{$field} DESC", 1);
|
||||
|
@ -672,22 +672,22 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns a resultset for given SQL statement.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return array Resultset
|
||||
*/
|
||||
* Returns a resultset for given SQL statement.
|
||||
*
|
||||
* @param string $sql SQL statement
|
||||
* @return array Resultset
|
||||
*/
|
||||
function query ($sql)
|
||||
{
|
||||
return $this->db->query($sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if all fields pass validation.
|
||||
*
|
||||
* @param array $data POST data
|
||||
* @return boolean True if there are no errors
|
||||
*/
|
||||
* Returns true if all fields pass validation.
|
||||
*
|
||||
* @param array $data POST data
|
||||
* @return boolean True if there are no errors
|
||||
*/
|
||||
function validates ($data=null)
|
||||
{
|
||||
$errors = count($this->invalidFields($data? $data: $this->data));
|
||||
|
@ -696,22 +696,22 @@ class Model extends Object
|
|||
}
|
||||
|
||||
/**
|
||||
* Returns an array of invalid fields.
|
||||
*
|
||||
* @param array $data Posted data
|
||||
* @return array Array of invalid fields
|
||||
*/
|
||||
* Returns an array of invalid fields.
|
||||
*
|
||||
* @param array $data Posted data
|
||||
* @return array Array of invalid fields
|
||||
*/
|
||||
function invalidFields ($data=null)
|
||||
{
|
||||
return $this->_invalidFields($data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of invalid fields.
|
||||
*
|
||||
* @param array $data
|
||||
* @return array Array of invalid fields
|
||||
*/
|
||||
* Returns an array of invalid fields.
|
||||
*
|
||||
* @param array $data
|
||||
* @return array Array of invalid fields
|
||||
*/
|
||||
function _invalidFields ($data=null)
|
||||
{
|
||||
if (!isset($this->validate))
|
||||
|
|
|
@ -68,13 +68,15 @@ DEBUG? error_reporting(E_ALL): error_reporting(0);
|
|||
|
||||
$TIME_START = getMicrotime();
|
||||
|
||||
uses('folder', 'dispatcher', 'dbo_factory');
|
||||
//uses('folder', 'dispatcher', 'dbo_factory');
|
||||
uses('folder', 'dispatcher', 'dbo');
|
||||
|
||||
config('tags', 'database');
|
||||
|
||||
if (class_exists('DATABASE_CONFIG'))
|
||||
{
|
||||
$DB = DboFactory::make('devel');
|
||||
$db = DBO::getInstance('default');
|
||||
//$DB = DboFactory::make('devel');
|
||||
loadModels();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue