55
55
optimizer::SqlSelect *select= NULL;
57
57
bool using_limit=limit != HA_POS_ERROR;
58
bool transactional_table, const_cond;
59
bool const_cond_result;
60
58
ha_rows deleted= 0;
61
59
uint32_t usable_index= MAX_KEY;
62
60
Select_Lex *select_lex= &session->lex().select_lex;
90
88
tables.table = table;
91
89
tables.alias = table_list->alias;
93
if (select_lex->setup_ref_array(session, order->elements) ||
94
setup_order(session, select_lex->ref_pointer_array, &tables,
95
fields, all_fields, (Order*) order->first))
98
free_underlaid_joins(session, &session->lex().select_lex);
99
DRIZZLE_DELETE_DONE(1, 0);
91
select_lex->setup_ref_array(session, order->elements);
92
if (setup_order(session, select_lex->ref_pointer_array, &tables, fields, all_fields, (Order*) order->first))
95
free_underlaid_joins(session, &session->lex().select_lex);
96
DRIZZLE_DELETE_DONE(1, 0);
105
const_cond= (!conds || conds->const_item());
102
bool const_cond= not conds || conds->const_item();
107
104
select_lex->no_error= session->lex().ignore;
109
const_cond_result= const_cond && (!conds || conds->val_int());
106
bool const_cond_result= const_cond && (!conds || conds->val_int());
110
107
if (session->is_error())
112
109
/* Error evaluating val_int(). */
213
206
FileSort filesort(*session);
214
207
table->sort.io_cache= new internal::io_cache_st;
217
if (not (sortorder= make_unireg_sortorder((Order*) order->first, &length, NULL)) ||
218
(table->sort.found_records = filesort.run(table, sortorder, length,
219
select, HA_POS_ERROR, 1,
220
examined_rows)) == HA_POS_ERROR)
209
SortField* sortorder= make_unireg_sortorder((Order*) order->first, &length, NULL);
210
ha_rows examined_rows;
211
if ((table->sort.found_records= filesort.run(table, sortorder, length, select, HA_POS_ERROR, 1, examined_rows)) == HA_POS_ERROR)
223
214
free_underlaid_joins(session, &session->lex().select_lex);
330
transactional_table= table->cursor->has_transactions();
321
bool transactional_table= table->cursor->has_transactions();
332
323
if (!transactional_table && deleted > 0)
333
324
session->transaction.stmt.markModifiedNonTransData();
374
365
int prepare_delete(Session *session, TableList *table_list, Item **conds)
376
367
Select_Lex *select_lex= &session->lex().select_lex;
378
List<Item> all_fields;
380
368
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,
384
&select_lex->leaf_tables, false) ||
369
if (setup_tables_and_check_access(session, &session->lex().select_lex.context, &select_lex->top_join_list,
370
table_list, &select_lex->leaf_tables, false) ||
385
371
session->setup_conds(table_list, conds))
374
if (unique_table(table_list, table_list->next_global))
388
TableList *duplicate;
389
if ((duplicate= unique_table(table_list, table_list->next_global)))
391
my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->alias);
376
my_error(ER_UPDATE_TABLE_USED, MYF(0), table_list->alias);
396
if (select_lex->inner_refs_list.size() &&
397
fix_inner_refs(session, all_fields, select_lex, select_lex->ref_pointer_array))
379
List<Item> all_fields;
380
if (select_lex->inner_refs_list.size() && fix_inner_refs(session, all_fields, select_lex, select_lex->ref_pointer_array))
413
395
bool truncate(Session& session, TableList *table_list)
416
TransactionServices &transaction_services= TransactionServices::singleton();
418
397
uint64_t save_options= session.options;
419
398
table_list->lock_type= TL_WRITE;
420
399
session.options&= ~(OPTION_BEGIN | OPTION_NOT_AUTOCOMMIT);
421
400
init_select(&session.lex());
422
error= delete_query(&session, table_list, (COND*) 0, (SQL_LIST*) 0,
423
HA_POS_ERROR, 0L, true);
401
int error= delete_query(&session, table_list, (COND*) 0, (SQL_LIST*) 0, HA_POS_ERROR, 0L, true);
425
403
Safety, in case the engine ignored ha_enable_transaction(false)
426
404
above. Also clears session->transaction.*.
428
error= transaction_services.autocommitOrRollback(session, error);
406
error= TransactionServices::singleton().autocommitOrRollback(session, error);
429
407
session.options= save_options;