~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/item/cmpfunc.h

  • Committer: Brian Aker
  • Date: 2011-02-12 06:13:32 UTC
  • mto: This revision was merged to the branch mainline in revision 2161.
  • Revision ID: brian@tangent.org-20110212061332-a5dtetim82r6vvls
Merge in session up and out of sql_select.h

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
/* compare and test functions */
24
24
 
25
 
#include <drizzled/common.h>
26
 
#include <drizzled/comp_creator.h>
27
 
#include <drizzled/function/math/int.h>
28
 
#include <drizzled/function/numhybrid.h>
29
 
#include <drizzled/item/decimal.h>
30
 
#include <drizzled/item/float.h>
31
 
#include <drizzled/item/function/boolean.h>
32
 
#include <drizzled/item/int.h>
33
 
#include <drizzled/item/row.h>
34
 
#include <drizzled/item/string.h>
35
 
#include <drizzled/item/sum.h>
36
 
#include <drizzled/qsort_cmp.h>
 
25
#include "drizzled/comp_creator.h"
 
26
#include "drizzled/item/row.h"
 
27
#include "drizzled/item/sum.h"
 
28
#include "drizzled/item/int.h"
 
29
#include "drizzled/item/float.h"
 
30
#include "drizzled/item/string.h"
 
31
#include "drizzled/item/decimal.h"
 
32
#include "drizzled/function/math/int.h"
 
33
#include "drizzled/function/numhybrid.h"
 
34
#include "drizzled/session.h"
 
35
#include "drizzled/common.h"
 
36
#include "drizzled/qsort_cmp.h"
 
37
#include "drizzled/item/function/boolean.h"
37
38
 
38
39
namespace drizzled
39
40
{
40
41
 
41
42
extern Item_result item_cmp_type(Item_result a,Item_result b);
42
 
 
43
43
class Item_bool_func2;
44
44
class Arg_comparator;
45
45
class Item_sum_hybrid;
46
46
class Item_row;
47
 
class Session;
48
47
 
49
48
typedef int (Arg_comparator::*arg_cmp_func)();
50
49
 
75
74
public:
76
75
  DTCollation cmp_collation;
77
76
 
78
 
  Arg_comparator();
 
77
  Arg_comparator():
 
78
    session(current_session),
 
79
    a_cache(0),
 
80
    b_cache(0)
 
81
  {};
79
82
 
80
 
  Arg_comparator(Item **a1, Item **a2);
 
83
  Arg_comparator(Item **a1, Item **a2):
 
84
    a(a1),
 
85
    b(a2),
 
86
    session(current_session),
 
87
    a_cache(0),
 
88
    b_cache(0)
 
89
  {};
81
90
 
82
91
  int set_compare_func(Item_bool_func2 *owner, Item_result type);
83
92
  inline int set_compare_func(Item_bool_func2 *owner_arg)
880
889
  /* Cache for the left item. */
881
890
  Item *lval_cache;
882
891
 
883
 
  in_datetime(Item *warn_item_arg, uint32_t elements);
884
 
 
 
892
  in_datetime(Item *warn_item_arg, uint32_t elements)
 
893
    :in_int64_t(elements), session(current_session), warn_item(warn_item_arg),
 
894
     lval_cache(0) {};
885
895
  void set(uint32_t pos,Item *item);
886
896
  unsigned char *get_value(Item *item);
887
897
  friend int cmp_int64_t(void *cmp_arg, packed_int64_t *a,packed_int64_t *b);
1042
1052
  /* Cache for the left item. */
1043
1053
  Item *lval_cache;
1044
1054
 
1045
 
  cmp_item_datetime(Item *warn_item_arg);
1046
 
 
 
1055
  cmp_item_datetime(Item *warn_item_arg)
 
1056
    :session(current_session), warn_item(warn_item_arg), lval_cache(0) {}
1047
1057
  void store_value(Item *item);
1048
1058
  int cmp(Item *arg);
1049
1059
  int compare(cmp_item *ci);
1540
1550
 
1541
1551
class Item_equal: public item::function::Boolean
1542
1552
{
 
1553
  List<Item_field> fields; /* list of equal field items                    */
 
1554
  Item *const_item;        /* optional constant item equal to fields items */
 
1555
  cmp_item *eval_item;
 
1556
  bool cond_false;
 
1557
 
1543
1558
public:
1544
 
  typedef List<Item_field> fields_t;
1545
 
 
1546
 
  Item_equal() :
 
1559
  inline Item_equal() :
 
1560
    item::function::Boolean(),
1547
1561
    const_item(0),
1548
1562
    eval_item(0),
1549
1563
    cond_false(0)
1551
1565
    const_item_cache=0;
1552
1566
  }
1553
1567
 
1554
 
  fields_t::iterator begin()
1555
 
  {
1556
 
    return fields.begin();
1557
 
  }
1558
 
 
1559
1568
  Item_equal(Item_field *f1, Item_field *f2);
1560
1569
  Item_equal(Item *c, Item_field *f);
1561
1570
  Item_equal(Item_equal *item_equal);
1581
1590
  virtual void print(String *str, enum_query_type query_type);
1582
1591
  const CHARSET_INFO *compare_collation()
1583
1592
  { return fields.head()->collation.collation; }
1584
 
private:
1585
 
  fields_t fields; /* list of equal field items                    */
1586
 
  Item *const_item;        /* optional constant item equal to fields items */
1587
 
  cmp_item *eval_item;
1588
 
  bool cond_false;
1589
 
 
1590
1593
};
1591
1594
 
1592
1595
class COND_EQUAL: public memory::SqlAlloc
1604
1607
};
1605
1608
 
1606
1609
 
1607
 
class Item_equal_iterator : public List<Item_field>::iterator
 
1610
class Item_equal_iterator : public List_iterator_fast<Item_field>
1608
1611
{
1609
1612
public:
1610
1613
  inline Item_equal_iterator(Item_equal &item_equal)
1611
 
    :List<Item_field>::iterator (item_equal.fields.begin() )
 
1614
    :List_iterator_fast<Item_field> (item_equal.fields)
1612
1615
  {}
1613
1616
  inline Item_field* operator++(int)
1614
1617
  {
1615
 
    Item_field *item= (*(List<Item_field>::iterator *) this)++;
 
1618
    Item_field *item= (*(List_iterator_fast<Item_field> *) this)++;
1616
1619
    return  item;
1617
1620
  }
 
1621
  inline void rewind(void)
 
1622
  {
 
1623
    List_iterator_fast<Item_field>::rewind();
 
1624
  }
1618
1625
};
1619
1626
 
1620
1627
class Item_cond_and :public Item_cond