/** * Function to get the sql query for index creation or edit * * @param 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', Util::backquote($this->_db_name), 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,', 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 = 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 = Message::error(__('Can\'t rename index to PRIMARY!')); } $sql_query .= sprintf(' ADD %s ', $index->getChoice()); if ($index->getName()) { $sql_query .= Util::backquote($index->getName()); } break; } // end switch $index_fields = array(); foreach ($index->getColumns() as $key => $column) { $index_fields[$key] = Util::backquote($column->getName()); if ($column->getSubPart()) { $index_fields[$key] .= '(' . $column->getSubPart() . ')'; } } // end while if (empty($index_fields)) { $error = Message::error(__('No index parts defined!')); } else { $sql_query .= ' (' . implode(', ', $index_fields) . ')'; } $keyBlockSizes = $index->getKeyBlockSize(); if (!empty($keyBlockSizes)) { $sql_query .= sprintf(' KEY_BLOCK_SIZE = ', 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, Index::getIndexTypes())) { $sql_query .= ' USING ' . $type; } $parser = $index->getParser(); if ($index->getChoice() == 'FULLTEXT' && !empty($parser)) { $sql_query .= ' WITH PARSER ' . Util::sqlAddSlashes($parser); } $comment = $index->getComment(); if (!empty($comment)) { $sql_query .= sprintf(" COMMENT '%s'", Util::sqlAddSlashes($comment)); } $sql_query .= ';'; return $sql_query; }
/** * Returns HTML for the index type selector * * @return string HTML for the index type selector */ public function generateIndexTypeSelector() { $types = array("" => "--"); foreach (Index::getIndexTypes() as $type) { $types[$type] = $type; } return Util::getDropdown("index[Index_type]", $types, $this->_type, "select_index_type"); }