3 namespace Doctrine\Tests\DBAL\Query\Expression;
5 use Doctrine\DBAL\Query\Expression\ExpressionBuilder,
6 Doctrine\DBAL\Query\Expression\CompositeExpression;
8 require_once __DIR__ . '/../../../TestInit.php';
13 class ExpressionBuilderTest extends \Doctrine\Tests\DbalTestCase
17 public function setUp()
19 $conn = $this->getMock('Doctrine\DBAL\Connection', array(), array(), '', false);
21 $this->expr = new ExpressionBuilder($conn);
23 $conn->expects($this->any())
24 ->method('getExpressionBuilder')
25 ->will($this->returnValue($this->expr));
29 * @dataProvider provideDataForAndX
31 public function testAndX($parts, $expected)
33 $composite = $this->expr->andX();
35 foreach ($parts as $part) {
36 $composite->add($part);
39 $this->assertEquals($expected, (string) $composite);
42 public function provideDataForAndX()
50 array('u.user = 1', 'u.group_id = 1'),
51 '(u.user = 1) AND (u.group_id = 1)'
58 array('u.group_id = 1', 'u.group_id = 2'),
59 '(u.group_id = 1) AND (u.group_id = 2)'
64 new CompositeExpression(
65 CompositeExpression::TYPE_OR,
66 array('u.group_id = 1', 'u.group_id = 2')
69 '(u.user = 1) AND ((u.group_id = 1) OR (u.group_id = 2))'
74 new CompositeExpression(
75 CompositeExpression::TYPE_AND,
76 array('u.user = 1', 'u.group_id = 2')
79 '(u.group_id = 1) AND ((u.user = 1) AND (u.group_id = 2))'
85 * @dataProvider provideDataForOrX
87 public function testOrX($parts, $expected)
89 $composite = $this->expr->orX();
91 foreach ($parts as $part) {
92 $composite->add($part);
95 $this->assertEquals($expected, (string) $composite);
98 public function provideDataForOrX()
106 array('u.user = 1', 'u.group_id = 1'),
107 '(u.user = 1) OR (u.group_id = 1)'
114 array('u.group_id = 1', 'u.group_id = 2'),
115 '(u.group_id = 1) OR (u.group_id = 2)'
120 new CompositeExpression(
121 CompositeExpression::TYPE_OR,
122 array('u.group_id = 1', 'u.group_id = 2')
125 '(u.user = 1) OR ((u.group_id = 1) OR (u.group_id = 2))'
130 new CompositeExpression(
131 CompositeExpression::TYPE_AND,
132 array('u.user = 1', 'u.group_id = 2')
135 '(u.group_id = 1) OR ((u.user = 1) AND (u.group_id = 2))'
141 * @dataProvider provideDataForComparison
143 public function testComparison($leftExpr, $operator, $rightExpr, $expected)
145 $part = $this->expr->comparison($leftExpr, $operator, $rightExpr);
147 $this->assertEquals($expected, (string) $part);
150 public function provideDataForComparison()
153 array('u.user_id', ExpressionBuilder::EQ, '1', 'u.user_id = 1'),
154 array('u.user_id', ExpressionBuilder::NEQ, '1', 'u.user_id <> 1'),
155 array('u.salary', ExpressionBuilder::LT, '10000', 'u.salary < 10000'),
156 array('u.salary', ExpressionBuilder::LTE, '10000', 'u.salary <= 10000'),
157 array('u.salary', ExpressionBuilder::GT, '10000', 'u.salary > 10000'),
158 array('u.salary', ExpressionBuilder::GTE, '10000', 'u.salary >= 10000'),
162 public function testEq()
164 $this->assertEquals('u.user_id = 1', $this->expr->eq('u.user_id', '1'));
167 public function testNeq()
169 $this->assertEquals('u.user_id <> 1', $this->expr->neq('u.user_id', '1'));
172 public function testLt()
174 $this->assertEquals('u.salary < 10000', $this->expr->lt('u.salary', '10000'));
177 public function testLte()
179 $this->assertEquals('u.salary <= 10000', $this->expr->lte('u.salary', '10000'));
182 public function testGt()
184 $this->assertEquals('u.salary > 10000', $this->expr->gt('u.salary', '10000'));
187 public function testGte()
189 $this->assertEquals('u.salary >= 10000', $this->expr->gte('u.salary', '10000'));
192 public function testIsNull()
194 $this->assertEquals('u.deleted IS NULL', $this->expr->isNull('u.deleted'));
197 public function testIsNotNull()
199 $this->assertEquals('u.updated IS NOT NULL', $this->expr->isNotNull('u.updated'));