From ceb4e7adec6df516d2dd178838910fb669b70654 Mon Sep 17 00:00:00 2001 From: Cliff Odijk Date: Fri, 15 Sep 2023 14:49:19 +0200 Subject: [PATCH] Add compatibility with the Symfony 4.4 VarExporter --- lib/Doctrine/ORM/Query/ParserResult.php | 2 ++ .../ParserResultSerializationTest.php | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/Doctrine/ORM/Query/ParserResult.php b/lib/Doctrine/ORM/Query/ParserResult.php index e16b5ebc351..e5d36c9bbe3 100644 --- a/lib/Doctrine/ORM/Query/ParserResult.php +++ b/lib/Doctrine/ORM/Query/ParserResult.php @@ -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; } diff --git a/tests/Doctrine/Tests/ORM/Functional/ParserResultSerializationTest.php b/tests/Doctrine/Tests/ORM/Functional/ParserResultSerializationTest.php index a9d73fc7c98..5be608ef69d 100644 --- a/tests/Doctrine/Tests/ORM/Functional/ParserResultSerializationTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/ParserResultSerializationTest.php @@ -11,10 +11,13 @@ 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 unlink; use function unserialize; class ParserResultSerializationTest extends OrmFunctionalTestCase @@ -61,6 +64,31 @@ 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 + { + $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, 'assertInstanceOf(ParserResult::class, $unserialized); + $this->assertInstanceOf(ResultSetMapping::class, $unserialized->getResultSetMapping()); + $this->assertEquals(['name' => [0]], $unserialized->getParameterMappings()); + $this->assertInstanceOf(SingleSelectExecutor::class, $unserialized->getSqlExecutor()); + + unlink($tempFile); + } + private static function parseQuery(Query $query): ParserResult { $r = new ReflectionMethod($query, 'parse');