Drizzled Public API Documentation

min_max.h
00001 /* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
00002  *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
00003  *
00004  *  Copyright (C) 2008 Sun Microsystems, Inc.
00005  *
00006  *  This program is free software; you can redistribute it and/or modify
00007  *  it under the terms of the GNU General Public License as published by
00008  *  the Free Software Foundation; version 2 of the License.
00009  *
00010  *  This program is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  *  GNU General Public License for more details.
00014  *
00015  *  You should have received a copy of the GNU General Public License
00016  *  along with this program; if not, write to the Free Software
00017  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00018  */
00019 
00020 #pragma once
00021 
00022 #include <drizzled/function/func.h>
00023 
00024 namespace drizzled
00025 {
00026 
00027 class Item_func_min_max :public Item_func
00028 {
00029   Item_result cmp_type;
00030   String tmp_value;
00031   int cmp_sign;
00032   /* TRUE <=> arguments should be compared in the DATETIME context. */
00033   bool compare_as_dates;
00034   /* An item used for issuing warnings while string to DATETIME conversion. */
00035   Item *datetime_item;
00036   Session *session;
00037 protected:
00038   enum_field_types cached_field_type;
00039 public:
00040   Item_func_min_max(List<Item> &list,int cmp_sign_arg) :Item_func(list),
00041     cmp_type(INT_RESULT), cmp_sign(cmp_sign_arg), compare_as_dates(false),
00042     datetime_item(0) {}
00043   double val_real();
00044   int64_t val_int();
00045   String *val_str(String *);
00046   type::Decimal *val_decimal(type::Decimal *);
00047   void fix_length_and_dec();
00048   enum Item_result result_type () const { return cmp_type; }
00049   bool result_as_int64_t() { return compare_as_dates; };
00050   uint32_t cmp_datetimes(uint64_t *value);
00051   enum_field_types field_type() const { return cached_field_type; }
00052 };
00053 
00054 class Item_func_min :public Item_func_min_max
00055 {
00056 public:
00057   Item_func_min(List<Item> &list) :Item_func_min_max(list,1) {}
00058   const char *func_name() const { return "least"; }
00059 };
00060 
00061 class Item_func_max :public Item_func_min_max
00062 {
00063 public:
00064   Item_func_max(List<Item> &list) :Item_func_min_max(list,-1) {}
00065   const char *func_name() const { return "greatest"; }
00066 };
00067 
00068 } /* namespace drizzled */
00069