From 04d6d5ca99ebfd1cebb8ce06618fb3811fc1a8aa Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 9 Jan 2020 10:55:03 +0100 Subject: phpmyadmin working --- srcs/phpmyadmin/libraries/classes/Engines/Bdb.php | 76 ++++ .../libraries/classes/Engines/Berkeleydb.php | 19 + .../libraries/classes/Engines/Binlog.php | 31 ++ .../libraries/classes/Engines/Innobase.php | 19 + .../libraries/classes/Engines/Innodb.php | 395 +++++++++++++++++++++ .../libraries/classes/Engines/Memory.php | 34 ++ .../phpmyadmin/libraries/classes/Engines/Merge.php | 21 ++ .../libraries/classes/Engines/MrgMyisam.php | 29 ++ .../libraries/classes/Engines/Myisam.php | 88 +++++ .../libraries/classes/Engines/Ndbcluster.php | 54 +++ srcs/phpmyadmin/libraries/classes/Engines/Pbxt.php | 195 ++++++++++ .../classes/Engines/PerformanceSchema.php | 31 ++ 12 files changed, 992 insertions(+) create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Bdb.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Berkeleydb.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Binlog.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Innobase.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Innodb.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Memory.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Merge.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/MrgMyisam.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Myisam.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Ndbcluster.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/Pbxt.php create mode 100644 srcs/phpmyadmin/libraries/classes/Engines/PerformanceSchema.php (limited to 'srcs/phpmyadmin/libraries/classes/Engines') diff --git a/srcs/phpmyadmin/libraries/classes/Engines/Bdb.php b/srcs/phpmyadmin/libraries/classes/Engines/Bdb.php new file mode 100644 index 0000000..70919e3 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Engines/Bdb.php @@ -0,0 +1,76 @@ + [ + 'title' => __('Version information'), + ], + 'bdb_cache_size' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'bdb_home' => [], + 'bdb_log_buffer_size' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'bdb_logdir' => [], + 'bdb_max_lock' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'bdb_shared_data' => [], + 'bdb_tmpdir' => [], + 'bdb_data_direct' => [], + 'bdb_lock_detect' => [], + 'bdb_log_direct' => [], + 'bdb_no_recover' => [], + 'bdb_no_sync' => [], + 'skip_sync_bdb_logs' => [], + 'sync_bdb_logs' => [], + ]; + } + + /** + * Returns the pattern to be used in the query for SQL variables + * related to this storage engine + * + * @return string LIKE pattern + */ + public function getVariablesLikePattern() + { + return '%bdb%'; + } + + /** + * returns string with filename for the MySQL helppage + * about this storage engine + * + * @return string mysql helppage filename + */ + public function getMysqlHelpPage() + { + return 'bdb'; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Engines/Berkeleydb.php b/srcs/phpmyadmin/libraries/classes/Engines/Berkeleydb.php new file mode 100644 index 0000000..0c69d5f --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Engines/Berkeleydb.php @@ -0,0 +1,19 @@ + [ + 'title' => __('Data home directory'), + 'desc' => __( + 'The common part of the directory path for all InnoDB data ' + . 'files.' + ), + ], + 'innodb_data_file_path' => [ + 'title' => __('Data files'), + ], + 'innodb_autoextend_increment' => [ + 'title' => __('Autoextend increment'), + 'desc' => __( + 'The increment size for extending the size of an autoextending ' + . 'tablespace when it becomes full.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_buffer_pool_size' => [ + 'title' => __('Buffer pool size'), + 'desc' => __( + 'The size of the memory buffer InnoDB uses to cache data and ' + . 'indexes of its tables.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'innodb_additional_mem_pool_size' => [ + 'title' => 'innodb_additional_mem_pool_size', + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'innodb_buffer_pool_awe_mem_mb' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'innodb_checksums' => [], + 'innodb_commit_concurrency' => [], + 'innodb_concurrency_tickets' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_doublewrite' => [], + 'innodb_fast_shutdown' => [], + 'innodb_file_io_threads' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_file_per_table' => [], + 'innodb_flush_log_at_trx_commit' => [], + 'innodb_flush_method' => [], + 'innodb_force_recovery' => [], + 'innodb_lock_wait_timeout' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_locks_unsafe_for_binlog' => [], + 'innodb_log_arch_dir' => [], + 'innodb_log_archive' => [], + 'innodb_log_buffer_size' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'innodb_log_file_size' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'innodb_log_files_in_group' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_log_group_home_dir' => [], + 'innodb_max_dirty_pages_pct' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_max_purge_lag' => [], + 'innodb_mirrored_log_groups' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_open_files' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_support_xa' => [], + 'innodb_sync_spin_loops' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_table_locks' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_BOOLEAN, + ], + 'innodb_thread_concurrency' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'innodb_thread_sleep_delay' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + ]; + } + + /** + * Returns the pattern to be used in the query for SQL variables + * related to InnoDb storage engine + * + * @return string SQL query LIKE pattern + */ + public function getVariablesLikePattern() + { + return 'innodb\\_%'; + } + + /** + * Get information pages + * + * @return array detail pages + */ + public function getInfoPages() + { + if ($this->support < PMA_ENGINE_SUPPORT_YES) { + return []; + } + $pages = []; + $pages['Bufferpool'] = __('Buffer Pool'); + $pages['Status'] = __('InnoDB Status'); + + return $pages; + } + + /** + * returns html tables with stats over inno db buffer pool + * + * @return string html table with stats + */ + public function getPageBufferpool() + { + // The following query is only possible because we know + // that we are on MySQL 5 here (checked above)! + // side note: I love MySQL 5 for this. :-) + $sql = 'SHOW STATUS' + . ' WHERE Variable_name LIKE \'Innodb\\_buffer\\_pool\\_%\'' + . ' OR Variable_name = \'Innodb_page_size\';'; + $status = $GLOBALS['dbi']->fetchResult($sql, 0, 1); + + $output = '' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' '; + + // not present at least since MySQL 5.1.40 + if (isset($status['Innodb_buffer_pool_pages_latched'])) { + $output .= ' ' + . ' ' + . ' ' + . ' '; + } + + $output .= ' ' . "\n" + . '
' . "\n" + . ' ' . __('Buffer Pool Usage') . "\n" + . '
' . "\n" + . ' ' . __('Total') . "\n" + . ' : ' + . Util::formatNumber( + $status['Innodb_buffer_pool_pages_total'], + 0 + ) + . ' ' . __('pages') + . ' / ' + . implode( + ' ', + Util::formatByteDown( + $status['Innodb_buffer_pool_pages_total'] + * $status['Innodb_page_size'] + ) + ) . "\n" + . '
' . __('Free pages') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_pages_free'], + 0 + ) + . '
' . __('Dirty pages') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_pages_dirty'], + 0 + ) + . '
' . __('Pages containing data') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_pages_data'], + 0 + ) . "\n" + . '
' . __('Pages to be flushed') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_pages_flushed'], + 0 + ) . "\n" + . '
' . __('Busy pages') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_pages_misc'], + 0 + ) . "\n" + . '
' . __('Latched pages') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_pages_latched'], + 0 + ) + . '
' . "\n\n" + . '' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . ' ' . "\n" + . '
' . "\n" + . ' ' . __('Buffer Pool Activity') . "\n" + . '
' . __('Read requests') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_read_requests'], + 0 + ) . "\n" + . '
' . __('Write requests') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_write_requests'], + 0 + ) . "\n" + . '
' . __('Read misses') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_reads'], + 0 + ) . "\n" + . '
' . __('Write waits') . '' + . Util::formatNumber( + $status['Innodb_buffer_pool_wait_free'], + 0 + ) . "\n" + . '
' . __('Read misses in %') . '' + . ($status['Innodb_buffer_pool_read_requests'] == 0 + ? '---' + : htmlspecialchars( + Util::formatNumber( + $status['Innodb_buffer_pool_reads'] * 100 + / $status['Innodb_buffer_pool_read_requests'], + 3, + 2 + ) + ) . ' %') . "\n" + . '
' . __('Write waits in %') . '' + . ($status['Innodb_buffer_pool_write_requests'] == 0 + ? '---' + : htmlspecialchars( + Util::formatNumber( + $status['Innodb_buffer_pool_wait_free'] * 100 + / $status['Innodb_buffer_pool_write_requests'], + 3, + 2 + ) + ) . ' %') . "\n" + . '
' . "\n"; + + return $output; + } + + /** + * returns InnoDB status + * + * @return string result of SHOW ENGINE INNODB STATUS inside pre tags + */ + public function getPageStatus() + { + return '
' . "\n"
+            . htmlspecialchars((string) $GLOBALS['dbi']->fetchValue(
+                'SHOW ENGINE INNODB STATUS;',
+                0,
+                'Status'
+            )) . "\n" . '
' . "\n"; + } + + /** + * returns string with filename for the MySQL helppage + * about this storage engine + * + * @return string mysql helppage filename + */ + public function getMysqlHelpPage() + { + return 'innodb-storage-engine'; + } + + /** + * Gets the InnoDB plugin version number + * + * @return string the version number, or empty if not running as a plugin + */ + public function getInnodbPluginVersion() + { + return $GLOBALS['dbi']->fetchValue('SELECT @@innodb_version;'); + } + + /** + * Gets the InnoDB file format + * + * (do not confuse this with phpMyAdmin's storage engine plugins!) + * + * @return string the InnoDB file format + */ + public function getInnodbFileFormat() + { + return $GLOBALS['dbi']->fetchValue( + "SHOW GLOBAL VARIABLES LIKE 'innodb_file_format';", + 0, + 1 + ); + } + + /** + * Verifies if this server supports the innodb_file_per_table feature + * + * (do not confuse this with phpMyAdmin's storage engine plugins!) + * + * @return boolean whether this feature is supported or not + */ + public function supportsFilePerTable() + { + return ( + $GLOBALS['dbi']->fetchValue( + "SHOW GLOBAL VARIABLES LIKE 'innodb_file_per_table';", + 0, + 1 + ) == 'ON' + ); + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Engines/Memory.php b/srcs/phpmyadmin/libraries/classes/Engines/Memory.php new file mode 100644 index 0000000..d01a63e --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Engines/Memory.php @@ -0,0 +1,34 @@ + [ + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + ]; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Engines/Merge.php b/srcs/phpmyadmin/libraries/classes/Engines/Merge.php new file mode 100644 index 0000000..c4bee94 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Engines/Merge.php @@ -0,0 +1,21 @@ + [ + 'title' => __('Data pointer size'), + 'desc' => __( + 'The default pointer size in bytes, to be used by CREATE TABLE ' + . 'for MyISAM tables when no MAX_ROWS option is specified.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'myisam_recover_options' => [ + 'title' => __('Automatic recovery mode'), + 'desc' => __( + 'The mode for automatic recovery of crashed MyISAM tables, as ' + . 'set via the --myisam-recover server startup option.' + ), + ], + 'myisam_max_sort_file_size' => [ + 'title' => __('Maximum size for temporary sort files'), + 'desc' => __( + 'The maximum size of the temporary file MySQL is allowed to use ' + . 'while re-creating a MyISAM index (during REPAIR TABLE, ALTER ' + . 'TABLE, or LOAD DATA INFILE).' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'myisam_max_extra_sort_file_size' => [ + 'title' => __('Maximum size for temporary files on index creation'), + 'desc' => __( + 'If the temporary file used for fast MyISAM index creation ' + . 'would be larger than using the key cache by the amount ' + . 'specified here, prefer the key cache method.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'myisam_repair_threads' => [ + 'title' => __('Repair threads'), + 'desc' => __( + 'If this value is greater than 1, MyISAM table indexes are ' + . 'created in parallel (each index in its own thread) during ' + . 'the repair by sorting process.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'myisam_sort_buffer_size' => [ + 'title' => __('Sort buffer size'), + 'desc' => __( + 'The buffer that is allocated when sorting MyISAM indexes ' + . 'during a REPAIR TABLE or when creating indexes with CREATE ' + . 'INDEX or ALTER TABLE.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'myisam_stats_method' => [], + 'delay_key_write' => [], + 'bulk_insert_buffer_size' => [ + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'skip_external_locking' => [], + ]; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Engines/Ndbcluster.php b/srcs/phpmyadmin/libraries/classes/Engines/Ndbcluster.php new file mode 100644 index 0000000..bd331bf --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Engines/Ndbcluster.php @@ -0,0 +1,54 @@ + [], + ]; + } + + /** + * Returns the pattern to be used in the query for SQL variables + * related to NDBCLUSTER storage engine + * + * @return string SQL query LIKE pattern + */ + public function getVariablesLikePattern() + { + return 'ndb\\_%'; + } + + /** + * Returns string with filename for the MySQL help page + * about this storage engine + * + * @return string mysql helppage filename + */ + public function getMysqlHelpPage() + { + return 'ndbcluster'; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Engines/Pbxt.php b/srcs/phpmyadmin/libraries/classes/Engines/Pbxt.php new file mode 100644 index 0000000..9aa101a --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Engines/Pbxt.php @@ -0,0 +1,195 @@ + [ + 'title' => __('Index cache size'), + 'desc' => __( + 'This is the amount of memory allocated to the' + . ' index cache. Default value is 32MB. The memory' + . ' allocated here is used only for caching index pages.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_record_cache_size' => [ + 'title' => __('Record cache size'), + 'desc' => __( + 'This is the amount of memory allocated to the' + . ' record cache used to cache table data. The default' + . ' value is 32MB. This memory is used to cache changes to' + . ' the handle data (.xtd) and row pointer (.xtr) files.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_log_cache_size' => [ + 'title' => __('Log cache size'), + 'desc' => __( + 'The amount of memory allocated to the' + . ' transaction log cache used to cache on transaction log' + . ' data. The default is 16MB.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_log_file_threshold' => [ + 'title' => __('Log file threshold'), + 'desc' => __( + 'The size of a transaction log before rollover,' + . ' and a new log is created. The default value is 16MB.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_transaction_buffer_size' => [ + 'title' => __('Transaction buffer size'), + 'desc' => __( + 'The size of the global transaction log buffer' + . ' (the engine allocates 2 buffers of this size).' + . ' The default is 1MB.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_checkpoint_frequency' => [ + 'title' => __('Checkpoint frequency'), + 'desc' => __( + 'The amount of data written to the transaction' + . ' log before a checkpoint is performed.' + . ' The default value is 24MB.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_data_log_threshold' => [ + 'title' => __('Data log threshold'), + 'desc' => __( + 'The maximum size of a data log file. The default' + . ' value is 64MB. PBXT can create a maximum of 32000 data' + . ' logs, which are used by all tables. So the value of' + . ' this variable can be increased to increase the total' + . ' amount of data that can be stored in the database.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_garbage_threshold' => [ + 'title' => __('Garbage threshold'), + 'desc' => __( + 'The percentage of garbage in a data log file' + . ' before it is compacted. This is a value between 1 and' + . ' 99. The default is 50.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + 'pbxt_log_buffer_size' => [ + 'title' => __('Log buffer size'), + 'desc' => __( + 'The size of the buffer used when writing a data' + . ' log. The default is 256MB. The engine allocates one' + . ' buffer per thread, but only if the thread is required' + . ' to write a data log.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_data_file_grow_size' => [ + 'title' => __('Data file grow size'), + 'desc' => __('The grow size of the handle data (.xtd) files.'), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_row_file_grow_size' => [ + 'title' => __('Row file grow size'), + 'desc' => __('The grow size of the row pointer (.xtr) files.'), + 'type' => PMA_ENGINE_DETAILS_TYPE_SIZE, + ], + 'pbxt_log_file_count' => [ + 'title' => __('Log file count'), + 'desc' => __( + 'This is the number of transaction log files' + . ' (pbxt/system/xlog*.xt) the system will maintain. If the' + . ' number of logs exceeds this value then old logs will be' + . ' deleted, otherwise they are renamed and given the next' + . ' highest number.' + ), + 'type' => PMA_ENGINE_DETAILS_TYPE_NUMERIC, + ], + ]; + } + + /** + * returns the pbxt engine specific handling for + * PMA_ENGINE_DETAILS_TYPE_SIZE variables. + * + * @param string $formatted_size the size expression (for example 8MB) + * + * @return array the formatted value and its unit + */ + public function resolveTypeSize($formatted_size) + { + if (preg_match('/^[0-9]+[a-zA-Z]+$/', $formatted_size)) { + $value = Util::extractValueFromFormattedSize( + $formatted_size + ); + } else { + $value = $formatted_size; + } + + return Util::formatByteDown($value); + } + + //-------------------- + /** + * Get information about pages + * + * @return array Information about pages + */ + public function getInfoPages() + { + $pages = []; + $pages['Documentation'] = __('Documentation'); + + return $pages; + } + + //-------------------- + /** + * Get content of documentation page + * + * @return string + */ + public function getPageDocumentation() + { + $output = '

' . sprintf( + __( + 'Documentation and further information about PBXT' + . ' can be found on the %sPrimeBase XT Home Page%s.' + ), + '', + '' + ) + . '

' . "\n"; + + return $output; + } +} diff --git a/srcs/phpmyadmin/libraries/classes/Engines/PerformanceSchema.php b/srcs/phpmyadmin/libraries/classes/Engines/PerformanceSchema.php new file mode 100644 index 0000000..01669b4 --- /dev/null +++ b/srcs/phpmyadmin/libraries/classes/Engines/PerformanceSchema.php @@ -0,0 +1,31 @@ +