Skip to content

Commit 09fc92e

Browse files
Merge pull request #257 from peter-gribanov/doctrine_orm_2.2_bc_break
Fix BC with Doctrine ORM 2.2
2 parents 482af42 + 0ab3bee commit 09fc92e

File tree

6 files changed

+42
-17
lines changed

6 files changed

+42
-17
lines changed

src/Filter/MemberOfX.php

+5
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public function getFilter(QueryBuilder $qb, $dqlAlias)
6161
$field = ArgumentToOperandConverter::toField($this->field);
6262
$value = ArgumentToOperandConverter::toValue($this->value);
6363

64+
// doctrine/orm < 2.5
65+
if (!method_exists($qb, 'isMemberOf')) {
66+
return sprintf('%s MEMBER OF %s', $value->transform($qb, $dqlAlias), $field->transform($qb, $dqlAlias));
67+
}
68+
6469
return (string) $qb->expr()->isMemberOf(
6570
$value->transform($qb, $dqlAlias),
6671
$field->transform($qb, $dqlAlias)

src/Query/IndexBy.php

+5
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public function modify(QueryBuilder $qb, $dqlAlias)
5757
$dqlAlias = $this->dqlAlias;
5858
}
5959

60+
// doctrine/orm < 2.5
61+
if (!method_exists($qb, 'indexBy')) {
62+
throw new \RuntimeException('IndexBy query modifier require doctrine/orm >= 2.5');
63+
}
64+
6065
$qb->indexBy($dqlAlias, $this->field->transform($qb, $dqlAlias));
6166
}
6267
}

tests/Filter/MemberOfXSpec.php

+1-6
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
namespace tests\Happyr\DoctrineSpecification\Filter;
1515

1616
use Doctrine\Common\Collections\ArrayCollection;
17-
use Doctrine\ORM\Query\Expr;
18-
use Doctrine\ORM\Query\Expr\Comparison;
1917
use Doctrine\ORM\QueryBuilder;
2018
use Happyr\DoctrineSpecification\Filter\Filter;
2119
use Happyr\DoctrineSpecification\Filter\MemberOfX;
@@ -41,15 +39,12 @@ public function it_is_an_expression()
4139
$this->shouldBeAnInstanceOf(Filter::class);
4240
}
4341

44-
public function it_returns_expression_func_object(QueryBuilder $qb, ArrayCollection $parameters, Expr $exp)
42+
public function it_returns_expression_func_object(QueryBuilder $qb, ArrayCollection $parameters)
4543
{
46-
$exp_comparison = new Comparison(':comparison_10', 'MEMBER OF', 'a.age');
47-
$qb->expr()->willReturn($exp);
4844
$qb->getParameters()->willReturn($parameters);
4945
$parameters->count()->willReturn(10);
5046

5147
$qb->setParameter('comparison_10', 18, null)->shouldBeCalled();
52-
$exp->isMemberOf(':comparison_10', 'a.age')->willReturn($exp_comparison);
5348

5449
$this->getFilter($qb, null)->shouldReturn(':comparison_10 MEMBER OF a.age');
5550
}

tests/Operand/PlatformFunctionSpec.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
use Doctrine\Common\Collections\ArrayCollection;
1717
use Doctrine\ORM\Configuration;
18-
use Doctrine\ORM\EntityManagerInterface;
18+
use Doctrine\ORM\EntityManager;
1919
use Doctrine\ORM\QueryBuilder;
2020
use Happyr\DoctrineSpecification\Exception\InvalidArgumentException;
2121
use Happyr\DoctrineSpecification\Operand\Field;
@@ -78,7 +78,7 @@ public function it_is_transformable_many_arguments_as_array(QueryBuilder $qb)
7878

