Пример #1
0
 /**
  * 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));
 }