00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022 #include <drizzled/show.h>
00023 #include <drizzled/session.h>
00024 #include <drizzled/lock.h>
00025 #include <drizzled/probes.h>
00026 #include <drizzled/statement/delete.h>
00027 #include <drizzled/sql_lex.h>
00028
00029 namespace drizzled
00030 {
00031
00032 bool statement::Delete::execute()
00033 {
00034 DRIZZLE_DELETE_START(session().getQueryString()->c_str());
00035 TableList *first_table= (TableList *) lex().select_lex.table_list.first;
00036 TableList *all_tables= lex().query_tables;
00037 Select_Lex *select_lex= &lex().select_lex;
00038 Select_Lex_Unit *unit= &lex().unit;
00039 assert(first_table == all_tables && first_table != 0);
00040 assert(select_lex->offset_limit == 0);
00041 unit->set_limit(select_lex);
00042 bool need_start_waiting= false;
00043
00044 if (! (need_start_waiting= not session().wait_if_global_read_lock(0, 1)))
00045 {
00046 return true;
00047 }
00048
00049 bool res= delete_query(&session(), all_tables, select_lex->where,
00050 &select_lex->order_list,
00051 unit->select_limit_cnt, select_lex->options,
00052 false);
00053
00054
00055
00056
00057 session().startWaitingGlobalReadLock();
00058
00059 return res;
00060 }
00061
00062 }