3 namespace Doctrine\Tests\ORM\Mapping;
5 use Doctrine\ORM\Mapping\DefaultQuoteStrategy;
6 use Doctrine\ORM\Mapping\QuoteStrategy;
7 use Doctrine\ORM\Mapping\ClassMetadata;
9 require_once __DIR__ . '/../../TestInit.php';
14 class QuoteStrategyTest extends \Doctrine\Tests\OrmTestCase
18 * @var \Doctrine\ORM\Mapping\DefaultQuoteStrategy
23 * @var \Doctrine\DBAL\Platforms\AbstractPlatform
27 protected function setUp()
30 $em = $this->_getTestEntityManager();
31 $this->platform = $em->getConnection()->getDatabasePlatform();
32 $this->strategy = new DefaultQuoteStrategy();
36 * @param string $className
37 * @return \Doctrine\ORM\Mapping\ClassMetadata
39 private function createClassMetadata($className)
41 $cm = new ClassMetadata($className);
42 $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
47 public function testConfiguration()
49 $em = $this->_getTestEntityManager();
50 $config = $em->getConfiguration();
52 $this->assertInstanceOf('Doctrine\ORM\Mapping\QuoteStrategy', $config->getQuoteStrategy());
53 $this->assertInstanceOf('Doctrine\ORM\Mapping\DefaultQuoteStrategy', $config->getQuoteStrategy());
55 $config->setQuoteStrategy(new MyQuoteStrategy());
57 $this->assertInstanceOf('Doctrine\ORM\Mapping\QuoteStrategy', $config->getQuoteStrategy());
58 $this->assertInstanceOf('Doctrine\Tests\ORM\Mapping\MyQuoteStrategy', $config->getQuoteStrategy());
61 public function testGetColumnName()
63 $cm = $this->createClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
64 $cm->mapField(array('fieldName' => 'name', 'columnName' => '`name`'));
65 $cm->mapField(array('fieldName' => 'id', 'columnName' => 'id'));
67 $this->assertEquals('id' ,$this->strategy->getColumnName('id', $cm, $this->platform));
68 $this->assertEquals('"name"' ,$this->strategy->getColumnName('name', $cm, $this->platform));
71 public function testGetTableName()
73 $cm = $this->createClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
74 $cm->setPrimaryTable(array('name'=>'`cms_user`'));
75 $this->assertEquals('"cms_user"' ,$this->strategy->getTableName($cm, $this->platform));
77 $cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
78 $cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
79 $cm->setPrimaryTable(array('name'=>'cms_user'));
80 $this->assertEquals('cms_user' ,$this->strategy->getTableName($cm, $this->platform));
83 public function testJoinTableName()
85 $cm1 = $this->createClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress');
86 $cm2 = $this->createClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress');
88 $cm1->mapManyToMany(array(
89 'fieldName' => 'user',
90 'targetEntity' => 'CmsUser',
91 'inversedBy' => 'users',
93 'name' => '`cmsaddress_cmsuser`'
97 $cm2->mapManyToMany(array(
98 'fieldName' => 'user',
99 'targetEntity' => 'CmsUser',
100 'inversedBy' => 'users',
101 'joinTable' => array(
102 'name' => 'cmsaddress_cmsuser'
107 $this->assertEquals('"cmsaddress_cmsuser"', $this->strategy->getJoinTableName($cm1->associationMappings['user'], $cm1, $this->platform));
108 $this->assertEquals('cmsaddress_cmsuser', $this->strategy->getJoinTableName($cm2->associationMappings['user'], $cm2, $this->platform));
112 public function testIdentifierColumnNames()
114 $cm1 = $this->createClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress');
115 $cm2 = $this->createClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress');
117 $cm1->mapField(array(
120 'columnName' => '`id`',
123 $cm2->mapField(array(
126 'columnName' => 'id',
129 $this->assertEquals(array('"id"'), $this->strategy->getIdentifierColumnNames($cm1, $this->platform));
130 $this->assertEquals(array('id'), $this->strategy->getIdentifierColumnNames($cm2, $this->platform));
134 public function testColumnAlias()
137 $this->assertEquals('columnName0', $this->strategy->getColumnAlias('columnName', $i++, $this->platform));
138 $this->assertEquals('column_name1', $this->strategy->getColumnAlias('column_name', $i++, $this->platform));
139 $this->assertEquals('COLUMN_NAME2', $this->strategy->getColumnAlias('COLUMN_NAME', $i++, $this->platform));
140 $this->assertEquals('COLUMNNAME3', $this->strategy->getColumnAlias('COLUMN-NAME-', $i++, $this->platform));
143 public function testQuoteIdentifierJoinColumns()
145 $cm = $this->createClassMetadata('Doctrine\Tests\Models\DDC117\DDC117ArticleDetails');
147 $cm->mapOneToOne(array(
149 'fieldName' => 'article',
150 'targetEntity' => 'Doctrine\Tests\Models\DDC117\DDC117Article',
151 'joinColumns' => array(array(
152 'name' => '`article`'
156 $this->assertEquals(array('"article"'), $this->strategy->getIdentifierColumnNames($cm, $this->platform));
159 public function testJoinColumnName()
161 $cm = $this->createClassMetadata('Doctrine\Tests\Models\DDC117\DDC117ArticleDetails');
163 $cm->mapOneToOne(array(
165 'fieldName' => 'article',
166 'targetEntity' => 'Doctrine\Tests\Models\DDC117\DDC117Article',
167 'joinColumns' => array(array(
168 'name' => '`article`'
172 $joinColumn = $cm->associationMappings['article']['joinColumns'][0];
173 $this->assertEquals('"article"',$this->strategy->getJoinColumnName($joinColumn, $cm, $this->platform));
176 public function testReferencedJoinColumnName()
178 $cm = $this->createClassMetadata('Doctrine\Tests\Models\DDC117\DDC117ArticleDetails');
180 $cm->mapOneToOne(array(
182 'fieldName' => 'article',
183 'targetEntity' => 'Doctrine\Tests\Models\DDC117\DDC117Article',
184 'joinColumns' => array(array(
185 'name' => '`article`'
189 $joinColumn = $cm->associationMappings['article']['joinColumns'][0];
190 $this->assertEquals('"id"',$this->strategy->getReferencedJoinColumnName($joinColumn, $cm, $this->platform));
194 class MyQuoteStrategy extends \Doctrine\ORM\Mapping\DefaultQuoteStrategy