/** * Test for isForeignKeySupported * * @return void */ public function testIsForeignKeySupported() { $GLOBALS['server'] = 1; $this->assertTrue(PMA\libraries\Util::isForeignKeySupported('innodb')); $this->assertFalse(PMA\libraries\Util::isForeignKeySupported('myisam')); $this->assertTrue(PMA\libraries\Util::isForeignKeySupported('ndb')); }
/** * Removes a foreign relation * * @param string $T1 foreign db.table * @param string $F1 foreign field * @param string $T2 master db.table * @param string $F2 master field * * @return array array of success/failure and message */ function PMA_removeRelation($T1, $F1, $T2, $F2) { list($DB1, $T1) = explode(".", $T1); list($DB2, $T2) = explode(".", $T2); $tables = $GLOBALS['dbi']->getTablesFull($DB1, $T1); $type_T1 = mb_strtoupper($tables[$T1]['ENGINE']); $tables = $GLOBALS['dbi']->getTablesFull($DB2, $T2); $type_T2 = mb_strtoupper($tables[$T2]['ENGINE']); if (PMA\libraries\Util::isForeignKeySupported($type_T1) && PMA\libraries\Util::isForeignKeySupported($type_T2) && $type_T1 == $type_T2) { // InnoDB $existrel_foreign = PMA_getForeigners($DB2, $T2, '', 'foreign'); $foreigner = PMA_searchColumnInForeigners($existrel_foreign, $F2); if (isset($foreigner['constraint'])) { $upd_query = 'ALTER TABLE ' . PMA\libraries\Util::backquote($DB2) . '.' . PMA\libraries\Util::backquote($T2) . ' DROP FOREIGN KEY ' . PMA\libraries\Util::backquote($foreigner['constraint']) . ';'; if ($GLOBALS['dbi']->query($upd_query)) { return array(true, __('FOREIGN KEY relation has been removed.')); } $error = $GLOBALS['dbi']->getError(); return array(false, __('Error: FOREIGN KEY relation could not be removed!') . "<br/>" . $error); } } // internal relations $delete_query = "DELETE FROM " . PMA\libraries\Util::backquote($GLOBALS['cfgRelation']['db']) . "." . $GLOBALS['cfgRelation']['relation'] . " WHERE " . "master_db = '" . PMA\libraries\Util::sqlAddSlashes($DB2) . "'" . " AND master_table = '" . PMA\libraries\Util::sqlAddSlashes($T2) . "'" . " AND master_field = '" . PMA\libraries\Util::sqlAddSlashes($F2) . "'" . " AND foreign_db = '" . PMA\libraries\Util::sqlAddSlashes($DB1) . "'" . " AND foreign_table = '" . PMA\libraries\Util::sqlAddSlashes($T1) . "'" . " AND foreign_field = '" . PMA\libraries\Util::sqlAddSlashes($F1) . "'"; $result = PMA_queryAsControlUser($delete_query, false, PMA\libraries\DatabaseInterface::QUERY_STORE); if (!$result) { $error = $GLOBALS['dbi']->getError($GLOBALS['controllink']); return array(false, __('Error: Internal relation could not be removed!') . "<br/>" . $error); } return array(true, __('Internal relation has been removed.')); }
/** * foreign key supported test * * @param string $a Engine * @param bool $e Expected Value * * @return void * * @dataProvider foreignkeySupportedDataProvider */ public function testForeignkeySupported($a, $e) { $this->assertEquals($e, PMA\libraries\Util::isForeignKeySupported($a)); }