Drizzled Public API Documentation

min_max.h
1 /* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2  * vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3  *
4  * Copyright (C) 2008 Sun Microsystems, Inc.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; version 2 of the License.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  */
19 
20 #pragma once
21 
22 #include <drizzled/function/func.h>
23 
24 namespace drizzled
25 {
26 
28 {
29  Item_result cmp_type;
30  String tmp_value;
31  int cmp_sign;
32  /* TRUE <=> arguments should be compared in the DATETIME context. */
33  bool compare_as_dates;
34  /* An item used for issuing warnings while string to DATETIME conversion. */
35  Item *datetime_item;
36 protected:
37  enum_field_types cached_field_type;
38 public:
39  Item_func_min_max(List<Item> &list,int cmp_sign_arg) :Item_func(list),
40  cmp_type(INT_RESULT), cmp_sign(cmp_sign_arg), compare_as_dates(false),
41  datetime_item(0) {}
42  double val_real();
43  int64_t val_int();
44  String *val_str(String *);
46  void fix_length_and_dec();
47  enum Item_result result_type () const { return cmp_type; }
48  bool result_as_int64_t() { return compare_as_dates; };
49  uint32_t cmp_datetimes(uint64_t *value);
50  enum_field_types field_type() const { return cached_field_type; }
51 };
52 
54 {
55 public:
56  Item_func_min(List<Item> &list) :Item_func_min_max(list,1) {}
57  const char *func_name() const { return "least"; }
58 };
59 
61 {
62 public:
63  Item_func_max(List<Item> &list) :Item_func_min_max(list,-1) {}
64  const char *func_name() const { return "greatest"; }
65 };
66 
67 } /* namespace drizzled */
68