📄 index.class.php
字号:
<?php/* vim: set expandtab sw=4 ts=4 sts=4: *//** * holds the datasbe index class * * @version $Id: Index.class.php 11647 2008-10-12 13:03:57Z lem9 $ *//** * @since phpMyAdmin 3.0.0 * */class PMA_Index{ /** * Class-wide storage container for indexes (caching, singleton) * * @var array */ protected static $_registry = array(); /** * @var string The name of the schema */ protected $_schema = ''; /** * @var string The name of the table */ protected $_table = ''; /** * @var string The name of the index */ protected $_name = ''; /** * Columns in index * * @var array */ protected $_columns = array(); /** * The index method used (BTREE, FULLTEXT, HASH, RTREE). * * @var string */ protected $_type = ''; /** * The index choice (PRIMARY, UNIQUE, INDEX, FULLTEXT) * * @var string */ protected $_choice = ''; /** * Various remarks. * * @var string */ protected $_remarks = ''; /** * Any comment provided for the index with a COMMENT attribute when the * index was created. * * @var string */ protected $_comment = ''; /** * @var integer 0 if the index cannot contain duplicates, 1 if it can. */ protected $_non_unique = 0; /** * Indicates how the key is packed. NULL if it is not. * * @var string */ protected $_packed = null; /** * Constructor * * @uses $this->set() * @param array $params */ public function __construct($params = array()) { $this->set($params); } static public function singleton($schema, $table, $index_name = '') { PMA_Index::_loadIndexes($table, $schema); if (! isset(PMA_Index::$_registry[$schema][$table][$index_name])) { $index = new PMA_Index; if (strlen($index_name)) { $index->setName($index_name); PMA_Index::$_registry[$schema][$table][$index->getName()] = $index; } return $index; } else { return PMA_Index::$_registry[$schema][$table][$index_name]; } } /** * returns an array with all indexes from the given table * * @uses PMA_Index::_loadIndexes() * @uses PMA_Index::$_registry * @param string $table * @param string $schema * @return array */ static public function getFromTable($table, $schema) { PMA_Index::_loadIndexes($table, $schema); if (isset(PMA_Index::$_registry[$schema][$table])) { return PMA_Index::$_registry[$schema][$table]; } else { return array(); } } /** * return primary if set, false otherwise * * @uses PMA_Index::_loadIndexes() * @uses PMA_Index::$_registry * @param string $table * @param string $schema * @return mixed primary index or false if no one exists */ static public function getPrimary($table, $schema) { PMA_Index::_loadIndexes($table, $schema); if (isset(PMA_Index::$_registry[$schema][$table]['PRIMARY'])) { return PMA_Index::$_registry[$schema][$table]['PRIMARY']; } else { return false; } } /** * Load index data for table * * @uses PMA_Index::$_registry * @uses PMA_DBI_fetch_result() * @uses PMA_backquote() * @uses PMA_Index * @uses PMA_Index->addColumn() * @param string $table * @param string $schema * @return boolean */ static protected function _loadIndexes($table, $schema) { if (isset(PMA_Index::$_registry[$schema][$table])) { return true; } $_raw_indexes = PMA_DBI_fetch_result('SHOW INDEX FROM ' . PMA_backquote($schema) . '.' . PMA_backquote($table)); foreach ($_raw_indexes as $_each_index) { $_each_index['Schema'] = $schema; if (! isset(PMA_Index::$_registry[$schema][$table][$_each_index['Key_name']])) { $key = new PMA_Index($_each_index); PMA_Index::$_registry[$schema][$table][$_each_index['Key_name']] = $key; } else { $key = PMA_Index::$_registry[$schema][$table][$_each_index['Key_name']]; } $key->addColumn($_each_index); } return true; } /** * Add column to index * * @uses $this->_columns * @uses PMA_Index_Column * @param array $params column params */ public function addColumn($params) { if (strlen($params['Column_name'])) { $this->_columns[$params['Column_name']] = new PMA_Index_Column($params); } } public function addColumns($columns) { $_columns = array(); if (isset($columns['names'])) { // coming from form // $columns[names][] // $columns[sub_parts][] foreach ($columns['names'] as $key => $name) { $_columns[] = array( 'Column_name' => $name, 'Sub_part' => $columns['sub_parts'][$key], ); } } else { // coming from SHOW INDEXES // $columns[][name] // $columns[][sub_part] // ... $_columns = $columns; } foreach ($_columns as $column) { $this->addColumn($column); } } /** * Returns true if $column indexed in this index * * @uses $this->_columns * @param string $column * @return boolean */ public function hasColumn($column) { return isset($this->_columns[$column]); } public function set($params) { if (isset($params['columns'])) { $this->addColumns($params['columns']); } if (isset($params['Schema'])) { $this->_schema = $params['Schema']; } if (isset($params['Table'])) { $this->_table = $params['Table']; } if (isset($params['Key_name'])) { $this->_name = $params['Key_name']; } if (isset($params['Index_type'])) { $this->_type = $params['Index_type']; } if (isset($params['Comment'])) { $this->_remarks = $params['Comment']; } if (isset($params['Index_comment'])) { $this->_comment = $params['Index_comment']; } if (isset($params['Non_unique'])) { $this->_non_unique = $params['Non_unique']; } if (isset($params['Packed'])) { $this->_packed = $params['Packed']; } if ('PRIMARY' == $this->_name) { $this->_choice = 'PRIMARY'; } elseif ('FULLTEXT' == $this->_type) { $this->_choice = 'FULLTEXT'; } elseif ('0' == $this->_non_unique) { $this->_choice = 'UNIQUE'; } else { $this->_choice = 'INDEX'; } } public function getColumnCount() { return count($this->_columns); } public function getComment() { return $this->_comment; } public function getRemarks() { return $this->_remarks; } public function getComments() { $comments = $this->getRemarks(); if (strlen($comments)) { $comments .= "\n"; } $comments .= $this->getComment();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -