| 4989 | |
| 4990 | |
| 4991 | bool |
| 4992 | Prepared_statement::execute_server_runnable(Server_runnable *server_runnable) |
| 4993 | { |
| 4994 | Statement stmt_backup; |
| 4995 | bool error; |
| 4996 | Query_arena *save_stmt_arena= thd->stmt_arena; |
| 4997 | Reprepare_observer *save_reprepare_observer= thd->m_reprepare_observer; |
| 4998 | Item_change_list save_change_list; |
| 4999 | |
| 5000 | thd->Item_change_list::move_elements_to(&save_change_list); |
| 5001 | |
| 5002 | state= STMT_CONVENTIONAL_EXECUTION; |
| 5003 | |
| 5004 | if (!(lex= new (mem_root) st_lex_local)) |
| 5005 | return TRUE; |
| 5006 | |
| 5007 | thd->set_n_backup_statement(this, &stmt_backup); |
| 5008 | thd->set_n_backup_active_arena(this, &stmt_backup); |
| 5009 | |
| 5010 | thd->stmt_arena= this; |
| 5011 | thd->m_reprepare_observer= 0; |
| 5012 | |
| 5013 | error= server_runnable->execute_server_code(thd); |
| 5014 | |
| 5015 | thd->cleanup_after_query(); |
| 5016 | |
| 5017 | thd->m_reprepare_observer= save_reprepare_observer; |
| 5018 | thd->restore_active_arena(this, &stmt_backup); |
| 5019 | thd->restore_backup_statement(this, &stmt_backup); |
| 5020 | thd->stmt_arena= save_stmt_arena; |
| 5021 | |
| 5022 | save_change_list.move_elements_to(thd); |
| 5023 | |
| 5024 | /* Items and memory will freed in destructor */ |
| 5025 | |
| 5026 | return error; |
| 5027 | } |
| 5028 | |
| 5029 | |
| 5030 | /** |
no test coverage detected