19
19
Multi-table deletes were introduced by Monty and Sinisa
22
#include "drizzled/sql_select.h"
23
#include "drizzled/error.h"
24
#include "drizzled/probes.h"
25
#include "drizzled/sql_parse.h"
26
#include "drizzled/sql_base.h"
27
#include "drizzled/lock.h"
28
#include "drizzled/probes.h"
29
#include "drizzled/optimizer/range.h"
30
#include "drizzled/records.h"
31
#include "drizzled/internal/iocache.h"
32
#include "drizzled/transaction_services.h"
33
#include "drizzled/filesort.h"
22
#include <drizzled/sql_select.h>
23
#include <drizzled/error.h>
24
#include <drizzled/probes.h>
25
#include <drizzled/sql_parse.h>
26
#include <drizzled/sql_base.h>
27
#include <drizzled/lock.h>
28
#include <drizzled/probes.h>
29
#include <drizzled/optimizer/range.h>
30
#include <drizzled/records.h>
31
#include <drizzled/internal/iocache.h>
32
#include <drizzled/transaction_services.h>
33
#include <drizzled/filesort.h>
34
#include <drizzled/sql_lex.h>
35
#include <drizzled/diagnostics_area.h>
36
#include <drizzled/statistics_variables.h>
37
#include <drizzled/session/transactions.h>
39
42
Implement DELETE SQL word.
56
59
bool const_cond_result;
57
60
ha_rows deleted= 0;
58
61
uint32_t usable_index= MAX_KEY;
59
Select_Lex *select_lex= &session->lex->select_lex;
62
Select_Lex *select_lex= &session->lex().select_lex;
60
63
Session::killed_state_t killed_status= Session::NOT_KILLED;
62
65
if (session->openTablesLock(table_list))
92
95
fields, all_fields, (Order*) order->first))
95
free_underlaid_joins(session, &session->lex->select_lex);
98
free_underlaid_joins(session, &session->lex().select_lex);
96
99
DRIZZLE_DELETE_DONE(1, 0);
180
183
* Resetting the Diagnostic area to prevent
183
session->main_da.reset_diagnostics_area();
186
session->main_da().reset_diagnostics_area();
184
187
session->my_ok((ha_rows) session->rowCount());
186
189
We don't need to call reset_auto_increment in this case, because
217
220
examined_rows)) == HA_POS_ERROR)
220
free_underlaid_joins(session, &session->lex->select_lex);
223
free_underlaid_joins(session, &session->lex().select_lex);
222
225
DRIZZLE_DELETE_DONE(1, 0);
339
342
free_underlaid_joins(session, select_lex);
341
344
DRIZZLE_DELETE_DONE((error >= 0 || session->is_error()), deleted);
342
if (error < 0 || (session->lex->ignore && !session->is_fatal_error))
345
if (error < 0 || (session->lex().ignore && !session->is_fatal_error))
344
347
session->row_count_func= deleted;
346
349
* Resetting the Diagnostic area to prevent
349
session->main_da.reset_diagnostics_area();
352
session->main_da().reset_diagnostics_area();
350
353
session->my_ok((ha_rows) session->rowCount());
352
355
session->status_var.deleted_row_count+= deleted;
371
374
int prepare_delete(Session *session, TableList *table_list, Item **conds)
373
Select_Lex *select_lex= &session->lex->select_lex;
376
Select_Lex *select_lex= &session->lex().select_lex;
375
378
List<Item> all_fields;
377
session->lex->allow_sum_func= 0;
378
if (setup_tables_and_check_access(session, &session->lex->select_lex.context,
379
&session->lex->select_lex.top_join_list,
380
session->lex().allow_sum_func= 0;
381
if (setup_tables_and_check_access(session, &session->lex().select_lex.context,
382
&session->lex().select_lex.top_join_list,
381
384
&select_lex->leaf_tables, false) ||
382
385
session->setup_conds(table_list, conds))
393
if (select_lex->inner_refs_list.elements &&
396
if (select_lex->inner_refs_list.size() &&
394
397
fix_inner_refs(session, all_fields, select_lex, select_lex->ref_pointer_array))
415
418
uint64_t save_options= session.options;
416
419
table_list->lock_type= TL_WRITE;
417
420
session.options&= ~(OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT);
418
init_select(session.lex);
421
init_select(&session.lex());
419
422
error= delete_query(&session, table_list, (COND*) 0, (SQL_LIST*) 0,
420
423
HA_POS_ERROR, 0L, true);