Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
|
|
namespace Doctrine\Tests\ORM\Functional;
|
|
|
|
|
|
|
|
|
2015-01-17 00:12:42 +03:00
|
|
|
use Doctrine\DBAL\Logging\DebugStack;
|
|
|
|
use Doctrine\DBAL\Logging\SQLLogger;
|
|
|
|
use Doctrine\ORM\Configuration;
|
|
|
|
use Doctrine\ORM\EntityManager;
|
2014-11-12 19:03:31 +03:00
|
|
|
use Doctrine\ORM\Proxy\Proxy;
|
2015-01-17 00:12:42 +03:00
|
|
|
use Doctrine\ORM\Tools\SchemaTool;
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
use Doctrine\ORM\Tools\ToolsException;
|
2015-01-17 00:12:42 +03:00
|
|
|
use Doctrine\Tests\TestUtil;
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
|
|
|
|
class MergeUninitializedProxyTest extends \Doctrine\Tests\OrmFunctionalTestCase {
|
|
|
|
|
|
|
|
protected function setUp()
|
|
|
|
{
|
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
try {
|
|
|
|
$this->_schemaTool->createSchema(array(
|
|
|
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\MUPFile'),
|
|
|
|
$this->_em->getClassMetadata(__NAMESPACE__ . '\MUPPicture'),
|
|
|
|
));
|
|
|
|
} catch (ToolsException $ignored) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-01-16 23:14:13 +03:00
|
|
|
public function testMergeDetachedUnInitializedProxy()
|
|
|
|
{
|
|
|
|
$detachedUninitialized = $this->_em->getReference(MUPFile::CLASSNAME, 123);
|
|
|
|
|
|
|
|
$this->_em->clear();
|
|
|
|
|
|
|
|
$managed = $this->_em->getReference(MUPFile::CLASSNAME, 123);
|
|
|
|
|
|
|
|
$this->assertSame($managed, $this->_em->merge($detachedUninitialized));
|
|
|
|
|
|
|
|
$this->assertFalse($managed->__isInitialized());
|
|
|
|
$this->assertFalse($detachedUninitialized->__isInitialized());
|
|
|
|
}
|
|
|
|
|
2015-01-16 23:09:53 +03:00
|
|
|
public function testMergeUnserializedUnInitializedProxy()
|
|
|
|
{
|
|
|
|
$detachedUninitialized = $this->_em->getReference(MUPFile::CLASSNAME, 123);
|
|
|
|
|
|
|
|
$this->_em->clear();
|
|
|
|
|
2015-01-16 23:14:13 +03:00
|
|
|
$managed = $this->_em->getReference(MUPFile::CLASSNAME, 123);
|
|
|
|
|
2015-01-16 23:09:53 +03:00
|
|
|
$this->assertSame(
|
2015-01-16 23:14:13 +03:00
|
|
|
$managed,
|
|
|
|
$this->_em->merge(unserialize(serialize($this->_em->merge($detachedUninitialized))))
|
2015-01-16 23:09:53 +03:00
|
|
|
);
|
2015-01-16 23:14:13 +03:00
|
|
|
|
|
|
|
$this->assertFalse($managed->__isInitialized());
|
|
|
|
$this->assertFalse($detachedUninitialized->__isInitialized());
|
2015-01-16 23:09:53 +03:00
|
|
|
}
|
|
|
|
|
2015-01-16 23:15:39 +03:00
|
|
|
public function testMergeManagedProxy()
|
|
|
|
{
|
|
|
|
$managed = $this->_em->getReference(MUPFile::CLASSNAME, 123);
|
|
|
|
|
|
|
|
$this->assertSame($managed, $this->_em->merge($managed));
|
|
|
|
|
|
|
|
$this->assertFalse($managed->__isInitialized());
|
|
|
|
}
|
|
|
|
|
2015-01-17 00:12:42 +03:00
|
|
|
public function testMergingProxyFromDifferentEntityManagerDoesNotReplaceInitializer()
|
|
|
|
{
|
|
|
|
$em1 = $this->createEntityManager($logger1 = new DebugStack());
|
|
|
|
$em2 = $this->createEntityManager($logger2 = new DebugStack());
|
|
|
|
|
|
|
|
$file1 = new MUPFile();
|
|
|
|
|
|
|
|
$em1->persist($file1);
|
|
|
|
$em1->flush();
|
|
|
|
$em1->clear();
|
|
|
|
|
|
|
|
$queryCount1 = count($logger1->queries);
|
|
|
|
$queryCount2 = count($logger1->queries);
|
|
|
|
|
|
|
|
$proxy1 = $em1->getReference(MUPFile::CLASSNAME, $file1->fileId);
|
|
|
|
$proxy2 = $em2->getReference(MUPFile::CLASSNAME, $file1->fileId);
|
|
|
|
$merged2 = $em2->merge($proxy1);
|
|
|
|
|
|
|
|
$this->assertNotSame($proxy1, $merged2);
|
|
|
|
$this->assertSame($proxy2, $merged2);
|
|
|
|
|
|
|
|
$this->assertFalse($proxy1->__isInitialized());
|
|
|
|
$this->assertFalse($proxy2->__isInitialized());
|
|
|
|
|
|
|
|
$proxy1->__load();
|
|
|
|
|
|
|
|
$this->assertCount(
|
|
|
|
$queryCount1 + 1,
|
|
|
|
$logger1->queries,
|
|
|
|
'Loading the first proxy was done through the first entity manager'
|
|
|
|
);
|
|
|
|
$this->assertCount(
|
|
|
|
$queryCount2,
|
|
|
|
$logger2->queries,
|
|
|
|
'No queries were executed on the second entity manager, as it is unrelated with the first proxy'
|
|
|
|
);
|
|
|
|
|
|
|
|
$proxy2->__load();
|
|
|
|
|
|
|
|
$this->assertCount(
|
|
|
|
$queryCount1 + 1,
|
|
|
|
$logger1->queries,
|
|
|
|
'Loading the second proxy does not affect the first entity manager'
|
|
|
|
);
|
|
|
|
$this->assertCount(
|
|
|
|
$queryCount2 + 1,
|
|
|
|
$logger2->queries,
|
|
|
|
'Loading of the second proxy instance was done through the second entity manager'
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
public function testMergeDetachedIntoEntity() {
|
|
|
|
|
|
|
|
$file = new MUPFile;
|
|
|
|
|
|
|
|
$picture = new MUPPicture;
|
|
|
|
$picture->file = $file;
|
|
|
|
|
|
|
|
$em = $this->_em;
|
|
|
|
$em->persist($picture);
|
|
|
|
$em->flush();
|
|
|
|
$em->clear();
|
|
|
|
|
|
|
|
$fileId = $file->fileId;
|
|
|
|
$pictureId = $picture->pictureId;
|
|
|
|
|
|
|
|
$picture = $em->find(__NAMESPACE__ . '\MUPPicture', $pictureId);
|
|
|
|
|
|
|
|
$em->clear();
|
|
|
|
|
|
|
|
$file = $em->find(__NAMESPACE__ . '\MUPFile', $fileId);
|
2014-11-12 19:03:31 +03:00
|
|
|
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
$picture = $em->merge($picture);
|
|
|
|
|
|
|
|
$this->assertEquals($file, $picture->file, "Detached proxy was not merged into managed entity");
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testMergeUnserializedIntoProxy() {
|
|
|
|
|
|
|
|
$file = new MUPFile;
|
|
|
|
|
|
|
|
$picture = new MUPPicture;
|
|
|
|
$picture->file = $file;
|
|
|
|
|
|
|
|
$picture2 = new MUPPicture;
|
|
|
|
$picture2->file = $file;
|
|
|
|
|
|
|
|
$em = $this->_em;
|
|
|
|
$em->persist($picture);
|
|
|
|
$em->persist($picture2);
|
|
|
|
$em->flush();
|
|
|
|
$em->clear();
|
|
|
|
|
|
|
|
$pictureId = $picture->pictureId;
|
|
|
|
$picture2Id = $picture2->pictureId;
|
|
|
|
|
|
|
|
$picture = $em->find(__NAMESPACE__ . '\MUPPicture', $pictureId);
|
|
|
|
$serializedPicture = serialize($picture);
|
|
|
|
|
|
|
|
$em->clear();
|
|
|
|
|
|
|
|
$picture2 = $em->find(__NAMESPACE__ . '\MUPPicture', $picture2Id);
|
2014-11-12 19:03:31 +03:00
|
|
|
$this->assertFalse($picture->file->__isInitialized());
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
$picture = unserialize($serializedPicture);
|
2014-11-12 19:03:31 +03:00
|
|
|
|
|
|
|
$this->assertTrue($picture->file instanceof Proxy);
|
|
|
|
$this->assertFalse($picture->file->__isInitialized());
|
|
|
|
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
$picture = $em->merge($picture);
|
|
|
|
|
2014-11-12 19:03:31 +03:00
|
|
|
$this->assertTrue($picture->file instanceof Proxy);
|
|
|
|
$this->assertFalse($picture->file->__isInitialized(), 'Proxy has been initialized during merge.');
|
|
|
|
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
$this->assertEquals($picture2->file, $picture->file, "Unserialized proxy was not merged into managed proxy");
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testMergeDetachedIntoProxy() {
|
|
|
|
|
|
|
|
$file = new MUPFile;
|
|
|
|
|
|
|
|
$picture = new MUPPicture;
|
|
|
|
$picture->file = $file;
|
|
|
|
|
|
|
|
$picture2 = new MUPPicture;
|
|
|
|
$picture2->file = $file;
|
|
|
|
|
|
|
|
$em = $this->_em;
|
|
|
|
$em->persist($picture);
|
|
|
|
$em->persist($picture2);
|
|
|
|
$em->flush();
|
|
|
|
$em->clear();
|
|
|
|
|
|
|
|
$pictureId = $picture->pictureId;
|
|
|
|
$picture2Id = $picture2->pictureId;
|
|
|
|
|
|
|
|
$picture = $em->find(__NAMESPACE__ . '\MUPPicture', $pictureId);
|
|
|
|
|
|
|
|
$em->clear();
|
|
|
|
|
|
|
|
$picture2 = $em->find(__NAMESPACE__ . '\MUPPicture', $picture2Id);
|
2014-11-12 19:03:31 +03:00
|
|
|
|
|
|
|
$this->assertTrue($picture->file instanceof Proxy);
|
|
|
|
$this->assertFalse($picture->file->__isInitialized());
|
|
|
|
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
$picture = $em->merge($picture);
|
|
|
|
|
2014-11-12 19:03:31 +03:00
|
|
|
$this->assertTrue($picture->file instanceof Proxy);
|
|
|
|
$this->assertFalse($picture->file->__isInitialized(), 'Proxy has been initialized during merge.');
|
|
|
|
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
$this->assertEquals($picture2->file, $picture->file, "Detached proxy was not merged into managed proxy");
|
|
|
|
}
|
|
|
|
|
2015-01-17 00:12:42 +03:00
|
|
|
/**
|
|
|
|
* @param SQLLogger $logger
|
|
|
|
*
|
|
|
|
* @return EntityManager
|
|
|
|
*/
|
|
|
|
private function createEntityManager(SQLLogger $logger)
|
|
|
|
{
|
|
|
|
$config = new Configuration();
|
|
|
|
|
|
|
|
$config->setProxyDir(realpath(__DIR__ . '/../../Proxies/../..'));
|
|
|
|
$config->setProxyNamespace('Doctrine\Tests\Proxies');
|
|
|
|
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(
|
|
|
|
array(realpath(__DIR__ . '/../../Models/Cache')),
|
|
|
|
true
|
|
|
|
));
|
|
|
|
|
|
|
|
$connection = TestUtil::getConnection();
|
|
|
|
|
|
|
|
$connection->getConfiguration()->setSQLLogger($logger);
|
|
|
|
|
|
|
|
$entityManager = EntityManager::create($connection, $config);
|
|
|
|
|
|
|
|
try {
|
|
|
|
(new SchemaTool($entityManager))
|
|
|
|
->createSchema([$this->_em->getClassMetadata(MUPFile::CLASSNAME)]);
|
|
|
|
} catch (ToolsException $ignored) {
|
|
|
|
// tables were already created
|
|
|
|
}
|
|
|
|
|
|
|
|
return $entityManager;
|
|
|
|
}
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @Entity
|
|
|
|
*/
|
|
|
|
class MUPPicture
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @Column(name="picture_id", type="integer")
|
|
|
|
* @Id @GeneratedValue
|
|
|
|
*/
|
|
|
|
public $pictureId;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @ManyToOne(targetEntity="MUPFile", cascade={"persist", "merge"})
|
|
|
|
* @JoinColumn(name="file_id", referencedColumnName="file_id")
|
|
|
|
*/
|
|
|
|
public $file;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2015-01-16 23:23:47 +03:00
|
|
|
/** @Entity */
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
class MUPFile
|
|
|
|
{
|
2015-01-16 23:09:53 +03:00
|
|
|
const CLASSNAME = __CLASS__;
|
|
|
|
|
2015-01-16 23:23:47 +03:00
|
|
|
/** @Column(name="file_id", type="integer") @Id @GeneratedValue(strategy="AUTO") */
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
public $fileId;
|
|
|
|
|
2015-01-16 23:23:47 +03:00
|
|
|
/** @Column(type="string", nullable=true) */
|
|
|
|
private $contents;
|
Don't load detached proxies when merging them.
Ticket DDC-1392 fixed an issue where uninitialized proxies could not be merged
because the merge routine couldn't get the identifier from them. The soution
was to initialize the proxy.
Ticket DDC-1734 fixed the merging of *unserialized* uninitialized proxies by
resetting their internals, so these proxies were able to initialize, as required
by the fix for DDC-1392.
Somehow, in the meanwhile, the fix for DDC-1392 is not needed anymore:
reverting the patch will not break the associated test (but it does break the
test for DDC-1734). This means it is not needed anymore to initialize the proxy
when merging.
Uninitialized proxies that get merged should not be loaded at all. Since they
are not initialized, the entity data for sure hasn't changed, so it can be
safely ignored. Actually, the only thing the data is needed for while merging,
is to copy it into the managed entity, but that one is already supposed to be
up to date. By not initializing the proxy, a potential database roundtrip is
saved, and the fix for DDC-1734 is not needed anymore.
Besides optimizing the merge, this patch also solves an issue with merging.
Currently, when a detached uninitialized proxy is merged while there is already a
corresponding managed entity (proxy or not), the ORM returns a blank entity
instead of returning the already managed entity. This patch makes sure that
already existing managed entities are re-used.
2014-11-06 09:16:20 +03:00
|
|
|
}
|