forked from phpmyadmin/phpmyadmin
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtbl_indexes.php
147 lines (133 loc) · 4.31 KB
/
tbl_indexes.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Displays index edit/creation form and handles it
*
* @package PhpMyAdmin
*/
/**
* Gets some core libraries
*/
require_once 'libraries/common.inc.php';
require_once 'libraries/Index.class.php';
require_once 'libraries/tbl_common.inc.php';
// Get fields and stores their name/type
$fields = array();
foreach ($GLOBALS['dbi']->getColumnsFull($db, $table) as $row) {
if (preg_match('@^(set|enum)\((.+)\)$@i', $row['Type'], $tmp)) {
$tmp[2] = substr(
preg_replace('@([^,])\'\'@', '\\1\\\'', ',' . $tmp[2]), 1
);
$fields[$row['Field']] = $tmp[1] . '('
. str_replace(',', ', ', $tmp[2]) . ')';
} else {
$fields[$row['Field']] = $row['Type'];
}
} // end while
// Prepares the form values
if (isset($_REQUEST['index'])) {
if (is_array($_REQUEST['index'])) {
// coming already from form
$index = new PMA_Index($_REQUEST['index']);
} else {
$index = PMA_Index::singleton($db, $table, $_REQUEST['index']);
}
} else {
$index = new PMA_Index;
}
/**
* Process the data from the edit/create index form,
* run the query to build the new index
* and moves back to "tbl_sql.php"
*/
if (isset($_REQUEST['do_save_data'])) {
$error = false;
// $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) . ')';
}
if (PMA_MYSQL_INT_VERSION > 50500) {
$sql_query .= "COMMENT '"
. PMA_Util::sqlAddSlashes($index->getComment())
. "'";
}
$sql_query .= ';';
if (! $error) {
$GLOBALS['dbi']->query($sql_query);
$message = PMA_Message::success(
__('Table %1$s has been altered successfully')
);
$message->addParam($table);
if ($GLOBALS['is_ajax_request'] == true) {
$response = PMA_Response::getInstance();
$response->addJSON('message', $message);
$response->addJSON('index_table', PMA_Index::getView($table, $db));
$response->addJSON(
'sql_query',
PMA_Util::getMessage(null, $sql_query)
);
} else {
$active_page = 'tbl_structure.php';
include 'tbl_structure.php';
}
exit;
} else {
if ($GLOBALS['is_ajax_request'] == true) {
$response = PMA_Response::getInstance();
$response->isSuccess(false);
$response->addJSON('message', $error);
exit;
} else {
$error->display();
}
}
} // end builds the new index
/**
* Display the form to edit/create an index
*/
require_once 'libraries/tbl_info.inc.php';
require_once 'libraries/display_indexes.lib.php';
?>