Skip to content

Commit

Permalink
Add compatibility with the Symfony 4.4 VarExporter
Browse files Browse the repository at this point in the history
  • Loading branch information
cmodijk committed Oct 19, 2023
1 parent 38ad392 commit a936549
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/Doctrine/ORM/Query/ParserResult.php
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,9 @@ public function __unserialize(array $data): void
{
foreach (self::LEGACY_PROPERTY_MAPPING as $property => $legacyProperty) {
$this->$property = $data[sprintf("\0%s\0%s", self::class, $legacyProperty)]
?? $data[self::class][$legacyProperty]
?? $data[sprintf("\0%s\0%s", self::class, $property)]
?? $data[self::class][$property]
?? $this->$property
?? null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,20 @@

namespace Doctrine\Tests\ORM\Functional;

use Composer\InstalledVersions;
use Composer\Semver\VersionParser;
use Doctrine\ORM\Query;
use Doctrine\ORM\Query\Exec\AbstractSqlExecutor;

Check failure on line 10 in tests/Doctrine/Tests/ORM/Functional/ParserResultSerializationTest.php

View workflow job for this annotation

GitHub Actions / coding-standards / Coding Standards (8.2)

Type Doctrine\ORM\Query\Exec\AbstractSqlExecutor is not used in this file.
use Doctrine\ORM\Query\Exec\SingleSelectExecutor;
use Doctrine\ORM\Query\ParserResult;
use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\Tests\OrmFunctionalTestCase;
use Generator;
use ReflectionMethod;
use Symfony\Component\VarExporter\VarExporter;

use function file_get_contents;
use function file_put_contents;
use function rtrim;
use function serialize;
use function unserialize;
Expand Down Expand Up @@ -61,6 +66,35 @@ public static function provideSerializedSingleSelectResults(): Generator
yield '2.15.0' => [rtrim(file_get_contents(__DIR__ . '/ParserResults/single_select_2_15_0.txt'), "\n")];
}

public function testSymfony44ProvidedData(): void
{
if (InstalledVersions::satisfies(new VersionParser(), 'symfony/var-exporter', '^4.0.0') === false) {
$this->markTestSkipped('This issue only happens on `symfony/var-exporter` version `4`');
}

$sqlExecutor = $this->createMock(SingleSelectExecutor::class);
$resultSetMapping = $this->createMock(ResultSetMapping::class);

$tempFile = 'symfony_44-temp.php';

$parserResult = new ParserResult();
$parserResult->setSqlExecutor($sqlExecutor);
$parserResult->setResultSetMapping($resultSetMapping);
$parserResult->addParameterMapping('name', 0);

$exported = VarExporter::export($parserResult);
$data = file_put_contents($tempFile, '<?php return ' . $exported . ';');

$unserialized = require $tempFile;

$this->assertInstanceOf(ParserResult::class, $unserialized);
$this->assertInstanceOf(ResultSetMapping::class, $unserialized->getResultSetMapping());
$this->assertEquals(['name' => [0]], $unserialized->getParameterMappings());
$this->assertInstanceOf(SingleSelectExecutor::class, $unserialized->getSqlExecutor());

unlink($tempFile);

Check failure on line 95 in tests/Doctrine/Tests/ORM/Functional/ParserResultSerializationTest.php

View workflow job for this annotation

GitHub Actions / coding-standards / Coding Standards (8.2)

Function unlink() should not be referenced via a fallback global name, but via a use statement.
}

private static function parseQuery(Query $query): ParserResult
{
$r = new ReflectionMethod($query, 'parse');
Expand Down

0 comments on commit a936549

Please sign in to comment.