From 01c49e66b559d311725ff4c0d86592c3c9eaa58d Mon Sep 17 00:00:00 2001
From: Oleksandr Byelkin <sanja@mariadb.com>
Date: Thu, 2 Feb 2017 12:09:49 +0100
Subject: MDEV-11966: Impossible to execute prepared ANALYZE SELECT

Prepare os ANALYZE now respond as EXPLAIN.
---
 sql/sql_prepare.cc        |  2 +-
 tests/mysql_client_test.c | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index fd2592d8f5a..455d6b3cb86 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -1527,7 +1527,7 @@ static int mysql_test_select(Prepared_statement *stmt,
   */
   if (unit->prepare(thd, 0, 0))
     goto error;
-  if (!lex->describe && !stmt->is_sql_prepare())
+  if (!lex->describe && !thd->lex->analyze_stmt && !stmt->is_sql_prepare())
   {
     /* Make copy of item list, as change_columns may change it */
     List<Item> fields(lex->select_lex.item_list);
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index b63bcbaa037..350da29e67f 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -19479,6 +19479,25 @@ static void test_big_packet()
 }
 
 
+/* Test simple prepares of all DML statements */
+
+static void test_prepare_analyze()
+{
+  MYSQL_STMT *stmt;
+  int rc;
+  myheader("test_prepare_analyze");
+
+  stmt= mysql_stmt_init(mysql);
+  check_stmt(stmt);
+  rc= mysql_stmt_prepare(stmt, STRING_WITH_LEN("ANALYZE SELECT 1"));
+  check_execute(stmt, rc);
+  verify_param_count(stmt, 0);
+  rc= mysql_stmt_execute(stmt);
+  check_execute(stmt, rc);
+
+  mysql_stmt_close(stmt);
+}
+
 static struct my_tests_st my_tests[]= {
   { "disable_query_logs", disable_query_logs },
   { "test_view_sp_list_fields", test_view_sp_list_fields },
@@ -19755,6 +19774,7 @@ static struct my_tests_st my_tests[]= {
 #endif
   { "test_compressed_protocol", test_compressed_protocol },
   { "test_big_packet", test_big_packet },
+  { "test_prepare_analyze", test_prepare_analyze },
   { 0, 0 }
 };
 
-- 
cgit v1.2.1