[DDC-317] Using a function only in hydration returns only one result Created: 11/Feb/10  Updated: 19/Feb/10  Resolved: 19/Feb/10

Status: Closed
Project: Doctrine 2 - ORM
Component/s: ORM
Affects Version/s: 2.0-ALPHA4
Fix Version/s: 2.0-BETA1
Security Level: All

Type: Bug Priority: Critical
Reporter: Benjamin Eberlei Assignee: Roman S. Borschel
Resolution: Fixed Votes: 0
Labels: None


 Description   

Output of $arg:

array(1) {
  [-1]=>
  array(1) {
    ["namedep"]=>
    string(25) "Jonathan W.Administration"
  }
}
    public function testConcatFunction()
    {
        $this->generateFixture();
        $arg = $this->_em->createQuery('SELECT CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m')
                         ->getArrayResult();

        $this->assertEquals(4, count($arg)); // fails with 1
    }

    protected function generateFixture()
    {
        $manager1 = new CompanyManager();
        $manager1->setName('Roman B.');
        $manager1->setTitle('');
        $manager1->setDepartment('IT');
        $manager1->setSalary(100000);

        $manager2 = new CompanyManager();
        $manager2->setName('Benjamin E.');
        $manager2->setTitle('');
        $manager2->setDepartment('HR');
        $manager2->setSalary(200000);

        $manager3 = new CompanyManager();
        $manager3->setName('Guilherme B.');
        $manager3->setTitle('');
        $manager3->setDepartment('Complaint Department');
        $manager3->setSalary(400000);

        $manager4 = new CompanyManager();
        $manager4->setName('Jonathan W.');
        $manager4->setTitle('');
        $manager4->setDepartment('Administration');
        $manager4->setSalary(800000);

        $this->_em->persist($manager1);
        $this->_em->persist($manager2);
        $this->_em->persist($manager3);
        $this->_em->persist($manager4);
        $this->_em->flush();
        $this->_em->clear();
    }


 Comments   
Comment by Benjamin Eberlei [ 11/Feb/10 ]

Additional bug, changing the DQL to:

SELECT CONCAT(m.name, m.department) AS namedep FROM Doctrine\Tests\Models\Company\CompanyManager m WHERE m.id = 4

returns an empty result.

Comment by Benjamin Eberlei [ 11/Feb/10 ]

Thie following DQL gives a partial error bug:

SELECT m, m.salary+2500 AS add FROM Doctrine\Tests\Models\Company\CompanyManager m

Error:

Doctrine\Tests\ORM\Functional\QueryDqlFunctionTest::testOperatorAdd()
Exception: [Doctrine\Common\DoctrineException] Loading partial objects is dangerous. Fetch full objects or consider using a different fetch mode. If you really want partial objects, set the doctrine.forcePartialLoad query hint to TRUE.
Comment by Benjamin Eberlei [ 11/Feb/10 ]

The same goes for - * and /

Comment by Benjamin Eberlei [ 13/Feb/10 ]

Generated SQL of the CONCAT Example:

SELECT CONCAT(c0_.name, c1_.department) AS sclr0 FROM company_managers c2_ INNER JOIN company_employees c1_ ON c2_.id = c1_.id INNER JOIN company_persons c0_ ON c2_.id = c0_.id
Comment by Roman S. Borschel [ 19/Feb/10 ]

Should be fixed now.

Generated at Fri Aug 22 23:37:47 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.