diff --git a/tests/HookTestCase.php b/tests/HookTestCase.php index 4cdd23958..6ff0ae31e 100644 --- a/tests/HookTestCase.php +++ b/tests/HookTestCase.php @@ -30,8 +30,11 @@ * @since 1.0 * @version $Revision$ */ -class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { - public function testWordLikeParserSupportsHyphens() { +class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase +{ + + public function testWordLikeParserSupportsHyphens() + { $parser = new Doctrine_Hook_WordLike(); $parser->parse('u', 'name', "'some guy' OR zYne"); @@ -40,7 +43,8 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $this->assertEqual($parser->getParams(), array('some guy%', 'zYne%')); } - public function testHookOrderbyAcceptsArray() { + public function testHookOrderbyAcceptsArray() + { $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); $a['orderby'] = array('u.name ASC'); @@ -48,7 +52,9 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $hook->hookOrderBy($a['orderby']); $this->assertEqual($hook->getQuery()->getQuery(), '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.type = 0) ORDER BY e.name ASC'); } - public function testHookOrderbyAcceptsDescendingOrder() { + + public function testHookOrderbyAcceptsDescendingOrder() + { $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); $a['orderby'] = array('u.name DESC'); @@ -56,7 +62,9 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $hook->hookOrderBy($a['orderby']); $this->assertEqual($hook->getQuery()->getQuery(), '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.type = 0) ORDER BY e.name DESC'); } - public function testHookOrderbyDoesntAcceptUnknownColumn() { + + public function testHookOrderbyDoesntAcceptUnknownColumn() + { $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); $a['orderby'] = array('u.unknown DESC'); @@ -64,7 +72,9 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $hook->hookOrderBy($a['orderby']); $this->assertEqual($hook->getQuery()->getQuery(), '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.type = 0)'); } - public function testHookOrderbyAcceptsMultipleParameters() { + + public function testHookOrderbyAcceptsMultipleParameters() + { $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); $a['orderby'] = array('u.name ASC', 'u.id DESC'); @@ -74,7 +84,9 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $users = $hook->getQuery()->execute(); } - public function testHookWhereAcceptsArrays() { + + public function testHookWhereAcceptsArrays() + { $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); $a['where'] = array('u.name' => 'Jack Daniels', @@ -84,7 +96,9 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $this->assertEqual($hook->getQuery()->getQuery(), '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.name LIKE ? OR e.name LIKE ?) AND e.loginname LIKE ? AND (e.type = 0)'); $this->assertEqual($hook->getQuery()->getParams(), array('Jack%', 'Daniels%', 'TheMan%')); } - public function testHookWhereSupportsIntegerTypes() { + + public function testHookWhereSupportsIntegerTypes() + { $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); $a['where'] = array('u.id' => 10000); @@ -94,7 +108,8 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $this->assertEqual($hook->getQuery()->getParams(), array(10000)); } - public function testHookWhereDoesntAcceptUnknownColumn() { + public function testHookWhereDoesntAcceptUnknownColumn() + { $hook = new Doctrine_Hook('SELECT u.name FROM User u LEFT JOIN u.Phonenumber p'); $a['where'] = array('u.unknown' => 'Jack Daniels'); @@ -104,7 +119,8 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { } - public function testEqualParserUsesEqualOperator() { + public function testEqualParserUsesEqualOperator() + { $parser = new Doctrine_Hook_Equal(); $parser->parse('u', 'name', 'zYne'); @@ -112,7 +128,9 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $this->assertEqual($parser->getCondition(), 'u.name = ?'); $this->assertEqual($parser->getParams(), array('zYne')); } - public function testWordLikeParserUsesLikeOperator() { + + public function testWordLikeParserUsesLikeOperator() + { $parser = new Doctrine_Hook_WordLike(); $parser->parse('u', 'name', 'zYne'); @@ -120,7 +138,9 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $this->assertEqual($parser->getCondition(), 'u.name LIKE ?'); $this->assertEqual($parser->getParams(), array('zYne%')); } - public function testIntegerParserSupportsIntervals() { + + public function testIntegerParserSupportsIntervals() + { $parser = new Doctrine_Hook_Integer(); $parser->parse('m', 'year', '1998-2000'); @@ -129,7 +149,8 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $this->assertEqual($parser->getParams(), array('1998', '2000')); } - public function testIntegerParserSupportsEqualOperator() { + public function testIntegerParserSupportsEqualOperator() + { $parser = new Doctrine_Hook_Integer(); $parser->parse('m', 'year', '1998'); @@ -138,7 +159,8 @@ class Doctrine_Hook_TestCase extends Doctrine_UnitTestCase { $this->assertEqual($parser->getParams(), array('1998')); } - public function testIntegerParserSupportsNestingConditions() { + public function testIntegerParserSupportsNestingConditions() + { $parser = new Doctrine_Hook_Integer(); $parser->parse('m', 'year', '1998-2000 OR 2001'); diff --git a/tests/QueryTestCase.php b/tests/QueryTestCase.php index c0bfd499a..306c0cb4a 100644 --- a/tests/QueryTestCase.php +++ b/tests/QueryTestCase.php @@ -32,1183 +32,25 @@ */ class Doctrine_Query_TestCase extends Doctrine_UnitTestCase { - public function prepareTables() { - $this->tables[] = "Forum_Category"; - $this->tables[] = "Forum_Entry"; - $this->tables[] = "Forum_Board"; - $this->tables[] = "Forum_Thread"; - - $this->tables[] = "ORM_TestEntry"; - $this->tables[] = "ORM_TestItem"; - $this->tables[] = "Log_Status"; - $this->tables[] = "Log_Entry"; - $this->tables[] = "EnumTest"; + public function testGetQueryHookResetsTheManuallyAddedDqlParts() + { + $q = new MyQuery(); - $this->tables[] = "Task"; - $this->tables[] = "Resource"; - $this->tables[] = "ResourceType"; - - try { - $this->dbh->query("DROP TABLE test_items"); - } catch(PDOException $e) { - - } - try { - $this->dbh->query("DROP TABLE test_entries"); - } catch(PDOException $e) { - - } - parent::prepareTables(); - $this->connection->clear(); - } - /** - public function testValidLazyPropertyFetching() { - $q = new Doctrine_Query($this->connection); - $q->from("User(id, name)"); - $users = $q->execute(); - $this->assertEqual($users->count(), 8); - $this->assertTrue($users instanceof Doctrine_Collection); - $count = count($this->dbh); - $this->assertTrue(is_string($users[0]->name)); - $this->assertEqual($count, count($this->dbh)); - $count = count($this->dbh); - $this->assertTrue(is_numeric($users[0]->email_id)); - $this->assertEqual($count + 1, count($this->dbh)); - - $this->connection->clear(); - - $q->from("User(name)"); - $users = $q->execute(); - $this->assertEqual($users->count(), 8); - $count = count($this->dbh); - $this->assertTrue(is_string($users[0]->name)); - $this->assertEqual($count, count($this->dbh)); - $count = count($this->dbh); - $this->assertTrue($users[0]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertTrue(is_numeric($users[0]->email_id)); - $this->assertTrue($users[0]->getState(), Doctrine_Record::STATE_CLEAN); - - $this->assertEqual($count + 1, count($this->dbh)); - $this->assertTrue($users[1]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertTrue(is_numeric($users[1]->email_id)); - $this->assertTrue($users[1]->getState(), Doctrine_Record::STATE_CLEAN); - - $this->assertEqual($count + 2, count($this->dbh)); - $this->assertTrue($users[2]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertTrue(is_numeric($users[2]->email_id)); - $this->assertTrue($users[2]->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($count + 3, count($this->dbh)); - } - public function testMultilineParsing() { - $dql = " - FROM User u - WHERE User.id = ? - "; - - $q = new Doctrine_Query(); - - $q->parseQuery($dql); - - $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(); - $f = false; - try { - $q->from('User')->where('User.name.someunknownfunc()'); - } catch(Doctrine_Query_Exception $e) { - $f = true; - } - $this->assertTrue($f); - } - public function testBadFunctionLogic() { - $q = new Doctrine_Query(); - $f = false; - try { - $q->from('User')->where('User.name.contains(?)'); - } catch(Doctrine_Query_Exception $e) { - $f = true; - } - $this->assertTrue($f); - } - public function testDqlContainsFunction() { - $q = new Doctrine_Query(); - $this->connection->clear(); - - $q->from('User')->where('User.Phonenumber.phonenumber.contains(?)'); - $this->assertEqual(count($q->getTableStack()), 2); - $this->assertEqual(count($q->getRelationStack()), 1); - - $coll = $q->execute(array('123 123')); - - $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'); - $this->assertEqual($coll[0]->Phonenumber->count(), 1); - $this->assertEqual($coll[1]->Phonenumber->count(), 3); - $this->assertEqual($coll[2]->Phonenumber->count(), 1); - } - public function testDqlFunctionWithMultipleParams() { - $q = new Doctrine_Query(); - $this->connection->clear(); - - $q->from('User')->where('User.Phonenumber.phonenumber.like(?,?)'); - $this->assertEqual(count($q->getTableStack()), 2); - $this->assertEqual(count($q->getRelationStack()), 1); - - $coll = $q->execute(array('%123%', '%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 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'); - $this->assertEqual($coll[0]->Phonenumber->count(), 3); - $this->assertEqual($coll[1]->Phonenumber->count(), 3); - $this->assertEqual($coll[2]->Phonenumber->count(), 3); - } - public function testDqlLikeFunction() { - $q = new Doctrine_Query(); - $this->connection->clear(); - - $q->from('User')->where('User.Phonenumber.phonenumber.like(?)'); - $this->assertEqual(count($q->getTableStack()), 2); - $this->assertEqual(count($q->getRelationStack()), 1); - - $coll = $q->execute(array('123%')); - - $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'); - $this->assertEqual($coll[0]->Phonenumber->count(), 1); - $this->assertEqual($coll[1]->Phonenumber->count(), 3); - $this->assertEqual($coll[2]->Phonenumber->count(), 1); - $this->assertEqual($coll[3]->Phonenumber->count(), 3); - $this->assertEqual($coll[4]->Phonenumber->count(), 3); - } - public function testEnumConversion() { - $e[0] = new EnumTest(); - $e[0]->status = 'open'; - - $e[1] = new EnumTest(); - $e[1]->status = 'verified'; - - $this->connection->flush(); - $this->assertEqual($e[0]->id, 1); - $this->assertEqual($e[1]->id, 2); - - $q = new Doctrine_Query; - - $coll = $q->from('EnumTest') - ->where("EnumTest.status = 'open'") - ->execute(); - - $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; - - $coll = $q->from('EnumTest') - ->where("EnumTest.status = 'verified'") - ->execute(); - - $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); - } - - public function testManyToManyFetchingWithColumnAggregationInheritance() { - - $query = new Doctrine_Query($this->connection); - - $query->from('User u INNER JOIN u.Group g'); - - $users = $query->execute(); - $this->assertEqual($users->count(), 1); - $this->assertEqual($users[0]->Group->count(), 1); - - $query->from('User-l.Group-l'); - - $users = $query->execute(); - $this->assertEqual($users->count(), 8); - $this->assertEqual($users[0]->Group->count(), 0); - $this->assertEqual($users[1]->Group->count(), 1); - $this->assertEqual($users[2]->Group->count(), 0); - - $this->assertEqual($users[0]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($users[1]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($users[2]->getState(), Doctrine_Record::STATE_PROXY); - - $this->assertEqual($users[0]->getModified(), array()); - $this->assertEqual($users[1]->getModified(), array()); - $this->assertEqual($users[2]->getModified(), array()); - $this->assertEqual($users[6]->getModified(), array()); - - $this->assertEqual($users[0]->type, 0); - $this->assertEqual($users[1]->type, 0); - $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 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); - } - 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 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(); - $query->parseQuery("FROM User.Group WHERE User.Group.name = 'Action Actors'"); - - $users = $query->execute(); - - $this->assertEqual($users->count(), 1); - $count = $this->dbh->count(); - - $this->assertTrue($users instanceof Doctrine_Collection); - $this->assertEqual(get_class($users[0]), 'User'); - $this->assertEqual($users[0]->Group->count(), 1); - $this->assertEqual($count, $this->dbh->count()); - $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(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))"); - - $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 p"); - - $q = new Doctrine_Query(); - $q->from("User.Phonenumber(COUNT(id))"); - $array = $q->execute(); - $this->assertTrue(is_array($array)); - - $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->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(e.id)'], 11); - $this->assertEqual($array[0]['MIN(email.address)'], 'arnold@example.com'); - $this->assertEqual($array[0]['COUNT(1)'], 14); - - //$q = new Doctrine_Query(); - //$q->from("User.Phonenumber(COUNT(id))")->groupby("User.id"); - //$coll = $q->execute(); - //print Doctrine_Lib::formatSql($q->getQuery()); - //print_r($coll); - //$this->assertEqual(count($coll), 8); - - } - */ - - - public function testMultipleFetching() { - $count = $this->dbh->count(); - $this->connection->getTable('User')->clear(); - $this->connection->getTable('Email')->clear(); - $this->connection->getTable('Phonenumber')->clear(); - - $users = $this->query->from("User-l.Phonenumber-i, User-l:Email-i")->execute(); - $this->assertEqual(($count + 1),$this->dbh->count()); - $this->assertEqual(count($users), 8); - - $this->assertEqual($users[0]->Phonenumber->count(), 1); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[0]->Phonenumber[0]->phonenumber, "123 123"); - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertEqual($users[1]->Phonenumber->count(), 3); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[1]->Phonenumber[0]->phonenumber, "123 123"); - $this->assertEqual($users[1]->Phonenumber[1]->phonenumber, "456 456"); - $this->assertEqual($users[1]->Phonenumber[2]->phonenumber, "789 789"); - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertEqual($users[7]->Phonenumber->count(), 1); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[7]->Phonenumber[0]->phonenumber, "111 567 333"); - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertTrue($users[0]->Email instanceof Email); - $this->assertEqual($users[0]->Email->address, "zYne@example.com"); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[0]->email_id, $users[0]->Email->id); - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertTrue($users[1]->Email instanceof Email); - $this->assertEqual($users[1]->Email->address, "arnold@example.com"); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[1]->email_id, $users[1]->Email->id); - $this->assertEqual(($count + 1), $this->dbh->count()); - } - - - public function testGetPath() { - $this->query->from("User.Group.Email"); - - $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"), "t"); - $this->assertEqual($this->query->getTableAlias("Task.Subtask"), "t2"); - $this->assertEqual($this->query->getTableAlias("Task.Subtask.Subtask"), "t3"); - - - $this->assertEqual($this->query->getQuery(), - "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() { - $this->connection->clear(); - - $query = new Doctrine_Query($this->connection); - - $query->from("User.Email, User.Phonenumber"); - - - $users = $query->execute(); - - $count = count($this->dbh); - - $this->assertEqual($users->count(), 8); - $this->assertTrue($users[0]->Email instanceof Email); - $this->assertEqual($users[0]->Phonenumber->count(), 1); - $this->assertEqual($count, count($this->dbh)); - } - - public function testHaving() { - $this->connection->clear(); - - - $query = new Doctrine_Query($this->connection); - $query->from('User-l.Phonenumber-l'); - $query->having("COUNT(User.Phonenumber.phonenumber) > 2"); - $query->groupby('User.id'); - - $users = $query->execute(); - - $this->assertEqual($users->count(), 3); - - // test that users are in right order - $this->assertEqual($users[0]->id, 5); - $this->assertEqual($users[1]->id, 8); - $this->assertEqual($users[2]->id, 10); - - - // test expanding - $count = $this->dbh->count(); - $this->assertEqual($users[0]->Phonenumber->count(), 1); - $this->assertEqual($users[1]->Phonenumber->count(), 1); - $this->assertEqual($users[2]->Phonenumber->count(), 1); - - $users[0]->Phonenumber[1]; - $this->assertEqual(++$count, $this->dbh->count()); - $this->assertEqual($users[0]->Phonenumber->count(), 3); - - $users[1]->Phonenumber[1]; - $this->assertEqual(++$count, $this->dbh->count()); - $this->assertEqual($users[1]->Phonenumber->count(), 3); - - $users[2]->Phonenumber[1]; - $this->assertEqual(++$count, $this->dbh->count()); - $this->assertEqual($users[2]->Phonenumber->count(), 3); - - $this->connection->clear(); - $query->from('User-l.Phonenumber-l'); - $query->having("COUNT(User.Phonenumber.phonenumber) > 2"); - $query->groupby('User.id'); - - $users = $this->connection->query("FROM User-l.Phonenumber-l GROUP BY User.id HAVING COUNT(User.Phonenumber.phonenumber) > 2"); - - $this->assertEqual($users->count(), 3); - - // test that users are in right order - $this->assertEqual($users[0]->id, 5); - $this->assertEqual($users[1]->id, 8); - $this->assertEqual($users[2]->id, 10); - } - - - - public function testNestedManyToManyRelations() { - $task = new Task(); - $task->name = "T1"; - $task->ResourceAlias[0]->name = "R1"; - $task->ResourceAlias[1]->name = "R2"; - $task->ResourceAlias[0]->Type[0]->type = 'TY1'; - //$task->ResourceAlias[1]->Type[0]->type = 'TY2'; - - $task = new Task(); - $task->name = "T2"; - $task->ResourceAlias[0]->name = "R3"; - $task->ResourceAlias[0]->Type[0]->type = 'TY2'; - $task->ResourceAlias[0]->Type[1]->type = 'TY3'; - $task->ResourceAlias[1]->name = "R4"; - $task->ResourceAlias[2]->name = "R5"; - $task->ResourceAlias[2]->Type[0]->type = 'TY4'; - $task->ResourceAlias[2]->Type[1]->type = 'TY5'; - $task->ResourceAlias[3]->name = "R6"; - - $this->assertEqual($task->ResourceAlias[0]->name, "R3"); - $this->assertEqual($task->ResourceAlias[1]->name, "R4"); - $this->assertEqual($task->ResourceAlias[2]->name, "R5"); - $this->assertEqual($task->ResourceAlias[3]->name, "R6"); - - $task = new Task(); - $task->name = "T3"; - $task->ResourceAlias[0]->name = "R7"; - - $task = new Task(); - $task->name = "T4"; - - $this->connection->flush(); - - $this->connection->clear(); - - $query = new Doctrine_Query($this->connection); - $query->from("Task.ResourceAlias.Type"); - $tasks = $query->execute(); - - $this->assertEqual($tasks->count(), 4); - - $this->assertEqual($tasks[0]->ResourceAlias->count(), 2); - $this->assertEqual($tasks[1]->ResourceAlias->count(), 4); - $this->assertEqual($tasks[2]->ResourceAlias->count(), 1); - $this->assertEqual($tasks[3]->ResourceAlias->count(), 0); - - $this->assertEqual($tasks[0]->ResourceAlias[0]->Type->count(), 1); - $this->assertEqual($tasks[0]->ResourceAlias[1]->Type->count(), 0); - - $this->assertEqual($tasks[1]->ResourceAlias->count(), 4); - - $this->connection->clear(); - - $query->from("Task")->where("Task.ResourceAlias.Type.type = 'TY2' || Task.ResourceAlias.Type.type = 'TY1'"); - $tasks = $query->execute(); - - $this->assertEqual($tasks->count(),2); - $this->assertEqual(count($this->dbh->query($query->getQuery())->fetchAll(PDO::FETCH_ASSOC)),2); - $this->assertEqual($tasks[0]->name, 'T1'); - $this->assertEqual($tasks[1]->name, 'T2'); - } - - - public function testManyToManyFetchingWithColonOperator() { - $query = new Doctrine_Query($this->connection); - - $task = new Task(); - - // clear identity maps - $this->connection->getTable('Task')->clear(); - $this->connection->getTable('Assignment')->clear(); - $this->connection->getTable('Resource')->clear(); - - $tasks[1] = $task->getTable()->find(2); - $this->assertEqual($tasks[1]->ResourceAlias[0]->name, "R3"); - $this->assertEqual($tasks[1]->ResourceAlias[1]->name, "R4"); - $this->assertEqual($tasks[1]->ResourceAlias[2]->name, "R5"); - $this->assertEqual($tasks[1]->ResourceAlias[3]->name, "R6"); - - // clear identity maps - $task->getTable()->clear(); - $this->connection->getTable('Assignment')->clear(); - $this->connection->getTable('Resource')->clear(); - - $query->from("Task-l:ResourceAlias-l"); - $tasks = $query->execute(); - $this->assertEqual($tasks->count(), 3); - $this->assertTrue($tasks instanceof Doctrine_Collection); - - $this->assertEqual($tasks[0]->ResourceAlias->count(), 2); - $this->assertTrue($tasks[0]->ResourceAlias instanceof Doctrine_Collection); - - - $this->assertEqual($tasks[1]->ResourceAlias->count(), 4); - $this->assertTrue($tasks[1]->ResourceAlias instanceof Doctrine_Collection); - // sanity checking - $this->assertEqual($tasks[1]->ResourceAlias[0]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($tasks[1]->ResourceAlias[1]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($tasks[1]->ResourceAlias[2]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($tasks[1]->ResourceAlias[3]->getState(), Doctrine_Record::STATE_PROXY); - - $count = count($this->dbh); - - $this->assertEqual($tasks[1]->ResourceAlias[0]->name, "R3"); - $this->assertEqual($tasks[1]->ResourceAlias[1]->name, "R4"); - $this->assertEqual($tasks[1]->ResourceAlias[2]->name, "R5"); - $this->assertEqual($tasks[1]->ResourceAlias[3]->name, "R6"); - - $this->assertEqual(count($this->dbh), ($count + 4)); - - $this->assertEqual($tasks[2]->ResourceAlias->count(), 1); - $this->assertTrue($tasks[2]->ResourceAlias instanceof Doctrine_Collection); - } - - public function testManyToManyFetchingWithDotOperator() { - $query = new Doctrine_Query($this->connection); - - $this->connection->getTable('Task')->clear(); - $this->connection->getTable('Assignment')->clear(); - $this->connection->getTable('Resource')->clear(); - - $tasks = $query->query("FROM Task-l.ResourceAlias-l"); - $this->assertEqual($tasks->count(), 4); - $this->assertTrue($tasks instanceof Doctrine_Collection); - - $this->assertEqual($tasks[0]->ResourceAlias->count(), 2); - $this->assertTrue($tasks[0]->ResourceAlias instanceof Doctrine_Collection); - - $this->assertEqual($tasks[1]->ResourceAlias->count(), 4); - $this->assertTrue($tasks[1]->ResourceAlias instanceof Doctrine_Collection); - - $this->assertEqual($tasks[1]->ResourceAlias->count(), 4); - $this->assertTrue($tasks[1]->ResourceAlias instanceof Doctrine_Collection); - // sanity checking - $this->assertEqual($tasks[1]->ResourceAlias[0]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($tasks[1]->ResourceAlias[1]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($tasks[1]->ResourceAlias[2]->getState(), Doctrine_Record::STATE_PROXY); - $this->assertEqual($tasks[1]->ResourceAlias[3]->getState(), Doctrine_Record::STATE_PROXY); - - $count = count($this->dbh); - - $this->assertEqual($tasks[1]->ResourceAlias[0]->name, "R3"); - $this->assertEqual($tasks[1]->ResourceAlias[1]->name, "R4"); - $this->assertEqual($tasks[1]->ResourceAlias[2]->name, "R5"); - $this->assertEqual($tasks[1]->ResourceAlias[3]->name, "R6"); - - $this->assertEqual(count($this->dbh), ($count + 4)); - - $this->assertEqual($tasks[2]->ResourceAlias->count(), 1); - $this->assertTrue($tasks[2]->ResourceAlias instanceof Doctrine_Collection); - - $this->assertEqual($tasks[3]->ResourceAlias->count(), 0); - $this->assertTrue($tasks[3]->ResourceAlias instanceof Doctrine_Collection); - } - - public function testManyToManyFetchingWithDotOperatorAndLoadedIdentityMaps() { - $query = new Doctrine_Query($this->connection); - - $tasks = $query->query("FROM Task-l.ResourceAlias-l"); - $this->assertEqual($tasks->count(), 4); - $this->assertTrue($tasks instanceof Doctrine_Collection); - - $this->assertEqual($tasks[0]->ResourceAlias->count(), 2); - $this->assertTrue($tasks[0]->ResourceAlias instanceof Doctrine_Collection); - - $this->assertEqual($tasks[1]->ResourceAlias->count(), 4); - $this->assertTrue($tasks[1]->ResourceAlias instanceof Doctrine_Collection); - - $this->assertEqual($tasks[1]->ResourceAlias->count(), 4); - $this->assertTrue($tasks[1]->ResourceAlias instanceof Doctrine_Collection); - // sanity checking - $this->assertEqual($tasks[1]->ResourceAlias[0]->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($tasks[1]->ResourceAlias[1]->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($tasks[1]->ResourceAlias[2]->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($tasks[1]->ResourceAlias[3]->getState(), Doctrine_Record::STATE_CLEAN); - - $count = count($this->dbh); - - $this->assertEqual($tasks[1]->ResourceAlias[0]->name, "R3"); - $this->assertEqual($tasks[1]->ResourceAlias[1]->name, "R4"); - $this->assertEqual($tasks[1]->ResourceAlias[2]->name, "R5"); - $this->assertEqual($tasks[1]->ResourceAlias[3]->name, "R6"); - - $this->assertEqual(count($this->dbh), $count); - - $this->assertEqual($tasks[2]->ResourceAlias->count(), 1); - $this->assertTrue($tasks[2]->ResourceAlias instanceof Doctrine_Collection); - - $this->assertEqual($tasks[3]->ResourceAlias->count(), 0); - $this->assertTrue($tasks[3]->ResourceAlias instanceof Doctrine_Collection); - } - - public function testOneToOneSharedRelations() { - $status = new Log_Status(); - $status->name = 'success'; - - - $entries[0] = new Log_Entry(); - $entries[0]->stamp = '2006-06-06'; - $entries[0]->Log_Status = $status; - $this->assertTrue($entries[0]->Log_Status instanceof Log_Status); - - $entries[1] = new Log_Entry(); - $entries[1]->stamp = '2006-06-06'; - $entries[1]->Log_Status = $status; - - - - $this->connection->flush(); - - // clear the identity maps - - $entries[0]->Log_Status->getTable()->clear(); - $entries[0]->getTable()->clear(); - - $entries = $this->connection->query("FROM Log_Entry-I.Log_Status-i"); - - $this->assertEqual($entries->count(), 2); - - $this->assertTrue($entries[0]->Log_Status instanceof Log_Status); - $this->assertEqual($entries[0]->Log_Status->name, 'success'); - - // the second Log_Status is fetched from identityMap - - $this->assertTrue($entries[1]->Log_Status instanceof Log_Status); - $this->assertEqual($entries[1]->Log_Status->name, 'success'); - - // the following line is possible since doctrine uses identityMap - - $this->assertEqual($entries[0]->Log_Status->getOID(), $entries[1]->Log_Status->getOID()); - - $entries[0]->Log_Status->delete(); - $this->assertEqual($entries[0]->Log_Status->getOID(), $entries[1]->Log_Status->getOID()); - $this->assertEqual($entries[0]->Log_Status->getState(), Doctrine_Record::STATE_TCLEAN); - - // clear the identity maps - - $entries[0]->Log_Status->getTable()->clear(); - $entries[0]->getTable()->clear(); - - $entries = $this->connection->query("FROM Log_Entry-I.Log_Status-i"); - $this->assertEqual($entries->count(), 2); - - $this->assertTrue($entries[0]->Log_Status instanceof Log_Status); - - $this->assertEqual($entries[0]->Log_Status->name, null); - $this->assertEqual($entries[1]->Log_Status->name, null); - - } - - public function testOneToOneRelationFetchingWithCustomTableNames() { - $entry = new ORM_TestEntry(); - $entry->name = 'entry 1'; - $entry->amount = '123.123'; - $entry->ORM_TestItem->name = 'item 1'; - - $entry = new ORM_TestEntry(); - $entry->name = 'entry 2'; - $entry->amount = '123.123'; - $entry->ORM_TestItem->name = 'item 2'; - - $this->connection->flush(); - - $count = $this->dbh->count(); - - $entries = $this->connection->query("FROM ORM_TestEntry-i.ORM_TestItem-i"); - - $this->assertEqual($entries->count(), 2); - - $this->assertTrue($entries[0] instanceof ORM_TestEntry); - $this->assertTrue($entries[0]->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($entries[0]->name, 'entry 1'); - $this->assertTrue($entries[1] instanceof ORM_TestEntry); - $this->assertTrue($entries[1]->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($entries[1]->name, 'entry 2'); - - - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertTrue($entries[0]->ORM_TestItem instanceof ORM_TestItem); - $this->assertEqual($entries[0]->ORM_TestItem->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($entries[0]->ORM_TestItem->name, 'item 1'); - $this->assertTrue($entries[1]->ORM_TestItem instanceof ORM_TestItem); - $this->assertEqual($entries[1]->ORM_TestItem->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($entries[1]->ORM_TestItem->name, 'item 2'); - - $this->assertEqual(($count + 1), $this->dbh->count()); - } - - public function testImmediateFetching() { - $count = $this->dbh->count(); - $this->connection->getTable('User')->clear(); - $this->connection->getTable('Email')->clear(); - $this->connection->getTable('Phonenumber')->clear(); - - $users = $this->query->from("User-i.Email-i")->execute(); - $this->assertEqual(($count + 1),$this->dbh->count()); - $this->assertEqual(count($users), 8); - - $this->assertEqual(get_class($users[0]->Email), 'Email'); - $this->assertEqual(($count + 1),$this->dbh->count()); - - $this->assertEqual($users[0]->Email->address, 'zYne@example.com'); - $this->assertEqual(($count + 1),$this->dbh->count()); - - $this->assertEqual(get_class($users[1]->Email), 'Email'); - $this->assertEqual(($count + 1),$this->dbh->count()); - - $this->assertEqual($users[1]->Email->address, 'arnold@example.com'); - $this->assertEqual(($count + 1),$this->dbh->count()); - } - - public function testLazyPropertyFetchingWithMultipleColumns() { - - $q = new Doctrine_Query($this->connection); - $q->from("User-l(name, email_id)"); - $users = $q->execute(); - $this->assertEqual($users->count(), 8); - $this->assertTrue($users instanceof Doctrine_Collection); - $count = count($this->dbh); - $this->assertTrue(is_string($users[0]->name)); - $this->assertEqual($count, count($this->dbh)); - $count = count($this->dbh); - $this->assertTrue(is_numeric($users[0]->email_id)); - $this->assertEqual($count, count($this->dbh)); - - $users[0]->getTable()->clear(); - - $q->from("User-b(name, email_id)"); - $users = $q->execute(); - $this->assertEqual($users->count(), 8); - $this->assertTrue($users instanceof Doctrine_Collection); - $count = count($this->dbh); - $this->assertTrue(is_string($users[0]->name)); - $this->assertEqual($count, count($this->dbh)); - $count = count($this->dbh); - $this->assertTrue(is_numeric($users[0]->email_id)); - $this->assertEqual($count, count($this->dbh)); - $this->assertTrue(is_numeric($users[1]->email_id)); - $this->assertEqual($count, count($this->dbh)); - $this->assertTrue(is_numeric($users[2]->email_id)); - $this->assertEqual($count, count($this->dbh)); - - $q->from("User-b(name, email_id):Email, User-b(name, email_id).Phonenumber"); - $users = $q->execute(); - $this->assertEqual($users->count(), 8); - $this->assertTrue($users instanceof Doctrine_Collection_Batch); - $count = count($this->dbh); - $this->assertTrue(is_string($users[0]->name)); - $this->assertEqual($count, count($this->dbh)); - $count = count($this->dbh); - $this->assertTrue(is_numeric($users[0]->email_id)); - $this->assertEqual($count, count($this->dbh)); - $this->assertTrue(is_numeric($users[1]->email_id)); - $this->assertEqual($count, count($this->dbh)); - $this->assertTrue(is_numeric($users[2]->email_id)); - $this->assertEqual($count, count($this->dbh)); - } - - - - public function testForeignKeyRelationFetching() { - $count = $this->dbh->count(); - $users = $this->query->from("User-l.Phonenumber-i")->execute(); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual(count($users), 8); - - $this->assertEqual($users[0]->Phonenumber->count(), 1); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[0]->Phonenumber[0]->phonenumber, "123 123"); - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertEqual($users[1]->Phonenumber->count(), 3); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[1]->Phonenumber[0]->phonenumber, "123 123"); - $this->assertEqual($users[1]->Phonenumber[1]->phonenumber, "456 456"); - $this->assertEqual($users[1]->Phonenumber[2]->phonenumber, "789 789"); - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertEqual($users[7]->Phonenumber->count(), 1); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertEqual($users[7]->Phonenumber[0]->phonenumber, "111 567 333"); - $this->assertEqual(($count + 1), $this->dbh->count()); - - $this->assertEqual($users[0]->name, "zYne"); - $this->assertEqual(($count + 2), $this->dbh->count()); - } - - public function testOneToOneRelationFetching() { - - $count = $this->dbh->count(); - $users = $this->query->from("User-l:Email-i")->execute(); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertTrue($users instanceof Doctrine_Collection); - $count = $this->dbh->count(); - - foreach($users as $user) { - // iterate through users and test that no additional queries are needed - $user->Email->address; - $this->assertEqual($count, $this->dbh->count()); - } - $users[0]->Account->amount = 3000; - $this->assertEqual($users[0]->Account->amount, 3000); - $this->assertTrue($users[0]->Account instanceof Account); - $this->assertEqual($users[0]->id, $users[0]->Account->entity_id); - - $users[0]->Account->save(); - - $users[0]->refresh(); - $this->assertEqual($users[0]->Account->amount, 3000); - $this->assertTrue($users[0]->Account instanceof Account); - - $this->assertEqual($users[0]->id, $users[0]->Account->entity_id); - - $this->assertEqual($users[0]->Account->getState(), Doctrine_Record::STATE_CLEAN); - $users[0]->getTable()->clear(); - $users[0]->Account->getTable()->clear(); - - $count = $this->dbh->count(); - $users = $this->query->from("User-l:Account-i")->execute(); - $this->assertEqual(($count + 1), $this->dbh->count()); - $this->assertTrue($users instanceof Doctrine_Collection); - $this->assertEqual($users->count(), 1); - - $this->assertEqual($users[0]->Account->amount,3000); - } - - - public function testQueryWithComplexAliases() { - $q = new Doctrine_Query($this->connection); - - $board = new Forum_Board(); - $table = $board->getTable(); - $fk = $table->getRelation("Threads"); - - $this->assertEqual($table->getComponentName(), "Forum_Board"); - $this->assertTrue($fk instanceof Doctrine_Relation_ForeignKey); - $this->assertEqual($fk->getTable()->getComponentName(), "Forum_Thread"); - - $entry = new Forum_Entry(); - $this->assertTrue($entry->getTable()->getRelation("Thread") instanceof Doctrine_Relation_LocalKey); - - $board->name = "Doctrine Forum"; - - $board->Threads[0]; - $board->Category->name = "General discussion"; - $this->assertEqual($board->name, "Doctrine Forum"); - $this->assertEqual($board->Category->name, "General discussion"); - $this->assertEqual($board->Category->getState(), Doctrine_Record::STATE_TDIRTY); - $this->assertEqual($board->Threads[0]->getState(), Doctrine_Record::STATE_TDIRTY); - $this->assertTrue($board->Threads[0] instanceof Forum_Thread); - - $thread = $board->Threads[0]; - $thread->Entries[0]->topic = "My first topic"; - $thread->Entries[1]->topic = "My second topic"; - $this->assertEqual($thread->Entries[0]->topic, "My first topic"); - $this->assertEqual($thread->Entries[0]->getState(), Doctrine_Record::STATE_TDIRTY); - $this->assertTrue($thread->Entries[0] instanceof Forum_Entry); - - $this->connection->flush(); - - $board->getTable()->clear(); - - $board = $board->getTable()->find($board->id); - $this->assertEqual($board->Threads->count(), 1); - $this->assertEqual($board->name, "Doctrine Forum"); - $this->assertEqual($board->Category->name, "General discussion"); - $this->assertEqual($board->Category->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertEqual($board->Threads[0]->getState(), Doctrine_Record::STATE_CLEAN); - $this->assertTrue($board->Threads[0] instanceof Forum_Thread); - $this->assertEqual($board->Threads[0]->Entries->count(), 2); - - - $q->from("Forum_Board"); - $coll = $q->execute(); - $this->assertEqual($coll->count(), 1); - - $table = $this->connection->getTable("Forum_Board")->setAttribute(Doctrine::ATTR_FETCHMODE, Doctrine::FETCH_LAZY); - $table = $this->connection->getTable("Forum_Thread")->setAttribute(Doctrine::ATTR_FETCHMODE, Doctrine::FETCH_LAZY); - $q->from("Forum_Board.Threads"); - - $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 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 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); - $this->assertEqual($boards[0]->Threads->count(), 1); - $this->assertEqual(count($this->dbh), $count); - $this->assertEqual($boards[0]->Threads[0]->Entries->count(), 2); - - - $q->from("Forum_Board-l.Threads-l.Entries-i"); - $this->assertEqual($boards->count(), 1); - $count = count($this->dbh); - $this->assertEqual($boards[0]->Threads->count(), 1); - $this->assertEqual(count($this->dbh), $count); - $this->assertEqual($boards[0]->Threads[0]->Entries->count(), 2); - - } - - public function testQueryWithAliases() { - $query = new Doctrine_Query($this->connection); - - $task = new Task(); - $task->name = "Task 1"; - $task->ResourceAlias[0]->name = "Resource 1"; - $task->ResourceAlias[1]->name = "Resource 2"; - - $task->save(); - - - $coll = $query->query("FROM Task WHERE Task.ResourceAlias.name = 'Resource 1'"); - - $this->assertEqual($coll->count(), 1); - $this->assertTrue($coll[0] instanceof Task); - } - - public function testQueryArgs() { - $query = new Doctrine_Query($this->connection); - $query = $query->from("User-l"); - - $this->assertTrue($query instanceof Doctrine_Query); - $this->assertEqual($query->get("from"), "entity e"); - - $query = $query->orderby("User.name"); - $this->assertTrue($query instanceof Doctrine_Query); - $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("e.created")); - - $query = $query->where("User.name LIKE 'zYne%'"); - $this->assertTrue($query instanceof Doctrine_Query); - $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("e.name LIKE 'Arnold%'")); - - $query = $query->limit(5); - $this->assertTrue($query instanceof Doctrine_Query); - $this->assertEqual($query->get("limit"), 5); - - $query = $query->offset(5); - $this->assertTrue($query instanceof Doctrine_Query); - $this->assertEqual($query->get("offset"), 5); - - $query->remove('limit')->remove('offset'); - - $this->assertFalse(strpos($query->getQuery(),"OFFSET")); - - $this->assertFalse(strpos($query->getQuery(),"LIMIT")); - - $coll = $query->execute(); - $this->assertTrue($coll instanceof Doctrine_Collection); - $this->assertEqual($coll->count(), 1); - - - $query->where("User.name LIKE ?")->limit(3); - $this->assertEqual($query->limit, 3); - $this->assertTrue(strpos($query->getQuery(),"LIMIT")); - } - - public function testLimit() { - $query = new Doctrine_Query($this->connection); - $coll = $query->query("FROM User(id) LIMIT 3"); - $this->assertEqual($query->limit, 3); - $this->assertEqual($coll->count(), 3); - } - public function testOffset() { - $query = new Doctrine_Query($this->connection); - $coll = $query->query("FROM User LIMIT 3 OFFSET 3"); - $this->assertEqual($query->offset, 3); - $this->assertEqual($coll->count(), 3); - } - public function testPreparedQuery() { - $coll = $this->connection->query("FROM User WHERE User.name = :name", array(":name" => "zYne")); - $this->assertEqual($coll->count(), 1); - } - public function testOrderBy() { - $query = new Doctrine_Query($this->connection); - $query->from("User-b")->orderby("User.name ASC, User.Email.address"); - $users = $query->execute(); - - $this->assertEqual(trim($query->getQuery()), - "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"); - } - public function testBatchFetching() { - $query = new Doctrine_Query($this->connection); - $users = $query->query("FROM User-b"); - $this->assertEqual(trim($query->getQuery()), - "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); - } - public function testLazyFetching() { - $query = new Doctrine_Query($this->connection); - $users = $query->query("FROM User-l"); - $this->assertEqual(trim($query->getQuery()), - "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); - - } - - - public function testFetchingWithCollectionExpanding() { - // DYNAMIC COLLECTION EXPANDING - $query = new Doctrine_Query($this->connection); - - $user = $this->objTable->find(5); - $user->Group[1]->name = "Tough guys inc."; - $user->Group[2]->name = "Terminators"; - $this->assertEqual($user->Group[0]->name, "Action Actors"); - $user->save(); - $this->assertEqual($user->Group[0]->name, "Action Actors"); - $this->assertEqual(count($user->Group), 3); - - $user = $this->objTable->find(5); - $this->assertEqual(count($user->Group), 3); - - //$users = $query->query("FROM User, User.Group WHERE User.Group.name LIKE 'Action Actors'"); - //$this->assertEqual(count($users),1); - - //$this->assertEqual($users[0]->Group[0]->name, "Action Actors"); - //$this->assertEqual(count($users[0]->Group), 1); - - //$this->assertEqual($users[0]->Group[1]->name, "Tough guys inc."); - //$this->assertEqual($users[0]->Group[2]->name, "Terminators"); - //$this->assertEqual(count($users[0]->Group), 3); - - $this->connection->getTable("User")->clear(); - $this->connection->getTable("Phonenumber")->clear(); - - $users = $query->query("FROM User-b.Phonenumber-l WHERE User.Phonenumber.phonenumber LIKE '%123%'"); - $this->assertEqual(trim($query->getQuery()), - "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(); - - $users[1]->Phonenumber[0]->phonenumber; - $users[1]->Phonenumber[1]->phonenumber; - $this->assertEqual($users[1]->Phonenumber[1]->getState(),Doctrine_Record::STATE_CLEAN); - - $users[1]->Phonenumber[2]->phonenumber; - $this->assertEqual($users[1]->Phonenumber[1]->getState(),Doctrine_Record::STATE_CLEAN); - $count2 = $this->connection->getDBH()->count(); - $this->assertEqual($count + 4,$count2); - - - - // DYNAMIC FETCHMODES - $e = false; - try { - $users = $query->query("FROM User-unknown"); - } catch(Exception $e) { - } - $this->assertTrue($e instanceof Doctrine_Query_Exception); - - - $users = $query->query("FROM User-i"); - $this->assertEqual(trim($query->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)"); - - $count = $this->connection->getDBH()->count(); - $this->assertEqual($users[0]->name, "zYne"); - - $this->assertTrue($users instanceof Doctrine_Collection_Immediate); - $count2 = $this->connection->getDBH()->count(); - - - - - - - //$this->clearCache(); - - $users = $query->query("FROM User-b.Phonenumber-b"); - $this->assertEqual(trim($query->getQuery()), - "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); - - // EXPECTED THAT ONE NEW QUERY IS NEEDED TO GET THE FIRST USER's PHONENUMBER - - $count = $this->connection->getDBH()->count(); - $users[0]->Phonenumber[0]->phonenumber; - $count2 = $this->connection->getDBH()->count(); - $this->assertEqual($count + 1,$count2); - - - - - $users = $query->query("FROM User-l:Email-b"); - - $this->assertEqual(trim($query->getQuery()), - "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 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 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 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(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'])); + $q->from('User u'); + $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.id = 4 AND (e.type = 0)'); + + // test consequent calls + $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.id = 4 AND (e.type = 0)'); } } -?> +class MyQuery extends Doctrine_Query +{ + public function preQuery() + { + if ($this->getRoot()->getComponentName() == 'User') { + $this->where('u.id = 4'); + } + } +}