1 | <?php |
||
2 | |||
3 | namespace Doctrine\Tests\DBAL\Functional\Schema; |
||
4 | |||
5 | use Doctrine\DBAL\Schema; |
||
6 | use Doctrine\DBAL\Schema\Table; |
||
7 | use Doctrine\DBAL\Types\Type; |
||
8 | use Doctrine\Tests\TestUtil; |
||
9 | |||
10 | class OracleSchemaManagerTest extends SchemaManagerFunctionalTestCase |
||
11 | { |
||
12 | protected function setUp() |
||
13 | { |
||
14 | parent::setUp(); |
||
15 | |||
16 | if(!isset($GLOBALS['db_username'])) { |
||
17 | $this->markTestSkipped('Foo'); |
||
18 | } |
||
19 | |||
20 | $username = $GLOBALS['db_username']; |
||
21 | |||
22 | $query = "GRANT ALL PRIVILEGES TO ".$username; |
||
23 | |||
24 | $conn = \Doctrine\Tests\TestUtil::getTempConnection(); |
||
25 | $conn->executeUpdate($query); |
||
26 | } |
||
27 | |||
28 | public function testRenameTable() |
||
29 | { |
||
30 | $this->_sm->tryMethod('DropTable', 'list_tables_test'); |
||
31 | $this->_sm->tryMethod('DropTable', 'list_tables_test_new_name'); |
||
32 | |||
33 | $this->createTestTable('list_tables_test'); |
||
34 | $this->_sm->renameTable('list_tables_test', 'list_tables_test_new_name'); |
||
35 | |||
36 | $tables = $this->_sm->listTables(); |
||
37 | |||
38 | self::assertHasTable($tables, 'list_tables_test_new_name'); |
||
0 ignored issues
–
show
Bug
Best Practice
introduced
by
Loading history...
|
|||
39 | } |
||
40 | |||
41 | View Code Duplication | public function testListTableWithBinary() |
|
42 | { |
||
43 | $tableName = 'test_binary_table'; |
||
44 | |||
45 | $table = new \Doctrine\DBAL\Schema\Table($tableName); |
||
46 | $table->addColumn('id', 'integer'); |
||
47 | $table->addColumn('column_varbinary', 'binary', array()); |
||
48 | $table->addColumn('column_binary', 'binary', array('fixed' => true)); |
||
49 | $table->setPrimaryKey(array('id')); |
||
50 | |||
51 | $this->_sm->createTable($table); |
||
52 | |||
53 | $table = $this->_sm->listTableDetails($tableName); |
||
54 | |||
55 | self::assertInstanceOf('Doctrine\DBAL\Types\BinaryType', $table->getColumn('column_varbinary')->getType()); |
||
56 | self::assertFalse($table->getColumn('column_varbinary')->getFixed()); |
||
57 | |||
58 | self::assertInstanceOf('Doctrine\DBAL\Types\BinaryType', $table->getColumn('column_binary')->getType()); |
||
59 | self::assertFalse($table->getColumn('column_binary')->getFixed()); |
||
60 | } |
||
61 | |||
62 | /** |
||
63 | * @group DBAL-472 |
||
64 | * @group DBAL-1001 |
||
65 | */ |
||
66 | public function testAlterTableColumnNotNull() |
||
67 | { |
||
68 | $comparator = new Schema\Comparator(); |
||
69 | $tableName = 'list_table_column_notnull'; |
||
70 | $table = new Schema\Table($tableName); |
||
71 | |||
72 | $table->addColumn('id', 'integer'); |
||
73 | $table->addColumn('foo', 'integer'); |
||
74 | $table->addColumn('bar', 'string'); |
||
75 | $table->setPrimaryKey(array('id')); |
||
76 | |||
77 | $this->_sm->dropAndCreateTable($table); |
||
78 | |||
79 | $columns = $this->_sm->listTableColumns($tableName); |
||
80 | |||
81 | self::assertTrue($columns['id']->getNotnull()); |
||
82 | self::assertTrue($columns['foo']->getNotnull()); |
||
83 | self::assertTrue($columns['bar']->getNotnull()); |
||
84 | |||
85 | $diffTable = clone $table; |
||
86 | $diffTable->changeColumn('foo', array('notnull' => false)); |
||
87 | $diffTable->changeColumn('bar', array('length' => 1024)); |
||
88 | |||
89 | $this->_sm->alterTable($comparator->diffTable($table, $diffTable)); |
||
90 | |||
91 | $columns = $this->_sm->listTableColumns($tableName); |
||
92 | |||
93 | self::assertTrue($columns['id']->getNotnull()); |
||
94 | self::assertFalse($columns['foo']->getNotnull()); |
||
95 | self::assertTrue($columns['bar']->getNotnull()); |
||
96 | } |
||
97 | |||
98 | public function testListDatabases() |
||
99 | { |
||
100 | // We need the temp connection that has privileges to create a database. |
||
101 | $sm = TestUtil::getTempConnection()->getSchemaManager(); |
||
102 | |||
103 | $sm->dropAndCreateDatabase('c##test_create_database'); |
||
104 | |||
105 | $databases = $this->_sm->listDatabases(); |
||
106 | $databases = array_map('strtolower', $databases); |
||
107 | |||
108 | self::assertContains('c##test_create_database', $databases); |
||
109 | } |
||
110 | |||
111 | /** |
||
112 | * @group DBAL-831 |
||
113 | */ |
||
114 | public function testListTableDetailsWithDifferentIdentifierQuotingRequirements() |
||
115 | { |
||
116 | $primaryTableName = '"Primary_Table"'; |
||
117 | $offlinePrimaryTable = new Schema\Table($primaryTableName); |
||
118 | $offlinePrimaryTable->addColumn( |
||
119 | '"Id"', |
||
120 | 'integer', |
||
121 | array('autoincrement' => true, 'comment' => 'Explicit casing.') |
||
122 | ); |
||
123 | $offlinePrimaryTable->addColumn('select', 'integer', array('comment' => 'Reserved keyword.')); |
||
124 | $offlinePrimaryTable->addColumn('foo', 'integer', array('comment' => 'Implicit uppercasing.')); |
||
125 | $offlinePrimaryTable->addColumn('BAR', 'integer'); |
||
126 | $offlinePrimaryTable->addColumn('"BAZ"', 'integer'); |
||
127 | $offlinePrimaryTable->addIndex(array('select'), 'from'); |
||
128 | $offlinePrimaryTable->addIndex(array('foo'), 'foo_index'); |
||
129 | $offlinePrimaryTable->addIndex(array('BAR'), 'BAR_INDEX'); |
||
130 | $offlinePrimaryTable->addIndex(array('"BAZ"'), 'BAZ_INDEX'); |
||
131 | $offlinePrimaryTable->setPrimaryKey(array('"Id"')); |
||
132 | |||
133 | $foreignTableName = 'foreign'; |
||
134 | $offlineForeignTable = new Schema\Table($foreignTableName); |
||
135 | $offlineForeignTable->addColumn('id', 'integer', array('autoincrement' => true)); |
||
136 | $offlineForeignTable->addColumn('"Fk"', 'integer'); |
||
137 | $offlineForeignTable->addIndex(array('"Fk"'), '"Fk_index"'); |
||
138 | $offlineForeignTable->addForeignKeyConstraint( |
||
139 | $primaryTableName, |
||
140 | array('"Fk"'), |
||
141 | array('"Id"'), |
||
142 | array(), |
||
143 | '"Primary_Table_Fk"' |
||
144 | ); |
||
145 | $offlineForeignTable->setPrimaryKey(array('id')); |
||
146 | |||
147 | $this->_sm->tryMethod('dropTable', $foreignTableName); |
||
148 | $this->_sm->tryMethod('dropTable', $primaryTableName); |
||
149 | |||
150 | $this->_sm->createTable($offlinePrimaryTable); |
||
151 | $this->_sm->createTable($offlineForeignTable); |
||
152 | |||
153 | $onlinePrimaryTable = $this->_sm->listTableDetails($primaryTableName); |
||
154 | $onlineForeignTable = $this->_sm->listTableDetails($foreignTableName); |
||
155 | |||
156 | $platform = $this->_sm->getDatabasePlatform(); |
||
157 | |||
158 | // Primary table assertions |
||
159 | self::assertSame($primaryTableName, $onlinePrimaryTable->getQuotedName($platform)); |
||
160 | |||
161 | self::assertTrue($onlinePrimaryTable->hasColumn('"Id"')); |
||
162 | self::assertSame('"Id"', $onlinePrimaryTable->getColumn('"Id"')->getQuotedName($platform)); |
||
163 | self::assertTrue($onlinePrimaryTable->hasPrimaryKey()); |
||
164 | self::assertSame(array('"Id"'), $onlinePrimaryTable->getPrimaryKey()->getQuotedColumns($platform)); |
||
165 | |||
166 | self::assertTrue($onlinePrimaryTable->hasColumn('select')); |
||
167 | self::assertSame('"select"', $onlinePrimaryTable->getColumn('select')->getQuotedName($platform)); |
||
168 | |||
169 | self::assertTrue($onlinePrimaryTable->hasColumn('foo')); |
||
170 | self::assertSame('FOO', $onlinePrimaryTable->getColumn('foo')->getQuotedName($platform)); |
||
171 | |||
172 | self::assertTrue($onlinePrimaryTable->hasColumn('BAR')); |
||
173 | self::assertSame('BAR', $onlinePrimaryTable->getColumn('BAR')->getQuotedName($platform)); |
||
174 | |||
175 | self::assertTrue($onlinePrimaryTable->hasColumn('"BAZ"')); |
||
176 | self::assertSame('BAZ', $onlinePrimaryTable->getColumn('"BAZ"')->getQuotedName($platform)); |
||
177 | |||
178 | self::assertTrue($onlinePrimaryTable->hasIndex('from')); |
||
179 | self::assertTrue($onlinePrimaryTable->getIndex('from')->hasColumnAtPosition('"select"')); |
||
180 | self::assertSame(array('"select"'), $onlinePrimaryTable->getIndex('from')->getQuotedColumns($platform)); |
||
181 | |||
182 | self::assertTrue($onlinePrimaryTable->hasIndex('foo_index')); |
||
183 | self::assertTrue($onlinePrimaryTable->getIndex('foo_index')->hasColumnAtPosition('foo')); |
||
184 | self::assertSame(array('FOO'), $onlinePrimaryTable->getIndex('foo_index')->getQuotedColumns($platform)); |
||
185 | |||
186 | self::assertTrue($onlinePrimaryTable->hasIndex('BAR_INDEX')); |
||
187 | self::assertTrue($onlinePrimaryTable->getIndex('BAR_INDEX')->hasColumnAtPosition('BAR')); |
||
188 | self::assertSame(array('BAR'), $onlinePrimaryTable->getIndex('BAR_INDEX')->getQuotedColumns($platform)); |
||
189 | |||
190 | self::assertTrue($onlinePrimaryTable->hasIndex('BAZ_INDEX')); |
||
191 | self::assertTrue($onlinePrimaryTable->getIndex('BAZ_INDEX')->hasColumnAtPosition('"BAZ"')); |
||
192 | self::assertSame(array('BAZ'), $onlinePrimaryTable->getIndex('BAZ_INDEX')->getQuotedColumns($platform)); |
||
193 | |||
194 | // Foreign table assertions |
||
195 | self::assertTrue($onlineForeignTable->hasColumn('id')); |
||
196 | self::assertSame('ID', $onlineForeignTable->getColumn('id')->getQuotedName($platform)); |
||
197 | self::assertTrue($onlineForeignTable->hasPrimaryKey()); |
||
198 | self::assertSame(array('ID'), $onlineForeignTable->getPrimaryKey()->getQuotedColumns($platform)); |
||
199 | |||
200 | self::assertTrue($onlineForeignTable->hasColumn('"Fk"')); |
||
201 | self::assertSame('"Fk"', $onlineForeignTable->getColumn('"Fk"')->getQuotedName($platform)); |
||
202 | |||
203 | self::assertTrue($onlineForeignTable->hasIndex('"Fk_index"')); |
||
204 | self::assertTrue($onlineForeignTable->getIndex('"Fk_index"')->hasColumnAtPosition('"Fk"')); |
||
205 | self::assertSame(array('"Fk"'), $onlineForeignTable->getIndex('"Fk_index"')->getQuotedColumns($platform)); |
||
206 | |||
207 | self::assertTrue($onlineForeignTable->hasForeignKey('"Primary_Table_Fk"')); |
||
208 | self::assertSame( |
||
209 | $primaryTableName, |
||
210 | $onlineForeignTable->getForeignKey('"Primary_Table_Fk"')->getQuotedForeignTableName($platform) |
||
211 | ); |
||
212 | self::assertSame( |
||
213 | array('"Fk"'), |
||
214 | $onlineForeignTable->getForeignKey('"Primary_Table_Fk"')->getQuotedLocalColumns($platform) |
||
215 | ); |
||
216 | self::assertSame( |
||
217 | array('"Id"'), |
||
218 | $onlineForeignTable->getForeignKey('"Primary_Table_Fk"')->getQuotedForeignColumns($platform) |
||
219 | ); |
||
220 | } |
||
221 | |||
222 | public function testListTableColumnsSameTableNamesInDifferentSchemas() |
||
223 | { |
||
224 | $table = $this->createListTableColumns(); |
||
225 | $this->_sm->dropAndCreateTable($table); |
||
226 | |||
227 | $otherTable = new Table($table->getName()); |
||
228 | $otherTable->addColumn('id', Type::STRING); |
||
229 | TestUtil::getTempConnection()->getSchemaManager()->dropAndCreateTable($otherTable); |
||
230 | |||
231 | $columns = $this->_sm->listTableColumns($table->getName(), $this->_conn->getUsername()); |
||
232 | self::assertCount(7, $columns); |
||
233 | } |
||
234 | |||
235 | /** |
||
236 | * @group DBAL-1234 |
||
237 | */ |
||
238 | public function testListTableIndexesPrimaryKeyConstraintNameDiffersFromIndexName() |
||
239 | { |
||
240 | $table = new Table('list_table_indexes_pk_id_test'); |
||
241 | $table->setSchemaConfig($this->_sm->createSchemaConfig()); |
||
242 | $table->addColumn('id', 'integer', array('notnull' => true)); |
||
243 | $table->addUniqueIndex(array('id'), 'id_unique_index'); |
||
244 | $this->_sm->dropAndCreateTable($table); |
||
245 | |||
246 | // Adding a primary key on already indexed columns |
||
247 | // Oracle will reuse the unique index, which cause a constraint name differing from the index name |
||
248 | $this->_sm->createConstraint(new Schema\Index('id_pk_id_index', array('id'), true, true), 'list_table_indexes_pk_id_test'); |
||
249 | |||
250 | $tableIndexes = $this->_sm->listTableIndexes('list_table_indexes_pk_id_test'); |
||
251 | |||
252 | self::assertArrayHasKey('primary', $tableIndexes, 'listTableIndexes() has to return a "primary" array key.'); |
||
253 | self::assertEquals(array('id'), array_map('strtolower', $tableIndexes['primary']->getColumns())); |
||
254 | self::assertTrue($tableIndexes['primary']->isUnique()); |
||
255 | self::assertTrue($tableIndexes['primary']->isPrimary()); |
||
256 | } |
||
257 | |||
258 | /** |
||
259 | * @group DBAL-2555 |
||
260 | */ |
||
261 | public function testListTableDateTypeColumns() |
||
262 | { |
||
263 | $table = new Table('tbl_date'); |
||
264 | $table->addColumn('col_date', 'date'); |
||
265 | $table->addColumn('col_datetime', 'datetime'); |
||
266 | $table->addColumn('col_datetimetz', 'datetimetz'); |
||
267 | |||
268 | $this->_sm->dropAndCreateTable($table); |
||
269 | |||
270 | $columns = $this->_sm->listTableColumns('tbl_date'); |
||
271 | |||
272 | self::assertSame('date', $columns['col_date']->getType()->getName()); |
||
273 | self::assertSame('datetime', $columns['col_datetime']->getType()->getName()); |
||
274 | self::assertSame('datetimetz', $columns['col_datetimetz']->getType()->getName()); |
||
275 | } |
||
276 | } |
||
277 |