MySqlSchemaToolTest.php 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional\SchemaTool;
  3. use Doctrine\ORM\Tools\SchemaTool,
  4. Doctrine\ORM\Mapping\ClassMetadata;
  5. require_once __DIR__ . '/../../../TestInit.php';
  6. class MySqlSchemaToolTest extends \Doctrine\Tests\OrmFunctionalTestCase
  7. {
  8. protected function setUp() {
  9. parent::setUp();
  10. if ($this->_em->getConnection()->getDatabasePlatform()->getName() !== 'mysql') {
  11. $this->markTestSkipped('The ' . __CLASS__ .' requires the use of mysql.');
  12. }
  13. }
  14. public function testGetCreateSchemaSql()
  15. {
  16. $classes = array(
  17. $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress'),
  18. $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsUser'),
  19. $this->_em->getClassMetadata('Doctrine\Tests\Models\CMS\CmsPhonenumber'),
  20. );
  21. $tool = new SchemaTool($this->_em);
  22. $sql = $tool->getCreateSchemaSql($classes);
  23. $this->assertEquals("CREATE TABLE cms_addresses (id INT AUTO_INCREMENT NOT NULL, user_id INT DEFAULT NULL, country VARCHAR(50) NOT NULL, zip VARCHAR(50) NOT NULL, city VARCHAR(50) NOT NULL, UNIQUE INDEX UNIQ_ACAC157BA76ED395 (user_id), PRIMARY KEY(id)) ENGINE = InnoDB", $sql[0]);
  24. $this->assertEquals("CREATE TABLE cms_users (id INT AUTO_INCREMENT NOT NULL, status VARCHAR(50) DEFAULT NULL, username VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, email_id INT DEFAULT NULL, UNIQUE INDEX UNIQ_3AF03EC5F85E0677 (username), UNIQUE INDEX UNIQ_3AF03EC5A832C1C9 (email_id), PRIMARY KEY(id)) ENGINE = InnoDB", $sql[1]);
  25. $this->assertEquals("CREATE TABLE cms_users_groups (user_id INT NOT NULL, group_id INT NOT NULL, INDEX IDX_7EA9409AA76ED395 (user_id), INDEX IDX_7EA9409AFE54D947 (group_id), PRIMARY KEY(user_id, group_id)) ENGINE = InnoDB", $sql[2]);
  26. $this->assertEquals("CREATE TABLE cms_phonenumbers (phonenumber VARCHAR(50) NOT NULL, user_id INT DEFAULT NULL, INDEX IDX_F21F790FA76ED395 (user_id), PRIMARY KEY(phonenumber)) ENGINE = InnoDB", $sql[3]);
  27. $this->assertEquals("ALTER TABLE cms_addresses ADD CONSTRAINT FK_ACAC157BA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[4]);
  28. $this->assertEquals("ALTER TABLE cms_users_groups ADD CONSTRAINT FK_7EA9409AA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[5]);
  29. $this->assertEquals("ALTER TABLE cms_phonenumbers ADD CONSTRAINT FK_F21F790FA76ED395 FOREIGN KEY (user_id) REFERENCES cms_users (id)", $sql[6]);
  30. $this->assertEquals(7, count($sql));
  31. }
  32. public function testGetCreateSchemaSql2()
  33. {
  34. $classes = array(
  35. $this->_em->getClassMetadata('Doctrine\Tests\Models\Generic\DecimalModel')
  36. );
  37. $tool = new SchemaTool($this->_em);
  38. $sql = $tool->getCreateSchemaSql($classes);
  39. $this->assertEquals(1, count($sql));
  40. $this->assertEquals("CREATE TABLE decimal_model (id INT AUTO_INCREMENT NOT NULL, `decimal` NUMERIC(5, 2) NOT NULL, `high_scale` NUMERIC(14, 4) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB", $sql[0]);
  41. }
  42. public function testGetCreateSchemaSql3()
  43. {
  44. $classes = array(
  45. $this->_em->getClassMetadata('Doctrine\Tests\Models\Generic\BooleanModel')
  46. );
  47. $tool = new SchemaTool($this->_em);
  48. $sql = $tool->getCreateSchemaSql($classes);
  49. $this->assertEquals(1, count($sql));
  50. $this->assertEquals("CREATE TABLE boolean_model (id INT AUTO_INCREMENT NOT NULL, booleanField TINYINT(1) NOT NULL, PRIMARY KEY(id)) ENGINE = InnoDB", $sql[0]);
  51. }
  52. /**
  53. * @group DBAL-204
  54. */
  55. public function testGetCreateSchemaSql4()
  56. {
  57. $classes = array(
  58. $this->_em->getClassMetadata(__NAMESPACE__ . '\\MysqlSchemaNamespacedEntity')
  59. );
  60. $tool = new SchemaTool($this->_em);
  61. $sql = $tool->getCreateSchemaSql($classes);
  62. $this->assertEquals(0, count($sql));
  63. }
  64. }
  65. /**
  66. * @Entity
  67. * @Table("namespace.entity")
  68. */
  69. class MysqlSchemaNamespacedEntity
  70. {
  71. /** @Column(type="integer") @Id @GeneratedValue */
  72. public $id;
  73. }