7979
public function it_is_transformable_custom_string_function(
8080
QueryBuilder $qb,
81-
EntityManagerInterface $em,
81+
EntityManager $em,
8282
Configuration $configuration
8383
) {
8484
$dqlAlias = 'a';
@@ -98,7 +98,7 @@ public function it_is_transformable_custom_string_function(
9898

9999
public function it_is_transformable_custom_numeric_function(
100100
QueryBuilder $qb,
101-
EntityManagerInterface $em,
101+
EntityManager $em,
102102
Configuration $configuration
103103
) {
104104
$dqlAlias = 'a';
@@ -118,7 +118,7 @@ public function it_is_transformable_custom_numeric_function(
118118

119119
public function it_is_transformable_custom_datetime_function(
120120
QueryBuilder $qb,
121-
EntityManagerInterface $em,
121+
EntityManager $em,
122122
Configuration $configuration
123123
) {
124124
$dqlAlias = 'a';
@@ -138,7 +138,7 @@ public function it_is_transformable_custom_datetime_function(
138138

139139
public function it_is_transformable_undefined_function(
140140
QueryBuilder $qb,
141-
EntityManagerInterface $em,
141+
EntityManager $em,
142142
Configuration $configuration
143143
) {
144144
$functionName = 'foo';
@@ -155,7 +155,7 @@ public function it_is_transformable_undefined_function(
155155

156156
public function it_is_transformable_convertible(
157157
QueryBuilder $qb,
158-
EntityManagerInterface $em,
158+
EntityManager $em,
159159
Configuration $configuration,
160160
ArrayCollection $parameters,
161161
Value $value

tests/Query/IndexBySpec.php

+13
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
use Doctrine\ORM\QueryBuilder;
1717
use Happyr\DoctrineSpecification\Query\IndexBy;
1818
use PhpSpec\ObjectBehavior;
19+
use PhpSpec\Exception\Example\SkippingException;
1920

2021
/**
2122
* @mixin IndexBy
@@ -33,18 +34,30 @@ public function let()
3334

3435
public function it_is_a_result_modifier()
3536
{
37+
if (!method_exists(QueryBuilder::class, 'indexBy')) {
38+
throw new SkippingException('IndexBy query modifier require doctrine/orm >= 2.5');
39+
}
40+
3641
$this->shouldBeAnInstanceOf('Happyr\DoctrineSpecification\Query\QueryModifier');
3742
}
3843

3944
public function it_indexes_with_default_dql_alias(QueryBuilder $qb)
4045
{
46+
if (!method_exists(QueryBuilder::class, 'indexBy')) {
47+
throw new SkippingException('IndexBy query modifier require doctrine/orm >= 2.5');
48+
}
49+
4150
$this->beConstructedWith('something', 'x');
4251
$qb->indexBy('x', 'x.something')->shouldBeCalled();
4352
$this->modify($qb, 'a');
4453
}
4554

4655
public function it_uses_local_alias_if_global_was_not_set(QueryBuilder $qb)
4756
{
57+
if (!method_exists(QueryBuilder::class, 'indexBy')) {
58+
throw new SkippingException('IndexBy query modifier require doctrine/orm >= 2.5');
59+
}
60+
4861
$this->beConstructedWith('thing');
4962
$qb->indexBy('b', 'b.thing')->shouldBeCalled();
5063
$this->modify($qb, 'b');

tests/Result/RoundDateTimeSpec.php

+12-5
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,18 @@ public function it_round_date_time_in_query_parameters_for_given_time(AbstractQu
4343
$actual = new \DateTime('15:55:34');
4444
$expected = new \DateTimeImmutable('15:00:00');
4545

46-
$query->getParameters()->willReturn(new ArrayCollection([
47-
new Parameter('status', 'active'), // scalar param
48-
new Parameter($name, $actual, $type),
49-
]));
50-
$query->setParameter($name, $expected, $type)->shouldBeCalled();
46+
if (class_exists(Parameter::class)) { // doctrine/orm >= 2.3
47+
$query->getParameters()->willReturn(new ArrayCollection([
48+
new Parameter('status', 'active'), // scalar param
49+
new Parameter($name, $actual, $type),
50+
]));
51+
$query->setParameter($name, $expected, $type)->shouldBeCalled();
52+
} else {
53+
$query->getParameters()->willReturn([
54+
'status' => 'active', // scalar param
55+
$name => $actual,
56+
]);
57+
}
5158

5259
$this->modify($query);
5360
}

0 commit comments

Comments
 (0)