| Code Coverage | ||||||||||
| Classes and Traits | Functions and Methods | Lines | ||||||||
| Total |  | 100.00% | 1 / 1 |  | 100.00% | 7 / 7 | CRAP |  | 100.00% | 47 / 47 | 
| StoredProcedureMigrator |  | 100.00% | 1 / 1 |  | 100.00% | 7 / 7 | 13 |  | 100.00% | 47 / 47 | 
| __construct |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 2 / 2 | |||
| getMigrateProcedureStatementList |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 8 / 8 | |||
| addSimpleStoredProcedurStatementList |  | 100.00% | 1 / 1 | 1 |  | 100.00% | 11 / 11 | |||
| addCustomStoredProcedureStatementList |  | 100.00% | 1 / 1 | 2 |  | 100.00% | 4 / 4 | |||
| addCollectionStoredProcedureList |  | 100.00% | 1 / 1 | 3 |  | 100.00% | 8 / 8 | |||
| addCollectionManyStoredProcedureList |  | 100.00% | 1 / 1 | 2 |  | 100.00% | 8 / 8 | |||
| addStatement |  | 100.00% | 1 / 1 | 3 |  | 100.00% | 6 / 6 | |||
| <?php | |
| declare(strict_types = 1); | |
| namespace Siesta\Migration; | |
| use Siesta\Database\StoredProcedureDefinition; | |
| use Siesta\Database\StoredProcedureFactory; | |
| use Siesta\Model\DataModel; | |
| use Siesta\Model\Entity; | |
| /** | |
| * @author Gregor Müller | |
| */ | |
| class StoredProcedureMigrator | |
| { | |
| /** | |
| * @var StoredProcedureFactory | |
| */ | |
| protected $factory; | |
| /** | |
| * @var string[] | |
| */ | |
| protected $statementList; | |
| /** | |
| * @var DataModel | |
| */ | |
| protected $dataModel; | |
| /** | |
| * @var Entity | |
| */ | |
| protected $entity; | |
| /** | |
| * StoredProcedureMigrator constructor. | |
| * | |
| * @param StoredProcedureFactory $factory | |
| */ | |
| public function __construct(StoredProcedureFactory $factory) | |
| { | |
| $this->factory = $factory; | |
| } | |
| /** | |
| * @param DataModel $dataModel | |
| * @param Entity $entity | |
| * | |
| * @return string[] | |
| */ | |
| public function getMigrateProcedureStatementList(DataModel $dataModel, Entity $entity) | |
| { | |
| $this->dataModel = $dataModel; | |
| $this->entity = $entity; | |
| $this->statementList = []; | |
| $this->addSimpleStoredProcedurStatementList(); | |
| $this->addCustomStoredProcedureStatementList(); | |
| $this->addCollectionStoredProcedureList(); | |
| $this->addCollectionManyStoredProcedureList(); | |
| return $this->statementList; | |
| } | |
| /** | |
| * | |
| */ | |
| protected function addSimpleStoredProcedurStatementList() | |
| { | |
| $selectDefinition = $this->factory->createSelectByPKStoredProcedure($this->dataModel, $this->entity); | |
| $this->addStatement($selectDefinition); | |
| $insertDefinition = $this->factory->createInsertStoredProcedure($this->dataModel, $this->entity); | |
| $this->addStatement($insertDefinition); | |
| $updateDefinition = $this->factory->createUpdateStoredProcedure($this->dataModel, $this->entity); | |
| $this->addStatement($updateDefinition); | |
| $deleteDefinition = $this->factory->createDeleteByPKStoredProcedure($this->dataModel, $this->entity); | |
| $this->addStatement($deleteDefinition); | |
| $copyToReplication = $this->factory->createCopyToReplicationTableStoredProcedure($this->dataModel, $this->entity); | |
| $this->addStatement($copyToReplication); | |
| } | |
| /** | |
| * | |
| */ | |
| protected function addCustomStoredProcedureStatementList() | |
| { | |
| foreach ($this->entity->getStoredProcedureList() as $storedProcedure) { | |
| $procedureDefinition = $this->factory->createCustomStoredProcedure($this->dataModel, $this->entity, $storedProcedure); | |
| $this->addStatement($procedureDefinition); | |
| } | |
| } | |
| /** | |
| * | |
| */ | |
| protected function addCollectionStoredProcedureList() | |
| { | |
| foreach ($this->entity->getReferenceList() as $reference) { | |
| if (!$reference->doesCollectionRefersTo()) { | |
| continue; | |
| } | |
| $procedureDefiniton = $this->factory->createSelectByReferenceStoredProcedure($this->dataModel, $this->entity, $reference); | |
| $this->addStatement($procedureDefiniton); | |
| $procedureDefiniton = $this->factory->createDeleteByReferenceStoredProcedure($this->dataModel, $this->entity, $reference); | |
| $this->addStatement($procedureDefiniton); | |
| } | |
| } | |
| /** | |
| * | |
| */ | |
| protected function addCollectionManyStoredProcedureList() | |
| { | |
| foreach ($this->entity->getCollectionManyList() as $collectionMany) { | |
| $procedureDefinition = $this->factory->createSelectByCollectionManyStoredProcedure($this->dataModel, $this->entity, $collectionMany); | |
| $this->addStatement($procedureDefinition); | |
| $procedureDefinition = $this->factory->createDeleteByCollectionManyStoredProcedure($this->dataModel, $this->entity, $collectionMany); | |
| $this->addStatement($procedureDefinition); | |
| $procedureDefinition = $this->factory->createDeleteCollectionManyAssignmentStoredProcedure($this->dataModel, $this->entity, $collectionMany); | |
| $this->addStatement($procedureDefinition); | |
| } | |
| } | |
| /** | |
| * @param StoredProcedureDefinition $definition | |
| */ | |
| protected function addStatement(StoredProcedureDefinition $definition) | |
| { | |
| $dropDefinition = $definition->getDropProcedureStatement(); | |
| if ($dropDefinition !== null) { | |
| // at the moment all stored procedures are deleted | |
| //$this->statementList[] = $dropDefinition; | |
| } | |
| $createDefinition = $definition->getCreateProcedureStatement(); | |
| if ($createDefinition !== null) { | |
| $this->statementList[] = $createDefinition; | |
| } | |
| } | |
| } |