WL#5078: Create SQL command classes for show statements

Status: In-Progress   —   Priority: Medium

Create classes derived from Sql_cmd that represent all supported 
show statements. This is a subtask of WL#5047.

Testing:
Testing of this task needs to be detailed.
1. Classes used to represent show statements

These classes will be created as derived from Sql_cmd_select. Some of the 
classes are actually executed as SELECT statements, whereas others have 
specialized implementations.

The common parts of the SHOW commands are as follows:
 - They all return data to the client in a tabular form.
 - Data returned are described with metadata, such as number of columns and
   details of columns (name, datatype, nullability, etc).

The classes are defined in sql_cmd_show.h and implemented in sql_cmd_show.cc.

1.1 Class Sql_cmd_show_warnings

Command: SHOW WARNINGS

Member: m_limits - Offset and number of rows returned - to be added later.

1.2 Class Sql_cmd_show_errors

Command: SHOW ERRORS

Member: m_limits - Offset and number of rows returned - to be added later.

1.3 Class Sql_cmd_show_profiles

Command: SHOW PROFILES

1.4 Class Sql_cmd_show_slave_hosts

Command: SHOW SLAVE HOSTS

1.5 Class Sql_cmd_show_slave_status

Command: SHOW SLAVE STATUS

1.6 Class Sql_cmd_show_master_status

Command: SHOW MASTER STATUS

1.7 Class Sql_cmd_show_binlog_events

Command: SHOW BINLOG EVENTS

Member: m_logfile - Name of logfile
Member: m_position - Start position within logfile
Member: m_limits - offset and number of rows returned - to be added later.

1.8 Class Sql_cmd_show_relaylog_events

Command: SHOW RELAYLOG EVENTS

Member: m_logfile - Name of logfile
Member: m_position - Start position within logfile
Member: m_limits - offset and number of rows returned - to be added later.

1.9 Class Sql_cmd_show_engine_status

Command: SHOW ENGINE STATUS

Member: m_engine - name of engine - to be added later.

1.10 Class Sql_cmd_show_engine_mutex

Command: SHOW ENGINE MUTEX

Member: m_engine - name of engine - to be added later.

1.11 Class Sql_cmd_show_engine_logs

Command: SHOW ENGINE LOGS (deprecated)

Member: m_engine - name of engine - to be added later.

1.12 Class Sql_cmd_show_binlogs

Command: SHOW BINARY LOGS (synonym SHOW MASTER LOGS)

1.13 Class Sql_cmd_show_processes

Command: SHOW PROCESSLIST

Member: m_verbose - true if verbose output wanted

1.14 Class Sql_cmd_show_authors

Command: SHOW AUTHORS

1.15 Class Sql_cmd_show_contributors

Command: SHOW CONTRIBUTORS

1.16 Class Sql_cmd_show_privileges

Command: SHOW PRIVILEGES

1.17 Class Sql_cmd_show_create_schema

Command: SHOW CREATE DATABASE

Member: m_name - name of schema (database)
Member: m_options - Options for command

1.18 Class Sql_cmd_show_create_event

Command: SHOW CREATE EVENT

Member: m_name - Name of event, including schema name

1.19 Class Sql_cmd_show_create_function

Command: SHOW CREATE FUNCTION

Member: m_name - Name of function, including schema name

1.20 Class Sql_cmd_show_create_procedure

Command: SHOW CREATE PROCEDURE

Member: m_name - Name of procedure, including schema name

1.21 Class Sql_cmd_show_create trigger

Command: SHOW CREATE TRIGGER

Member: m_name - Name of trigger, including schema name

1.22 Class Sql_cmd_show_create_table

Command: SHOW CREATE TABLE

Member: TBD

1.23 Class Sql_cmd_show_create_view

Command: SHOW CREATE VIEW

Member: TBD

1.24 Class Sql_cmd_show_function_code

Command: SHOW FUNCTION CODE

Member: m_name - Name of function, including schema name

1.25 Class Sql_cmd_show_procedure_code

Command: SHOW PROCEDURE CODE

Member: m_name - Name of procedure, including schema name

1.26 Class Sql_cmd_show_grants

Command: SHOW GRANTS

Member: m_user - Name of user

1.27 Remaining SHOW commands

The following commands are implemented as SELECT statements, and will be 
converted later.

SHOW EVENTS
SHOW PROCEDURE STATUS
SHOW FUNCTION STATUS
SHOW STATUS
SHOW DATABASES
SHOW TABLES
SHOW TRIGGERS
SHOW TABLE STATUS
SHOW OPEN TABLES
SHOW PLUGINS
SHOW COLUMNS
SHOW INDEX (synonyms SHOW INDEXES, SHOW KEYS)
SHOW VARIABLES
SHOW CHARACTER SET
SHOW COLLATION
SHOW ENGINES
SHOW PROFILE

2. Support classes

These are additional classes used by show classes.

No classes are defined so far.

3. Documentation anomalies found

- SHOW SCHEDULER STATUS was mentioned in documentation, but not implemented.
- SHOW ENGINE ALL STATUS not documented (BUG#46833)
- SHOW ENGINE ALL MUTEX not documented. (BUG#46833)

4. Bugs found

- SHOW ENGINE resolves the engine name to a plugin reference and stores it in 
the LEX object. For a prepared statement, this means (probably) that a 
reference to the engine is kept as long as the prepared statement exists, 
effectivly preventing the engine from being uninstalled. Otherwise, the pointer 
may point to unallocated storage, causing a core dump if executed after the 
engine is uninstalled. (Needs verification).