/tests/Propel/Tests/Generator/Platform/OraclePlatformMigrationTest.php

https://github.com/apinstein/Propel2 · PHP · 455 lines · 336 code · 58 blank · 61 comment · 0 complexity · 6f000a8cc466559436fe90629db20e4f 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. namespace Propel\Tests\Generator\Platform;
  10. use Propel\Generator\Model\Column;
  11. use Propel\Generator\Model\VendorInfo;
  12. use Propel\Generator\Model\Diff\PropelDatabaseComparator;
  13. use Propel\Generator\Platform\OraclePlatform;
  14. /**
  15. *
  16. * @package generator.platform
  17. */
  18. class OraclePlatformMigrationTest extends PlatformMigrationTestProvider
  19. {
  20. /**
  21. * Get the Platform object for this class
  22. *
  23. * @return Platform
  24. */
  25. protected function getPlatform()
  26. {
  27. return new OraclePlatform();
  28. }
  29. /**
  30. * @dataProvider providerForTestGetModifyDatabaseDDL
  31. */
  32. public function testGetModifyDatabaseDDL($databaseDiff)
  33. {
  34. $expected = "
  35. ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD';
  36. ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS';
  37. DROP TABLE foo1 CASCADE CONSTRAINTS;
  38. DROP SEQUENCE foo1_SEQ;
  39. ALTER TABLE foo3 RENAME TO foo4;
  40. CREATE TABLE foo5
  41. (
  42. id NUMBER NOT NULL,
  43. lkdjfsh NUMBER,
  44. dfgdsgf NVARCHAR2(2000)
  45. );
  46. ALTER TABLE foo5 ADD CONSTRAINT foo5_PK PRIMARY KEY (id);
  47. CREATE SEQUENCE foo5_SEQ
  48. INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE NOCACHE ORDER;
  49. ALTER TABLE foo2 RENAME COLUMN bar TO bar1;
  50. ALTER TABLE foo2 MODIFY
  51. (
  52. baz NVARCHAR2(12)
  53. );
  54. ALTER TABLE foo2 ADD
  55. (
  56. baz3 NVARCHAR2(2000)
  57. );
  58. ";
  59. $this->assertEquals($expected, $this->getPlatform()->getModifyDatabaseDDL($databaseDiff));
  60. }
  61. /**
  62. * @dataProvider providerForTestGetRenameTableDDL
  63. */
  64. public function testGetRenameTableDDL($fromName, $toName)
  65. {
  66. $expected = "
  67. ALTER TABLE foo1 RENAME TO foo2;
  68. ";
  69. $this->assertEquals($expected, $this->getPlatform()->getRenameTableDDL($fromName, $toName));
  70. }
  71. /**
  72. * @dataProvider providerForTestGetModifyTableDDL
  73. */
  74. public function testGetModifyTableDDL($tableDiff)
  75. {
  76. $expected = "
  77. ALTER TABLE foo DROP CONSTRAINT foo1_FK_2;
  78. ALTER TABLE foo DROP CONSTRAINT foo1_FK_1;
  79. DROP INDEX bar_baz_FK;
  80. DROP INDEX bar_FK;
  81. ALTER TABLE foo RENAME COLUMN bar TO bar1;
  82. ALTER TABLE foo MODIFY
  83. (
  84. baz NVARCHAR2(12)
  85. );
  86. ALTER TABLE foo ADD
  87. (
  88. baz3 NVARCHAR2(2000)
  89. );
  90. CREATE INDEX bar_FK ON foo (bar1);
  91. CREATE INDEX baz_FK ON foo (baz3);
  92. ALTER TABLE foo ADD CONSTRAINT foo1_FK_1
  93. FOREIGN KEY (bar1) REFERENCES foo2 (bar);
  94. ";
  95. $this->assertEquals($expected, $this->getPlatform()->getModifyTableDDL($tableDiff));
  96. }
  97. /**
  98. * @dataProvider providerForTestGetModifyTableColumnsDDL
  99. */
  100. public function testGetModifyTableColumnsDDL($tableDiff)
  101. {
  102. $expected = "
  103. ALTER TABLE foo RENAME COLUMN bar TO bar1;
  104. ALTER TABLE foo MODIFY
  105. (
  106. baz NVARCHAR2(12)
  107. );
  108. ALTER TABLE foo ADD
  109. (
  110. baz3 NVARCHAR2(2000)
  111. );
  112. ";
  113. $this->assertEquals($expected, $this->getPlatform()->getModifyTableColumnsDDL($tableDiff));
  114. }
  115. /**
  116. * @dataProvider providerForTestGetModifyTablePrimaryKeysDDL
  117. */
  118. public function testGetModifyTablePrimaryKeysDDL($tableDiff)
  119. {
  120. $expected = "
  121. ALTER TABLE foo DROP CONSTRAINT foo_PK;
  122. ALTER TABLE foo ADD CONSTRAINT foo_PK PRIMARY KEY (id,bar);
  123. ";
  124. $this->assertEquals($expected, $this->getPlatform()->getModifyTablePrimaryKeyDDL($tableDiff));
  125. }
  126. /**
  127. * @dataProvider providerForTestGetModifyTableIndicesDDL
  128. */
  129. public function testGetModifyTableIndicesDDL($tableDiff)
  130. {
  131. $expected = "
  132. DROP INDEX bar_FK;
  133. CREATE INDEX baz_FK ON foo (baz);
  134. DROP INDEX bar_baz_FK;
  135. CREATE INDEX bar_baz_FK ON foo (id,bar,baz);
  136. ";
  137. $this->assertEquals($expected, $this->getPlatform()->getModifyTableIndicesDDL($tableDiff));
  138. }
  139. /**
  140. * @dataProvider providerForTestGetModifyTableForeignKeysDDL
  141. */
  142. public function testGetModifyTableForeignKeysDDL($tableDiff)
  143. {
  144. $expected = "
  145. ALTER TABLE foo1 DROP CONSTRAINT foo1_FK_1;
  146. ALTER TABLE foo1 ADD CONSTRAINT foo1_FK_3
  147. FOREIGN KEY (baz) REFERENCES foo2 (baz);
  148. ALTER TABLE foo1 DROP CONSTRAINT foo1_FK_2;
  149. ALTER TABLE foo1 ADD CONSTRAINT foo1_FK_2
  150. FOREIGN KEY (bar,id) REFERENCES foo2 (bar,id);
  151. ";
  152. $this->assertEquals($expected, $this->getPlatform()->getModifyTableForeignKeysDDL($tableDiff));
  153. }
  154. /**
  155. * @dataProvider providerForTestGetModifyTableForeignKeysSkipSqlDDL
  156. */
  157. public function testGetModifyTableForeignKeysSkipSqlDDL($tableDiff)
  158. {
  159. $expected = "
  160. ALTER TABLE foo1 DROP CONSTRAINT foo1_FK_1;
  161. ";
  162. $this->assertEquals($expected, $this->getPlatform()->getModifyTableForeignKeysDDL($tableDiff));
  163. $expected = "
  164. ALTER TABLE foo1 ADD CONSTRAINT foo1_FK_1
  165. FOREIGN KEY (bar) REFERENCES foo2 (bar);
  166. ";
  167. $this->assertEquals($expected, $this->getPlatform()->getModifyTableForeignKeysDDL($tableDiff->getReverseDiff()));
  168. }
  169. /**
  170. * @dataProvider providerForTestGetModifyTableForeignKeysSkipSql2DDL
  171. */
  172. public function testGetModifyTableForeignKeysSkipSql2DDL($tableDiff)
  173. {
  174. $expected = '';
  175. $this->assertEquals($expected, $this->getPlatform()->getModifyTableForeignKeysDDL($tableDiff));
  176. $expected = '';
  177. $this->assertEquals($expected, $this->getPlatform()->getModifyTableForeignKeysDDL($tableDiff->getReverseDiff()));
  178. }
  179. /**
  180. * @dataProvider providerForTestGetRemoveColumnDDL
  181. */
  182. public function testGetRemoveColumnDDL($column)
  183. {
  184. $expected = "
  185. ALTER TABLE foo DROP COLUMN bar;
  186. ";
  187. $this->assertEquals($expected, $this->getPlatform()->getRemoveColumnDDL($column));
  188. }
  189. /**
  190. * @dataProvider providerForTestGetRenameColumnDDL
  191. */
  192. public function testGetRenameColumnDDL($fromColumn, $toColumn)
  193. {
  194. $expected = "
  195. ALTER TABLE foo RENAME COLUMN bar1 TO bar2;
  196. ";
  197. $this->assertEquals($expected, $this->getPlatform()->getRenameColumnDDL($fromColumn, $toColumn));
  198. }
  199. /**
  200. * @dataProvider providerForTestGetModifyColumnDDL
  201. */
  202. public function testGetModifyColumnDDL($columnDiff)
  203. {
  204. $expected = "
  205. ALTER TABLE foo MODIFY bar FLOAT(3);
  206. ";
  207. $this->assertEquals($expected, $this->getPlatform()->getModifyColumnDDL($columnDiff));
  208. }
  209. /**
  210. * @dataProvider providerForTestGetModifyColumnsDDL
  211. */
  212. public function testGetModifyColumnsDDL($columnDiffs)
  213. {
  214. $expected = "
  215. ALTER TABLE foo MODIFY
  216. (
  217. bar1 FLOAT(3),
  218. bar2 INTEGER NOT NULL
  219. );
  220. ";
  221. $this->assertEquals($expected, $this->getPlatform()->getModifyColumnsDDL($columnDiffs));
  222. }
  223. /**
  224. * @dataProvider providerForTestGetAddColumnDDL
  225. */
  226. public function testGetAddColumnDDL($column)
  227. {
  228. $expected = "
  229. ALTER TABLE foo ADD bar NUMBER;
  230. ";
  231. $this->assertEquals($expected, $this->getPlatform()->getAddColumnDDL($column));
  232. }
  233. /**
  234. * @dataProvider providerForTestGetAddColumnsDDL
  235. */
  236. public function testGetAddColumnsDDL($columns)
  237. {
  238. $expected = "
  239. ALTER TABLE foo ADD
  240. (
  241. bar1 NUMBER,
  242. bar2 FLOAT(3,2) DEFAULT -1 NOT NULL
  243. );
  244. ";
  245. $this->assertEquals($expected, $this->getPlatform()->getAddColumnsDDL($columns));
  246. }
  247. public function testGetModifyDatabaseWithBlockStorageDDL()
  248. {
  249. $schema1 = <<<EOF
  250. <database name="test">
  251. <table name="foo1">
  252. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  253. <column name="blooopoo" type="INTEGER" />
  254. </table>
  255. <table name="foo2">
  256. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  257. <column name="bar" type="INTEGER" />
  258. <column name="baz" type="VARCHAR" size="12" required="true" />
  259. </table>
  260. <table name="foo3">
  261. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  262. <column name="yipee" type="INTEGER" />
  263. </table>
  264. </database>
  265. EOF;
  266. $schema2 = <<<EOF
  267. <database name="test">
  268. <table name="foo2">
  269. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  270. <column name="bar1" type="INTEGER" />
  271. <column name="baz" type="VARCHAR" size="12" required="false" />
  272. <column name="baz3" type="CLOB" />
  273. <vendor type="oracle">
  274. <parameter name="PCTFree" value="20"/>
  275. <parameter name="InitTrans" value="4"/>
  276. <parameter name="MinExtents" value="1"/>
  277. <parameter name="MaxExtents" value="99"/>
  278. <parameter name="PCTIncrease" value="0"/>
  279. <parameter name="Tablespace" value="L_128K"/>
  280. <parameter name="PKPCTFree" value="20"/>
  281. <parameter name="PKInitTrans" value="4"/>
  282. <parameter name="PKMinExtents" value="1"/>
  283. <parameter name="PKMaxExtents" value="99"/>
  284. <parameter name="PKPCTIncrease" value="0"/>
  285. <parameter name="PKTablespace" value="IL_128K"/>
  286. </vendor>
  287. </table>
  288. <table name="foo4">
  289. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  290. <column name="yipee" type="INTEGER" />
  291. <vendor type="oracle">
  292. <parameter name="PCTFree" value="20"/>
  293. <parameter name="InitTrans" value="4"/>
  294. <parameter name="MinExtents" value="1"/>
  295. <parameter name="MaxExtents" value="99"/>
  296. <parameter name="PCTIncrease" value="0"/>
  297. <parameter name="Tablespace" value="L_128K"/>
  298. <parameter name="PKPCTFree" value="20"/>
  299. <parameter name="PKInitTrans" value="4"/>
  300. <parameter name="PKMinExtents" value="1"/>
  301. <parameter name="PKMaxExtents" value="99"/>
  302. <parameter name="PKPCTIncrease" value="0"/>
  303. <parameter name="PKTablespace" value="IL_128K"/>
  304. </vendor>
  305. </table>
  306. <table name="foo5">
  307. <column name="id" primaryKey="true" type="INTEGER" autoIncrement="true" />
  308. <column name="lkdjfsh" type="INTEGER" />
  309. <column name="dfgdsgf" type="CLOB" />
  310. <index name="lkdjfsh_IDX">
  311. <index-column name="lkdjfsh"/>
  312. <vendor type="oracle">
  313. <parameter name="PCTFree" value="20"/>
  314. <parameter name="InitTrans" value="4"/>
  315. <parameter name="MinExtents" value="1"/>
  316. <parameter name="MaxExtents" value="99"/>
  317. <parameter name="PCTIncrease" value="0"/>
  318. <parameter name="Tablespace" value="L_128K"/>
  319. </vendor>
  320. </index>
  321. <vendor type="oracle">
  322. <parameter name="PCTFree" value="20"/>
  323. <parameter name="InitTrans" value="4"/>
  324. <parameter name="MinExtents" value="1"/>
  325. <parameter name="MaxExtents" value="99"/>
  326. <parameter name="PCTIncrease" value="0"/>
  327. <parameter name="Tablespace" value="L_128K"/>
  328. <parameter name="PKPCTFree" value="20"/>
  329. <parameter name="PKInitTrans" value="4"/>
  330. <parameter name="PKMinExtents" value="1"/>
  331. <parameter name="PKMaxExtents" value="99"/>
  332. <parameter name="PKPCTIncrease" value="0"/>
  333. <parameter name="PKTablespace" value="IL_128K"/>
  334. </vendor>
  335. </table>
  336. </database>
  337. EOF;
  338. $d1 = $this->getDatabaseFromSchema($schema1);
  339. $d2 = $this->getDatabaseFromSchema($schema2);
  340. $databaseDiff = PropelDatabaseComparator::computeDiff($d1, $d2);
  341. $expected = "
  342. ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD';
  343. ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS';
  344. DROP TABLE foo1 CASCADE CONSTRAINTS;
  345. DROP SEQUENCE foo1_SEQ;
  346. ALTER TABLE foo3 RENAME TO foo4;
  347. CREATE TABLE foo5
  348. (
  349. id NUMBER NOT NULL,
  350. lkdjfsh NUMBER,
  351. dfgdsgf CLOB
  352. )
  353. PCTFREE 20
  354. INITRANS 4
  355. STORAGE
  356. (
  357. MINEXTENTS 1
  358. MAXEXTENTS 99
  359. PCTINCREASE 0
  360. )
  361. TABLESPACE L_128K;
  362. ALTER TABLE foo5 ADD CONSTRAINT foo5_PK PRIMARY KEY (id)
  363. USING INDEX
  364. PCTFREE 20
  365. INITRANS 4
  366. STORAGE
  367. (
  368. MINEXTENTS 1
  369. MAXEXTENTS 99
  370. PCTINCREASE 0
  371. )
  372. TABLESPACE IL_128K;
  373. CREATE SEQUENCE foo5_SEQ
  374. INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE NOCACHE ORDER;
  375. CREATE INDEX lkdjfsh_IDX ON foo5 (lkdjfsh)
  376. PCTFREE 20
  377. INITRANS 4
  378. STORAGE
  379. (
  380. MINEXTENTS 1
  381. MAXEXTENTS 99
  382. PCTINCREASE 0
  383. )
  384. TABLESPACE L_128K;
  385. ALTER TABLE foo2 RENAME COLUMN bar TO bar1;
  386. ALTER TABLE foo2 MODIFY
  387. (
  388. baz NVARCHAR2(12)
  389. );
  390. ALTER TABLE foo2 ADD
  391. (
  392. baz3 CLOB
  393. );
  394. ";
  395. $this->assertEquals($expected, $this->getPlatform()->getModifyDatabaseDDL($databaseDiff));
  396. }
  397. }