1: <?php
2:
3: namespace PHPixie\ORM\Plans;
4:
5: abstract class Plan
6: {
7: protected $plans;
8:
9: public function __construct($plans)
10: {
11: $this->plans = $plans;
12: }
13:
14: public function execute()
15: {
16: $transaction = $this->plans->transaction();
17: $steps = $this->steps();
18: $connections = $this->usedConnections();
19: $transaction->begin($connections);
20:
21: try {
22: foreach($steps as $step) {
23: $step->execute();
24: }
25: $transaction->commit($connections);
26:
27: } catch (\Exception $exception) {
28: $transaction->rollback($connections);
29: throw $exception;
30: }
31: }
32:
33: public function usedConnections()
34: {
35: $connections = array();
36: foreach ($this->steps() as $step) {
37: foreach($step->usedConnections() as $connection) {
38: if (!in_array($connection, $connections, true)) {
39: $connections[] = $connection;
40: }
41: }
42: }
43:
44: return $connections;
45: }
46:
47: abstract public function steps();
48: }
49: