summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2015-02-12 17:10:59 +0400
committerAlexander Barkov <bar@mariadb.org>2015-02-12 17:10:59 +0400
commit2043e3d44011ea3664698f880c79791f29fab45d (patch)
treecfc2717de38fb15ffc305970cef983b8df53052c
parent0ed60af42373976d7bf280f89ac408855c816def (diff)
downloadmariadb-git-2043e3d44011ea3664698f880c79791f29fab45d.tar.gz
Removing the Hybrid_type_traits framework. It's not used since 5.5.
-rw-r--r--sql/item.cc128
-rw-r--r--sql/item.h115
2 files changed, 0 insertions, 243 deletions
diff --git a/sql/item.cc b/sql/item.cc
index bee14ff484f..5bc127336bd 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -58,134 +58,6 @@ bool cmp_items(Item *a, Item *b)
return a->eq(b, FALSE);
}
-/****************************************************************************/
-
-/* Hybrid_type_traits {_real} */
-
-void Hybrid_type_traits::fix_length_and_dec(Item *item, Item *arg) const
-{
- item->decimals= NOT_FIXED_DEC;
- item->max_length= item->float_length(arg->decimals);
-}
-
-static const Hybrid_type_traits real_traits_instance;
-
-const Hybrid_type_traits *Hybrid_type_traits::instance()
-{
- return &real_traits_instance;
-}
-
-
-my_decimal *
-Hybrid_type_traits::val_decimal(Hybrid_type *val, my_decimal *to) const
-{
- double2my_decimal(E_DEC_FATAL_ERROR, val->real, val->dec_buf);
- return val->dec_buf;
-}
-
-
-String *
-Hybrid_type_traits::val_str(Hybrid_type *val, String *to, uint8 decimals) const
-{
- to->set_real(val->real, decimals, &my_charset_bin);
- return to;
-}
-
-/* Hybrid_type_traits_decimal */
-static const Hybrid_type_traits_decimal decimal_traits_instance;
-
-const Hybrid_type_traits_decimal *Hybrid_type_traits_decimal::instance()
-{
- return &decimal_traits_instance;
-}
-
-
-void
-Hybrid_type_traits_decimal::fix_length_and_dec(Item *item, Item *arg) const
-{
- item->decimals= arg->decimals;
- item->max_length= MY_MIN(arg->max_length + DECIMAL_LONGLONG_DIGITS,
- DECIMAL_MAX_STR_LENGTH);
-}
-
-
-void Hybrid_type_traits_decimal::set_zero(Hybrid_type *val) const
-{
- my_decimal_set_zero(&val->dec_buf[0]);
- val->used_dec_buf_no= 0;
-}
-
-
-void Hybrid_type_traits_decimal::add(Hybrid_type *val, Field *f) const
-{
- my_decimal_add(E_DEC_FATAL_ERROR,
- &val->dec_buf[val->used_dec_buf_no ^ 1],
- &val->dec_buf[val->used_dec_buf_no],
- f->val_decimal(&val->dec_buf[2]));
- val->used_dec_buf_no^= 1;
-}
-
-
-/**
- @todo
- what is '4' for scale?
-*/
-void Hybrid_type_traits_decimal::div(Hybrid_type *val, ulonglong u) const
-{
- int2my_decimal(E_DEC_FATAL_ERROR, u, TRUE, &val->dec_buf[2]);
- /* XXX: what is '4' for scale? */
- my_decimal_div(E_DEC_FATAL_ERROR,
- &val->dec_buf[val->used_dec_buf_no ^ 1],
- &val->dec_buf[val->used_dec_buf_no],
- &val->dec_buf[2], 4);
- val->used_dec_buf_no^= 1;
-}
-
-
-longlong
-Hybrid_type_traits_decimal::val_int(Hybrid_type *val, bool unsigned_flag) const
-{
- longlong result;
- my_decimal2int(E_DEC_FATAL_ERROR, &val->dec_buf[val->used_dec_buf_no],
- unsigned_flag, &result);
- return result;
-}
-
-
-double
-Hybrid_type_traits_decimal::val_real(Hybrid_type *val) const
-{
- my_decimal2double(E_DEC_FATAL_ERROR, &val->dec_buf[val->used_dec_buf_no],
- &val->real);
- return val->real;
-}
-
-
-String *
-Hybrid_type_traits_decimal::val_str(Hybrid_type *val, String *to,
- uint8 decimals) const
-{
- my_decimal_round(E_DEC_FATAL_ERROR, &val->dec_buf[val->used_dec_buf_no],
- decimals, FALSE, &val->dec_buf[2]);
- my_decimal2string(E_DEC_FATAL_ERROR, &val->dec_buf[2], 0, 0, 0, to);
- return to;
-}
-
-/* Hybrid_type_traits_integer */
-static const Hybrid_type_traits_integer integer_traits_instance;
-
-const Hybrid_type_traits_integer *Hybrid_type_traits_integer::instance()
-{
- return &integer_traits_instance;
-}
-
-void
-Hybrid_type_traits_integer::fix_length_and_dec(Item *item, Item *arg) const
-{
- item->decimals= 0;
- item->max_length= MY_INT64_NUM_DECIMAL_DIGITS;
- item->unsigned_flag= 0;
-}
/*****************************************************************************
** Item functions
diff --git a/sql/item.h b/sql/item.h
index ad16eab40f0..baa6bf51728 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -176,121 +176,6 @@ public:
}
};
-/*************************************************************************/
-/*
- A framework to easily handle different return types for hybrid items
- (hybrid item is an item whose operand can be of any type, e.g. integer,
- real, decimal).
-*/
-
-struct Hybrid_type_traits;
-
-struct Hybrid_type
-{
- longlong integer;
-
- double real;
- /*
- Use two decimal buffers interchangeably to speed up += operation
- which has no native support in decimal library.
- Hybrid_type+= arg is implemented as dec_buf[1]= dec_buf[0] + arg.
- The third decimal is used as a handy temporary storage.
- */
- my_decimal dec_buf[3];
- int used_dec_buf_no;
-
- /*
- Traits moved to a separate class to
- a) be able to easily change object traits in runtime
- b) they work as a differentiator for the union above
- */
- const Hybrid_type_traits *traits;
-
- Hybrid_type() {}
- /* XXX: add traits->copy() when needed */
- Hybrid_type(const Hybrid_type &rhs) :traits(rhs.traits) {}
-};
-
-
-/* Hybryd_type_traits interface + default implementation for REAL_RESULT */
-
-struct Hybrid_type_traits
-{
- virtual Item_result type() const { return REAL_RESULT; }
-
- virtual void
- fix_length_and_dec(Item *item, Item *arg) const;
-
- /* Hybrid_type operations. */
- virtual void set_zero(Hybrid_type *val) const { val->real= 0.0; }
- virtual void add(Hybrid_type *val, Field *f) const
- { val->real+= f->val_real(); }
- virtual void div(Hybrid_type *val, ulonglong u) const
- { val->real/= ulonglong2double(u); }
-
- virtual longlong val_int(Hybrid_type *val, bool unsigned_flag) const
- { return (longlong) rint(val->real); }
- virtual double val_real(Hybrid_type *val) const { return val->real; }
- virtual my_decimal *val_decimal(Hybrid_type *val, my_decimal *buf) const;
- virtual String *val_str(Hybrid_type *val, String *buf, uint8 decimals) const;
- static const Hybrid_type_traits *instance();
- Hybrid_type_traits() {}
- virtual ~Hybrid_type_traits() {}
-};
-
-
-struct Hybrid_type_traits_decimal: public Hybrid_type_traits
-{
- virtual Item_result type() const { return DECIMAL_RESULT; }
-
- virtual void
- fix_length_and_dec(Item *arg, Item *item) const;
-
- /* Hybrid_type operations. */
- virtual void set_zero(Hybrid_type *val) const;
- virtual void add(Hybrid_type *val, Field *f) const;
- virtual void div(Hybrid_type *val, ulonglong u) const;
-
- virtual longlong val_int(Hybrid_type *val, bool unsigned_flag) const;
- virtual double val_real(Hybrid_type *val) const;
- virtual my_decimal *val_decimal(Hybrid_type *val, my_decimal *buf) const
- { return &val->dec_buf[val->used_dec_buf_no]; }
- virtual String *val_str(Hybrid_type *val, String *buf, uint8 decimals) const;
- static const Hybrid_type_traits_decimal *instance();
- Hybrid_type_traits_decimal() {};
-};
-
-
-struct Hybrid_type_traits_integer: public Hybrid_type_traits
-{
- virtual Item_result type() const { return INT_RESULT; }
-
- virtual void
- fix_length_and_dec(Item *arg, Item *item) const;
-
- /* Hybrid_type operations. */
- virtual void set_zero(Hybrid_type *val) const
- { val->integer= 0; }
- virtual void add(Hybrid_type *val, Field *f) const
- { val->integer+= f->val_int(); }
- virtual void div(Hybrid_type *val, ulonglong u) const
- { val->integer/= (longlong) u; }
-
- virtual longlong val_int(Hybrid_type *val, bool unsigned_flag) const
- { return val->integer; }
- virtual double val_real(Hybrid_type *val) const
- { return (double) val->integer; }
- virtual my_decimal *val_decimal(Hybrid_type *val, my_decimal *buf) const
- {
- int2my_decimal(E_DEC_FATAL_ERROR, val->integer, 0, &val->dec_buf[2]);
- return &val->dec_buf[2];
- }
- virtual String *val_str(Hybrid_type *val, String *buf, uint8 decimals) const
- { buf->set(val->integer, &my_charset_bin); return buf;}
- static const Hybrid_type_traits_integer *instance();
- Hybrid_type_traits_integer() {};
-};
-
void dummy_error_processor(THD *thd, void *data);