PageRenderTime 44ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/generator/lib/model/diff/PropelTableDiff.php

https://github.com/1989gaurav/Propel
PHP | 725 lines | 353 code | 69 blank | 303 comment | 20 complexity | 38907edeccbaffc5a5eee117783c0de6 MD5 | raw file
  1. <?php
  2. /**
  3. * This file is part of the Propel package.
  4. * For the full copyright and license information, please view the LICENSE
  5. * file that was distributed with this source code.
  6. *
  7. * @license MIT License
  8. */
  9. require_once dirname(__FILE__) . '/../Table.php';
  10. require_once dirname(__FILE__) . '/PropelColumnDiff.php';
  11. /**
  12. * Value object for storing Table object diffs
  13. * Heavily inspired by Doctrine2's Migrations
  14. * (see http://github.com/doctrine/dbal/tree/master/lib/Doctrine/DBAL/Schema/)
  15. *
  16. * @package propel.generator.model.diff
  17. */
  18. class PropelTableDiff
  19. {
  20. protected $fromTable;
  21. protected $toTable;
  22. protected $addedColumns = array();
  23. protected $removedColumns = array();
  24. protected $modifiedColumns = array();
  25. protected $renamedColumns = array();
  26. protected $addedPkColumns = array();
  27. protected $removedPkColumns = array();
  28. protected $renamedPkColumns = array();
  29. protected $addedIndices = array();
  30. protected $removedIndices = array();
  31. protected $modifiedIndices = array();
  32. protected $addedFks = array();
  33. protected $removedFks = array();
  34. protected $modifiedFks = array();
  35. /**
  36. * Setter for the fromTable property
  37. *
  38. * @param Table $fromTable
  39. */
  40. public function setFromTable(Table $fromTable)
  41. {
  42. $this->fromTable = $fromTable;
  43. }
  44. /**
  45. * Getter for the fromTable property
  46. *
  47. * @return Table
  48. */
  49. public function getFromTable()
  50. {
  51. return $this->fromTable;
  52. }
  53. /**
  54. * Setter for the toTable property
  55. *
  56. * @param Table $toTable
  57. */
  58. public function setToTable(Table $toTable)
  59. {
  60. $this->toTable = $toTable;
  61. }
  62. /**
  63. * Getter for the toTable property
  64. *
  65. * @return Table
  66. */
  67. public function getToTable()
  68. {
  69. return $this->toTable;
  70. }
  71. /**
  72. * Setter for the addedColumns property
  73. *
  74. * @param array $addedColumns
  75. */
  76. public function setAddedColumns($addedColumns)
  77. {
  78. $this->addedColumns = $addedColumns;
  79. }
  80. /**
  81. * Add an added column
  82. *
  83. * @param string $columnName
  84. * @param Column $addedColumn
  85. */
  86. public function addAddedColumn($columnName, Column $addedColumn)
  87. {
  88. $this->addedColumns[$columnName] = $addedColumn;
  89. }
  90. /**
  91. * Remove an added column
  92. *
  93. * @param string $columnName
  94. */
  95. public function removeAddedColumn($columnName)
  96. {
  97. unset($this->addedColumns[$columnName]);
  98. }
  99. /**
  100. * Getter for the addedColumns property
  101. *
  102. * @return array
  103. */
  104. public function getAddedColumns()
  105. {
  106. return $this->addedColumns;
  107. }
  108. /**
  109. * Get an added column
  110. *
  111. * @param string $columnName
  112. *
  113. * @param Column
  114. */
  115. public function getAddedColumn($columnName)
  116. {
  117. return $this->addedColumns[$columnName];
  118. }
  119. /**
  120. * Setter for the removedColumns property
  121. *
  122. * @param array $removedColumns
  123. */
  124. public function setRemovedColumns($removedColumns)
  125. {
  126. $this->removedColumns = $removedColumns;
  127. }
  128. /**
  129. * Add a removed column
  130. *
  131. * @param string $columnName
  132. * @param Column $removedColumn
  133. */
  134. public function addRemovedColumn($columnName, Column $removedColumn)
  135. {
  136. $this->removedColumns[$columnName] = $removedColumn;
  137. }
  138. /**
  139. * Remove a removed column
  140. *
  141. * @param string $columnName
  142. */
  143. public function removeRemovedColumn($columnName)
  144. {
  145. unset($this->removedColumns[$columnName]);
  146. }
  147. /**
  148. * Getter for the removedColumns property
  149. *
  150. * @return array
  151. */
  152. public function getRemovedColumns()
  153. {
  154. return $this->removedColumns;
  155. }
  156. /**
  157. * Get a removed column
  158. *
  159. * @param string $columnName
  160. *
  161. * @param Column
  162. */
  163. public function getRemovedColumn($columnName)
  164. {
  165. return $this->removedColumns[$columnName];
  166. }
  167. /**
  168. * Setter for the modifiedColumns property
  169. *
  170. * @param array $modifiedColumns
  171. */
  172. public function setModifiedColumns($modifiedColumns)
  173. {
  174. $this->modifiedColumns = $modifiedColumns;
  175. }
  176. /**
  177. * Add a column difference
  178. *
  179. * @param string $columnName
  180. * @param PropelColumnDiff $modifiedColumn
  181. */
  182. public function addModifiedColumn($columnName, PropelColumnDiff $modifiedColumn)
  183. {
  184. $this->modifiedColumns[$columnName] = $modifiedColumn;
  185. }
  186. /**
  187. * Getter for the modifiedColumns property
  188. *
  189. * @return array
  190. */
  191. public function getModifiedColumns()
  192. {
  193. return $this->modifiedColumns;
  194. }
  195. /**
  196. * Setter for the renamedColumns property
  197. *
  198. * @param array $renamedColumns
  199. */
  200. public function setRenamedColumns($renamedColumns)
  201. {
  202. $this->renamedColumns = $renamedColumns;
  203. }
  204. /**
  205. * Add a renamed column
  206. *
  207. * @param Column $fromColumn
  208. * @param Column $toColumn
  209. */
  210. public function addRenamedColumn($fromColumn, $toColumn)
  211. {
  212. $this->renamedColumns[] = array($fromColumn, $toColumn);
  213. }
  214. /**
  215. * Getter for the renamedColumns property
  216. *
  217. * @return array
  218. */
  219. public function getRenamedColumns()
  220. {
  221. return $this->renamedColumns;
  222. }
  223. /**
  224. * Setter for the addedPkColumns property
  225. *
  226. * @param $addedPkColumns
  227. */
  228. public function setAddedPkColumns($addedPkColumns)
  229. {
  230. $this->addedPkColumns = $addedPkColumns;
  231. }
  232. /**
  233. * Add an added Pk column
  234. *
  235. * @param string $columnName
  236. * @param Column $addedPkColumn
  237. */
  238. public function addAddedPkColumn($columnName, Column $addedPkColumn)
  239. {
  240. $this->addedPkColumns[$columnName] = $addedPkColumn;
  241. }
  242. /**
  243. * Remove an added Pk column
  244. *
  245. * @param string $columnName
  246. */
  247. public function removeAddedPkColumn($columnName)
  248. {
  249. unset($this->addedPkColumns[$columnName]);
  250. }
  251. /**
  252. * Getter for the addedPkColumns property
  253. *
  254. * @return array
  255. */
  256. public function getAddedPkColumns()
  257. {
  258. return $this->addedPkColumns;
  259. }
  260. /**
  261. * Setter for the removedPkColumns property
  262. *
  263. * @param $removedPkColumns
  264. */
  265. public function setRemovedPkColumns($removedPkColumns)
  266. {
  267. $this->removedPkColumns = $removedPkColumns;
  268. }
  269. /**
  270. * Add a removed Pk column
  271. *
  272. * @param string $columnName
  273. * @param Column $removedColumn
  274. */
  275. public function addRemovedPkColumn($columnName, Column $removedPkColumn)
  276. {
  277. $this->removedPkColumns[$columnName] = $removedPkColumn;
  278. }
  279. /**
  280. * Remove a removed Pk column
  281. *
  282. * @param string $columnName
  283. */
  284. public function removeRemovedPkColumn($columnName)
  285. {
  286. unset($this->removedPkColumns[$columnName]);
  287. }
  288. /**
  289. * Getter for the removedPkColumns property
  290. *
  291. * @return array
  292. */
  293. public function getRemovedPkColumns()
  294. {
  295. return $this->removedPkColumns;
  296. }
  297. /**
  298. * Setter for the renamedPkColumns property
  299. *
  300. * @param $renamedPkColumns
  301. */
  302. public function setRenamedPkColumns($renamedPkColumns)
  303. {
  304. $this->renamedPkColumns = $renamedPkColumns;
  305. }
  306. /**
  307. * Add a renamed Pk column
  308. *
  309. * @param Column $fromColumn
  310. * @param Column $toColumn
  311. */
  312. public function addRenamedPkColumn($fromColumn, $toColumn)
  313. {
  314. $this->renamedPkColumns[] = array($fromColumn, $toColumn);
  315. }
  316. /**
  317. * Getter for the renamedPkColumns property
  318. *
  319. * @return array
  320. */
  321. public function getRenamedPkColumns()
  322. {
  323. return $this->renamedPkColumns;
  324. }
  325. /**
  326. * Whether the primary key was modified
  327. *
  328. * @return boolean
  329. */
  330. public function hasModifiedPk()
  331. {
  332. return $this->renamedPkColumns || $this->removedPkColumns || $this->addedPkColumns;
  333. }
  334. /**
  335. * Setter for the addedIndices property
  336. *
  337. * @param $addedIndices
  338. */
  339. public function setAddedIndices($addedIndices)
  340. {
  341. $this->addedIndices = $addedIndices;
  342. }
  343. /**
  344. * Add an added Index
  345. *
  346. * @param string $indexName
  347. * @param Index $addedIndex
  348. */
  349. public function addAddedIndex($indexName, Index $addedIndex)
  350. {
  351. $this->addedIndices[$indexName] = $addedIndex;
  352. }
  353. /**
  354. * Getter for the addedIndices property
  355. *
  356. * @return array
  357. */
  358. public function getAddedIndices()
  359. {
  360. return $this->addedIndices;
  361. }
  362. /**
  363. * Setter for the removedIndices property
  364. *
  365. * @param $removedIndices
  366. */
  367. public function setRemovedIndices($removedIndices)
  368. {
  369. $this->removedIndices = $removedIndices;
  370. }
  371. /**
  372. * Add a removed Index
  373. *
  374. * @param string $indexName
  375. * @param Index $removedIndex
  376. */
  377. public function addRemovedIndex($indexName, Index $removedIndex)
  378. {
  379. $this->removedIndices[$indexName] = $removedIndex;
  380. }
  381. /**
  382. * Getter for the removedIndices property
  383. *
  384. * @return array
  385. */
  386. public function getRemovedIndices()
  387. {
  388. return $this->removedIndices;
  389. }
  390. /**
  391. * Setter for the modifiedIndices property
  392. *
  393. * @param $modifiedIndices
  394. */
  395. public function setModifiedIndices( $modifiedIndices)
  396. {
  397. $this->modifiedIndices = $modifiedIndices;
  398. }
  399. /**
  400. * Add a modified Index
  401. *
  402. * @param string $indexName
  403. * @param Index $fromIndex
  404. * @param Index $toIndex
  405. */
  406. public function addModifiedIndex($indexName, Index $fromIndex, Index $toIndex)
  407. {
  408. $this->modifiedIndices[$indexName] = array($fromIndex, $toIndex);
  409. }
  410. /**
  411. * Getter for the modifiedIndices property
  412. *
  413. * @return
  414. */
  415. public function getModifiedIndices()
  416. {
  417. return $this->modifiedIndices;
  418. }
  419. /**
  420. * Setter for the addedFks property
  421. *
  422. * @param $addedFks
  423. */
  424. public function setAddedFks($addedFks)
  425. {
  426. $this->addedFks = $addedFks;
  427. }
  428. /**
  429. * Add an added Fk column
  430. *
  431. * @param string $fkName
  432. * @param ForeignKey $addedFk
  433. */
  434. public function addAddedFk($fkName, ForeignKey $addedFk)
  435. {
  436. $this->addedFks[$fkName] = $addedFk;
  437. }
  438. /**
  439. * Remove an added Fk column
  440. *
  441. * @param string $fkName
  442. */
  443. public function removeAddedFk($fkName)
  444. {
  445. unset($this->addedFks[$fkName]);
  446. }
  447. /**
  448. * Getter for the addedFks property
  449. *
  450. * @return array
  451. */
  452. public function getAddedFks()
  453. {
  454. return $this->addedFks;
  455. }
  456. /**
  457. * Setter for the removedFks property
  458. *
  459. * @param $removedFks
  460. */
  461. public function setRemovedFks($removedFks)
  462. {
  463. $this->removedFks = $removedFks;
  464. }
  465. /**
  466. * Add a removed Fk column
  467. *
  468. * @param string $fkName
  469. * @param ForeignKey $removedColumn
  470. */
  471. public function addRemovedFk($fkName, ForeignKey $removedFk)
  472. {
  473. $this->removedFks[$fkName] = $removedFk;
  474. }
  475. /**
  476. * Remove a removed Fk column
  477. *
  478. * @param string $fkName
  479. */
  480. public function removeRemovedFk($fkName)
  481. {
  482. unset($this->removedFks[$columnName]);
  483. }
  484. /**
  485. * Getter for the removedFks property
  486. *
  487. * @return array
  488. */
  489. public function getRemovedFks()
  490. {
  491. return $this->removedFks;
  492. }
  493. /**
  494. * Setter for the modifiedFks property
  495. *
  496. * @param array $modifiedFks
  497. */
  498. public function setModifiedFks($modifiedFks)
  499. {
  500. $this->modifiedFks = $modifiedFks;
  501. }
  502. /**
  503. * Add a modified Fk
  504. *
  505. * @param string $fkName
  506. * @param ForeignKey $fromFk
  507. * @param ForeignKey $toFk
  508. */
  509. public function addModifiedFk($fkName, ForeignKey $fromFk, ForeignKey $toFk)
  510. {
  511. $this->modifiedFks[$fkName] = array($fromFk, $toFk);
  512. }
  513. /**
  514. * Getter for the modifiedFks property
  515. *
  516. * @return array
  517. */
  518. public function getModifiedFks()
  519. {
  520. return $this->modifiedFks;
  521. }
  522. /**
  523. * Get the reverse diff for this diff
  524. *
  525. * @return PropelTableDiff
  526. */
  527. public function getReverseDiff()
  528. {
  529. $diff = new self();
  530. // tables
  531. $diff->setFromTable($this->getToTable());
  532. $diff->setToTable($this->getFromTable());
  533. // columns
  534. $diff->setAddedColumns($this->getRemovedColumns());
  535. $diff->setRemovedColumns($this->getAddedColumns());
  536. $renamedColumns = array();
  537. foreach ($this->getRenamedColumns() as $columnRenaming) {
  538. $renamedColumns[]= array_reverse($columnRenaming);
  539. }
  540. $diff->setRenamedColumns($renamedColumns);
  541. $columnDiffs = array();
  542. foreach ($this->getModifiedColumns() as $name => $columnDiff) {
  543. $columnDiffs[$name] = $columnDiff->getReverseDiff();
  544. }
  545. $diff->setModifiedColumns($columnDiffs);
  546. // pks
  547. $diff->setAddedPkColumns($this->getRemovedPkColumns());
  548. $diff->setRemovedPkColumns($this->getAddedPkColumns());
  549. $renamedPkColumns = array();
  550. foreach ($this->getRenamedPkColumns() as $columnRenaming) {
  551. $renamedPkColumns[]= array_reverse($columnRenaming);
  552. }
  553. $diff->setRenamedPkColumns($renamedPkColumns);
  554. // indices
  555. $diff->setAddedIndices($this->getRemovedIndices());
  556. $diff->setRemovedIndices($this->getAddedIndices());
  557. $indexDiffs = array();
  558. foreach ($this->getModifiedIndices() as $name => $indexDiff) {
  559. $indexDiffs[$name] = array_reverse($indexDiff);
  560. }
  561. $diff->setModifiedIndices($indexDiffs);
  562. // fks
  563. $diff->setAddedFks($this->getRemovedFks());
  564. $diff->setRemovedFks($this->getAddedFks());
  565. $fkDiffs = array();
  566. foreach ($this->getModifiedFks() as $name => $fkDiff) {
  567. $fkDiffs[$name] = array_reverse($fkDiff);
  568. }
  569. $diff->setModifiedFks($fkDiffs);
  570. return $diff;
  571. }
  572. public function __toString()
  573. {
  574. $ret = '';
  575. $ret .= sprintf(" %s:\n", $this->getFromTable()->getName());
  576. if ($addedColumns = $this->getAddedColumns()) {
  577. $ret .= " addedColumns:\n";
  578. foreach ($addedColumns as $colname => $column) {
  579. $ret .= sprintf(" - %s\n", $colname);
  580. }
  581. }
  582. if ($removedColumns = $this->getRemovedColumns()) {
  583. $ret .= " removedColumns:\n";
  584. foreach ($removedColumns as $colname => $column) {
  585. $ret .= sprintf(" - %s\n", $colname);
  586. }
  587. }
  588. if ($modifiedColumns = $this->getModifiedColumns()) {
  589. $ret .= " modifiedColumns:\n";
  590. foreach ($modifiedColumns as $colname => $colDiff) {
  591. $ret .= $colDiff->__toString();
  592. }
  593. }
  594. if ($renamedColumns = $this->getRenamedColumns()) {
  595. $ret .= " renamedColumns:\n";
  596. foreach ($renamedColumns as $columnRenaming) {
  597. list($fromColumn, $toColumn) = $columnRenaming;
  598. $ret .= sprintf(" %s: %s\n", $fromColumn->getName(), $toColumn->getName());
  599. }
  600. }
  601. if ($addedIndices = $this->getAddedIndices()) {
  602. $ret .= " addedIndices:\n";
  603. foreach ($addedIndices as $indexName => $index) {
  604. $ret .= sprintf(" - %s\n", $indexName);
  605. }
  606. }
  607. if ($removedIndices = $this->getRemovedIndices()) {
  608. $ret .= " removedIndices:\n";
  609. foreach ($removedIndices as $indexName => $index) {
  610. $ret .= sprintf(" - %s\n", $indexName);
  611. }
  612. }
  613. if ($modifiedIndices = $this->getModifiedIndices()) {
  614. $ret .= " modifiedIndices:\n";
  615. foreach ($modifiedIndices as $indexName => $indexDiff) {
  616. $ret .= sprintf(" - %s\n", $indexName);
  617. }
  618. }
  619. if ($addedFks = $this->getAddedFks()) {
  620. $ret .= " addedFks:\n";
  621. foreach ($addedFks as $fkName => $fk) {
  622. $ret .= sprintf(" - %s\n", $fkName);
  623. }
  624. }
  625. if ($removedFks = $this->getRemovedFks()) {
  626. $ret .= " removedFks:\n";
  627. foreach ($removedFks as $fkName => $fk) {
  628. $ret .= sprintf(" - %s\n", $fkName);
  629. }
  630. }
  631. if ($modifiedFks = $this->getModifiedFks()) {
  632. $ret .= " modifiedFks:\n";
  633. foreach ($modifiedFks as $fkName => $fkFromTo) {
  634. $ret .= sprintf(" %s:\n", $fkName);
  635. list($fromFk, $toFk) = $fkFromTo;
  636. $fromLocalColumns = json_encode($fromFk->getLocalColumns());
  637. $toLocalColumns = json_encode($toFk->getLocalColumns());
  638. if ($fromLocalColumns != $toLocalColumns) {
  639. $ret .= sprintf(" localColumns: from %s to %s\n", $fromLocalColumns, $toLocalColumns);
  640. }
  641. $fromForeignColumns = json_encode($fromFk->getForeignColumns());
  642. $toForeignColumns = json_encode($toFk->getForeignColumns());
  643. if ($fromForeignColumns != $toForeignColumns) {
  644. $ret .= sprintf(" foreignColumns: from %s to %s\n", $fromForeignColumns, $toForeignColumns);
  645. }
  646. if ($fromFk->normalizeFKey($fromFk->getOnUpdate()) != $toFk->normalizeFKey($toFk->getOnUpdate())) {
  647. $ret .= sprintf(" onUpdate: from %s to %s\n", $fromFk->getOnUpdate(), $toFk->getOnUpdate());
  648. }
  649. if ($fromFk->normalizeFKey($fromFk->getOnDelete()) != $toFk->normalizeFKey($toFk->getOnDelete())) {
  650. $ret .= sprintf(" onDelete: from %s to %s\n", $fromFk->getOnDelete(), $toFk->getOnDelete());
  651. }
  652. }
  653. }
  654. return $ret;
  655. }
  656. }