diff --git a/libraries/tbl_partition_definition.inc.php b/libraries/tbl_partition_definition.inc.php index 3f7602bb05..0ec3dc6f0b 100644 --- a/libraries/tbl_partition_definition.inc.php +++ b/libraries/tbl_partition_definition.inc.php @@ -14,17 +14,31 @@ if (!isset($partitionDetails)) { // Extract some partitioning and subpartitioning parameters from the request $partitionParams = array( - 'partition_by', 'partition_expr', 'partition_count', - 'subpartition_by', 'subpartition_expr', 'subpartition_count' + 'partition_by', 'partition_expr', + 'subpartition_by', 'subpartition_expr', ); foreach ($partitionParams as $partitionParam) { $partitionDetails[$partitionParam] = isset($_REQUEST[$partitionParam]) ? $_REQUEST[$partitionParam] : ''; } + if (PMA_isValid($_REQUEST['partition_count'], 'numeric')) { + // MySQL's limit is 8192, so do not allow more + $partition_count = min(intval($_REQUEST['partition_count']), 8192); + } else { + $partition_count = 0; + } + $partitionDetails['partition_count'] = $partition_count; + if (PMA_isValid($_REQUEST['subpartition_count'], 'numeric')) { + // MySQL's limit is 8192, so do not allow more + $subpartition_count = min(intval($_REQUEST['subpartition_count']), 8192); + } else { + $subpartition_count = 0; + } + $partitionDetails['subpartition_count'] = $subpartition_count; + // Only LIST and RANGE type parameters allow subpartitioning - $partitionDetails['can_have_subpartitions'] = isset($_REQUEST['partition_count']) - && $_REQUEST['partition_count'] > 1 + $partitionDetails['can_have_subpartitions'] = $partition_count > 1 && isset($_REQUEST['partition_by']) && ($_REQUEST['partition_by'] == 'RANGE' || $_REQUEST['partition_by'] == 'RANGE COLUMNS' @@ -38,18 +52,17 @@ if (!isset($partitionDetails)) { || $_REQUEST['partition_by'] == 'LIST' || $_REQUEST['partition_by'] == 'LIST COLUMNS'); - if (PMA_isValid($_REQUEST['partition_count'], 'numeric') - && $_REQUEST['partition_count'] > 1 - ) { // Has partitions + // Has partitions + if ($partition_count > 1) { $partitions = isset($_REQUEST['partitions']) ? $_REQUEST['partitions'] : array(); // Remove details of the additional partitions // when number of partitions have been reduced - array_splice($partitions, $_REQUEST['partition_count']); + array_splice($partitions, $partition_count); - for ($i = 0; $i < $_REQUEST['partition_count']; $i++) { + for ($i = 0; $i < $partition_count; $i++) { if (! isset($partitions[$i])) { // Newly added partition $partitions[$i] = array( 'name' => 'p' . $i, @@ -85,11 +98,10 @@ if (!isset($partitionDetails)) { $partition['node_group'] = ''; } - if (PMA_isValid($_REQUEST['subpartition_count'], 'numeric') - && $_REQUEST['subpartition_count'] > 1 + if ($subpartition_count > 1 && $partitionDetails['can_have_subpartitions'] == true ) { // Has subpartitions - $partition['subpartition_count'] = $_REQUEST['subpartition_count']; + $partition['subpartition_count'] = $subpartition_count; if (! isset($partition['subpartitions'])) { $partition['subpartitions'] = array(); @@ -98,9 +110,9 @@ if (!isset($partitionDetails)) { // Remove details of the additional subpartitions // when number of subpartitions have been reduced - array_splice($subpartitions, $_REQUEST['subpartition_count']); + array_splice($subpartitions, $subpartition_count); - for ($j = 0; $j < $_REQUEST['subpartition_count']; $j++) { + for ($j = 0; $j < $subpartition_count; $j++) { if (! isset($subpartitions[$j])) { // Newly added subpartition $subpartitions[$j] = array( 'name' => $partition['name'] . '_s' . $j,