MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
sql_do.cc
1 /* Copyright (c) 2001, 2011, Oracle and/or its affiliates. All rights reserved.
2 
3  This program is free software; you can redistribute it and/or modify
4  it under the terms of the GNU General Public License as published by
5  the Free Software Foundation; version 2 of the License.
6 
7  This program is distributed in the hope that it will be useful,
8  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  GNU General Public License for more details.
11 
12  You should have received a copy of the GNU General Public License
13  along with this program; if not, write to the Free Software Foundation,
14  51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
15 
16 
17 /* Execute DO statement */
18 
19 #include "sql_priv.h"
20 #include "transaction.h"
21 #include "unireg.h"
22 #include "sql_do.h"
23 #include "sql_base.h" // setup_fields
24 #include "sql_select.h" // free_underlaid_joins
25 
26 bool mysql_do(THD *thd, List<Item> &values)
27 {
28  List_iterator<Item> li(values);
29  Item *value;
30  DBUG_ENTER("mysql_do");
31  if (setup_fields(thd, Ref_ptr_array(), values, MARK_COLUMNS_NONE, 0, 0))
32  DBUG_RETURN(TRUE);
33  while ((value = li++))
34  value->val_int();
35  free_underlaid_joins(thd, &thd->lex->select_lex);
36 
37  if (thd->is_error())
38  {
39  /*
40  Rollback the effect of the statement, since next instruction
41  will clear the error and the rollback in the end of
42  mysql_execute_command() won't work.
43  */
44  if (! thd->in_sub_stmt)
45  trans_rollback_stmt(thd);
46  thd->clear_error(); // DO always is OK
47  }
48  my_ok(thd);
49  DBUG_RETURN(FALSE);
50 }