diff --git a/tests/Doctrine/Performance/Hydration/SingleTableInheritanceHydrationPerformanceBench.php b/tests/Doctrine/Performance/Hydration/SingleTableInheritanceHydrationPerformanceBench.php new file mode 100644 index 000000000..ec6c17c3e --- /dev/null +++ b/tests/Doctrine/Performance/Hydration/SingleTableInheritanceHydrationPerformanceBench.php @@ -0,0 +1,107 @@ +<?php + +namespace Doctrine\Performance\Hydration; + +use Doctrine\Common\Persistence\ObjectRepository; +use Doctrine\Performance\EntityManagerFactory; +use Doctrine\Tests\Models\Company; +use PhpBench\Benchmark\Metadata\Annotations\BeforeMethods; + +/** + * @BeforeMethods({"init"}) + */ +final class SingleTableInheritanceHydrationPerformanceBench +{ + /** + * @var ObjectRepository + */ + private $contractsRepository; + + /** + * @var ObjectRepository + */ + private $fixContractsRepository; + + /** + * @var ObjectRepository + */ + private $flexContractRepository; + + /** + * @var ObjectRepository + */ + private $ultraContractRepository; + + public function init() + { + $entityManager = EntityManagerFactory::getEntityManager([ + Company\CompanyPerson::class, + Company\CompanyEmployee::class, + Company\CompanyManager::class, + Company\CompanyOrganization::class, + Company\CompanyEvent::class, + Company\CompanyAuction::class, + Company\CompanyRaffle::class, + Company\CompanyCar::class, + Company\CompanyContract::class, + ]); + + $this->contractsRepository = $entityManager->getRepository(Company\CompanyContract::class); + $this->fixContractsRepository = $entityManager->getRepository(Company\CompanyFixContract::class); + $this->flexContractRepository = $entityManager->getRepository(Company\CompanyFlexContract::class); + $this->ultraContractRepository = $entityManager->getRepository(Company\CompanyFlexUltraContract::class); + + $person = new Company\CompanyEmployee(); + $person->setName('Poor Sales Guy'); + $person->setDepartment('Sales'); + $person->setSalary(100); + $entityManager->persist($person); + + for ($i = 0; $i < 33; $i++) { + $fixContract = new Company\CompanyFixContract(); + $flexContract = new Company\CompanyFlexContract(); + $ultraContract = new Company\CompanyFlexUltraContract(); + + $fixContract->setFixPrice(1000); + $fixContract->setSalesPerson($person); + $fixContract->markCompleted(); + + $flexContract->setSalesPerson($person); + $flexContract->setHoursWorked(100); + $flexContract->setPricePerHour(100); + $flexContract->markCompleted(); + + $ultraContract->setSalesPerson($person); + $ultraContract->setHoursWorked(150); + $ultraContract->setPricePerHour(150); + $ultraContract->setMaxPrice(7000); + + $entityManager->persist($fixContract); + $entityManager->persist($flexContract); + $entityManager->persist($ultraContract); + } + + $entityManager->flush(); + $entityManager->clear(); + } + + public function benchHydrateFixContracts() + { + $this->fixContractsRepository->findAll(); + } + + public function benchHydrateFlexContracts() + { + $this->flexContractRepository->findAll(); + } + + public function benchHydrateUltraContracts() + { + $this->ultraContractRepository->findAll(); + } + + public function benchHydrateAllContracts() + { + $this->contractsRepository->findAll(); + } +}