diff --git a/tests/Ticket330TestCase.php b/tests/Ticket330TestCase.php new file mode 100644 index 000000000..3cbcf6054 --- /dev/null +++ b/tests/Ticket330TestCase.php @@ -0,0 +1,105 @@ + + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @category Object Relational Mapping + * @link www.phpdoctrine.com + * @since 1.0 + * @version $Revision$ + */ + +class stNode extends Doctrine_Record +{ + public function setTableDefinition() + { + $this->setTableName('node_node'); + + $this->hasColumn('title', 'string', 255, array ()); + } + + public function setUp() + { + $this->hasOne('stNodeDetail as detail', 'stNodeDetail.node_id' , array( 'onDelete'=>'cascade')); + } +} + +class stNodeDetail extends Doctrine_Record +{ + public function setTableDefinition() + { + $this->setTableName('node_detail'); + + $this->hasColumn('node_id', 'integer', 10, array ( 'unique' => true,)); + $this->hasColumn('null_column', 'string', 255, array ('default'=>null)); + $this->hasColumn('is_bool', 'boolean', null, array ('default' => 0,)); + $this->option('type', 'MyISAM'); + } + + public function setUp() + { + $this->hasOne('stNode as node', 'stNodeDetail.article_id', array('foreign' => 'id' , 'onDelete'=>'cascade')); + } +} + + +class Doctrine_Ticket330_TestCase extends Doctrine_UnitTestCase +{ + public function prepareData() + { } + + public function prepareTables() + { } + + public function testUnnecessaryQueries() + { + + $node1 = new stNode(); + $node1->set('title', 'first node'); + $node1->detail->set('is_bool', true); + $node1->save(); + + $node2 = new stNode(); + $node2->set('title', 'second node'); + $node2->detail->set('null_column', 'value'); + $node2->detail->set('is_bool', false); + $node2->save(); + + $nodes = Doctrine_Query::create() + ->select('n.title, d.null_column, d.is_bool') + ->from('stNode n, n.detail d') + ->execute(); + + $prevCount = $this->dbh->count(); + + + foreach ( $nodes as $node ) + { + if ( $node->get('title') == 'first node') + { + $this->assertEqual($node->detail->get('is_bool'), true); + $this->assertEqual($node->detail->get('null_column'), null); + // Unnecessary query is triggered on line before due to null value column. + $this->assertEqual($this->dbh->count(), $prevCount); + + $prevCount = $this->dbh->count(); + } + else + { + $this->assertEqual($node->detail->get('null_column'), 'value'); + $this->assertEqual($node->detail->get('is_bool'), false); + // Unecessary query is triggered on line before due to false value column + $this->assertEqual($this->dbh->count(), $prevCount); + } + } + + $this->assertEqual($this->dbh->count(), $prevCount); + + echo $this->dbh->count()."\n\n"; + + } +}