| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | <?php/* vim: set expandtab sw=4 ts=4 sts=4: *//** * Table partition definition * * @package PhpMyAdmin */use PhpMyAdmin\Core;if (!isset($partitionDetails)) {    $partitionDetails = array();    // Extract some partitioning and subpartitioning parameters from the request    $partitionParams = array(        'partition_by', 'partition_expr',        'subpartition_by', 'subpartition_expr',    );    foreach ($partitionParams as $partitionParam) {        $partitionDetails[$partitionParam] = isset($_POST[$partitionParam])            ? $_POST[$partitionParam] : '';    }    if (Core::isValid($_POST['partition_count'], 'numeric')) {        // MySQL's limit is 8192, so do not allow more        $partition_count = min(intval($_POST['partition_count']), 8192);    } else {        $partition_count = 0;    }    $partitionDetails['partition_count']        = ($partition_count === 0) ? '' : $partition_count;    if (Core::isValid($_POST['subpartition_count'], 'numeric')) {        // MySQL's limit is 8192, so do not allow more        $subpartition_count = min(intval($_POST['subpartition_count']), 8192);    } else {        $subpartition_count = 0;    }    $partitionDetails['subpartition_count']        = ($subpartition_count === 0) ? '' : $subpartition_count;    // Only LIST and RANGE type parameters allow subpartitioning    $partitionDetails['can_have_subpartitions'] = $partition_count > 1        && isset($_POST['partition_by'])        && ($_POST['partition_by'] == 'RANGE'        || $_POST['partition_by'] == 'RANGE COLUMNS'        || $_POST['partition_by'] == 'LIST'        || $_POST['partition_by'] == 'LIST COLUMNS');    // Values are specified only for LIST and RANGE type partitions    $partitionDetails['value_enabled'] = isset($_POST['partition_by'])        && ($_POST['partition_by'] == 'RANGE'        || $_POST['partition_by'] == 'RANGE COLUMNS'        || $_POST['partition_by'] == 'LIST'        || $_POST['partition_by'] == 'LIST COLUMNS');    // Has partitions    if ($partition_count > 1) {        $partitions = isset($_POST['partitions'])            ? $_POST['partitions']            : array();        // Remove details of the additional partitions        // when number of partitions have been reduced        array_splice($partitions, $partition_count);        for ($i = 0; $i < $partition_count; $i++) {            if (! isset($partitions[$i])) { // Newly added partition                $partitions[$i] = array(                    'name' => 'p' . $i,                    'value_type' => '',                    'value' => '',                    'engine' => '',                    'comment' => '',                    'data_directory' => '',                    'index_directory' => '',                    'max_rows' => '',                    'min_rows' => '',                    'tablespace' => '',                    'node_group' => '',                );            }            $partition =& $partitions[$i];            $partition['prefix'] = 'partitions[' . $i . ']';            // Changing from HASH/KEY to RANGE/LIST            if (! isset($partition['value_type'])) {                $partition['value_type'] = '';                $partition['value'] = '';            }            if (! isset($partition['engine'])) { // When removing subpartitioning                $partition['engine'] = '';                $partition['comment'] = '';                $partition['data_directory'] = '';                $partition['index_directory'] = '';                $partition['max_rows'] = '';                $partition['min_rows'] = '';                $partition['tablespace'] = '';                $partition['node_group'] = '';            }            if ($subpartition_count > 1                && $partitionDetails['can_have_subpartitions'] == true            ) { // Has subpartitions                $partition['subpartition_count'] = $subpartition_count;                if (! isset($partition['subpartitions'])) {                    $partition['subpartitions'] = array();                }                $subpartitions =& $partition['subpartitions'];                // Remove details of the additional subpartitions                // when number of subpartitions have been reduced                array_splice($subpartitions, $subpartition_count);                for ($j = 0; $j < $subpartition_count; $j++) {                    if (! isset($subpartitions[$j])) { // Newly added subpartition                        $subpartitions[$j] = array(                            'name' => $partition['name'] . '_s' . $j,                            'engine' => '',                            'comment' => '',                            'data_directory' => '',                            'index_directory' => '',                            'max_rows' => '',                            'min_rows' => '',                            'tablespace' => '',                            'node_group' => '',                        );                    }                    $subpartition =& $subpartitions[$j];                    $subpartition['prefix'] = 'partitions[' . $i . ']'                        . '[subpartitions][' . $j . ']';                }            } else { // No subpartitions                unset($partition['subpartitions']);                unset($partition['subpartition_count']);            }        }        $partitionDetails['partitions'] = $partitions;    }}
 |