diff --git a/create.inc.php b/create.inc.php index b751cd68..0aac00f1 100644 --- a/create.inc.php +++ b/create.inc.php @@ -1,4 +1,6 @@ escape_string($_POST["Comment"]) . "'" ; + if (in_array($_POST["partition_by"], $partition_by)) { + $partitions = array(); + if ($_POST["partition_by"] == 'RANGE' || $_POST["partition_by"] == 'LIST') { + foreach (array_filter($_POST["partition_names"]) as $key => $val) { + $value = $_POST["partition_values"][$key]; + $partitions[] = "PARTITION $val VALUES " . ($_POST["partition_by"] == 'RANGE' ? "LESS THAN" : "IN") . (strlen($value) ? " ($value)" : " MAXVALUE"); //! SQL injection + } + } + $status .= " PARTITION BY $_POST[partition_by]($_POST[partition])" . ($partitions ? " (" . implode(", ", $partitions) . ")" : ($_POST["partitions"] ? " PARTITIONS " . intval($_POST["partitions"]) : "")); + } elseif ($mysql->server_info >= 5.1 && strlen($_GET["create"])) { + $status .= " REMOVE PARTITIONING"; + } $location = $SELF . "table=" . urlencode($_POST["name"]); if (strlen($_GET["create"])) { query_redirect("ALTER TABLE " . idf_escape($_GET["create"]) . " " . implode(", ", $fields) . ", RENAME TO " . idf_escape($_POST["name"]) . ", $status", $location, lang('Table has been altered.')); @@ -74,8 +88,22 @@ if ($_POST) { table_comment($row); $row["name"] = $_GET["create"]; $row["fields"] = array_values($orig_fields); + if ($mysql->server_info >= 5.1) { + $from = "FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA = '" . $mysql->escape_string($_GET["db"]) . "' AND TABLE_NAME = '" . $mysql->escape_string($_GET["create"]) . "'"; + $result = $mysql->query("SELECT PARTITION_METHOD, PARTITION_ORDINAL_POSITION, PARTITION_EXPRESSION $from ORDER BY PARTITION_ORDINAL_POSITION DESC LIMIT 1"); + list($row["partition_by"], $row["partitions"], $row["partition"]) = $result->fetch_row(); + $result->free(); + $row["partition_names"] = array(); + $row["partition_values"] = array(); + $result = $mysql->query("SELECT PARTITION_NAME, PARTITION_DESCRIPTION $from AND PARTITION_NAME != '' ORDER BY PARTITION_ORDINAL_POSITION"); + while ($row1 = $result->fetch_assoc()) { + $row["partition_names"][] = $row1["PARTITION_NAME"]; + $row["partition_values"][] = $row1["PARTITION_DESCRIPTION"]; + } + $result->free(); + } } else { - $row = array("fields" => array(array("field" => ""))); + $row = array("fields" => array(array("field" => "")), "partition_names" => array()); } $collations = collations(); ?> @@ -110,4 +138,21 @@ function column_comments_click(checked) { />
+server_info >= 5.1) { ?> ++: +(" />) +: " /> +
+Partitioning | ||
open | +/phpMinAdmin/?db=selenium&table=interprets | ++ |
clickAndWait | +link=Alter table | ++ |
select | +partition_by | +label=HASH | +
type | +partition | +id | +
type | +partitions | +2 | +
clickAndWait | +//input[@value='Save'] | ++ |
verifyTextPresent | +Table has been altered. | ++ |
clickAndWait | +link=Alter table | ++ |
select | +partition_by | +label=RANGE | +
type | +partition_values[0] | +10 | +
clickAndWait | +//input[@value='Save'] | ++ |
verifyTextPresent | +Table has been altered. | ++ |
clickAndWait | +link=Alter table | ++ |
select | +partition_by | +label= | +
clickAndWait | +//input[@value='Save'] | ++ |
verifyTextPresent | +Table has been altered. | ++ |