~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/item/cmpfunc.h

  • Committer: Monty Taylor
  • Date: 2008-12-11 02:44:41 UTC
  • mto: This revision was merged to the branch mainline in revision 672.
  • Revision ID: monty@inaugust.com-20081211024441-5dsauvxl7mo7r1hb
Fix for the weird solaris gettext bug.

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/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/decimal.h"
31
 
#include "drizzled/function/math/int.h"
32
 
#include "drizzled/function/numhybrid.h"
33
 
#include "drizzled/session.h"
34
 
#include "drizzled/common.h"
35
 
#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/functions/int.h>
 
29
#include <drizzled/functions/numhybrid.h>
 
30
#include <drizzled/session.h>
36
31
 
37
 
namespace drizzled
38
 
{
39
32
 
40
33
extern Item_result item_cmp_type(Item_result a,Item_result b);
41
34
class Item_bool_func2;
47
40
 
48
41
typedef int (*Item_field_cmpfunc)(Item_field *f1, Item_field *f2, void *arg);
49
42
 
50
 
uint64_t get_datetime_value(Session *session, 
51
 
                            Item ***item_arg, 
52
 
                            Item **cache_arg,
53
 
                            Item *warn_item, 
54
 
                            bool *is_null);
55
 
 
56
 
class Arg_comparator: public memory::SqlAlloc
 
43
class Arg_comparator: public Sql_alloc
57
44
{
58
45
  Item **a, **b;
59
46
  arg_cmp_func func;
704
691
  enum_field_types field_type() const;
705
692
  void fix_length_and_dec();
706
693
  const char *func_name() const { return "ifnull"; }
707
 
  Field *tmp_table_field()
708
 
  {
709
 
    return Item_func::tmp_table_field();
710
 
  }
711
694
  Field *tmp_table_field(Table *table);
712
695
  uint32_t decimal_precision() const;
713
696
};
765
748
 
766
749
/* A vector of values of some type  */
767
750
 
768
 
class in_vector :public memory::SqlAlloc
 
751
class in_vector :public Sql_alloc
769
752
{
770
753
public:
771
754
  char *base;
777
760
  in_vector() {}
778
761
  in_vector(uint32_t elements,uint32_t element_length,qsort2_cmp cmp_func,
779
762
            const CHARSET_INFO * const cmp_coll)
780
 
    :base((char*) memory::sql_calloc(elements*element_length)),
 
763
    :base((char*) sql_calloc(elements*element_length)),
781
764
     size(element_length), compare(cmp_func), collation(cmp_coll),
782
765
     count(elements), used_count(elements) {}
783
766
  virtual ~in_vector() {}
784
767
  virtual void set(uint32_t pos,Item *item)=0;
785
768
  virtual unsigned char *get_value(Item *item)=0;
786
 
  void sort();
 
769
  void sort()
 
770
  {
 
771
    my_qsort2(base,used_count,size,compare, (void *) collation);
 
772
  }
787
773
  int find(Item *item);
788
774
 
789
775
  /*
943
929
** Classes for easy comparing of non const items
944
930
*/
945
931
 
946
 
class cmp_item :public memory::SqlAlloc
 
932
class cmp_item :public Sql_alloc
947
933
{
948
934
public:
949
935
  const CHARSET_INFO *cmp_charset;
1238
1224
    Item_int_func::cleanup();
1239
1225
    delete array;
1240
1226
    array= 0;
1241
 
    for (i= 0; i <= (uint32_t)DECIMAL_RESULT + 1; i++)
 
1227
    for (i= 0; i <= (uint)DECIMAL_RESULT + 1; i++)
1242
1228
    {
1243
1229
      delete cmp_items[i];
1244
1230
      cmp_items[i]= 0;
1396
1382
 
1397
1383
  bool escape_used_in_parsing;
1398
1384
 
1399
 
 
1400
1385
public:
1401
 
 
1402
 
  char *escape;
 
1386
  int escape;
1403
1387
 
1404
1388
  Item_func_like(Item *a,Item *b, Item *escape_arg, bool escape_used)
1405
1389
    :Item_bool_func2(a,b), canDoTurboBM(false), pattern(0), pattern_len(0),
1406
1390
     bmGs(0), bmBc(0), escape_item(escape_arg),
1407
 
     escape_used_in_parsing(escape_used), escape(NULL) {}
 
1391
     escape_used_in_parsing(escape_used) {}
1408
1392
  int64_t val_int();
1409
1393
  enum Functype functype() const { return LIKE_FUNC; }
1410
1394
  optimize_type select_optimize() const;
1425
1409
  table_map and_tables_cache;
1426
1410
 
1427
1411
public:
1428
 
 
1429
 
  using Item::split_sum_func;
1430
 
 
1431
1412
  /* Item_cond() is only used to create top level items */
1432
1413
  Item_cond(): Item_bool_func(), abort_on_null(1)
1433
1414
  { const_item_cache=0; }
1444
1425
  bool add_at_head(Item *item) { return list.push_front(item); }
1445
1426
  void add_at_head(List<Item> *nlist) { list.prepand(nlist); }
1446
1427
  bool fix_fields(Session *, Item **ref);
1447
 
  void fix_after_pullout(Select_Lex *new_parent, Item **ref);
 
1428
  void fix_after_pullout(st_select_lex *new_parent, Item **ref);
1448
1429
 
1449
1430
  enum Type type() const { return COND_ITEM; }
1450
1431
  List<Item>* argument_list() { return &list; }
1580
1561
  { return fields.head()->collation.collation; }
1581
1562
};
1582
1563
 
1583
 
class COND_EQUAL: public memory::SqlAlloc
 
1564
class COND_EQUAL: public Sql_alloc
1584
1565
{
1585
1566
public:
1586
1567
  uint32_t max_members;               /* max number of members the current level
1694
1675
  void top_level_item() {}
1695
1676
};
1696
1677
 
1697
 
enum_field_types agg_field_type(Item **items, uint32_t nitems);
1698
 
 
1699
1678
 
1700
1679
/* Some useful inline functions */
1701
1680
 
1708
1687
 
1709
1688
Item *and_expressions(Item *a, Item *b, Item **org_item);
1710
1689
 
1711
 
} /* namespace drizzled */
1712
 
 
1713
1690
#endif /* DRIZZLED_ITEM_CMPFUNC_H */