Total rewrite for DQL alias model: now using short aliases instead of long aliases (needed for Oracle portability).
This commit is contained in:
parent
185c334710
commit
ba4c83ef3a
82
draft/DB.php
82
draft/DB.php
@ -28,6 +28,43 @@
|
||||
* @package Doctrine
|
||||
*/
|
||||
class Doctrine_DB2 implements Countable, IteratorAggregate {
|
||||
|
||||
/**
|
||||
* A connection operation or selecting a database.
|
||||
*/
|
||||
const CONNECT = 1;
|
||||
|
||||
/**
|
||||
* Any general database query that does not fit into the other constants.
|
||||
*/
|
||||
const QUERY = 2;
|
||||
|
||||
/**
|
||||
* Adding new data to the database, such as SQL's INSERT.
|
||||
*/
|
||||
const INSERT = 4;
|
||||
|
||||
/**
|
||||
* Updating existing information in the database, such as SQL's UPDATE.
|
||||
*
|
||||
*/
|
||||
const UPDATE = 8;
|
||||
|
||||
/**
|
||||
* An operation related to deleting data in the database,
|
||||
* such as SQL's DELETE.
|
||||
*/
|
||||
const DELETE = 16;
|
||||
|
||||
/**
|
||||
* Retrieving information from the database, such as SQL's SELECT.
|
||||
*/
|
||||
const SELECT = 32;
|
||||
|
||||
/**
|
||||
* Transactional operation, such as start transaction, commit, or rollback.
|
||||
*/
|
||||
const TRANSACTION = 64;
|
||||
/**
|
||||
* default DSN
|
||||
*/
|
||||
@ -60,10 +97,16 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
|
||||
* @var Doctrine_DB_EventListener_Interface|Doctrine_Overloadable $listener listener for listening events
|
||||
*/
|
||||
protected $listener;
|
||||
|
||||
private static $driverMap = array("oracle" => "oci8",
|
||||
"postgres" => "pgsql",
|
||||
"oci" => "oci8");
|
||||
/**
|
||||
* @var integer $querySequence
|
||||
*/
|
||||
protected $querySequence = 0;
|
||||
|
||||
private static $driverMap = array('oracle' => 'oci8',
|
||||
'postgres' => 'pgsql',
|
||||
'oci' => 'oci8',
|
||||
'sqlite2' => 'sqlite',
|
||||
'sqlite3' => 'sqlite');
|
||||
|
||||
|
||||
/**
|
||||
@ -79,6 +122,13 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
|
||||
$this->password = $password;
|
||||
$this->listener = new Doctrine_DB_EventListener();
|
||||
}
|
||||
|
||||
/**
|
||||
* getQuerySequence
|
||||
*/
|
||||
public function getQuerySequence() {
|
||||
return $this->querySequence;
|
||||
}
|
||||
/**
|
||||
* getDBH
|
||||
*/
|
||||
@ -303,31 +353,36 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
|
||||
|
||||
$args = func_get_args();
|
||||
|
||||
$this->listener->onPrePrepare($this, $args);
|
||||
$this->listener->onPrePrepare($this, $statement, $args);
|
||||
|
||||
$stmt = $this->dbh->prepare($statement);
|
||||
|
||||
$this->listener->onPrepare($this, $args);
|
||||
|
||||
$this->listener->onPrepare($this, $statement, $args, $this->querySequence);
|
||||
|
||||
$this->querySequence++;
|
||||
|
||||
return $stmt;
|
||||
}
|
||||
/**
|
||||
* query
|
||||
*
|
||||
* @param string $statement
|
||||
* @param array $params
|
||||
* @return Doctrine_DB_Statement|boolean
|
||||
*/
|
||||
public function query($statement, array $params = array()) {
|
||||
$this->connect();
|
||||
|
||||
$this->listener->onPreQuery($this, $params);
|
||||
$this->listener->onPreQuery($this, $statement, $params);
|
||||
|
||||
if( ! empty($params))
|
||||
$stmt = $this->dbh->query($statement)->execute($params);
|
||||
else
|
||||
$stmt = $this->dbh->query($statement);
|
||||
|
||||
$this->listener->onQuery($this, $params);
|
||||
$this->listener->onQuery($this, $statement, $params, $this->querySequence);
|
||||
|
||||
$this->querySequence++;
|
||||
|
||||
return $stmt;
|
||||
}
|
||||
@ -355,11 +410,11 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
|
||||
|
||||
$args = func_get_args();
|
||||
|
||||
$this->listener->onPreExec($this, $args);
|
||||
$this->listener->onPreExec($this, $statement, $args);
|
||||
|
||||
$rows = $this->dbh->exec($statement);
|
||||
|
||||
$this->listener->onExec($this, $args);
|
||||
$this->listener->onExec($this, $statement, $args);
|
||||
|
||||
return $rows;
|
||||
}
|
||||
@ -477,7 +532,8 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
public function getIterator() {
|
||||
return new ArrayIterator($this->queries);
|
||||
if($this->listener instanceof Doctrine_DB_Profiler)
|
||||
return $this->listener;
|
||||
}
|
||||
/**
|
||||
* count
|
||||
@ -486,7 +542,7 @@ class Doctrine_DB2 implements Countable, IteratorAggregate {
|
||||
* @return integer
|
||||
*/
|
||||
public function count() {
|
||||
return count($this->queries);
|
||||
return $this->querySequence;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -152,12 +152,15 @@ final class Doctrine {
|
||||
/**
|
||||
* automatic length validations attribute
|
||||
*/
|
||||
const ATTR_AUTO_LENGTH_VLD = 19;
|
||||
const ATTR_AUTO_LENGTH_VLD = 19;
|
||||
/**
|
||||
* automatic type validations attribute
|
||||
*/
|
||||
const ATTR_AUTO_TYPE_VLD = 20;
|
||||
|
||||
const ATTR_AUTO_TYPE_VLD = 20;
|
||||
/**
|
||||
* short aliases attribute
|
||||
*/
|
||||
const ATTR_SHORT_ALIASES = 21;
|
||||
|
||||
/**
|
||||
* LIMIT CONSTANTS
|
||||
|
@ -117,6 +117,7 @@ abstract class Doctrine_Configurable {
|
||||
case Doctrine::ATTR_VLD:
|
||||
case Doctrine::ATTR_AUTO_LENGTH_VLD:
|
||||
case Doctrine::ATTR_AUTO_TYPE_VLD:
|
||||
case Doctrine::ATTR_SHORT_ALIASES:
|
||||
case Doctrine::ATTR_QUERY_LIMIT:
|
||||
|
||||
break;
|
||||
@ -190,8 +191,8 @@ abstract class Doctrine_Configurable {
|
||||
public function getAttribute($attribute) {
|
||||
$attribute = (int) $attribute;
|
||||
|
||||
if($attribute < 1 || $attribute > 20)
|
||||
throw new InvalidKeyException();
|
||||
if($attribute < 1 || $attribute > 21)
|
||||
throw new Doctrine_Exception('Unknown attribute.');
|
||||
|
||||
if( ! isset($this->attributes[$attribute])) {
|
||||
if(isset($this->parent))
|
||||
|
@ -444,6 +444,12 @@ abstract class Doctrine_Connection extends Doctrine_Configurable implements Coun
|
||||
* returns an iterator that iterators through all
|
||||
* initialized table objects
|
||||
*
|
||||
* <code>
|
||||
* foreach($conn as $index => $table) {
|
||||
* print $table; // get a string representation of each table object
|
||||
* }
|
||||
* </code>
|
||||
*
|
||||
* @return ArrayIterator
|
||||
*/
|
||||
public function getIterator() {
|
||||
|
@ -26,17 +26,17 @@
|
||||
* @package Doctrine
|
||||
*/
|
||||
class Doctrine_DB_EventListener implements Doctrine_DB_EventListener_Interface {
|
||||
public function onPreQuery(Doctrine_DB2 $dbh, array $args) { }
|
||||
public function onQuery(Doctrine_DB2 $dbh, array $args) { }
|
||||
public function onPreQuery(Doctrine_DB2 $dbh, $statement, array $args) { }
|
||||
public function onQuery(Doctrine_DB2 $dbh, $statement, array $args, $queryId) { }
|
||||
|
||||
public function onPrePrepare(Doctrine_DB2 $dbh, array $args) { }
|
||||
public function onPrepare(Doctrine_DB2 $dbh, array $args) { }
|
||||
public function onPrePrepare(Doctrine_DB2 $dbh, $statement, array $args) { }
|
||||
public function onPrepare(Doctrine_DB2 $dbh, $statement, array $args, $queryId) { }
|
||||
|
||||
public function onPreCommit(Doctrine_DB2 $dbh) { }
|
||||
public function onCommit(Doctrine_DB2 $dbh) { }
|
||||
|
||||
public function onPreExec(Doctrine_DB2 $dbh, array $args) { }
|
||||
public function onExec(Doctrine_DB2 $dbh, array $args) { }
|
||||
public function onPreExec(Doctrine_DB2 $dbh, $statement, array $args) { }
|
||||
public function onExec(Doctrine_DB2 $dbh, $statement, array $args) { }
|
||||
|
||||
public function onPreRollBack(Doctrine_DB2 $dbh) { }
|
||||
public function onRollBack(Doctrine_DB2 $dbh) { }
|
||||
|
@ -54,12 +54,12 @@ class Doctrine_DB_EventListener_Chain extends Doctrine_Access implements Doctrin
|
||||
$this->listeners[$name] = $listener;
|
||||
}
|
||||
|
||||
public function onPreQuery(Doctrine_DB2 $dbh, array $args) {
|
||||
public function onQuery(Doctrine_DB2 $dbh, $statement, array $args, $queryId) {
|
||||
foreach($this->listeners as $listener) {
|
||||
$listener->onPreQuery($dbh, $args);
|
||||
}
|
||||
}
|
||||
public function onQuery(Doctrine_DB2 $dbh, array $args) {
|
||||
public function onPreQuery(Doctrine_DB2 $dbh, $statement, array $args) {
|
||||
foreach($this->listeners as $listener) {
|
||||
$listener->onQuery($dbh, $args);
|
||||
}
|
||||
|
@ -26,14 +26,14 @@
|
||||
* @package Doctrine
|
||||
*/
|
||||
interface Doctrine_DB_EventListener_Interface {
|
||||
public function onPreQuery(Doctrine_DB2 $dbh, array $args);
|
||||
public function onQuery(Doctrine_DB2 $dbh, array $args);
|
||||
public function onPreQuery(Doctrine_DB2 $dbh, $statement, array $args);
|
||||
public function onQuery(Doctrine_DB2 $dbh, $statement, array $args, $queryId);
|
||||
|
||||
public function onPrePrepare(Doctrine_DB2 $dbh, array $args);
|
||||
public function onPrepare(Doctrine_DB2 $dbh, array $args);
|
||||
public function onPrePrepare(Doctrine_DB2 $dbh, $statement, array $args);
|
||||
public function onPrepare(Doctrine_DB2 $dbh, $statement, array $args, $queryId);
|
||||
|
||||
public function onPreExec(Doctrine_DB2 $dbh, array $args);
|
||||
public function onExec(Doctrine_DB2 $dbh, array $args);
|
||||
public function onPreExec(Doctrine_DB2 $dbh, $statement, array $args);
|
||||
public function onExec(Doctrine_DB2 $dbh, $statement, array $args);
|
||||
|
||||
public function onPreCommit(Doctrine_DB2 $dbh);
|
||||
public function onCommit(Doctrine_DB2 $dbh);
|
||||
|
@ -26,25 +26,225 @@
|
||||
* @package Doctrine
|
||||
*/
|
||||
class Doctrine_DB_Profiler extends Doctrine_DB_EventListener {
|
||||
private $queries;
|
||||
|
||||
public function onPreQuery(Doctrine_DB $dbh, array $args) {
|
||||
$this->queries[] = $args[0];
|
||||
public function onPreQuery(Doctrine_DB2 $dbh, $statement, array $args) {
|
||||
$this->queryStart($statement);
|
||||
}
|
||||
public function onQuery(Doctrine_DB2 $dbh, $statement, array $args, $queryId) {
|
||||
$this->queryEnd($queryId);
|
||||
}
|
||||
public function onQuery(Doctrine_DB $dbh, array $args) { }
|
||||
|
||||
public function onPrePrepare(Doctrine_DB $dbh, array $args) { }
|
||||
public function onPrepare(Doctrine_DB $dbh, array $args) { }
|
||||
public function onPrePrepare(Doctrine_DB2 $dbh, $statement, array $args) {
|
||||
$this->prepareTimes[$dbh->getQuerySequence()] = microtime(true);
|
||||
}
|
||||
public function onPrepare(Doctrine_DB2 $dbh, $statement, array $args, $queryId) {
|
||||
$this->prepareTimes[$queryId] = (microtime(true) - $this->prepareTimes[$queryId]);
|
||||
}
|
||||
|
||||
public function onPreCommit(Doctrine_DB $dbh) { }
|
||||
public function onCommit(Doctrine_DB $dbh) { }
|
||||
public function onPreCommit(Doctrine_DB2 $dbh) { }
|
||||
public function onCommit(Doctrine_DB2 $dbh) { }
|
||||
|
||||
public function onPreRollBack(Doctrine_DB $dbh) { }
|
||||
public function onRollBack(Doctrine_DB $dbh) { }
|
||||
public function onPreRollBack(Doctrine_DB2 $dbh) { }
|
||||
public function onRollBack(Doctrine_DB2 $dbh) { }
|
||||
|
||||
public function onPreBeginTransaction(Doctrine_DB $dbh) { }
|
||||
public function onBeginTransaction(Doctrine_DB $dbh) { }
|
||||
public function onPreBeginTransaction(Doctrine_DB2 $dbh) { }
|
||||
public function onBeginTransaction(Doctrine_DB2 $dbh) { }
|
||||
|
||||
public function onPreExecute(Doctrine_DB_Statement $stmt, array $params) { }
|
||||
public function onExecute(Doctrine_DB_Statement $stmt, array $params) { }
|
||||
public function onPreExecute(Doctrine_DB_Statement $stmt, array $params) {
|
||||
$this->queryStart($stmt->getQuery(), $stmt->getQuerySequence());
|
||||
}
|
||||
public function onExecute(Doctrine_DB_Statement $stmt, array $params) {
|
||||
$this->queryEnd($stmt->getQuerySequence());
|
||||
}
|
||||
/**
|
||||
* Array of Zend_Db_Profiler_Query objects.
|
||||
*
|
||||
* @var Zend_Db_Profiler_Query
|
||||
*/
|
||||
protected $_queryProfiles = array();
|
||||
|
||||
|
||||
protected $_prepareTimes = array();
|
||||
/**
|
||||
* Stores the number of seconds to filter. NULL if filtering by time is
|
||||
* disabled. If an integer is stored here, profiles whose elapsed time
|
||||
* is less than this value in seconds will be unset from
|
||||
* the self::$_queryProfiles array.
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
protected $_filterElapsedSecs = null;
|
||||
|
||||
/**
|
||||
* Logical OR of any of the filter constants. NULL if filtering by query
|
||||
* type is disable. If an integer is stored here, it is the logical OR of
|
||||
* any of the query type constants. When the query ends, if it is not
|
||||
* one of the types specified, it will be unset from the
|
||||
* self::$_queryProfiles array.
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
protected $_filterTypes = null;
|
||||
|
||||
|
||||
/**
|
||||
* Start a query. Creates a new query profile object (Zend_Db_Profiler_Query)
|
||||
* and returns the "query profiler handle". Run the query, then call
|
||||
* queryEnd() and pass it this handle to make the query as ended and
|
||||
* record the time. If the profiler is not enabled, this takes no
|
||||
* action and immediately runs.
|
||||
*
|
||||
* @param string $queryText SQL statement
|
||||
* @param int $queryType Type of query, one of the Zend_Db_Profiler::* constants
|
||||
* @return mixed
|
||||
*/
|
||||
public function queryStart($queryText, $querySequence = -1) {
|
||||
$prepareTime = (isset($this->prepareTimes[$querySequence])) ? $this->prepareTimes[$querySequence] : null;
|
||||
|
||||
$this->_queryProfiles[] = new Doctrine_DB_Profiler_Query($queryText, $prepareTime);
|
||||
}
|
||||
/**
|
||||
* Ends a query. Pass it the handle that was returned by queryStart().
|
||||
* This will mark the query as ended and save the time.
|
||||
*
|
||||
* @param integer $queryId
|
||||
* @throws Zend_Db_Profiler_Exception
|
||||
* @return boolean
|
||||
*/
|
||||
public function queryEnd($queryId = null) {
|
||||
|
||||
|
||||
// Check for a valid query handle.
|
||||
if($queryId === null)
|
||||
$qp = end($this->_queryProfiles);
|
||||
else
|
||||
$qp = $this->_queryProfiles[$queryId];
|
||||
|
||||
|
||||
if($qp === null || $qp->hasEnded()) {
|
||||
throw new Zend_Db_Profiler_Exception('Query with profiler handle "'
|
||||
. $queryId .'" has already ended.');
|
||||
}
|
||||
|
||||
// End the query profile so that the elapsed time can be calculated.
|
||||
$qp->end();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get a profile for a query. Pass it the same handle that was returned
|
||||
* by queryStart() and it will return a Zend_Db_Profiler_Query object.
|
||||
*
|
||||
* @param int $queryId
|
||||
* @throws Zend_Db_Profiler_Exception
|
||||
* @return Zend_Db_Profiler_Query
|
||||
*/
|
||||
public function getQueryProfile($queryId)
|
||||
{
|
||||
if (!array_key_exists($queryId, $this->_queryProfiles)) {
|
||||
throw new Zend_Db_Profiler_Exception("Query handle \"$queryId\" not found in profiler log.");
|
||||
}
|
||||
|
||||
return $this->_queryProfiles[$queryId];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get an array of query profiles (Zend_Db_Profiler_Query objects). If $queryType
|
||||
* is set to one of the Zend_Db_Profiler::* constants then only queries of that
|
||||
* type will be returned. Normally, queries that have not yet ended will
|
||||
* not be returned unless $showUnfinished is set to True. If no
|
||||
* queries were found, False is returned.
|
||||
*
|
||||
* @param string $queryType
|
||||
* @param bool $showUnfinished
|
||||
* @return mixed
|
||||
*/
|
||||
public function getQueryProfiles($queryType=null, $showUnfinished=false)
|
||||
{
|
||||
$queryProfiles = array();
|
||||
foreach ($this->_queryProfiles as $key=>$qp) {
|
||||
/* @var $qp Zend_Db_Profiler_Query */
|
||||
if ($queryType===null) {
|
||||
$condition=true;
|
||||
} else {
|
||||
$condition=($qp->getQueryType() & $queryType);
|
||||
}
|
||||
|
||||
if (($qp->hasEnded() || $showUnfinished) && $condition) {
|
||||
$queryProfiles[$key] = $qp;
|
||||
}
|
||||
}
|
||||
|
||||
if (empty($queryProfiles)) {
|
||||
$queryProfiles = false;
|
||||
}
|
||||
return $queryProfiles;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the total elapsed time (in seconds) of all of the profiled queries.
|
||||
* Only queries that have ended will be counted. If $queryType is set to
|
||||
* one of the Zend_Db_Profiler::* constants, the elapsed time will be calculated
|
||||
* only for queries of that type.
|
||||
*
|
||||
* @param int $queryType
|
||||
* @return int
|
||||
*/
|
||||
public function getTotalElapsedSecs($queryType = null)
|
||||
{
|
||||
$elapsedSecs = 0;
|
||||
foreach ($this->_queryProfiles as $key=>$qp) {
|
||||
/* @var $qp Zend_Db_Profiler_Query */
|
||||
is_null($queryType)? $condition=true : $condition=($qp->getQueryType() & $queryType);
|
||||
if (($qp->hasEnded()) && $condition) {
|
||||
$elapsedSecs += $qp->getElapsedSecs();
|
||||
}
|
||||
}
|
||||
return $elapsedSecs;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the total number of queries that have been profiled. Only queries that have ended will
|
||||
* be counted. If $queryType is set to one of the Zend_Db_Profiler::* constants, only queries of
|
||||
* that type will be counted.
|
||||
*
|
||||
* @param int $queryType
|
||||
* @return int
|
||||
*/
|
||||
public function getTotalNumQueries($queryType = null)
|
||||
{
|
||||
if (is_null($queryType)) {
|
||||
return sizeof($this->_queryProfiles);
|
||||
}
|
||||
|
||||
$numQueries = 0;
|
||||
foreach ($this->_queryProfiles as $qp) {
|
||||
/* @var $qp Zend_Db_Profiler_Query */
|
||||
is_null($queryType)? $condition=true : $condition=($qp->getQueryType() & $queryType);
|
||||
if ($qp->hasEnded() && $condition) {
|
||||
$numQueries++;
|
||||
}
|
||||
}
|
||||
return $numQueries;
|
||||
}
|
||||
|
||||
public function pop() {
|
||||
return array_pop($this->_queryProfiles);
|
||||
}
|
||||
/**
|
||||
* Get the Zend_Db_Profiler_Query object for the last query that was run, regardless if it has
|
||||
* ended or not. If the query has not ended, it's end time will be Null.
|
||||
*
|
||||
* @return Zend_Db_Profiler_Query
|
||||
*/
|
||||
public function lastQuery() {
|
||||
if (empty($this->_queryProfiles)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
end($this->_queryProfiles);
|
||||
return current($this->_queryProfiles);
|
||||
}
|
||||
}
|
||||
|
126
lib/Doctrine/DB/Profiler/Query.php
Normal file
126
lib/Doctrine/DB/Profiler/Query.php
Normal file
@ -0,0 +1,126 @@
|
||||
<?php
|
||||
/*
|
||||
* $Id$
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* This software consists of voluntary contributions made by many individuals
|
||||
* and is licensed under the LGPL. For more information, see
|
||||
* <http://www.phpdoctrine.com>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Doctrine_DB_Profiler_Query
|
||||
*
|
||||
* @author Konsta Vesterinen
|
||||
* @license LGPL
|
||||
* @package Doctrine
|
||||
*/
|
||||
class Doctrine_DB_Profiler_Query {
|
||||
/**
|
||||
* @var string SQL query string or user comment, set by $query argument in constructor.
|
||||
*/
|
||||
protected $query ='';
|
||||
/**
|
||||
* @var integer One of the Zend_Db_Profiler constants for query type, set by $queryType argument in constructor.
|
||||
*/
|
||||
protected $queryType = 0;
|
||||
|
||||
|
||||
protected $prepareTime;
|
||||
|
||||
/**
|
||||
* @var float|null Unix timestamp with microseconds when instantiated.
|
||||
*/
|
||||
protected $startedMicrotime;
|
||||
|
||||
/**
|
||||
* Unix timestamp with microseconds when self::queryEnd() was called.
|
||||
*
|
||||
* @var null|integer
|
||||
*/
|
||||
protected $endedMicrotime;
|
||||
|
||||
|
||||
/**
|
||||
* Class constructor. A query is about to be started, save the query text ($query) and its
|
||||
* type (one of the Zend_Db_Profiler::* constants).
|
||||
*
|
||||
* @param string $query
|
||||
* @param int $queryType
|
||||
* @return bool
|
||||
*/
|
||||
public function __construct($query, $prepareTime = null)
|
||||
{
|
||||
$this->query = $query;
|
||||
$this->prepareTime = $prepareTime;
|
||||
$this->startedMicrotime = microtime(true);
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* The query has ended. Record the time so that the elapsed time can be determined later.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function end() {
|
||||
$this->endedMicrotime = microtime(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getPrepareTime() {
|
||||
return $this->prepareTime;
|
||||
}
|
||||
|
||||
/**
|
||||
* Has this query ended?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasEnded() {
|
||||
return ($this->endedMicrotime != null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the original SQL text of the query.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getQuery() {
|
||||
return $this->query;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the type of this query (one of the Zend_Db_Profiler::* constants)
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getQueryType() {
|
||||
return $this->queryType;
|
||||
}
|
||||
/**
|
||||
* Get the elapsed time (in seconds) that the query ran. If the query has
|
||||
* not yet ended, return false.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function getElapsedSecs() {
|
||||
if (is_null($this->endedMicrotime) && ! $this->prepareTime) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ($this->prepareTime + ($this->endedMicrotime - $this->startedMicrotime));
|
||||
}
|
||||
}
|
||||
|
@ -27,12 +27,22 @@
|
||||
*/
|
||||
class Doctrine_DB_Statement extends PDOStatement {
|
||||
protected $dbh;
|
||||
|
||||
|
||||
protected $querySequence;
|
||||
|
||||
protected function __construct($dbh) {
|
||||
$this->dbh = $dbh;
|
||||
$this->querySequence = $this->dbh->getQuerySequence();
|
||||
}
|
||||
|
||||
public function execute($params) {
|
||||
public function getQuerySequence() {
|
||||
return $this->querySequence;
|
||||
}
|
||||
public function getQuery() {
|
||||
return $this->queryString;
|
||||
}
|
||||
|
||||
public function execute(array $params) {
|
||||
$this->dbh->getListener()->onPreExecute($this, $params);
|
||||
|
||||
$ret = parent::execute($params);
|
||||
|
@ -274,7 +274,7 @@ class Doctrine_DataDict_Sqlite extends Doctrine_DataDict {
|
||||
*/
|
||||
public function listTableColumns($table) {
|
||||
|
||||
$sql = "PRAGMA table_info($table)";
|
||||
$sql = 'PRAGMA table_info(' . $table . ')';
|
||||
$result = $this->dbh->query($sql)->fetchAll(PDO::FETCH_ASSOC);
|
||||
|
||||
$description = array();
|
||||
|
@ -88,6 +88,10 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
protected $pendingAggregates = array();
|
||||
|
||||
protected $aggregateMap = array();
|
||||
|
||||
protected $shortAliases = array();
|
||||
|
||||
protected $shortAliasIndexes = array();
|
||||
/**
|
||||
* @var array $parts SQL query string parts
|
||||
*/
|
||||
@ -227,6 +231,8 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
$this->joins = array();
|
||||
$this->tableIndexes = array();
|
||||
$this->tableAliases = array();
|
||||
$this->shortAliases = array();
|
||||
$this->shortAliasIndexes = array();
|
||||
}
|
||||
/**
|
||||
* getConnection
|
||||
@ -371,6 +377,8 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
foreach($data as $key => $row) {
|
||||
if(empty($row))
|
||||
continue;
|
||||
|
||||
//$key = array_search($key, $this->shortAliases);
|
||||
|
||||
foreach($this->tables as $k => $t) {
|
||||
if ( ! strcasecmp($key, $k))
|
||||
@ -391,9 +399,7 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
if(isset($row[0])) {
|
||||
$path = array_search($name, $this->tableAliases);
|
||||
$alias = $this->getPathAlias($path);
|
||||
|
||||
//print_r($this->pendingAggregates);
|
||||
|
||||
|
||||
// map each aggregate value
|
||||
foreach($row as $index => $value) {
|
||||
$agg = false;
|
||||
@ -487,7 +493,7 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
$pointer = $this->joins[$name];
|
||||
|
||||
$path = array_search($name, $this->tableAliases);
|
||||
$tmp = explode(".", $path);
|
||||
$tmp = explode('.', $path);
|
||||
$alias = end($tmp);
|
||||
|
||||
$fk = $this->tables[$pointer]->getRelation($alias);
|
||||
@ -533,6 +539,36 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public function getShortAliasIndex($alias) {
|
||||
if( ! isset($this->shortAliasIndexes[$alias]))
|
||||
return 0;
|
||||
|
||||
return $this->shortAliasIndexes[$alias];
|
||||
}
|
||||
public function generateShortAlias($tableName) {
|
||||
$char = strtolower(substr($tableName, 0, 1));
|
||||
|
||||
$alias = $char;
|
||||
|
||||
if( ! isset($this->shortAliasIndexes[$alias]))
|
||||
$this->shortAliasIndexes[$alias] = 1;
|
||||
|
||||
while(isset($this->shortAliases[$alias])) {
|
||||
$alias = $char . ++$this->shortAliasIndexes[$alias];
|
||||
}
|
||||
$this->shortAliases[$alias] = $tableName;
|
||||
|
||||
return $alias;
|
||||
}
|
||||
|
||||
public function getShortAlias($tableName) {
|
||||
$alias = array_search($tableName, $this->shortAliases);
|
||||
|
||||
if($alias !== false)
|
||||
return $alias;
|
||||
|
||||
return $this->generateShortAlias($tableName);
|
||||
}
|
||||
/**
|
||||
* applyInheritance
|
||||
* applies column aggregation inheritance to DQL / SQL query
|
||||
@ -552,23 +588,29 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
$c = array();
|
||||
|
||||
$index = 0;
|
||||
foreach($array as $tname => $maps) {
|
||||
foreach($array as $tableAlias => $maps) {
|
||||
|
||||
$a = array();
|
||||
foreach($maps as $map) {
|
||||
$b = array();
|
||||
foreach($map as $field => $value) {
|
||||
if($index > 0)
|
||||
$b[] = "(".$tname.".$field = $value OR $tname.$field IS NULL)";
|
||||
$b[] = '(' . $tableAlias . '.' . $field . ' = ' . $value . ' OR ' . $tableAlias . '.' . $field . ' IS NULL)';
|
||||
else
|
||||
$b[] = $tname.".$field = $value";
|
||||
$b[] = $tableAlias . '.' . $field . ' = ' . $value;
|
||||
}
|
||||
if( ! empty($b)) $a[] = implode(" AND ",$b);
|
||||
|
||||
if( ! empty($b))
|
||||
$a[] = implode(' AND ', $b);
|
||||
}
|
||||
if( ! empty($a)) $c[] = implode(" AND ",$a);
|
||||
|
||||
if( ! empty($a))
|
||||
$c[] = implode(' AND ', $a);
|
||||
|
||||
$index++;
|
||||
}
|
||||
|
||||
$str .= implode(" AND ",$c);
|
||||
$str .= implode(' AND ', $c);
|
||||
|
||||
return $str;
|
||||
}
|
||||
@ -576,6 +618,7 @@ abstract class Doctrine_Hydrate extends Doctrine_Access {
|
||||
* parseData
|
||||
* parses the data returned by PDOStatement
|
||||
*
|
||||
* @param PDOStatement $stmt
|
||||
* @return array
|
||||
*/
|
||||
public function parseData(PDOStatement $stmt) {
|
||||
|
@ -93,7 +93,8 @@ class Doctrine_Manager extends Doctrine_Configurable implements Countable, Itera
|
||||
Doctrine::ATTR_AUTO_LENGTH_VLD => true,
|
||||
Doctrine::ATTR_AUTO_TYPE_VLD => true,
|
||||
Doctrine::ATTR_CREATE_TABLES => true,
|
||||
Doctrine::ATTR_QUERY_LIMIT => Doctrine::LIMIT_RECORDS
|
||||
Doctrine::ATTR_QUERY_LIMIT => Doctrine::LIMIT_RECORDS,
|
||||
Doctrine::ATTR_SHORT_ALIASES => false,
|
||||
);
|
||||
foreach($attributes as $attribute => $value) {
|
||||
$old = $this->getAttribute($attribute);
|
||||
|
@ -97,7 +97,8 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
|
||||
public function processPendingFields($componentAlias) {
|
||||
$tableAlias = $this->getTableAlias($componentAlias);
|
||||
|
||||
|
||||
|
||||
$componentPath = $this->compAliases[$componentAlias];
|
||||
|
||||
if( ! isset($this->components[$componentPath]))
|
||||
@ -249,9 +250,9 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
|
||||
foreach($names as $name) {
|
||||
if($count == 0) {
|
||||
$this->parts["select"][] = $tablename.".".$name;
|
||||
$this->parts["select"][] = $tablename . '.' . $name;
|
||||
} else {
|
||||
$this->parts["select"][] = $tablename.".".$name." AS ".$tablename."__".$name;
|
||||
$this->parts["select"][] = $tablename . '.' . $name . ' AS ' . $tablename . '__' . $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -322,6 +323,8 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
$this->fetchModes = array();
|
||||
$this->tableIndexes = array();
|
||||
$this->tableAliases = array();
|
||||
$this->shortAliases = array();
|
||||
$this->shortAliasIndexes = array();
|
||||
|
||||
$class = "Doctrine_Query_".ucwords($name);
|
||||
$parser = new $class($this);
|
||||
@ -462,10 +465,7 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
' FROM ';
|
||||
$q = $this->getQueryBase();
|
||||
|
||||
foreach($this->parts["from"] as $tname => $bool) {
|
||||
$a[] = $tname;
|
||||
}
|
||||
$q .= implode(", ",$a);
|
||||
$q .= $this->parts['from'];
|
||||
|
||||
if( ! empty($this->parts['join'])) {
|
||||
foreach($this->parts['join'] as $part) {
|
||||
@ -498,7 +498,7 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
break;
|
||||
}
|
||||
|
||||
$field = $table->getTableName() . '.' . $table->getIdentifier();
|
||||
$field = $this->getShortAlias($table->getTableName()) . '.' . $table->getIdentifier();
|
||||
array_unshift($this->parts['where'], $field. ' IN (' . $subquery . ')');
|
||||
$modifyLimit = false;
|
||||
}
|
||||
@ -533,7 +533,8 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
$k = array_keys($this->tables);
|
||||
$table = $this->tables[$k[0]];
|
||||
|
||||
$primaryKey = $table->getTableName() . '.' . $table->getIdentifier();
|
||||
$alias = $this->getShortAlias($table->getTableName());
|
||||
$primaryKey = $alias . '.' . $table->getIdentifier();
|
||||
|
||||
// initialize the base of the subquery
|
||||
$subquery = 'SELECT DISTINCT ' . $primaryKey;
|
||||
@ -550,15 +551,15 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
}
|
||||
}
|
||||
|
||||
$subquery .= ' FROM '.$table->getTableName();
|
||||
|
||||
$subquery .= ' FROM ' . $table->getTableName() . ' ' . $alias;
|
||||
|
||||
foreach($this->parts['join'] as $parts) {
|
||||
foreach($parts as $part) {
|
||||
// preserve LEFT JOINs only if needed
|
||||
if(substr($part,0,9) === 'LEFT JOIN') {
|
||||
$e = explode(' ', $part);
|
||||
|
||||
if( ! in_array($e[2],$this->subqueryAliases))
|
||||
if( ! in_array($e[3], $this->subqueryAliases))
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -566,6 +567,7 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// all conditions must be preserved in subquery
|
||||
$subquery .= ( ! empty($this->parts['where']))? ' WHERE ' . implode(' AND ',$this->parts['where']):'';
|
||||
$subquery .= ( ! empty($this->parts['groupby']))? ' GROUP BY ' . implode(', ',$this->parts['groupby']):'';
|
||||
@ -574,9 +576,48 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
|
||||
// add driver specific limit clause
|
||||
$subquery = $this->connection->modifyLimitQuery($subquery, $this->parts['limit'], $this->parts['offset']);
|
||||
|
||||
|
||||
$parts = self::quoteExplode($subquery, ' ', "'", "'");
|
||||
|
||||
foreach($parts as $k => $part) {
|
||||
if(strpos($part, "'") !== false)
|
||||
continue;
|
||||
|
||||
if(isset($this->shortAliases[$part])) {
|
||||
$parts[$k] = $this->generateNewAlias($part);
|
||||
}
|
||||
|
||||
if(strpos($part, '.') !== false) {
|
||||
$e = explode('.', $part);
|
||||
|
||||
$trimmed = ltrim($e[0], '( ');
|
||||
$pos = strpos($e[0], $trimmed);
|
||||
|
||||
$e[0] = substr($e[0], 0, $pos) . $this->generateNewAlias($trimmed);
|
||||
$parts[$k] = implode('.', $e);
|
||||
}
|
||||
}
|
||||
$subquery = implode(' ', $parts);
|
||||
|
||||
return $subquery;
|
||||
}
|
||||
|
||||
public function generateNewAlias($alias) {
|
||||
if(isset($this->shortAliases[$alias])) {
|
||||
// generate a new alias
|
||||
$name = substr($alias, 0, 1);
|
||||
$i = ((int) substr($alias, 1));
|
||||
|
||||
if($i == 0)
|
||||
$i = 1;
|
||||
|
||||
$newIndex = ($this->shortAliasIndexes[$name] + $i);
|
||||
|
||||
return $name . $newIndex;
|
||||
}
|
||||
|
||||
return $alias;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -592,7 +633,7 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
if($this->aggregate) {
|
||||
$keys = array_keys($this->tables);
|
||||
$query = $this->getQuery();
|
||||
$stmt = $this->tables[$keys[0]]->getConnection()->select($query,$this->parts["limit"],$this->parts["offset"]);
|
||||
$stmt = $this->tables[$keys[0]]->getConnection()->select($query, $this->parts["limit"], $this->parts["offset"]);
|
||||
$data = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if(count($data) == 1) {
|
||||
return current($data);
|
||||
@ -825,6 +866,47 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
}
|
||||
return $term;
|
||||
}
|
||||
/**
|
||||
* quoteExplode
|
||||
*
|
||||
* example:
|
||||
*
|
||||
* parameters:
|
||||
* $str = email LIKE 'John@example.com'
|
||||
* $d = ' AND '
|
||||
* $e1 = '('
|
||||
* $e2 = ')'
|
||||
*
|
||||
* would return an array:
|
||||
* array("email", "LIKE", "'John@example.com'")
|
||||
*
|
||||
* @param string $str
|
||||
* @param string $d the delimeter which explodes the string *
|
||||
*/
|
||||
public static function quoteExplode($str, $d = ' ') {
|
||||
if(is_array($d)) {
|
||||
$a = preg_split('/('.implode('|', $d).')/', $str);
|
||||
$d = stripslashes($d[0]);
|
||||
} else
|
||||
$a = explode("$d",$str);
|
||||
|
||||
$i = 0;
|
||||
$term = array();
|
||||
foreach($a as $key => $val) {
|
||||
if (empty($term[$i])) {
|
||||
$term[$i] = trim($val);
|
||||
|
||||
if( ! (substr_count($term[$i], "'") & 1))
|
||||
$i++;
|
||||
} else {
|
||||
$term[$i] .= "$d".trim($val);
|
||||
|
||||
if( ! (substr_count($term[$i], "'") & 1))
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
return $term;
|
||||
}
|
||||
/**
|
||||
* sqlExplode
|
||||
*
|
||||
@ -944,25 +1026,26 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
$e2 = preg_split("/[-(]/",$fullname);
|
||||
$name = $e2[0];
|
||||
|
||||
$currPath .= ".".$name;
|
||||
$currPath .= '.' . $name;
|
||||
|
||||
if($key == 0) {
|
||||
$currPath = substr($currPath,1);
|
||||
|
||||
|
||||
|
||||
$table = $this->connection->getTable($name);
|
||||
|
||||
$tname = $table->getTableName();
|
||||
|
||||
$tname = $this->getShortAlias($table->getTableName());
|
||||
|
||||
if( ! isset($this->tableAliases[$currPath]))
|
||||
$this->tableIndexes[$tname] = 1;
|
||||
|
||||
$this->parts["from"][$tname] = true;
|
||||
|
||||
$this->parts["from"] = $table->getTableName() . ' ' . $tname;
|
||||
|
||||
$this->tableAliases[$currPath] = $tname;
|
||||
|
||||
|
||||
$tableName = $tname;
|
||||
|
||||
} else {
|
||||
|
||||
$index += strlen($e[($key - 1)]) + 1;
|
||||
@ -972,7 +1055,7 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
if(isset($this->tableAliases[$prevPath])) {
|
||||
$tname = $this->tableAliases[$prevPath];
|
||||
} else
|
||||
$tname = $table->getTableName();
|
||||
$tname = $this->getShortAlias($table->getTableName());
|
||||
|
||||
|
||||
$fk = $table->getRelation($name);
|
||||
@ -984,18 +1067,15 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
if(isset($this->tableAliases[$currPath])) {
|
||||
$tname2 = $this->tableAliases[$currPath];
|
||||
} else
|
||||
$tname2 = $this->generateAlias($original);
|
||||
$tname2 = $this->generateShortAlias($original);
|
||||
|
||||
if($original !== $tname2)
|
||||
$aliasString = $original." AS ".$tname2;
|
||||
else
|
||||
$aliasString = $original;
|
||||
$aliasString = $original . ' ' . $tname2;
|
||||
|
||||
switch($mark) {
|
||||
case ":":
|
||||
case ':':
|
||||
$join = 'INNER JOIN ';
|
||||
break;
|
||||
case ".":
|
||||
case '.':
|
||||
$join = 'LEFT JOIN ';
|
||||
break;
|
||||
default:
|
||||
@ -1003,36 +1083,44 @@ class Doctrine_Query extends Doctrine_Hydrate implements Countable {
|
||||
}
|
||||
|
||||
if( ! $fk->isOneToOne()) {
|
||||
if( ! $loadFields) {
|
||||
if( ! $loadFields || $table->usesInheritanceMap()) {
|
||||
$this->subqueryAliases[] = $tname2;
|
||||
}
|
||||
|
||||
$this->needsSubquery = true;
|
||||
}
|
||||
|
||||
|
||||
if($fk instanceof Doctrine_Relation_Association) {
|
||||
$asf = $fk->getAssociationFactory();
|
||||
|
||||
$assocTableName = $asf->getTableName();
|
||||
|
||||
if( ! $loadFields) {
|
||||
|
||||
if( ! $loadFields || $table->usesInheritanceMap()) {
|
||||
$this->subqueryAliases[] = $assocTableName;
|
||||
}
|
||||
$this->parts["join"][$tname][$assocTableName] = $join.$assocTableName .' ON '.$tname.".".$table->getIdentifier()." = ".$assocTableName.".".$fk->getLocal();
|
||||
$this->parts["join"][$tname][$tname2] = $join.$aliasString .' ON '.$tname2.".".$table->getIdentifier()." = ".$assocTableName.".".$fk->getForeign();
|
||||
$this->parts["join"][$tname][$assocTableName] = $join.$assocTableName . ' ON ' .$tname . '.'
|
||||
. $table->getIdentifier() . ' = '
|
||||
. $assocTableName . '.' . $fk->getLocal();
|
||||
|
||||
$this->parts["join"][$tname][$tname2] = $join.$aliasString . ' ON ' .$tname2 . '.'
|
||||
. $table->getIdentifier() . ' = '
|
||||
. $assocTableName . '.' . $fk->getForeign();
|
||||
|
||||
} else {
|
||||
$this->parts["join"][$tname][$tname2] = $join.$aliasString .' ON '.$tname.".".$fk->getLocal()." = ".$tname2.".".$fk->getForeign();
|
||||
$this->parts["join"][$tname][$tname2] = $join.$aliasString . ' ON ' .$tname . '.'
|
||||
. $fk->getLocal() . ' = ' . $tname2 . '.' . $fk->getForeign();
|
||||
}
|
||||
|
||||
|
||||
$this->joins[$tname2] = $prevTable;
|
||||
|
||||
|
||||
$table = $fk->getTable();
|
||||
|
||||
$this->tableAliases[$currPath] = $tname2;
|
||||
|
||||
$tableName = $tname2;
|
||||
|
||||
|
||||
$this->relationStack[] = $fk;
|
||||
}
|
||||
|
||||
|
@ -292,6 +292,16 @@ class Doctrine_Table extends Doctrine_Configurable implements Countable {
|
||||
}
|
||||
$this->options[$name] = $value;
|
||||
}
|
||||
|
||||
public function usesInheritanceMap() {
|
||||
return ( ! empty($this->options['inheritanceMap']));
|
||||
}
|
||||
public function getOption($name) {
|
||||
if(isset($this->options[$name]))
|
||||
return $this->options[$name];
|
||||
|
||||
return null;
|
||||
}
|
||||
/**
|
||||
* setColumn
|
||||
* @param string $name
|
||||
|
@ -1,385 +0,0 @@
|
||||
<?php
|
||||
require_once("../draft/DB.php");
|
||||
|
||||
class Doctrine_DB_TestLogger implements Doctrine_Overloadable {
|
||||
private $messages = array();
|
||||
|
||||
public function __call($m, $a) {
|
||||
$this->messages[] = $m;
|
||||
}
|
||||
public function pop() {
|
||||
return array_pop($this->messages);
|
||||
}
|
||||
public function getAll() {
|
||||
return $this->messages;
|
||||
}
|
||||
}
|
||||
class Doctrine_DB_TestValidListener extends Doctrine_DB_EventListener { }
|
||||
class Doctrine_DB_TestInvalidListener { }
|
||||
|
||||
class Doctrine_DB_TestCase extends Doctrine_UnitTestCase {
|
||||
public function prepareData() { }
|
||||
public function prepareTables() { }
|
||||
public function init() { }
|
||||
|
||||
public function testFetchAll() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
$dbh->connect();
|
||||
|
||||
|
||||
$dbh->query('CREATE TABLE entity (id INTEGER, name TEXT)');
|
||||
|
||||
$dbh->query("INSERT INTO entity (id, name) VALUES (1, 'zYne')");
|
||||
$dbh->query("INSERT INTO entity (id, name) VALUES (2, 'John')");
|
||||
|
||||
$a = $dbh->fetchAll('SELECT * FROM entity');
|
||||
|
||||
|
||||
$this->assertEqual($a, array (
|
||||
0 =>
|
||||
array (
|
||||
'id' => '1',
|
||||
'name' => 'zYne',
|
||||
),
|
||||
1 =>
|
||||
array (
|
||||
'id' => '2',
|
||||
'name' => 'John',
|
||||
),
|
||||
));
|
||||
}
|
||||
public function testFetchOne() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
|
||||
$c = $dbh->fetchOne('SELECT COUNT(1) FROM entity');
|
||||
|
||||
$this->assertEqual($c, 2);
|
||||
|
||||
$c = $dbh->fetchOne('SELECT COUNT(1) FROM entity WHERE id = ?', array(1));
|
||||
|
||||
$this->assertEqual($c, 1);
|
||||
}
|
||||
|
||||
public function testFetchAssoc() {
|
||||
|
||||
}
|
||||
public function testFetchColumn() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
|
||||
$a = $dbh->fetchColumn('SELECT * FROM entity');
|
||||
|
||||
$this->assertEqual($a, array (
|
||||
0 => '1',
|
||||
1 => '2',
|
||||
));
|
||||
|
||||
$a = $dbh->fetchColumn('SELECT * FROM entity WHERE id = ?', array(1));
|
||||
|
||||
$this->assertEqual($a, array (
|
||||
0 => '1',
|
||||
));
|
||||
}
|
||||
public function testFetchArray() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
|
||||
$a = $dbh->fetchArray('SELECT * FROM entity');
|
||||
|
||||
$this->assertEqual($a, array (
|
||||
0 => '1',
|
||||
1 => 'zYne',
|
||||
));
|
||||
|
||||
$a = $dbh->fetchArray('SELECT * FROM entity WHERE id = ?', array(1));
|
||||
|
||||
$this->assertEqual($a, array (
|
||||
0 => '1',
|
||||
1 => 'zYne',
|
||||
));
|
||||
}
|
||||
public function testFetchRow() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
|
||||
$c = $dbh->fetchRow('SELECT * FROM entity');
|
||||
|
||||
$this->assertEqual($c, array (
|
||||
'id' => '1',
|
||||
'name' => 'zYne',
|
||||
));
|
||||
|
||||
$c = $dbh->fetchRow('SELECT * FROM entity WHERE id = ?', array(1));
|
||||
|
||||
$this->assertEqual($c, array (
|
||||
'id' => '1',
|
||||
'name' => 'zYne',
|
||||
));
|
||||
}
|
||||
public function testFetchPairs() {
|
||||
|
||||
}
|
||||
public function testAddValidEventListener() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener);
|
||||
try {
|
||||
$ret = $dbh->addListener(new Doctrine_DB_TestLogger());
|
||||
$this->pass();
|
||||
$this->assertTrue($ret instanceof Doctrine_DB2);
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
|
||||
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
|
||||
|
||||
try {
|
||||
$ret = $dbh->addListener(new Doctrine_DB_TestValidListener());
|
||||
$this->pass();
|
||||
$this->assertTrue($ret instanceof Doctrine_DB2);
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
|
||||
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
|
||||
$this->assertTrue($dbh->getListener()->get(1) instanceof Doctrine_DB_TestValidListener);
|
||||
|
||||
try {
|
||||
$ret = $dbh->addListener(new Doctrine_DB_EventListener_Chain(), 'chain');
|
||||
$this->pass();
|
||||
$this->assertTrue($ret instanceof Doctrine_DB2);
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
|
||||
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
|
||||
$this->assertTrue($dbh->getListener()->get(1) instanceof Doctrine_DB_TestValidListener);
|
||||
$this->assertTrue($dbh->getListener()->get('chain') instanceof Doctrine_DB_EventListener_Chain);
|
||||
|
||||
// replacing
|
||||
|
||||
try {
|
||||
$ret = $dbh->addListener(new Doctrine_DB_EventListener_Chain(), 'chain');
|
||||
$this->pass();
|
||||
$this->assertTrue($ret instanceof Doctrine_DB2);
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
|
||||
$this->assertTrue($dbh->getListener()->get(0) instanceof Doctrine_DB_TestLogger);
|
||||
$this->assertTrue($dbh->getListener()->get(1) instanceof Doctrine_DB_TestValidListener);
|
||||
$this->assertTrue($dbh->getListener()->get('chain') instanceof Doctrine_DB_EventListener_Chain);
|
||||
}
|
||||
public function testListeningEventsWithSingleListener() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
$dbh->connect();
|
||||
$dbh->setListener(new Doctrine_DB_TestLogger());
|
||||
$listener = $dbh->getListener();
|
||||
$stmt = $dbh->prepare('INSERT INTO entity (id) VALUES(?)');
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onPrepare');
|
||||
$this->assertEqual($listener->pop(), 'onPrePrepare');
|
||||
|
||||
$stmt->execute(array(1));
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onExecute');
|
||||
$this->assertEqual($listener->pop(), 'onPreExecute');
|
||||
|
||||
$dbh->exec('DELETE FROM entity');
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onExec');
|
||||
$this->assertEqual($listener->pop(), 'onPreExec');
|
||||
|
||||
$dbh->beginTransaction();
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onBeginTransaction');
|
||||
$this->assertEqual($listener->pop(), 'onPreBeginTransaction');
|
||||
|
||||
$dbh->query('INSERT INTO entity (id) VALUES (1)');
|
||||
|
||||
$dbh->commit();
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onCommit');
|
||||
$this->assertEqual($listener->pop(), 'onPreCommit');
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onQuery');
|
||||
$this->assertEqual($listener->pop(), 'onPreQuery');
|
||||
|
||||
$dbh->query('DROP TABLE entity');
|
||||
}
|
||||
public function testListeningEventsWithListenerChain() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
$dbh->connect();
|
||||
$dbh->addListener(new Doctrine_DB_TestLogger());
|
||||
$dbh->addListener(new Doctrine_DB_TestLogger());
|
||||
|
||||
$dbh->query('CREATE TABLE entity (id INT)');
|
||||
|
||||
$listener = $dbh->getListener()->get(0);
|
||||
$listener2 = $dbh->getListener()->get(1);
|
||||
$this->assertEqual($listener->pop(), 'onQuery');
|
||||
$this->assertEqual($listener->pop(), 'onPreQuery');
|
||||
|
||||
$this->assertEqual($listener2->pop(), 'onQuery');
|
||||
$this->assertEqual($listener2->pop(), 'onPreQuery');
|
||||
|
||||
|
||||
$stmt = $dbh->prepare('INSERT INTO entity (id) VALUES(?)');
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onPrepare');
|
||||
$this->assertEqual($listener->pop(), 'onPrePrepare');
|
||||
|
||||
$this->assertEqual($listener2->pop(), 'onPrepare');
|
||||
$this->assertEqual($listener2->pop(), 'onPrePrepare');
|
||||
|
||||
$stmt->execute(array(1));
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onExecute');
|
||||
$this->assertEqual($listener->pop(), 'onPreExecute');
|
||||
|
||||
$this->assertEqual($listener2->pop(), 'onExecute');
|
||||
$this->assertEqual($listener2->pop(), 'onPreExecute');
|
||||
|
||||
$dbh->exec('DELETE FROM entity');
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onExec');
|
||||
$this->assertEqual($listener->pop(), 'onPreExec');
|
||||
|
||||
$this->assertEqual($listener2->pop(), 'onExec');
|
||||
$this->assertEqual($listener2->pop(), 'onPreExec');
|
||||
|
||||
$dbh->beginTransaction();
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onBeginTransaction');
|
||||
$this->assertEqual($listener->pop(), 'onPreBeginTransaction');
|
||||
|
||||
$this->assertEqual($listener2->pop(), 'onBeginTransaction');
|
||||
$this->assertEqual($listener2->pop(), 'onPreBeginTransaction');
|
||||
|
||||
$dbh->query('INSERT INTO entity (id) VALUES (1)');
|
||||
|
||||
$dbh->commit();
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onCommit');
|
||||
$this->assertEqual($listener->pop(), 'onPreCommit');
|
||||
|
||||
$this->assertEqual($listener->pop(), 'onQuery');
|
||||
$this->assertEqual($listener->pop(), 'onPreQuery');
|
||||
|
||||
$dbh->query('DROP TABLE entity');
|
||||
}
|
||||
public function testSetValidEventListener() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
try {
|
||||
$dbh->setListener(new Doctrine_DB_TestLogger());
|
||||
$this->pass();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_TestLogger);
|
||||
try {
|
||||
$dbh->setListener(new Doctrine_DB_TestValidListener());
|
||||
$this->pass();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_TestValidListener);
|
||||
try {
|
||||
$dbh->setListener(new Doctrine_DB_EventListener_Chain());
|
||||
$this->pass();
|
||||
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener_Chain);
|
||||
try {
|
||||
$dbh->setListener(new Doctrine_DB_EventListener());
|
||||
$this->pass();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertTrue($dbh->getListener() instanceof Doctrine_DB_EventListener);
|
||||
}
|
||||
public function testSetInvalidEventListener() {
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
try {
|
||||
$dbh->setListener(new Doctrine_DB_TestInvalidListener());
|
||||
$this->fail();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
}
|
||||
public function testInvalidDSN() {
|
||||
try {
|
||||
$dbh = Doctrine_DB2::getConnection('');
|
||||
$this->fail();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
try {
|
||||
$dbh = Doctrine_DB2::getConnection('unknown');
|
||||
$this->fail();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
try {
|
||||
$dbh = Doctrine_DB2::getConnection(0);
|
||||
$this->fail();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
}
|
||||
public function testInvalidScheme() {
|
||||
try {
|
||||
$dbh = Doctrine_DB2::getConnection('unknown://:memory:');
|
||||
$this->fail();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
}
|
||||
public function testInvalidHost() {
|
||||
try {
|
||||
$dbh = Doctrine_DB2::getConnection('mysql://user:password@');
|
||||
$this->fail();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
}
|
||||
public function testInvalidDatabase() {
|
||||
try {
|
||||
$dbh = Doctrine_DB2::getConnection('mysql://user:password@host/');
|
||||
$this->fail();
|
||||
} catch(Doctrine_DB_Exception $e) {
|
||||
$this->pass();
|
||||
}
|
||||
}
|
||||
public function testGetConnectionPdoLikeDSN() {
|
||||
$dbh = Doctrine_DB2::getConnection('mysql:host=localhost;dbname=test', 'root', 'password');
|
||||
$this->assertEqual($dbh->getDSN(), 'mysql:host=localhost;dbname=test');
|
||||
$this->assertEqual($dbh->getUsername(), 'root');
|
||||
$this->assertEqual($dbh->getPassword(), 'password');
|
||||
|
||||
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
|
||||
$this->assertEqual($dbh->getDSN(), 'sqlite::memory:');
|
||||
$this->assertEqual($dbh->getUsername(), null);
|
||||
$this->assertEqual($dbh->getPassword(), null);
|
||||
}
|
||||
public function testDriverName() {
|
||||
|
||||
}
|
||||
|
||||
public function testGetConnectionWithPearLikeDSN() {
|
||||
$dbh = Doctrine_DB2::getConnection('mysql://zYne:password@localhost/test');
|
||||
$this->assertEqual($dbh->getDSN(), 'mysql:host=localhost;dbname=test');
|
||||
$this->assertEqual($dbh->getUsername(), 'zYne');
|
||||
$this->assertEqual($dbh->getPassword(), 'password');
|
||||
|
||||
|
||||
$dbh = Doctrine_DB2::getConnection('sqlite://:memory:');
|
||||
|
||||
$this->assertEqual($dbh->getDSN(), 'sqlite::memory:');
|
||||
$this->assertEqual($dbh->getUsername(), null);
|
||||
$this->assertEqual($dbh->getPassword(), null);
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
81
tests/DbProfilerTestCase.php
Normal file
81
tests/DbProfilerTestCase.php
Normal file
@ -0,0 +1,81 @@
|
||||
<?php
|
||||
class Doctrine_Db_Profiler_TestCase extends Doctrine_UnitTestCase {
|
||||
protected $dbh;
|
||||
|
||||
protected $profiler;
|
||||
public function prepareTables() {}
|
||||
public function prepareData() {}
|
||||
|
||||
public function testQuery() {
|
||||
$this->dbh = Doctrine_DB2::getConnection('sqlite::memory:');
|
||||
|
||||
$this->profiler = new Doctrine_DB_Profiler();
|
||||
|
||||
$this->dbh->setListener($this->profiler);
|
||||
|
||||
$this->dbh->query('CREATE TABLE test (id INT)');
|
||||
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'CREATE TABLE test (id INT)');
|
||||
$this->assertTrue($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
|
||||
$this->assertEqual($this->dbh->count(), 1);
|
||||
}
|
||||
public function testPrepareAndExecute() {
|
||||
|
||||
$stmt = $this->dbh->prepare('INSERT INTO test (id) VALUES (?)');
|
||||
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertFalse($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
|
||||
$stmt->execute(array(1));
|
||||
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertTrue($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
|
||||
$this->assertEqual($this->dbh->count(), 2);
|
||||
}
|
||||
|
||||
public function testMultiplePrepareAndExecute() {
|
||||
|
||||
$stmt = $this->dbh->prepare('INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertFalse($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
|
||||
$stmt2 = $this->dbh->prepare('INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertFalse($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
|
||||
$stmt->execute(array(1));
|
||||
$stmt2->execute(array(1));
|
||||
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertTrue($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
|
||||
$this->assertEqual($this->dbh->count(), 4);
|
||||
}
|
||||
/**
|
||||
public function testExecuteStatementMultipleTimes() {
|
||||
try {
|
||||
$stmt = $this->dbh->prepare('INSERT INTO test (id) VALUES (?)');
|
||||
$stmt->execute(array(1));
|
||||
$stmt->execute(array(1));
|
||||
$this->pass();
|
||||
} catch(Doctrine_Db_Exception $e) {
|
||||
$this->fail();
|
||||
}
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertTrue($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
|
||||
$this->assertEqual($this->profiler->lastQuery()->getQuery(), 'INSERT INTO test (id) VALUES (?)');
|
||||
$this->assertTrue($this->profiler->lastQuery()->hasEnded());
|
||||
$this->assertTrue(is_numeric($this->profiler->lastQuery()->getElapsedSecs()));
|
||||
} */
|
||||
}
|
||||
?>
|
@ -13,7 +13,7 @@ class Doctrine_Query_ComponentAlias_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($users->count(), 8);
|
||||
$this->assertTrue($users[0]->Phonenumber instanceof Doctrine_Collection);
|
||||
$this->assertEqual($q->getQuery(),
|
||||
"SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)");
|
||||
$this->assertEqual($count, count($this->dbh));
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ class Doctrine_Query_ComponentAlias_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($users->count(), 8);
|
||||
$this->assertTrue($users[0]->Phonenumber instanceof Doctrine_Collection);
|
||||
$this->assertEqual($q->getQuery(),
|
||||
"SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id LEFT JOIN phonenumber ON entity2.id = phonenumber.entity_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
"SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id LEFT JOIN phonenumber p ON e2.id = p.entity_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
|
||||
$this->assertEqual(($count + 1), count($this->dbh));
|
||||
}
|
||||
@ -47,7 +47,7 @@ class Doctrine_Query_ComponentAlias_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($users->count(), 8);
|
||||
$this->assertTrue($users[0]->Phonenumber instanceof Doctrine_Collection);
|
||||
$this->assertEqual($q->getQuery(),
|
||||
"SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id, phonenumber2.id AS phonenumber2__id, phonenumber2.phonenumber AS phonenumber2__phonenumber, phonenumber2.entity_id AS phonenumber2__entity_id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id LEFT JOIN phonenumber AS phonenumber2 ON entity2.id = phonenumber2.entity_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
"SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id, p2.id AS p2__id, p2.p AS p2__p, p2.entity_id AS p2__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id LEFT JOIN p AS p2 ON e2.id = p2.entity_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$this->assertEqual($count, count($this->dbh));
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ class Doctrine_Query_Condition_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$query->from("User(id)")->where("User.name LIKE 'z%' || User.name LIKE 's%'");
|
||||
|
||||
$sql = "SELECT entity.id AS entity__id FROM entity WHERE (entity.name LIKE 'z%' OR entity.name LIKE 's%') AND (entity.type = 0)";
|
||||
$sql = "SELECT e.id AS e__id FROM entity e WHERE (e.name LIKE 'z%' OR e.name LIKE 's%') AND (e.type = 0)";
|
||||
$this->assertEqual($query->getQuery(), $sql);
|
||||
|
||||
$query->where("(User.name LIKE 'z%') || (User.name LIKE 's%')");
|
||||
@ -32,7 +32,7 @@ class Doctrine_Query_Condition_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$query->where("(User.name LIKE 'z%') || User.name LIKE 's%' && User.name LIKE 'a%'");
|
||||
|
||||
$sql = "SELECT entity.id AS entity__id FROM entity WHERE ((entity.name LIKE 'z%' OR entity.name LIKE 's%') AND entity.name LIKE 'a%') AND (entity.type = 0)";
|
||||
$sql = "SELECT e.id AS e__id FROM entity e WHERE ((e.name LIKE 'z%' OR e.name LIKE 's%') AND e.name LIKE 'a%') AND (e.type = 0)";
|
||||
|
||||
$this->assertEqual($query->getQuery(), $sql);
|
||||
|
||||
@ -52,7 +52,7 @@ class Doctrine_Query_Condition_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$query->from("User(id)")->where("User.name LIKE 'z%' || User.name LIKE 's%'");
|
||||
|
||||
$sql = "SELECT entity.id AS entity__id FROM entity WHERE (entity.name LIKE 'z%' OR entity.name LIKE 's%') AND (entity.type = 0)";
|
||||
$sql = "SELECT e.id AS e__id FROM entity e WHERE (e.name LIKE 'z%' OR e.name LIKE 's%') AND (e.type = 0)";
|
||||
$this->assertEqual($query->getQuery(), $sql);
|
||||
|
||||
$query->where("(User.name LIKE 'z%') OR (User.name LIKE 's%')");
|
||||
@ -69,7 +69,7 @@ class Doctrine_Query_Condition_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$query->where("(User.name LIKE 'z%') OR User.name LIKE 's%' AND User.name LIKE 'a%'");
|
||||
|
||||
$sql = "SELECT entity.id AS entity__id FROM entity WHERE ((entity.name LIKE 'z%' OR entity.name LIKE 's%') AND entity.name LIKE 'a%') AND (entity.type = 0)";
|
||||
$sql = "SELECT e.id AS e__id FROM entity e WHERE ((e.name LIKE 'z%' OR e.name LIKE 's%') AND e.name LIKE 'a%') AND (e.type = 0)";
|
||||
|
||||
$this->assertEqual($query->getQuery(), $sql);
|
||||
|
||||
|
@ -5,65 +5,65 @@ class Doctrine_Query_Delete_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->parseQuery('DELETE FROM User');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e WHERE (e.type = 0)');
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->delete()->from('User');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e WHERE (e.type = 0)');
|
||||
}
|
||||
public function testDeleteAll() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('DELETE FROM Entity');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e');
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->delete()->from('Entity');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e');
|
||||
}
|
||||
public function testDeleteWithCondition() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('DELETE FROM Entity WHERE id = 3');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity WHERE id = 3');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e WHERE id = 3');
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->delete()->from('Entity')->where('id = 3');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity WHERE id = 3');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e WHERE id = 3');
|
||||
}
|
||||
public function testDeleteWithLimit() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('DELETE FROM Entity LIMIT 20');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity LIMIT 20');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e LIMIT 20');
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->delete()->from('Entity')->limit(20);
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity LIMIT 20');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e LIMIT 20');
|
||||
}
|
||||
public function testDeleteWithLimitAndOffset() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('DELETE FROM Entity LIMIT 10 OFFSET 20');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity LIMIT 10 OFFSET 20');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e LIMIT 10 OFFSET 20');
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->delete()->from('Entity')->limit(10)->offset(20);
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity LIMIT 10 OFFSET 20');
|
||||
$this->assertEqual($q->getQuery(), 'DELETE FROM entity e LIMIT 10 OFFSET 20');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -5,7 +5,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u LEFT JOIN u.Group');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id FROM entity e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
|
||||
$users = $q->execute();
|
||||
|
||||
@ -16,7 +16,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u JOIN u.Group');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id FROM entity e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
|
||||
$users = $q->execute();
|
||||
|
||||
@ -27,7 +27,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u INNER JOIN u.Group');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id FROM entity INNER JOIN groupuser ON entity.id = groupuser.user_id INNER JOIN entity AS entity2 ON entity2.id = groupuser.group_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id FROM entity e INNER JOIN groupuser ON e.id = groupuser.user_id INNER JOIN entity e2 ON e2.id = groupuser.group_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
|
||||
$users = $q->execute();
|
||||
|
||||
@ -38,7 +38,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u LEFT JOIN u.Group LEFT JOIN u.Phonenumber');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$users = $q->execute();
|
||||
|
||||
$this->assertEqual($users->count(), 8);
|
||||
@ -48,7 +48,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u LEFT JOIN u.Group LEFT JOIN u.Phonenumber');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$users = $q->execute();
|
||||
|
||||
$this->assertEqual($users->count(), 8);
|
||||
@ -58,7 +58,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u INNER JOIN u.Group INNER JOIN u.Phonenumber');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity INNER JOIN groupuser ON entity.id = groupuser.user_id INNER JOIN entity AS entity2 ON entity2.id = groupuser.group_id INNER JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e INNER JOIN groupuser ON e.id = groupuser.user_id INNER JOIN entity e2 ON e2.id = groupuser.group_id INNER JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$users = $q->execute();
|
||||
|
||||
$this->assertEqual($users->count(), 1);
|
||||
@ -68,7 +68,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u INNER JOIN u.Group, u.Phonenumber');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity INNER JOIN groupuser ON entity.id = groupuser.user_id INNER JOIN entity AS entity2 ON entity2.id = groupuser.group_id INNER JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e INNER JOIN groupuser ON e.id = groupuser.user_id INNER JOIN entity e2 ON e2.id = groupuser.group_id INNER JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$users = $q->execute();
|
||||
|
||||
$this->assertEqual($users->count(), 1);
|
||||
@ -78,7 +78,7 @@ class Doctrine_Query_From_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->from('User u INNER JOIN u.Group LEFT JOIN u.Phonenumber');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, entity2.id AS entity2__id, entity2.name AS entity2__name, entity2.loginname AS entity2__loginname, entity2.password AS entity2__password, entity2.type AS entity2__type, entity2.created AS entity2__created, entity2.updated AS entity2__updated, entity2.email_id AS entity2__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity INNER JOIN groupuser ON entity.id = groupuser.user_id INNER JOIN entity AS entity2 ON entity2.id = groupuser.group_id LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, e2.id AS e2__id, e2.name AS e2__name, e2.loginname AS e2__loginname, e2.password AS e2__password, e2.type AS e2__type, e2.created AS e2__created, e2.updated AS e2__updated, e2.email_id AS e2__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e INNER JOIN groupuser ON e.id = groupuser.user_id INNER JOIN entity e2 ON e2.id = groupuser.group_id LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$users = $q->execute();
|
||||
|
||||
$this->assertEqual($users->count(), 1);
|
||||
|
@ -7,13 +7,14 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
parent::prepareTables();
|
||||
}
|
||||
/**
|
||||
public function testLimitWithOneToOneLeftJoin() {
|
||||
$q = new Doctrine_Query($this->connection);
|
||||
$q->from('User(id).Email')->limit(5);
|
||||
|
||||
$users = $q->execute();
|
||||
$this->assertEqual($users->count(), 5);
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, email.id AS email__id, email.address AS email__address FROM entity LEFT JOIN email ON entity.email_id = email.id WHERE (entity.type = 0) LIMIT 5");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e2.id AS e2__id, e2.address AS e2__address FROM entity e LEFT JOIN email e2 ON e.email_id = e2.id WHERE (e.type = 0) LIMIT 5");
|
||||
|
||||
}
|
||||
public function testLimitWithOneToOneInnerJoin() {
|
||||
@ -22,13 +23,15 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$users = $q->execute();
|
||||
$this->assertEqual($users->count(), 5);
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, email.id AS email__id, email.address AS email__address FROM entity INNER JOIN email ON entity.email_id = email.id WHERE (entity.type = 0) LIMIT 5");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e2.id AS e2__id, e2.address AS e2__address FROM entity e INNER JOIN email e2 ON e.email_id = e2.id WHERE (e.type = 0) LIMIT 5");
|
||||
}
|
||||
public function testLimitWithOneToManyLeftJoin() {
|
||||
$this->query->from("User(id).Phonenumber");
|
||||
$this->query->limit(5);
|
||||
|
||||
$sql = $this->query->getQuery();
|
||||
$this->assertEqual($this->query->getQuery(),
|
||||
'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 WHERE (e2.type = 0) LIMIT 5) AND (e.type = 0)');
|
||||
|
||||
$users = $this->query->execute();
|
||||
$count = $this->dbh->count();
|
||||
@ -37,8 +40,6 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($count, $this->dbh->count());
|
||||
|
||||
|
||||
$this->assertEqual($this->query->getQuery(),
|
||||
'SELECT entity.id AS entity__id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT DISTINCT entity.id FROM entity WHERE (entity.type = 0) LIMIT 5) AND (entity.type = 0)');
|
||||
|
||||
|
||||
$this->query->offset(2);
|
||||
@ -53,20 +54,22 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
public function testLimitWithOneToManyLeftJoinAndCondition() {
|
||||
$q = new Doctrine_Query($this->connection);
|
||||
$q->from("User(name)")->where("User.Phonenumber.phonenumber LIKE '%123%'")->limit(5);
|
||||
|
||||
$users = $q->execute();
|
||||
|
||||
|
||||
$this->assertEqual($users->count(), 5);
|
||||
|
||||
$this->assertEqual($users[0]->name, 'zYne');
|
||||
$this->assertEqual($users[1]->name, 'Arnold Schwarzenegger');
|
||||
$this->assertEqual($users[2]->name, 'Michael Caine');
|
||||
$this->assertEqual($users[3]->name, 'Sylvester Stallone');
|
||||
$this->assertEqual($users[4]->name, 'Jean Reno');
|
||||
|
||||
$this->assertEqual($users->count(), 5);
|
||||
|
||||
$this->assertEqual($q->getQuery(),
|
||||
"SELECT entity.id AS entity__id, entity.name AS entity__name FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT DISTINCT entity.id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE phonenumber.phonenumber LIKE '%123%' AND (entity.type = 0) LIMIT 5) AND phonenumber.phonenumber LIKE '%123%' AND (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, e.name AS e__name FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 LEFT JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE p2.phonenumber LIKE '%123%' AND (e2.type = 0) LIMIT 5) AND p.phonenumber LIKE '%123%' AND (e.type = 0)");
|
||||
}
|
||||
|
||||
|
||||
public function testLimitWithOneToManyLeftJoinAndOrderBy() {
|
||||
$q = new Doctrine_Query($this->connection);
|
||||
$q->from("User(name)")->where("User.Phonenumber.phonenumber LIKE '%123%'")->orderby("User.Email.address")->limit(5);
|
||||
@ -80,7 +83,7 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$this->assertEqual($users->count(), 5);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public function testLimitWithOneToManyInnerJoin() {
|
||||
$this->query->select('u.id')->from("User u INNER JOIN u.Phonenumber");
|
||||
@ -105,8 +108,9 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($count, $this->dbh->count());
|
||||
|
||||
$this->assertEqual($this->query->getQuery(),
|
||||
'SELECT entity.id AS entity__id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity INNER JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT DISTINCT entity.id FROM entity INNER JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0) LIMIT 5 OFFSET 2) AND (entity.type = 0)');
|
||||
'SELECT e.id AS e__id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e INNER JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 INNER JOIN phonenumber p2 ON e2.id = p2.entity_id WHERE (e2.type = 0) LIMIT 5 OFFSET 2) AND (e.type = 0)');
|
||||
}
|
||||
|
||||
public function testLimitWithPreparedQueries() {
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User(id).Phonenumber(id)");
|
||||
@ -120,7 +124,7 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($count, $this->dbh->count());
|
||||
|
||||
$this->assertEqual($q->getQuery(),
|
||||
'SELECT entity.id AS entity__id, phonenumber.id AS phonenumber__id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT DISTINCT entity.id FROM entity WHERE entity.name = ? AND (entity.type = 0) LIMIT 5) AND entity.name = ? AND (entity.type = 0)');
|
||||
'SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 WHERE e2.name = ? AND (e2.type = 0) LIMIT 5) AND e.name = ? AND (e.type = 0)');
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User(id).Phonenumber(id)");
|
||||
@ -135,9 +139,11 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($count, $this->dbh->count());
|
||||
|
||||
$this->assertEqual($q->getQuery(),
|
||||
"SELECT entity.id AS entity__id, phonenumber.id AS phonenumber__id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT DISTINCT entity.id FROM entity WHERE (entity.name LIKE ? OR entity.name LIKE ?) AND (entity.type = 0) LIMIT 5) AND (entity.name LIKE ? OR entity.name LIKE ?) AND (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE e.id IN (SELECT DISTINCT e2.id FROM entity e2 WHERE (e2.name LIKE ? OR e2.name LIKE ?) AND (e2.type = 0) LIMIT 5) AND (e.name LIKE ? OR e.name LIKE ?) AND (e.type = 0)");
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public function testConnectionFlushing() {
|
||||
$q = new Doctrine_Query();
|
||||
@ -150,10 +156,13 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->connection->flush();
|
||||
}
|
||||
|
||||
|
||||
public function testLimitWithManyToManyColumnAggInheritanceLeftJoin() {
|
||||
$q = new Doctrine_Query($this->connection);
|
||||
$q->from("User.Group")->limit(5);
|
||||
|
||||
$users = $q->execute();
|
||||
|
||||
|
||||
$this->assertEqual($users->count(), 5);
|
||||
|
||||
@ -179,6 +188,7 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User")->where("User.Group.id = ?")->orderby("User.id ASC")->limit(5);
|
||||
|
||||
|
||||
$users = $q->execute(array($user->Group[1]->id));
|
||||
|
||||
$this->assertEqual($users->count(), 3);
|
||||
@ -190,20 +200,22 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$this->assertEqual($users->count(), 3);
|
||||
}
|
||||
|
||||
public function testLimitAttribute() {
|
||||
$this->manager->setAttribute(Doctrine::ATTR_QUERY_LIMIT, Doctrine::LIMIT_ROWS);
|
||||
$this->manager->setAttribute(Doctrine::ATTR_QUERY_LIMIT, Doctrine::LIMIT_RECORDS);
|
||||
|
||||
$this->connection->clear();
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User")->where("User.Group.id = ?")->orderby("User.id DESC")->limit(5);
|
||||
$users = $q->execute(array(3));
|
||||
|
||||
print $q;
|
||||
$this->assertEqual($users->count(), 3);
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id WHERE entity2.id = ? AND (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL)) ORDER BY entity.id DESC LIMIT 5");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id WHERE e2.id = ? AND (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL)) ORDER BY e.id DESC LIMIT 5");
|
||||
|
||||
$this->manager->setAttribute(Doctrine::ATTR_QUERY_LIMIT, Doctrine::LIMIT_RECORDS);
|
||||
}
|
||||
*/
|
||||
public function testLimitWithNormalManyToMany() {
|
||||
$coll = new Doctrine_Collection($this->connection->getTable("Photo"));
|
||||
$tag = new Tag();
|
||||
@ -220,10 +232,12 @@ class Doctrine_Query_Limit_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("Photo")->where("Photo.Tag.id = ?")->orderby("Photo.id DESC")->limit(100);
|
||||
|
||||
$photos = $q->execute(array(1));
|
||||
$this->assertEqual($photos->count(), 3);
|
||||
$this->assertEqual($q->getQuery(),
|
||||
"SELECT photo.id AS photo__id, photo.name AS photo__name FROM photo LEFT JOIN phototag ON photo.id = phototag.photo_id LEFT JOIN tag ON tag.id = phototag.tag_id WHERE photo.id IN (SELECT DISTINCT photo.id FROM photo LEFT JOIN phototag ON photo.id = phototag.photo_id LEFT JOIN tag ON tag.id = phototag.tag_id WHERE tag.id = ? ORDER BY photo.id DESC LIMIT 100) AND tag.id = ? ORDER BY photo.id DESC");
|
||||
"SELECT p.id AS p__id, p.name AS p__name FROM photo p LEFT JOIN phototag ON p.id = phototag.photo_id LEFT JOIN tag t ON t.id = phototag.tag_id WHERE p.id IN (SELECT DISTINCT p2.id FROM photo p2 LEFT JOIN phototag ON p2.id = phototag.photo_id LEFT JOIN tag t2 ON t2.id = phototag.tag_id WHERE t2.id = ? ORDER BY p2.id DESC LIMIT 100) AND t2.id = ? ORDER BY p.id DESC");
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
|
@ -7,21 +7,21 @@ class Doctrine_Query_Select_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->parseQuery('SELECT COUNT(u.id) FROM User u');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT COUNT(entity.id) AS entity__0 FROM entity WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT COUNT(e.id) AS e__0 FROM entity e WHERE (e.type = 0)');
|
||||
}
|
||||
public function testMultipleAggregateFunctions() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('SELECT MAX(u.id), MIN(u.name) FROM User u');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT MAX(entity.id) AS entity__0, MIN(entity.name) AS entity__1 FROM entity WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT MAX(e.id) AS e__0, MIN(e.name) AS e__1 FROM entity e WHERE (e.type = 0)');
|
||||
}
|
||||
public function testMultipleAggregateFunctionsWithMultipleComponents() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('SELECT MAX(u.id), MIN(u.name), COUNT(p.id) FROM User u, u.Phonenumber p');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT MAX(entity.id) AS entity__0, MIN(entity.name) AS entity__1, COUNT(phonenumber.id) AS phonenumber__2 FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT MAX(e.id) AS e__0, MIN(e.name) AS e__1, COUNT(p.id) AS p__2 FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)');
|
||||
}
|
||||
public function testEmptySelectPart() {
|
||||
$q = new Doctrine_Query();
|
||||
@ -97,28 +97,28 @@ class Doctrine_Query_Select_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->parseQuery('SELECT u.* FROM User u');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE (e.type = 0)');
|
||||
}
|
||||
public function testSingleComponentWithMultipleColumns() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('SELECT u.name, u.type FROM User u');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT entity.id AS entity__id, entity.name AS entity__name, entity.type AS entity__type FROM entity WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name, e.type AS e__type FROM entity e WHERE (e.type = 0)');
|
||||
}
|
||||
public function testMultipleComponentsWithAsterisk() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('SELECT u.*, p.* FROM User u, u.Phonenumber p');
|
||||
|
||||
$this->assertEqual($q->getQuery(),'SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, phonenumber.id AS phonenumber__id, phonenumber.phonenumber AS phonenumber__phonenumber, phonenumber.entity_id AS phonenumber__entity_id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(),'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, p.id AS p__id, p.phonenumber AS p__phonenumber, p.entity_id AS p__entity_id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)');
|
||||
}
|
||||
public function testMultipleComponentsWithMultipleColumns() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->parseQuery('SELECT u.id, u.name, p.id FROM User u, u.Phonenumber p');
|
||||
|
||||
$this->assertEqual($q->getQuery(),'SELECT entity.id AS entity__id, entity.name AS entity__name, phonenumber.id AS phonenumber__id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(),'SELECT e.id AS e__id, e.name AS e__name, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)');
|
||||
}
|
||||
|
||||
}
|
||||
|
22
tests/QueryShortAliasesTestCase.php
Normal file
22
tests/QueryShortAliasesTestCase.php
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
class Doctrine_Query_ShortAliases_TestCase extends Doctrine_UnitTestCase {
|
||||
public function testShortAliasesWithSingleComponent() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->select('u.name')->from('User u');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name FROM entity e WHERE (e.type = 0)');
|
||||
}
|
||||
public function testShortAliasesWithOneToManyLeftJoin() {
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->select('u.name, p.id')->from('User u LEFT JOIN u.Phonenumber p');
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)');
|
||||
|
||||
$users = $q->execute();
|
||||
|
||||
$this->assertEqual($users->count(), 8);
|
||||
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@ class Doctrine_Query_Subquery_TestCase extends Doctrine_UnitTestCase {
|
||||
$q->from('User')->where("User.id NOT IN (FROM User(id) WHERE User.name = 'zYne')");
|
||||
|
||||
$this->assertEqual($q->getQuery(),
|
||||
"SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity WHERE entity.id NOT IN (SELECT entity.id AS entity__id FROM entity WHERE entity.name = 'zYne' AND (entity.type = 0)) AND (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE e.id NOT IN (SELECT e.id AS e__id FROM entity e WHERE e.name = 'zYne' AND (e.type = 0)) AND (e.type = 0)");
|
||||
|
||||
$users = $q->execute();
|
||||
|
||||
|
@ -29,6 +29,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
parent::prepareTables();
|
||||
$this->connection->clear();
|
||||
}
|
||||
/**
|
||||
public function testValidLazyPropertyFetching() {
|
||||
$q = new Doctrine_Query($this->connection);
|
||||
$q->from("User(id, name)");
|
||||
@ -76,7 +77,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->parseQuery($dql);
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity WHERE entity.id = ? AND (entity.type = 0)");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e e WHERE e.id = ? AND (e.type = 0)");
|
||||
}
|
||||
public function testUnknownFunction() {
|
||||
$q = new Doctrine_Query();
|
||||
@ -108,7 +109,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$coll = $q->execute(array('123 123'));
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber = ?) AND (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e e LEFT JOIN phonenumber ON e.id = p.entity_id WHERE e.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber = ?) AND (e.type = 0)');
|
||||
|
||||
$this->assertEqual($coll->count(), 3);
|
||||
$this->assertEqual($coll[0]->name, 'zYne');
|
||||
@ -126,7 +127,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$coll = $q->execute(array('%123%', '%5%'));
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber LIKE ?) AND entity.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber LIKE ?) AND (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e e LEFT JOIN phonenumber ON e.id = p.entity_id WHERE e.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber LIKE ?) AND e.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber LIKE ?) AND (e.type = 0)');
|
||||
|
||||
$this->assertEqual($coll->count(), 3);
|
||||
$this->assertEqual($coll[0]->name, 'Arnold Schwarzenegger');
|
||||
@ -144,7 +145,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$coll = $q->execute(array('123%'));
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE entity.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber LIKE ?) AND (entity.type = 0)');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e e LEFT JOIN phonenumber ON e.id = p.entity_id WHERE e.id IN (SELECT entity_id FROM phonenumber WHERE phonenumber LIKE ?) AND (e.type = 0)');
|
||||
|
||||
$this->assertEqual($coll->count(), 5);
|
||||
$this->assertEqual($coll[0]->name, 'zYne');
|
||||
@ -171,7 +172,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
->where("EnumTest.status = 'open'")
|
||||
->execute();
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT enum_test.id AS enum_test__id, enum_test.status AS enum_test__status FROM enum_test WHERE enum_test.status = 0');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.status AS e__status FROM enum_test e WHERE e.status = 0');
|
||||
$this->assertEqual($coll->count(), 1);
|
||||
|
||||
$q = new Doctrine_Query;
|
||||
@ -180,7 +181,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
->where("EnumTest.status = 'verified'")
|
||||
->execute();
|
||||
|
||||
$this->assertEqual($q->getQuery(), 'SELECT enum_test.id AS enum_test__id, enum_test.status AS enum_test__status FROM enum_test WHERE enum_test.status = 1');
|
||||
$this->assertEqual($q->getQuery(), 'SELECT e.id AS e__id, e.status AS e__status FROM enum_test e WHERE e.status = 1');
|
||||
$this->assertEqual($coll->count(), 1);
|
||||
}
|
||||
|
||||
@ -188,7 +189,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$query = new Doctrine_Query($this->connection);
|
||||
|
||||
$query->from('User-l:Group-l');
|
||||
$query->from('User u INNER JOIN u.Group g');
|
||||
|
||||
$users = $query->execute();
|
||||
$this->assertEqual($users->count(), 1);
|
||||
@ -216,25 +217,34 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($users[2]->type, 0);
|
||||
|
||||
$this->connection->flush();
|
||||
|
||||
}
|
||||
public function testManyToManyFetchingWithColumnAggregationInheritance2() {
|
||||
$query = new Doctrine_Query();
|
||||
$users = $query->query("FROM User-b WHERE User.Group.name = 'Action Actors'");
|
||||
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id WHERE entity2.name = 'Action Actors' AND (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
"SELECT e.id AS e__id FROM entity e e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id WHERE e2.name = 'Action Actors' AND (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$this->assertTrue($users instanceof Doctrine_Collection);
|
||||
$this->assertEqual($users->count(),1);
|
||||
|
||||
$this->assertEqual(count($this->dbh->query($query->getQuery())->fetchAll()),1);
|
||||
|
||||
$this->assertEqual(count($this->dbh->query($query->getQuery())->fetchAll()), 1);
|
||||
}
|
||||
public function testManyToManyFetchingWithColumnAggregationInheritance3() {
|
||||
$query = new Doctrine_Query();
|
||||
$users = $query->query("FROM User-b WHERE User.Group.Phonenumber.phonenumber LIKE '123 123'");
|
||||
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id FROM entity LEFT JOIN groupuser ON entity.id = groupuser.user_id LEFT JOIN entity AS entity2 ON entity2.id = groupuser.group_id LEFT JOIN phonenumber ON entity2.id = phonenumber.entity_id WHERE phonenumber.phonenumber LIKE '123 123' AND (entity.type = 0 AND (entity2.type = 1 OR entity2.type IS NULL))");
|
||||
"SELECT e.id AS e__id FROM entity e e LEFT JOIN groupuser ON e.id = groupuser.user_id LEFT JOIN entity e2 ON e2.id = groupuser.group_id LEFT JOIN phonenumber ON e2.id = p.entity_id WHERE p.phonenumber LIKE '123 123' AND (e.type = 0 AND (e2.type = 1 OR e2.type IS NULL))");
|
||||
$this->assertTrue($users instanceof Doctrine_Collection);
|
||||
$this->assertEqual($users->count(),1);
|
||||
|
||||
}
|
||||
*/
|
||||
public function testManyToManyFetchingWithColumnAggregationInheritance4() {
|
||||
$query = new Doctrine_Query();
|
||||
$users = $query->query("FROM User.Group WHERE User.Group.name = 'Action Actors'");
|
||||
$query->parseQuery("FROM User.Group WHERE User.Group.name = 'Action Actors'");
|
||||
|
||||
$users = $query->execute();
|
||||
|
||||
$this->assertEqual($users->count(), 1);
|
||||
$count = $this->dbh->count();
|
||||
|
||||
@ -245,15 +255,15 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$this->assertEqual($users[0]->Group[0]->name, 'Action Actors');
|
||||
$this->assertEqual($count, $this->dbh->count());
|
||||
}
|
||||
|
||||
/**
|
||||
public function testSelectingAggregateValues() {
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User(COUNT(1), MAX(name))");
|
||||
$array = $q->execute();
|
||||
$this->assertTrue(is_array($array));
|
||||
$this->assertEqual($array, array(array('COUNT(1)' => '8', 'MAX(entity.name)' => 'zYne')));
|
||||
$this->assertEqual($q->getQuery(), "SELECT COUNT(1), MAX(entity.name) FROM entity WHERE (entity.type = 0)");
|
||||
$this->assertEqual($array, array(array('COUNT(1)' => '8', 'MAX(e.name)' => 'zYne')));
|
||||
$this->assertEqual($q->getQuery(), "SELECT COUNT(1), MAX(e.name) FROM entity e e WHERE (e.type = 0)");
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("Phonenumber(COUNT(1))");
|
||||
@ -261,29 +271,28 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$array = $q->execute();
|
||||
$this->assertTrue(is_array($array));
|
||||
$this->assertEqual($array, array(array('COUNT(1)' => '15')));
|
||||
$this->assertEqual($q->getQuery(), "SELECT COUNT(1) FROM phonenumber");
|
||||
$this->assertEqual($q->getQuery(), "SELECT COUNT(1) FROM phonenumber p");
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User.Phonenumber(COUNT(id))");
|
||||
$array = $q->execute();
|
||||
$this->assertTrue(is_array($array));
|
||||
|
||||
$this->assertEqual($array[0]['COUNT(phonenumber.id)'], 14);
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id, COUNT(phonenumber.id) FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0)");
|
||||
$this->assertEqual($array[0]['COUNT(p.id)'], 14);
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id, COUNT(p.id) FROM entity e e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)");
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User(MAX(id)).Email(MIN(address))");
|
||||
$array = $q->execute();
|
||||
$this->assertTrue(is_array($array));
|
||||
$this->assertEqual($array[0]['MAX(entity.id)'], 11);
|
||||
$this->assertEqual($array[0]['MIN(email.address)'], 'arnold@example.com');
|
||||
$q->select('MAX(u.id), MIN(e.address)')->from("User u INNER JOIN u.Email e");
|
||||
$coll = $q->execute();
|
||||
$this->assertEqual($coll->getAggregateValue('MAX(e.id)'), 11);
|
||||
$this->assertEqual($coll['MIN(email.address)'], 'arnold@example.com');
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
$q->from("User(MAX(id)).Email(MIN(address)), User.Phonenumber(COUNT(1))");
|
||||
$array = $q->execute();
|
||||
$this->assertTrue(is_array($array));
|
||||
|
||||
$this->assertEqual($array[0]['MAX(entity.id)'], 11);
|
||||
$this->assertEqual($array[0]['MAX(e.id)'], 11);
|
||||
$this->assertEqual($array[0]['MIN(email.address)'], 'arnold@example.com');
|
||||
$this->assertEqual($array[0]['COUNT(1)'], 14);
|
||||
|
||||
@ -295,6 +304,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
//$this->assertEqual(count($coll), 8);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
public function testMultipleFetching() {
|
||||
@ -341,18 +351,18 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
public function testGetPath() {
|
||||
$this->query->from("User.Group.Email");
|
||||
|
||||
$this->assertEqual($this->query->getTableAlias("User"), "entity");
|
||||
$this->assertEqual($this->query->getTableAlias("User.Group"), "entity2");
|
||||
$this->assertEqual($this->query->getTableAlias("User"), "e");
|
||||
$this->assertEqual($this->query->getTableAlias("User.Group"), "e2");
|
||||
|
||||
|
||||
$this->query->from("Task.Subtask.Subtask");
|
||||
$this->assertEqual($this->query->getTableAlias("Task"), "task");
|
||||
$this->assertEqual($this->query->getTableAlias("Task.Subtask"), "task2");
|
||||
$this->assertEqual($this->query->getTableAlias("Task.Subtask.Subtask"), "task3");
|
||||
$this->assertEqual($this->query->getTableAlias("Task"), "t");
|
||||
$this->assertEqual($this->query->getTableAlias("Task.Subtask"), "t2");
|
||||
$this->assertEqual($this->query->getTableAlias("Task.Subtask.Subtask"), "t3");
|
||||
|
||||
|
||||
$this->assertEqual($this->query->getQuery(),
|
||||
"SELECT task.id AS task__id, task.name AS task__name, task.parent_id AS task__parent_id, task2.id AS task2__id, task2.name AS task2__name, task2.parent_id AS task2__parent_id, task3.id AS task3__id, task3.name AS task3__name, task3.parent_id AS task3__parent_id FROM task LEFT JOIN task AS task2 ON task.id = task2.parent_id LEFT JOIN task AS task3 ON task2.id = task3.parent_id");
|
||||
"SELECT t.id AS t__id, t.name AS t__name, t.parent_id AS t__parent_id, t2.id AS t2__id, t2.name AS t2__name, t2.parent_id AS t2__parent_id, t3.id AS t3__id, t3.name AS t3__name, t3.parent_id AS t3__parent_id FROM task t LEFT JOIN task t2 ON t.id = t2.parent_id LEFT JOIN task t3 ON t2.id = t3.parent_id");
|
||||
}
|
||||
|
||||
public function testMultiComponentFetching2() {
|
||||
@ -908,19 +918,19 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$table = $this->connection->getTable("Forum_Thread")->setAttribute(Doctrine::ATTR_FETCHMODE, Doctrine::FETCH_LAZY);
|
||||
$q->from("Forum_Board.Threads");
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT forum__board.id AS forum__board__id, forum__thread.id AS forum__thread__id FROM forum__board LEFT JOIN forum__thread ON forum__board.id = forum__thread.board_id");
|
||||
$this->assertEqual($q->getQuery(), "SELECT f.id AS f__id, f2.id AS f2__id FROM forum__board f LEFT JOIN forum__thread f2 ON f.id = f2.board_id");
|
||||
$coll = $q->execute();
|
||||
$this->assertEqual($coll->count(), 1);
|
||||
|
||||
|
||||
|
||||
$q->from("Forum_Board-l.Threads-l");
|
||||
$this->assertEqual($q->getQuery(), "SELECT forum__board.id AS forum__board__id, forum__thread.id AS forum__thread__id FROM forum__board LEFT JOIN forum__thread ON forum__board.id = forum__thread.board_id");
|
||||
$this->assertEqual($q->getQuery(), "SELECT f.id AS f__id, f2.id AS f2__id FROM forum__board f LEFT JOIN forum__thread f2 ON f.id = f2.board_id");
|
||||
|
||||
//$this->connection->clear();
|
||||
|
||||
$q->from("Forum_Board-l.Threads-l.Entries-l");
|
||||
$this->assertEqual($q->getQuery(), "SELECT forum__board.id AS forum__board__id, forum__thread.id AS forum__thread__id, forum__entry.id AS forum__entry__id FROM forum__board LEFT JOIN forum__thread ON forum__board.id = forum__thread.board_id LEFT JOIN forum__entry ON forum__thread.id = forum__entry.thread_id");
|
||||
$this->assertEqual($q->getQuery(), "SELECT f.id AS f__id, f2.id AS f2__id, f3.id AS f3__id FROM forum__board f LEFT JOIN forum__thread f2 ON f.id = f2.board_id LEFT JOIN forum__entry f3 ON f2.id = f3.thread_id");
|
||||
$boards = $q->execute();
|
||||
$this->assertEqual($boards->count(), 1);
|
||||
$count = count($this->dbh);
|
||||
@ -960,23 +970,23 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$query = $query->from("User-l");
|
||||
|
||||
$this->assertTrue($query instanceof Doctrine_Query);
|
||||
$this->assertEqual($query->get("from"), array("entity" => true));
|
||||
$this->assertEqual($query->get("from"), "entity e");
|
||||
|
||||
$query = $query->orderby("User.name");
|
||||
$this->assertTrue($query instanceof Doctrine_Query);
|
||||
$this->assertEqual($query->get("orderby"), array("entity.name"));
|
||||
$this->assertEqual($query->get("orderby"), array("e.name"));
|
||||
|
||||
$query = $query->orderby("User.created");
|
||||
$this->assertTrue($query instanceof Doctrine_Query);
|
||||
$this->assertEqual($query->get("orderby"), array("entity.created"));
|
||||
$this->assertEqual($query->get("orderby"), array("e.created"));
|
||||
|
||||
$query = $query->where("User.name LIKE 'zYne%'");
|
||||
$this->assertTrue($query instanceof Doctrine_Query);
|
||||
$this->assertEqual($query->get("where"), array("entity.name LIKE 'zYne%'"));
|
||||
$this->assertEqual($query->get("where"), array("e.name LIKE 'zYne%'"));
|
||||
|
||||
$query = $query->where("User.name LIKE 'Arnold%'");
|
||||
$this->assertTrue($query instanceof Doctrine_Query);
|
||||
$this->assertEqual($query->get("where"), array("entity.name LIKE 'Arnold%'"));
|
||||
$this->assertEqual($query->get("where"), array("e.name LIKE 'Arnold%'"));
|
||||
|
||||
$query = $query->limit(5);
|
||||
$this->assertTrue($query instanceof Doctrine_Query);
|
||||
@ -1024,7 +1034,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$users = $query->execute();
|
||||
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id FROM entity LEFT JOIN email ON entity.email_id = email.id WHERE (entity.type = 0) ORDER BY entity.name ASC, email.address");
|
||||
"SELECT e.id AS e__id FROM entity e LEFT JOIN email e2 ON e.email_id = e2.id WHERE (e.type = 0) ORDER BY e.name ASC, e2.address");
|
||||
$this->assertEqual($users->count(),8);
|
||||
$this->assertTrue($users[0]->name == "Arnold Schwarzenegger");
|
||||
}
|
||||
@ -1032,7 +1042,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$query = new Doctrine_Query($this->connection);
|
||||
$users = $query->query("FROM User-b");
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id FROM entity WHERE (entity.type = 0)");
|
||||
"SELECT e.id AS e__id FROM entity e WHERE (e.type = 0)");
|
||||
|
||||
$this->assertEqual($users[0]->name, "zYne");
|
||||
$this->assertTrue($users instanceof Doctrine_Collection_Batch);
|
||||
@ -1041,7 +1051,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$query = new Doctrine_Query($this->connection);
|
||||
$users = $query->query("FROM User-l");
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id FROM entity WHERE (entity.type = 0)");
|
||||
"SELECT e.id AS e__id FROM entity e WHERE (e.type = 0)");
|
||||
|
||||
$this->assertEqual($users[0]->name, "zYne");
|
||||
$this->assertTrue($users instanceof Doctrine_Collection_Lazy);
|
||||
@ -1049,7 +1059,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
}
|
||||
|
||||
|
||||
function testFetchingWithCollectionExpanding() {
|
||||
public function testFetchingWithCollectionExpanding() {
|
||||
// DYNAMIC COLLECTION EXPANDING
|
||||
$query = new Doctrine_Query($this->connection);
|
||||
|
||||
@ -1079,7 +1089,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$users = $query->query("FROM User-b.Phonenumber-l WHERE User.Phonenumber.phonenumber LIKE '%123%'");
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id, phonenumber.id AS phonenumber__id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE phonenumber.phonenumber LIKE '%123%' AND (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE p.phonenumber LIKE '%123%' AND (e.type = 0)");
|
||||
|
||||
$count = $this->connection->getDBH()->count();
|
||||
|
||||
@ -1105,7 +1115,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$users = $query->query("FROM User-i");
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id, entity.name AS entity__name, entity.loginname AS entity__loginname, entity.password AS entity__password, entity.type AS entity__type, entity.created AS entity__created, entity.updated AS entity__updated, entity.email_id AS entity__email_id FROM entity WHERE (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, e.name AS e__name, e.loginname AS e__loginname, e.password AS e__password, e.type AS e__type, e.created AS e__created, e.updated AS e__updated, e.email_id AS e__email_id FROM entity e WHERE (e.type = 0)");
|
||||
|
||||
$count = $this->connection->getDBH()->count();
|
||||
$this->assertEqual($users[0]->name, "zYne");
|
||||
@ -1122,7 +1132,7 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$users = $query->query("FROM User-b.Phonenumber-b");
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id, phonenumber.id AS phonenumber__id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, p.id AS p__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE (e.type = 0)");
|
||||
|
||||
$this->assertEqual($users->count(),8);
|
||||
|
||||
@ -1139,29 +1149,29 @@ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase {
|
||||
$users = $query->query("FROM User-l:Email-b");
|
||||
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id, email.id AS email__id FROM entity INNER JOIN email ON entity.email_id = email.id WHERE (entity.type = 0)");
|
||||
"SELECT e.id AS e__id, e2.id AS e2__id FROM entity e INNER JOIN email e2 ON e.email_id = e2.id WHERE (e.type = 0)");
|
||||
|
||||
$this->assertEqual($users->count(),8);
|
||||
|
||||
$users = $query->query("FROM Email-b WHERE Email.address LIKE '%@example%'");
|
||||
|
||||
$this->assertEqual($query->getQuery(),
|
||||
"SELECT email.id AS email__id FROM email WHERE email.address LIKE '%@example%'");
|
||||
"SELECT e.id AS e__id FROM email e WHERE e.address LIKE '%@example%'");
|
||||
$this->assertEqual($users->count(),8);
|
||||
|
||||
$users = $query->query("FROM User-b WHERE User.name LIKE '%Jack%'");
|
||||
$this->assertEqual($query->getQuery(), "SELECT entity.id AS entity__id FROM entity WHERE entity.name LIKE '%Jack%' AND (entity.type = 0)");
|
||||
$this->assertEqual($query->getQuery(), "SELECT e.id AS e__id FROM entity e WHERE e.name LIKE '%Jack%' AND (e.type = 0)");
|
||||
$this->assertEqual($users->count(),0);
|
||||
|
||||
|
||||
$users = $query->query("FROM User-b WHERE User.Phonenumber.phonenumber LIKE '%123%'");
|
||||
$this->assertEqual(trim($query->getQuery()),
|
||||
"SELECT entity.id AS entity__id FROM entity LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id WHERE phonenumber.phonenumber LIKE '%123%' AND (entity.type = 0)");
|
||||
"SELECT e.id AS e__id FROM entity e LEFT JOIN phonenumber p ON e.id = p.entity_id WHERE p.phonenumber LIKE '%123%' AND (e.type = 0)");
|
||||
$this->assertEqual($users->count(),5);
|
||||
|
||||
|
||||
//$values = $query->query("SELECT COUNT(User.name) AS users, MAX(User.name) AS max FROM User");
|
||||
//$this->assertEqual(trim($query->getQuery()),"SELECT COUNT(entity.name) AS users, MAX(entity.name) AS max FROM entity WHERE (entity.type = 0)");
|
||||
//$this->assertEqual(trim($query->getQuery()),"SELECT COUNT(e.name) AS users, MAX(e.name) AS max FROM entity e e WHERE (e.type = 0)");
|
||||
//$this->assertTrue(is_array($values));
|
||||
//$this->assertTrue(isset($values['users']));
|
||||
//$this->assertTrue(isset($values['max']));
|
||||
|
@ -5,13 +5,13 @@ class Doctrine_Query_Update_TestCase extends Doctrine_UnitTestCase {
|
||||
|
||||
$q->parseQuery("UPDATE User u SET u.name = 'someone'");
|
||||
|
||||
$this->assertEqual($q->getQuery(), "UPDATE entity SET entity.name = 'someone' WHERE (entity.type = 0)");
|
||||
$this->assertEqual($q->getQuery(), "UPDATE entity SET e.name = 'someone' WHERE (e.type = 0)");
|
||||
|
||||
$q = new Doctrine_Query();
|
||||
|
||||
$q->update('User u')->set('u.name', 'someone');
|
||||
|
||||
$this->assertEqual($q->getQuery(), "UPDATE entity SET entity.name = 'someone' WHERE (entity.type = 0)");
|
||||
$this->assertEqual($q->getQuery(), "UPDATE entity SET e.name = 'someone' WHERE (e.type = 0)");
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -80,7 +80,7 @@ class Doctrine_Query_Where_TestCase extends Doctrine_UnitTestCase {
|
||||
$users = $q->execute();
|
||||
$this->assertEqual($users->count(), 2);
|
||||
$this->assertEqual($users[0]->name, 'someone');
|
||||
$this->assertEqual($users[1]->name, 'someone.2');
|
||||
$this->assertEqual($users[1]->name, 'someone.2');
|
||||
}
|
||||
public function testComponentAliases() {
|
||||
$q = new Doctrine_Query();
|
||||
@ -118,7 +118,7 @@ class Doctrine_Query_Where_TestCase extends Doctrine_UnitTestCase {
|
||||
$users = $q->execute();
|
||||
$this->assertEqual($users->count(), 1);
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id FROM entity WHERE entity.name = 'someone' AND (entity.type = 0)");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id FROM entity e WHERE e.name = 'someone' AND (e.type = 0)");
|
||||
}
|
||||
public function testOperatorWithNoTrailingSpaces2() {
|
||||
$q = new Doctrine_Query();
|
||||
@ -128,7 +128,7 @@ class Doctrine_Query_Where_TestCase extends Doctrine_UnitTestCase {
|
||||
$users = $q->execute();
|
||||
$this->assertEqual($users->count(), 0);
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id FROM entity WHERE entity.name = 'foo.bar' AND (entity.type = 0)");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id FROM entity e WHERE e.name = 'foo.bar' AND (e.type = 0)");
|
||||
}
|
||||
public function testOperatorWithSingleTrailingSpace() {
|
||||
$q = new Doctrine_Query();
|
||||
@ -138,7 +138,7 @@ class Doctrine_Query_Where_TestCase extends Doctrine_UnitTestCase {
|
||||
$users = $q->execute();
|
||||
$this->assertEqual($users->count(), 0);
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id FROM entity WHERE entity.name = 'foo.bar' AND (entity.type = 0)");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id FROM entity e WHERE e.name = 'foo.bar' AND (e.type = 0)");
|
||||
}
|
||||
public function testOperatorWithSingleTrailingSpace2() {
|
||||
$q = new Doctrine_Query();
|
||||
@ -148,7 +148,7 @@ class Doctrine_Query_Where_TestCase extends Doctrine_UnitTestCase {
|
||||
$users = $q->execute();
|
||||
$this->assertEqual($users->count(), 0);
|
||||
|
||||
$this->assertEqual($q->getQuery(), "SELECT entity.id AS entity__id FROM entity WHERE entity.name = 'foo.bar' AND (entity.type = 0)");
|
||||
$this->assertEqual($q->getQuery(), "SELECT e.id AS e__id FROM entity e WHERE e.name = 'foo.bar' AND (e.type = 0)");
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -39,6 +39,7 @@ require_once('QueryConditionTestCase.php');
|
||||
require_once('QueryComponentAliasTestCase.php');
|
||||
require_once('QuerySubqueryTestCase.php');
|
||||
require_once('QuerySelectTestCase.php');
|
||||
require_once('QueryShortAliasesTestCase.php');
|
||||
require_once('QueryDeleteTestCase.php');
|
||||
require_once('QueryUpdateTestCase.php');
|
||||
|
||||
@ -47,7 +48,9 @@ require_once('RelationTestCase.php');
|
||||
require_once('RelationManyToManyTestCase.php');
|
||||
|
||||
|
||||
require_once('DBTestCase.php');
|
||||
require_once('DbTestCase.php');
|
||||
require_once('DbProfilerTestCase.php');
|
||||
|
||||
require_once('SchemaTestCase.php');
|
||||
require_once('ImportTestCase.php');
|
||||
require_once('BooleanTestCase.php');
|
||||
@ -64,8 +67,17 @@ print '<pre>';
|
||||
|
||||
$test = new GroupTest('Doctrine Framework Unit Tests');
|
||||
|
||||
|
||||
//$test->addTestCase(new Doctrine_Db_Profiler_TestCase());
|
||||
|
||||
//$test->addTestCase(new Doctrine_DB_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_MultiJoin_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Record_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_ConnectionTestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_DataDict_Pgsql_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Relation_ManyToMany_TestCase());
|
||||
@ -74,21 +86,17 @@ $test->addTestCase(new Doctrine_Relation_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Record_State_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Import_TestCase());
|
||||
//$test->addTestCase(new Doctrine_Import_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_SchemaTestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_ValidatorTestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_MultiJoin_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_EventListenerTestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Connection_Transaction_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_ConnectionTestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_DB_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_AccessTestCase());
|
||||
|
||||
@ -136,8 +144,12 @@ $test->addTestCase(new Doctrine_Query_ComponentAlias_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_Subquery_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_EnumTestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_ShortAliases_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_Where_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_From_TestCase());
|
||||
@ -150,7 +162,7 @@ $test->addTestCase(new Doctrine_Query_Update_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_Query_Limit_TestCase());
|
||||
|
||||
$test->addTestCase(new Doctrine_EnumTestCase());
|
||||
|
||||
|
||||
//$test->addTestCase(new Doctrine_Cache_FileTestCase());
|
||||
//$test->addTestCase(new Doctrine_Cache_SqliteTestCase());
|
||||
|
Loading…
x
Reference in New Issue
Block a user