~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_delete.cc

  • Committer: Lee Bieber
  • Date: 2011-03-29 22:31:41 UTC
  • mfrom: (2257.1.3 build)
  • Revision ID: kalebral@gmail.com-20110329223141-yxc22h3l2he58sk0
Merge Andrew - 743842: Build failure using GCC 4.6
Merge Stewart - 738022: CachedDirectory silently fails to add entries if stat() fails
Merge Olaf - Common fwd: add copyright, add more declaration

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
  Multi-table deletes were introduced by Monty and Sinisa
20
20
*/
21
 
#include "config.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"
 
21
#include <config.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>
34
38
 
35
 
namespace drizzled
36
 
{
 
39
namespace drizzled {
37
40
 
38
41
/**
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;
61
64
 
62
65
  if (session->openTablesLock(table_list))
92
95
                    fields, all_fields, (Order*) order->first))
93
96
      {
94
97
        delete select;
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);
97
100
 
98
101
        return true;
101
104
 
102
105
  const_cond= (!conds || conds->const_item());
103
106
 
104
 
  select_lex->no_error= session->lex->ignore;
 
107
  select_lex->no_error= session->lex().ignore;
105
108
 
106
109
  const_cond_result= const_cond && (!conds || conds->val_int());
107
110
  if (session->is_error())
180
183
     * Resetting the Diagnostic area to prevent
181
184
     * lp bug# 439719
182
185
     */
183
 
    session->main_da.reset_diagnostics_area();
 
186
    session->main_da().reset_diagnostics_area();
184
187
    session->my_ok((ha_rows) session->rowCount());
185
188
    /*
186
189
      We don't need to call reset_auto_increment in this case, because
217
220
                                                    examined_rows)) == HA_POS_ERROR)
218
221
      {
219
222
        delete select;
220
 
        free_underlaid_joins(session, &session->lex->select_lex);
 
223
        free_underlaid_joins(session, &session->lex().select_lex);
221
224
 
222
225
        DRIZZLE_DELETE_DONE(1, 0);
223
226
        return true;
339
342
  free_underlaid_joins(session, select_lex);
340
343
 
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))
343
346
  {
344
347
    session->row_count_func= deleted;
345
348
    /**
346
349
     * Resetting the Diagnostic area to prevent
347
350
     * lp bug# 439719
348
351
     */
349
 
    session->main_da.reset_diagnostics_area();    
 
352
    session->main_da().reset_diagnostics_area();
350
353
    session->my_ok((ha_rows) session->rowCount());
351
354
  }
352
355
  session->status_var.deleted_row_count+= deleted;
370
373
*/
371
374
int prepare_delete(Session *session, TableList *table_list, Item **conds)
372
375
{
373
 
  Select_Lex *select_lex= &session->lex->select_lex;
 
376
  Select_Lex *select_lex= &session->lex().select_lex;
374
377
 
375
378
  List<Item> all_fields;
376
379
 
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,
380
383
                                    table_list,
381
384
                                    &select_lex->leaf_tables, false) ||
382
385
      session->setup_conds(table_list, conds))
390
393
    }
391
394
  }
392
395
 
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))
395
398
    return(true);
396
399
 
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);
421
424
  /*