~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_select.cc

updating

Show diffs side-by-side

added added

removed removed

Lines of Context:
53
53
#include <drizzled/internal/iocache.h>
54
54
#include <drizzled/drizzled.h>
55
55
#include <drizzled/plugin/storage_engine.h>
56
 
 
57
56
#include <drizzled/sql_union.h>
58
57
#include <drizzled/optimizer/key_field.h>
59
58
#include <drizzled/optimizer/position.h>
62
61
#include <drizzled/optimizer/range.h>
63
62
#include <drizzled/optimizer/quick_range_select.h>
64
63
#include <drizzled/optimizer/quick_ror_intersect_select.h>
65
 
 
66
64
#include <drizzled/filesort.h>
67
65
#include <drizzled/sql_lex.h>
68
66
#include <drizzled/session.h>
69
67
#include <drizzled/sort_field.h>
70
68
#include <drizzled/select_result.h>
 
69
#include <drizzled/key.h>
71
70
 
72
71
using namespace std;
73
72
 
74
 
namespace drizzled
75
 
{
 
73
namespace drizzled {
76
74
 
77
75
static int sort_keyuse(optimizer::KeyUse *a, optimizer::KeyUse *b);
78
76
static COND *build_equal_items(Session *session, COND *cond,
2181
2179
   }
2182
2180
  }
2183
2181
 
2184
 
  if (!cond && !eq_list.head())
 
2182
  if (!cond && !&eq_list.front())
2185
2183
  {
2186
2184
    if (!eq_item)
2187
2185
      return new Item_int((int64_t) 1,1);
2290
2288
  {
2291
2289
    item_equal= (Item_equal *) cond;
2292
2290
    item_equal->sort(&compare_fields_by_table_order, table_join_idx);
2293
 
    if (cond_equal && cond_equal->current_level.head() == item_equal)
 
2291
    if (cond_equal && &cond_equal->current_level.front() == item_equal)
2294
2292
      cond_equal= 0;
2295
2293
    return eliminate_item_equal(0, cond_equal, item_equal);
2296
2294
  }
2465
2463
      {
2466
2464
        li.remove();
2467
2465
        if (cnd->argument_list()->size() == 1)
2468
 
          return cnd->argument_list()->head();
 
2466
          return &cnd->argument_list()->front();
2469
2467
        return conds;
2470
2468
      }
2471
2469
    }
2768
2766
    if (((Item_cond*) cond)->argument_list()->size() == 1)
2769
2767
    {                                           
2770
2768
      /* Argument list contains only one element, so reduce it so a single item, then remove list */
2771
 
      item= ((Item_cond*) cond)->argument_list()->head();
 
2769
      item= &((Item_cond*) cond)->argument_list()->front();
2772
2770
      ((Item_cond*) cond)->argument_list()->clear();
2773
2771
      return item;
2774
2772
    }
4072
4070
        case 0:
4073
4071
          return (COND*) 0;                     // Always true
4074
4072
        case 1:
4075
 
          return new_cond->argument_list()->head();
 
4073
          return &new_cond->argument_list()->front();
4076
4074
        default:
4077
4075
          /*
4078
4076
            Item_cond_and do not need fix_fields for execution, its parameters