summaryrefslogtreecommitdiff
path: root/sql/sql_parse.cc
diff options
context:
space:
mode:
authorSergey Petrunya <psergey@askmonty.org>2012-05-16 19:20:00 +0400
committerSergey Petrunya <psergey@askmonty.org>2012-05-16 19:20:00 +0400
commitdfbd777fd83d236cc559750048f0cabee87d93a0 (patch)
treefb6cb698aa6f12c54e5a3d67835b9112ea07291d /sql/sql_parse.cc
parentddd3e261b253856720bd9dc2343a655ecc297e81 (diff)
parent404a1565bfe02e3ce06843f6c5bf243503a2fe99 (diff)
downloadmariadb-git-dfbd777fd83d236cc559750048f0cabee87d93a0.tar.gz
MWL#182: SHOW EXPLAIN: Merge 5.3->5.5
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r--sql/sql_parse.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 70258629197..18db712d6cb 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -335,6 +335,7 @@ void init_update_queries(void)
sql_command_flags[SQLCOM_SHOW_ENGINE_STATUS]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_ENGINE_MUTEX]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_ENGINE_LOGS]= CF_STATUS_COMMAND;
+ sql_command_flags[SQLCOM_SHOW_EXPLAIN]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_PROCESSLIST]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_GRANTS]= CF_STATUS_COMMAND;
sql_command_flags[SQLCOM_SHOW_CREATE_DB]= CF_STATUS_COMMAND;
@@ -3127,6 +3128,32 @@ end_with_restore_list:
thd->security_ctx->priv_user),
lex->verbose);
break;
+ case SQLCOM_SHOW_EXPLAIN:
+ {
+ /* Same security as SHOW PROCESSLIST (TODO check this) */
+ if (!thd->security_ctx->priv_user[0] &&
+ check_global_access(thd,PROCESS_ACL))
+ break;
+
+ Item *it= (Item *)lex->value_list.head();
+
+ if (lex->table_or_sp_used())
+ {
+ my_error(ER_NOT_SUPPORTED_YET, MYF(0), "Usage of subqueries or stored "
+ "function calls as part of this statement");
+ break;
+ }
+
+ if ((!it->fixed && it->fix_fields(lex->thd, &it)) || it->check_cols(1))
+ {
+ my_message(ER_SET_CONSTANTS_ONLY, ER(ER_SET_CONSTANTS_ONLY),
+ MYF(0));
+ goto error;
+ }
+
+ mysqld_show_explain(thd, (ulong)it->val_int());
+ break;
+ }
case SQLCOM_SHOW_AUTHORS:
res= mysqld_show_authors(thd);
break;