<?php /* vim: set expandtab sw=4 ts=4 sts=4: */ /** * Library for extracting information about the partitions * * @package PhpMyAdmin */ namespace PhpMyAdmin; use PhpMyAdmin\SubPartition; /** * base Partition Class * * @package PhpMyAdmin */ class Partition extends SubPartition { /** * @var string partition description */ protected $description; /** * @var SubPartition[] sub partitions */ protected $subPartitions = array(); /** * Loads data from the fetched row from information_schema.PARTITIONS * * @param array $row fetched row * * @return void */ protected function loadData(array $row) { $this->name = $row['PARTITION_NAME']; $this->ordinal = $row['PARTITION_ORDINAL_POSITION']; $this->method = $row['PARTITION_METHOD']; $this->expression = $row['PARTITION_EXPRESSION']; $this->description = $row['PARTITION_DESCRIPTION']; // no sub partitions, load all data to this object if (empty($row['SUBPARTITION_NAME'])) { $this->loadCommonData($row); } } /** * Returns the partiotion description * * @return string partition description */ public function getDescription() { return $this->description; } /** * Add a sub partition * * @param SubPartition $partition Sub partition * * @return void */ public function addSubPartition(SubPartition $partition) { $this->subPartitions[] = $partition; } /** * Whether there are sub partitions * * @return boolean */ public function hasSubPartitions() { return ! empty($this->subPartitions); } /** * Returns the number of data rows * * @return integer number of rows */ public function getRows() { if (empty($this->subPartitions)) { return $this->rows; } $rows = 0; foreach ($this->subPartitions as $subPartition) { $rows += $subPartition->rows; } return $rows; } /** * Returns the total data length * * @return integer data length */ public function getDataLength() { if (empty($this->subPartitions)) { return $this->dataLength; } $dataLength = 0; foreach ($this->subPartitions as $subPartition) { $dataLength += $subPartition->dataLength; } return $dataLength; } /** * Returns the tatal index length * * @return integer index length */ public function getIndexLength() { if (empty($this->subPartitions)) { return $this->indexLength; } $indexLength = 0; foreach ($this->subPartitions as $subPartition) { $indexLength += $subPartition->indexLength; } return $indexLength; } /** * Returns the list of sub partitions * * @return SubPartition[] */ public function getSubPartitions() { return $this->subPartitions; } /** * Returns array of partitions for a specific db/table * * @param string $db database name * @param string $table table name * * @access public * @return Partition[] */ static public function getPartitions($db, $table) { if (Partition::havePartitioning()) { $result = $GLOBALS['dbi']->fetchResult( "SELECT * FROM `information_schema`.`PARTITIONS`" . " WHERE `TABLE_SCHEMA` = '" . $GLOBALS['dbi']->escapeString($db) . "' AND `TABLE_NAME` = '" . $GLOBALS['dbi']->escapeString($table) . "'" ); if ($result) { $partitionMap = array(); foreach ($result as $row) { if (isset($partitionMap[$row['PARTITION_NAME']])) { $partition = $partitionMap[$row['PARTITION_NAME']]; } else { $partition = new Partition($row); $partitionMap[$row['PARTITION_NAME']] = $partition; } if (! empty($row['SUBPARTITION_NAME'])) { $parentPartition = $partition; $partition = new SubPartition($row); $parentPartition->addSubPartition($partition); } } return array_values($partitionMap); } return array(); } return array(); } /** * returns array of partition names for a specific db/table * * @param string $db database name * @param string $table table name * * @access public * @return array of partition names */ static public function getPartitionNames($db, $table) { if (Partition::havePartitioning()) { return $GLOBALS['dbi']->fetchResult( "SELECT DISTINCT `PARTITION_NAME` FROM `information_schema`.`PARTITIONS`" . " WHERE `TABLE_SCHEMA` = '" . $GLOBALS['dbi']->escapeString($db) . "' AND `TABLE_NAME` = '" . $GLOBALS['dbi']->escapeString($table) . "'" ); } return array(); } /** * returns the partition method used by the table. * * @param string $db database name * @param string $table table name * * @return string partition method */ static public function getPartitionMethod($db, $table) { if (Partition::havePartitioning()) { $partition_method = $GLOBALS['dbi']->fetchResult( "SELECT `PARTITION_METHOD` FROM `information_schema`.`PARTITIONS`" . " WHERE `TABLE_SCHEMA` = '" . $GLOBALS['dbi']->escapeString($db) . "'" . " AND `TABLE_NAME` = '" . $GLOBALS['dbi']->escapeString($table) . "'" . " LIMIT 1" ); if (! empty($partition_method)) { return $partition_method[0]; } } return null; } /** * checks if MySQL server supports partitioning * * @static * @staticvar boolean $have_partitioning * @staticvar boolean $already_checked * @access public * @return boolean */ static public function havePartitioning() { static $have_partitioning = false; static $already_checked = false; if (! $already_checked) { if ($GLOBALS['dbi']->getVersion() < 50600) { if ($GLOBALS['dbi']->fetchValue( "SELECT @@have_partitioning;" )) { $have_partitioning = true; } } else if ($GLOBALS['dbi']->getVersion() >= 80000) { $have_partitioning = true; } else { // see https://dev.mysql.com/doc/refman/5.6/en/partitioning.html $plugins = $GLOBALS['dbi']->fetchResult("SHOW PLUGINS"); foreach ($plugins as $value) { if ($value['Name'] == 'partition') { $have_partitioning = true; break; } } } $already_checked = true; } return $have_partitioning; } }
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
Config | Folder | 0755 |
|
|
Controllers | Folder | 0755 |
|
|
Database | Folder | 0755 |
|
|
Dbi | Folder | 0755 |
|
|
Di | Folder | 0755 |
|
|
Display | Folder | 0755 |
|
|
Engines | Folder | 0755 |
|
|
Gis | Folder | 0755 |
|
|
Navigation | Folder | 0755 |
|
|
Plugins | Folder | 0755 |
|
|
Properties | Folder | 0755 |
|
|
Rte | Folder | 0755 |
|
|
Server | Folder | 0755 |
|
|
Twig | Folder | 0755 |
|
|
Utils | Folder | 0755 |
|
|
Advisor.php | File | 18.79 KB | 0644 |
|
Bookmark.php | File | 10.37 KB | 0644 |
|
BrowseForeigners.php | File | 10.73 KB | 0644 |
|
CentralColumns.php | File | 53.12 KB | 0644 |
|
Charsets.php | File | 24.92 KB | 0644 |
|
CheckUserPrivileges.php | File | 11.58 KB | 0644 |
|
Config.php | File | 59.69 KB | 0644 |
|
Console.php | File | 3.58 KB | 0644 |
|
Core.php | File | 38.98 KB | 0644 |
|
CreateAddField.php | File | 17.97 KB | 0644 |
|
DatabaseInterface.php | File | 103.86 KB | 0644 |
|
Encoding.php | File | 8.25 KB | 0644 |
|
Error.php | File | 13.05 KB | 0644 |
|
ErrorHandler.php | File | 16.68 KB | 0644 |
|
ErrorReport.php | File | 8.37 KB | 0644 |
|
Export.php | File | 40.32 KB | 0644 |
|
File.php | File | 20.53 KB | 0644 |
|
FileListing.php | File | 2.83 KB | 0644 |
|
Font.php | File | 4.25 KB | 0644 |
|
Footer.php | File | 10.54 KB | 0644 |
|
Header.php | File | 25.81 KB | 0644 |
|
Import.php | File | 55.59 KB | 0644 |
|
Index.php | File | 24.63 KB | 0644 |
|
IndexColumn.php | File | 4.43 KB | 0644 |
|
InsertEdit.php | File | 129.29 KB | 0644 |
|
IpAllowDeny.php | File | 9.21 KB | 0644 |
|
Language.php | File | 4.3 KB | 0644 |
|
LanguageManager.php | File | 23.42 KB | 0644 |
|
Linter.php | File | 5.1 KB | 0644 |
|
ListAbstract.php | File | 3.15 KB | 0644 |
|
ListDatabase.php | File | 4.22 KB | 0644 |
|
Logging.php | File | 2.56 KB | 0644 |
|
Menu.php | File | 22.34 KB | 0644 |
|
Message.php | File | 19.19 KB | 0644 |
|
Mime.php | File | 891 B | 0644 |
|
MultSubmits.php | File | 23.19 KB | 0644 |
|
Normalization.php | File | 39.03 KB | 0644 |
|
OpenDocument.php | File | 8.5 KB | 0644 |
|
Operations.php | File | 79.06 KB | 0644 |
|
OutputBuffering.php | File | 3.63 KB | 0644 |
|
ParseAnalyze.php | File | 2.46 KB | 0644 |
|
Partition.php | File | 7.26 KB | 0644 |
|
Pdf.php | File | 4.07 KB | 0644 |
|
Plugins.php | File | 21.42 KB | 0644 |
|
RecentFavoriteTable.php | File | 12.13 KB | 0644 |
|
Relation.php | File | 78.19 KB | 0644 |
|
RelationCleanup.php | File | 14.7 KB | 0644 |
|
Replication.php | File | 5.37 KB | 0644 |
|
ReplicationGui.php | File | 41.79 KB | 0644 |
|
Response.php | File | 16.31 KB | 0644 |
|
Sanitize.php | File | 14.15 KB | 0644 |
|
SavedSearches.php | File | 11.95 KB | 0644 |
|
Scripts.php | File | 5.33 KB | 0644 |
|
Session.php | File | 7.82 KB | 0644 |
|
Sql.php | File | 88.22 KB | 0644 |
|
SqlQueryForm.php | File | 17.19 KB | 0644 |
|
StorageEngine.php | File | 13.47 KB | 0644 |
|
SubPartition.php | File | 3.53 KB | 0644 |
|
SysInfo.php | File | 1.54 KB | 0644 |
|
SysInfoBase.php | File | 801 B | 0644 |
|
SysInfoLinux.php | File | 1.96 KB | 0644 |
|
SysInfoSunOS.php | File | 1.87 KB | 0644 |
|
SysInfoWINNT.php | File | 3.25 KB | 0644 |
|
SystemDatabase.php | File | 3.84 KB | 0644 |
|
Table.php | File | 92.59 KB | 0644 |
|
Template.php | File | 3.91 KB | 0644 |
|
Theme.php | File | 10.53 KB | 0644 |
|
ThemeManager.php | File | 10.73 KB | 0644 |
|
Tracker.php | File | 29.72 KB | 0644 |
|
Tracking.php | File | 41.99 KB | 0644 |
|
Transformations.php | File | 16.12 KB | 0644 |
|
TwoFactor.php | File | 7.1 KB | 0644 |
|
Types.php | File | 22.75 KB | 0644 |
|
Url.php | File | 8.17 KB | 0644 |
|
UserPassword.php | File | 8.47 KB | 0644 |
|
UserPreferences.php | File | 8.52 KB | 0644 |
|
Util.php | File | 162.99 KB | 0644 |
|
VersionInformation.php | File | 6.34 KB | 0644 |
|
ZipExtension.php | File | 9.98 KB | 0644 |
|