123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- <?php
-
- namespace Doctrine\Tests\DBAL\Query\Expression;
-
- use Doctrine\DBAL\Query\Expression\ExpressionBuilder,
- Doctrine\DBAL\Query\Expression\CompositeExpression;
-
- require_once __DIR__ . '/../../../TestInit.php';
-
- /**
- * @group DBAL-12
- */
- class ExpressionBuilderTest extends \Doctrine\Tests\DbalTestCase
- {
- protected $expr;
-
- public function setUp()
- {
- $conn = $this->getMock('Doctrine\DBAL\Connection', array(), array(), '', false);
-
- $this->expr = new ExpressionBuilder($conn);
-
- $conn->expects($this->any())
- ->method('getExpressionBuilder')
- ->will($this->returnValue($this->expr));
- }
-
- /**
- * @dataProvider provideDataForAndX
- */
- public function testAndX($parts, $expected)
- {
- $composite = $this->expr->andX();
-
- foreach ($parts as $part) {
- $composite->add($part);
- }
-
- $this->assertEquals($expected, (string) $composite);
- }
-
- public function provideDataForAndX()
- {
- return array(
- array(
- array('u.user = 1'),
- 'u.user = 1'
- ),
- array(
- array('u.user = 1', 'u.group_id = 1'),
- '(u.user = 1) AND (u.group_id = 1)'
- ),
- array(
- array('u.user = 1'),
- 'u.user = 1'
- ),
- array(
- array('u.group_id = 1', 'u.group_id = 2'),
- '(u.group_id = 1) AND (u.group_id = 2)'
- ),
- array(
- array(
- 'u.user = 1',
- new CompositeExpression(
- CompositeExpression::TYPE_OR,
- array('u.group_id = 1', 'u.group_id = 2')
- )
- ),
- '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))'
- ),
- array(
- array(
- 'u.group_id = 1',
- new CompositeExpression(
- CompositeExpression::TYPE_AND,
- array('u.user = 1', 'u.group_id = 2')
- )
- ),
- '(u.group_id = 1) AND ((u.user = 1) AND (u.group_id = 2))'
- ),
- );
- }
-
- /**
- * @dataProvider provideDataForOrX
- */
- public function testOrX($parts, $expected)
- {
- $composite = $this->expr->orX();
-
- foreach ($parts as $part) {
- $composite->add($part);
- }
-
- $this->assertEquals($expected, (string) $composite);
- }
-
- public function provideDataForOrX()
- {
- return array(
- array(
- array('u.user = 1'),
- 'u.user = 1'
- ),
- array(
- array('u.user = 1', 'u.group_id = 1'),
- '(u.user = 1) OR (u.group_id = 1)'
- ),
- array(
- array('u.user = 1'),
- 'u.user = 1'
- ),
- array(
- array('u.group_id = 1', 'u.group_id = 2'),
- '(u.group_id = 1) OR (u.group_id = 2)'
- ),
- array(
- array(
- 'u.user = 1',
- new CompositeExpression(
- CompositeExpression::TYPE_OR,
- array('u.group_id = 1', 'u.group_id = 2')
- )
- ),
- '(u.user = 1) OR ((u.group_id = 1) OR (u.group_id = 2))'
- ),
- array(
- array(
- 'u.group_id = 1',
- new CompositeExpression(
- CompositeExpression::TYPE_AND,
- array('u.user = 1', 'u.group_id = 2')
- )
- ),
- '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))'
- ),
- );
- }
-
- /**
- * @dataProvider provideDataForComparison
- */
- public function testComparison($leftExpr, $operator, $rightExpr, $expected)
- {
- $part = $this->expr->comparison($leftExpr, $operator, $rightExpr);
-
- $this->assertEquals($expected, (string) $part);
- }
-
- public function provideDataForComparison()
- {
- return array(
- array('u.user_id', ExpressionBuilder::EQ, '1', 'u.user_id = 1'),
- array('u.user_id', ExpressionBuilder::NEQ, '1', 'u.user_id <> 1'),
- array('u.salary', ExpressionBuilder::LT, '10000', 'u.salary < 10000'),
- array('u.salary', ExpressionBuilder::LTE, '10000', 'u.salary <= 10000'),
- array('u.salary', ExpressionBuilder::GT, '10000', 'u.salary > 10000'),
- array('u.salary', ExpressionBuilder::GTE, '10000', 'u.salary >= 10000'),
- );
- }
-
- public function testEq()
- {
- $this->assertEquals('u.user_id = 1', $this->expr->eq('u.user_id', '1'));
- }
-
- public function testNeq()
- {
- $this->assertEquals('u.user_id <> 1', $this->expr->neq('u.user_id', '1'));
- }
-
- public function testLt()
- {
- $this->assertEquals('u.salary < 10000', $this->expr->lt('u.salary', '10000'));
- }
-
- public function testLte()
- {
- $this->assertEquals('u.salary <= 10000', $this->expr->lte('u.salary', '10000'));
- }
-
- public function testGt()
- {
- $this->assertEquals('u.salary > 10000', $this->expr->gt('u.salary', '10000'));
- }
-
- public function testGte()
- {
- $this->assertEquals('u.salary >= 10000', $this->expr->gte('u.salary', '10000'));
- }
-
- public function testIsNull()
- {
- $this->assertEquals('u.deleted IS NULL', $this->expr->isNull('u.deleted'));
- }
-
- public function testIsNotNull()
- {
- $this->assertEquals('u.updated IS NOT NULL', $this->expr->isNotNull('u.updated'));
- }
- }
|