/**
 * Function to get the sql query for index creation or edit
 *
 * @param string    $db     current db
 * @param string    $table  current table
 * @param PMA_Index $index  current index
 * @param bool      &$error whether error occurred or not
 *
 * @return string
 */
function PMA_getSqlQueryForIndexCreateOrEdit($db, $table, $index, &$error)
{
    // $sql_query is the one displayed in the query box
    $sql_query = 'ALTER TABLE ' . PMA_Util::backquote($db) . '.' . PMA_Util::backquote($table);
    // Drops the old index
    if (!empty($_REQUEST['old_index'])) {
        if ($_REQUEST['old_index'] == 'PRIMARY') {
            $sql_query .= ' DROP PRIMARY KEY,';
        } else {
            $sql_query .= ' DROP INDEX ' . PMA_Util::backquote($_REQUEST['old_index']) . ',';
        }
    }
    // end if
    // Builds the new one
    switch ($index->getType()) {
        case 'PRIMARY':
            if ($index->getName() == '') {
                $index->setName('PRIMARY');
            } elseif ($index->getName() != 'PRIMARY') {
                $error = PMA_Message::error(__('The name of the primary key must be "PRIMARY"!'));
            }
            $sql_query .= ' ADD PRIMARY KEY';
            break;
        case 'FULLTEXT':
        case 'UNIQUE':
        case 'INDEX':
        case 'SPATIAL':
            if ($index->getName() == 'PRIMARY') {
                $error = PMA_Message::error(__('Can\'t rename index to PRIMARY!'));
            }
            $sql_query .= ' ADD ' . $index->getType() . ' ' . ($index->getName() ? PMA_Util::backquote($index->getName()) : '');
            break;
    }
    // end switch
    $index_fields = array();
    foreach ($index->getColumns() as $key => $column) {
        $index_fields[$key] = PMA_Util::backquote($column->getName());
        if ($column->getSubPart()) {
            $index_fields[$key] .= '(' . $column->getSubPart() . ')';
        }
    }
    // end while
    if (empty($index_fields)) {
        $error = PMA_Message::error(__('No index parts defined!'));
    } else {
        $sql_query .= ' (' . implode(', ', $index_fields) . ')';
    }
    $sql_query .= " COMMENT '" . PMA_Util::sqlAddSlashes($index->getComment()) . "'";
    $sql_query .= ';';
    return $sql_query;
}
    $sql_query = 'ALTER TABLE ' . PMA_backquote($db) . '.' . PMA_backquote($table);

    // Drops the old index
    if (! empty($_REQUEST['old_index'])) {
        if ($_REQUEST['old_index'] == 'PRIMARY') {
            $sql_query .= ' DROP PRIMARY KEY,';
        } else {
            $sql_query .= ' DROP INDEX ' . PMA_backquote($_REQUEST['old_index']) . ',';
        }
    } // end if

    // Builds the new one
    switch ($index->getType()) {
        case 'PRIMARY':
            if ($index->getName() == '') {
                $index->setName('PRIMARY');
            } elseif ($index->getName() != 'PRIMARY') {
                $error = PMA_Message::error('strPrimaryKeyName');
            }
            $sql_query .= ' ADD PRIMARY KEY';
            break;
        case 'FULLTEXT':
        case 'UNIQUE':
        case 'INDEX':
            if ($index->getName() == 'PRIMARY') {
                $error = PMA_Message::error('strCantRenameIdxToPrimary');
            }
            $sql_query .= ' ADD ' . $index->getType() . ' '
                . ($index->getName() ? PMA_backquote($index->getName()) : '');
            break;
    } // end switch
 public static function singleton($schema, $table, $index_name = '')
 {
     PMA_Index::_loadIndexes($table, $schema);
     if (!isset(PMA_Index::$_registry[$schema][$table][$index_name])) {
         $index = new PMA_Index();
         if (strlen($index_name)) {
             $index->setName($index_name);
             PMA_Index::$_registry[$schema][$table][$index->getName()] = $index;
         }
         return $index;
     } else {
         return PMA_Index::$_registry[$schema][$table][$index_name];
     }
 }
 /**
  * Function to get the sql query for index creation or edit
  *
  * @param PMA_Index $index  current index
  * @param bool      &$error whether error occurred or not
  *
  * @return string
  */
 public function getSqlQueryForIndexCreateOrEdit($index, &$error)
 {
     // $sql_query is the one displayed in the query box
     $sql_query = sprintf('ALTER TABLE %s.%s', PMA_Util::backquote($this->_db_name), PMA_Util::backquote($this->_name));
     // Drops the old index
     if (!empty($_REQUEST['old_index'])) {
         if ($_REQUEST['old_index'] == 'PRIMARY') {
             $sql_query .= ' DROP PRIMARY KEY,';
         } else {
             $sql_query .= sprintf(' DROP INDEX %s,', PMA_Util::backquote($_REQUEST['old_index']));
         }
     }
     // end if
     // Builds the new one
     switch ($index->getChoice()) {
         case 'PRIMARY':
             if ($index->getName() == '') {
                 $index->setName('PRIMARY');
             } elseif ($index->getName() != 'PRIMARY') {
                 $error = PMA_Message::error(__('The name of the primary key must be "PRIMARY"!'));
             }
             $sql_query .= ' ADD PRIMARY KEY';
             break;
         case 'FULLTEXT':
         case 'UNIQUE':
         case 'INDEX':
         case 'SPATIAL':
             if ($index->getName() == 'PRIMARY') {
                 $error = PMA_Message::error(__('Can\'t rename index to PRIMARY!'));
             }
             $sql_query .= sprintf(' ADD %s ', $index->getChoice());
             if ($index->getName()) {
                 $sql_query .= PMA_Util::backquote($index->getName());
             }
             break;
     }
     // end switch
     $index_fields = array();
     foreach ($index->getColumns() as $key => $column) {
         $index_fields[$key] = PMA_Util::backquote($column->getName());
         if ($column->getSubPart()) {
             $index_fields[$key] .= '(' . $column->getSubPart() . ')';
         }
     }
     // end while
     if (empty($index_fields)) {
         $error = PMA_Message::error(__('No index parts defined!'));
     } else {
         $sql_query .= ' (' . implode(', ', $index_fields) . ')';
     }
     $keyBlockSizes = $index->getKeyBlockSize();
     if (!empty($keyBlockSizes)) {
         $sql_query .= sprintf(' KEY_BLOCK_SIZE = ', PMA_Util::sqlAddSlashes($keyBlockSizes));
     }
     // specifying index type is allowed only for primary, unique and index only
     $type = $index->getType();
     if ($index->getChoice() != 'SPATIAL' && $index->getChoice() != 'FULLTEXT' && in_array($type, PMA_Index::getIndexTypes())) {
         $sql_query .= ' USING ' . $type;
     }
     $parser = $index->getParser();
     if ($index->getChoice() == 'FULLTEXT' && !empty($parser)) {
         $sql_query .= ' WITH PARSER ' . PMA_Util::sqlAddSlashes($parser);
     }
     $comment = $index->getComment();
     if (!empty($comment)) {
         $sql_query .= sprintf(" COMMENT '%s'", PMA_Util::sqlAddSlashes($comment));
     }
     $sql_query .= ';';
     return $sql_query;
 }
Example #5
0
 /**
  * Test for get Name & set Name
  *
  * @return void
  */
 public function testName()
 {
     $index = new PMA_Index();
     $index->setName('PMA_name');
     $this->assertEquals('PMA_name', $index->getName());
 }