From 83e0e8ae9923bc8f10011705521b975b4a530c81 Mon Sep 17 00:00:00 2001 From: Stan Lemon Date: Sun, 14 Sep 2014 21:34:56 -0400 Subject: [PATCH 1/4] Add failing test for index on a join column --- .../Ticket/JoinColumnIndexNameTest.php | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php new file mode 100644 index 00000000000..3811ea3d193 --- /dev/null +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php @@ -0,0 +1,127 @@ +_em); + $sql = $schemaTool->getCreateSchemaSql(array( + $this->_em->getClassMetadata(__NAMESPACE__ . '\Car'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\Maker'), + )); + + $expected = array ( + 0 => 'CREATE TABLE Car (id INTEGER NOT NULL, maker_id INTEGER DEFAULT NULL, name VARCHAR(255) NOT NULL, year INTEGER NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_4F70A07D68DA5EC3 FOREIGN KEY (maker_id) REFERENCES Maker (id) NOT DEFERRABLE INITIALLY IMMEDIATE)', + 1 => 'CREATE INDEX idx_maker_id ON Car (maker_id)', + 2 => 'CREATE TABLE Maker (id INTEGER NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))', + ); + + $this->assertEquals( + $expected, + $sql + ); + } +} + +/** + * @Table( + * indexes={@Index(name="idx_maker_id", columns={"maker_id"})}) + * ) + * @Entity() + */ +class Car +{ + /** + * @Id + * @GeneratedValue(strategy="IDENTITY") + * @Column(type="integer", nullable=false) + */ + protected $id; + + /** + * @Column(type="string") + */ + protected $name; + + /** + * @Column(type="integer", length=4) + */ + protected $year; + + /** + * @ManyToOne(targetEntity="Maker") + * @JoinColumn(name="maker_id", referencedColumnName="id", unique=false) + */ + protected $maker; + + public function getId() + { + return $this->id; + } + + public function getName() + { + return $this->name; + } + + public function setName($name) + { + $this->name = $name; + } + + public function getYear() + { + return $this->year; + } + + public function setYear($year) + { + $this->year = $year; + } + + public function getMaker() + { + return $this->maker; + } + + public function setMaker(Maker $maker) + { + $this->maker = $maker; + } +} + +/** + * @Table() + * @Entity() + */ +class Maker +{ + /** + * @Id + * @GeneratedValue(strategy="IDENTITY") + * @Column(type="integer", nullable=false) + */ + protected $id; + + /** + * @Column(type="string") + */ + protected $name; + + public function getId() + { + return $this->id; + } + + public function getName() + { + return $this->name; + } + + public function setName($name) + { + $this->name = $name; + } +} From c298922e042c7b84fef354e899f08ff65272918c Mon Sep 17 00:00:00 2001 From: Stan Lemon Date: Sun, 14 Sep 2014 21:40:52 -0400 Subject: [PATCH 2/4] Named the test correctly --- .../Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php index 3811ea3d193..58b58b6f30e 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php @@ -4,7 +4,7 @@ class JoinColumnIndexNameTest extends \Doctrine\Tests\OrmFunctionalTestCase { - public function testMergeManyToMany() + public function testCreateSchemaJoinColumnExplicitIndexName() { $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->_em); $sql = $schemaTool->getCreateSchemaSql(array( From e762e8b2ac6a5b22825ada49e5b580384218c777 Mon Sep 17 00:00:00 2001 From: Stan Lemon Date: Sun, 14 Sep 2014 22:02:44 -0400 Subject: [PATCH 3/4] Attempted adding second failing test example for an update. --- .../Ticket/JoinColumnIndexNameTest.php | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php index 58b58b6f30e..606ae363cf0 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php @@ -2,6 +2,8 @@ namespace Doctrine\Tests\ORM\Functional\Ticket; +use Doctrine\ORM\Query\ResultSetMapping; + class JoinColumnIndexNameTest extends \Doctrine\Tests\OrmFunctionalTestCase { public function testCreateSchemaJoinColumnExplicitIndexName() @@ -23,6 +25,42 @@ public function testCreateSchemaJoinColumnExplicitIndexName() $sql ); } + + public function testUpdateSchemaJoinColumnExplicitIndexName() + { + $classes = array( + $this->_em->getClassMetadata(__NAMESPACE__ . '\Car'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\Maker'), + ); + + $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->_em); + $schemaTool->createSchema($classes); + + $sql = $schemaTool->getUpdateSchemaSql($classes, true); + + $schema = $schemaTool->getSchemaFromMetadata($classes); + + $carTable = $schema->getTable('Car'); + + $indexes = $this->_em->getConnection()->getSchemaManager()->listTableIndexes('Car'); + + unset($indexes['primary']); + + /** @var \Doctrine\DBAL\Schema\Index $makerIdIndex */ + $makerIdIndex = current($indexes); + + $this->_em->getConnection()->getSchemaManager()->dropIndex($makerIdIndex, $carTable); + + $query = $this->_em->createNativeQuery( + 'CREATE INDEX idx_maker_id ON Car(maker_id)', + $rsm = new ResultSetMapping() + ); + $query->execute(); + + $sql = $schemaTool->getUpdateSchemaSql($classes, true); + + $this->assertEmpty($sql, "There should not be any changes, all indexes are present."); + } } /** From 33481ba05092a0655d51a9eb19060ff6cebd0692 Mon Sep 17 00:00:00 2001 From: Stan Lemon Date: Sun, 14 Sep 2014 22:48:34 -0400 Subject: [PATCH 4/4] Updated per feedback from PR --- .../Ticket/JoinColumnIndexNameTest.php | 76 ++++--------------- 1 file changed, 13 insertions(+), 63 deletions(-) diff --git a/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php index 606ae363cf0..dfe369a4623 100644 --- a/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php +++ b/tests/Doctrine/Tests/ORM/Functional/Ticket/JoinColumnIndexNameTest.php @@ -10,14 +10,14 @@ public function testCreateSchemaJoinColumnExplicitIndexName() { $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->_em); $sql = $schemaTool->getCreateSchemaSql(array( - $this->_em->getClassMetadata(__NAMESPACE__ . '\Car'), - $this->_em->getClassMetadata(__NAMESPACE__ . '\Maker'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\JoinColumnIndexNameTest_Car'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\JoinColumnIndexNameTest_Maker'), )); $expected = array ( - 0 => 'CREATE TABLE Car (id INTEGER NOT NULL, maker_id INTEGER DEFAULT NULL, name VARCHAR(255) NOT NULL, year INTEGER NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_4F70A07D68DA5EC3 FOREIGN KEY (maker_id) REFERENCES Maker (id) NOT DEFERRABLE INITIALLY IMMEDIATE)', - 1 => 'CREATE INDEX idx_maker_id ON Car (maker_id)', - 2 => 'CREATE TABLE Maker (id INTEGER NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))', + 0 => 'CREATE TABLE JoinColumnIndexNameTest_Car (id INTEGER NOT NULL, maker_id INTEGER DEFAULT NULL, name VARCHAR(255) NOT NULL, year INTEGER NOT NULL, PRIMARY KEY(id), CONSTRAINT FK_4F70A07D68DA5EC3 FOREIGN KEY (maker_id) REFERENCES Maker (id) NOT DEFERRABLE INITIALLY IMMEDIATE)', + 1 => 'CREATE INDEX idx_maker_id ON JoinColumnIndexNameTest_Car (maker_id)', + 2 => 'CREATE TABLE JoinColumnIndexNameTest_Maker (id INTEGER NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY(id))', ); $this->assertEquals( @@ -29,8 +29,8 @@ public function testCreateSchemaJoinColumnExplicitIndexName() public function testUpdateSchemaJoinColumnExplicitIndexName() { $classes = array( - $this->_em->getClassMetadata(__NAMESPACE__ . '\Car'), - $this->_em->getClassMetadata(__NAMESPACE__ . '\Maker'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\JoinColumnIndexNameTest_Car'), + $this->_em->getClassMetadata(__NAMESPACE__ . '\JoinColumnIndexNameTest_Maker'), ); $schemaTool = new \Doctrine\ORM\Tools\SchemaTool($this->_em); @@ -40,9 +40,9 @@ public function testUpdateSchemaJoinColumnExplicitIndexName() $schema = $schemaTool->getSchemaFromMetadata($classes); - $carTable = $schema->getTable('Car'); + $carTable = $schema->getTable('JoinColumnIndexNameTest_Car'); - $indexes = $this->_em->getConnection()->getSchemaManager()->listTableIndexes('Car'); + $indexes = $this->_em->getConnection()->getSchemaManager()->listTableIndexes('JoinColumnIndexNameTest_Car'); unset($indexes['primary']); @@ -52,7 +52,7 @@ public function testUpdateSchemaJoinColumnExplicitIndexName() $this->_em->getConnection()->getSchemaManager()->dropIndex($makerIdIndex, $carTable); $query = $this->_em->createNativeQuery( - 'CREATE INDEX idx_maker_id ON Car(maker_id)', + 'CREATE INDEX idx_maker_id ON JoinColumnIndexNameTest_Car(maker_id)', $rsm = new ResultSetMapping() ); $query->execute(); @@ -69,7 +69,7 @@ public function testUpdateSchemaJoinColumnExplicitIndexName() * ) * @Entity() */ -class Car +class JoinColumnIndexNameTest_Car { /** * @Id @@ -89,52 +89,17 @@ class Car protected $year; /** - * @ManyToOne(targetEntity="Maker") + * @ManyToOne(targetEntity="JoinColumnIndexNameTest_Maker") * @JoinColumn(name="maker_id", referencedColumnName="id", unique=false) */ protected $maker; - - public function getId() - { - return $this->id; - } - - public function getName() - { - return $this->name; - } - - public function setName($name) - { - $this->name = $name; - } - - public function getYear() - { - return $this->year; - } - - public function setYear($year) - { - $this->year = $year; - } - - public function getMaker() - { - return $this->maker; - } - - public function setMaker(Maker $maker) - { - $this->maker = $maker; - } } /** * @Table() * @Entity() */ -class Maker +class JoinColumnIndexNameTest_Maker { /** * @Id @@ -147,19 +112,4 @@ class Maker * @Column(type="string") */ protected $name; - - public function getId() - { - return $this->id; - } - - public function getName() - { - return $this->name; - } - - public function setName($name) - { - $this->name = $name; - } }