@@ -738,6 +738,7 @@ class Field: public Value_source
738
738
{ return store (ls->str , ls->length , cs); }
739
739
virtual double val_real (void )=0;
740
740
virtual longlong val_int (void )=0;
741
+ virtual bool val_bool (void )= 0;
741
742
virtual my_decimal *val_decimal (my_decimal *);
742
743
inline String *val_str (String *str) { return val_str (str, str); }
743
744
/*
@@ -1491,6 +1492,7 @@ class Field_num :public Field {
1491
1492
bool eq_def (Field *field);
1492
1493
int store_decimal (const my_decimal *);
1493
1494
my_decimal *val_decimal (my_decimal *);
1495
+ bool val_bool () { return val_int () != 0 ; }
1494
1496
uint is_equal (Create_field *new_field);
1495
1497
uint row_pack_length () const { return pack_length (); }
1496
1498
uint32 pack_length_from_metadata (uint field_metadata) {
@@ -1537,6 +1539,7 @@ class Field_str :public Field {
1537
1539
uint32 max_display_length () { return field_length; }
1538
1540
friend class Create_field ;
1539
1541
my_decimal *val_decimal (my_decimal *);
1542
+ bool val_bool () { return val_real () != 0e0 ; }
1540
1543
virtual bool str_needs_quotes () { return TRUE ; }
1541
1544
uint is_equal (Create_field *new_field);
1542
1545
bool eq_cmp_as_binary () { return MY_TEST (flags & BINARY_FLAG); }
@@ -1609,6 +1612,7 @@ class Field_real :public Field_num {
1609
1612
int store_time_dec (MYSQL_TIME *ltime, uint dec);
1610
1613
bool get_date (MYSQL_TIME *ltime, ulonglong fuzzydate);
1611
1614
my_decimal *val_decimal (my_decimal *);
1615
+ bool val_bool () { return val_real () != 0e0 ; }
1612
1616
uint32 max_display_length () { return field_length; }
1613
1617
uint size_of () const { return sizeof (*this ); }
1614
1618
Item *get_equal_const_item (THD *thd, const Context &ctx, Item *const_item);
@@ -1684,6 +1688,12 @@ class Field_new_decimal :public Field_num {
1684
1688
my_decimal *val_decimal (my_decimal *);
1685
1689
String *val_str (String*, String *);
1686
1690
bool get_date (MYSQL_TIME *ltime, ulonglong fuzzydate);
1691
+ bool val_bool ()
1692
+ {
1693
+ my_decimal decimal_value;
1694
+ my_decimal *val= val_decimal (&decimal_value);
1695
+ return val ? !my_decimal_is_zero (val) : 0 ;
1696
+ }
1687
1697
int cmp (const uchar *, const uchar *);
1688
1698
void sort_string (uchar *buff, uint length);
1689
1699
bool zero_pack () const { return 0 ; }
@@ -2009,6 +2019,7 @@ class Field_null :public Field_str {
2009
2019
int reset (void ) { return 0 ; }
2010
2020
double val_real (void ) { return 0.0 ;}
2011
2021
longlong val_int (void ) { return 0 ;}
2022
+ bool val_bool (void ) { return false ; }
2012
2023
my_decimal *val_decimal (my_decimal *) { return 0 ; }
2013
2024
String *val_str (String *value,String *value2)
2014
2025
{ value2->length (0 ); return value2;}
@@ -2054,6 +2065,7 @@ class Field_temporal: public Field {
2054
2065
CHARSET_INFO *sort_charset (void ) const { return &my_charset_bin; }
2055
2066
bool binary () const { return true ; }
2056
2067
enum Item_result cmp_type () const { return TIME_RESULT; }
2068
+ bool val_bool () { return val_real () != 0e0 ; }
2057
2069
uint is_equal (Create_field *new_field);
2058
2070
bool eq_def (Field *field)
2059
2071
{
@@ -3267,6 +3279,7 @@ class Field_bit :public Field {
3267
3279
String *val_str (String*, String *);
3268
3280
virtual bool str_needs_quotes () { return TRUE ; }
3269
3281
my_decimal *val_decimal (my_decimal *);
3282
+ bool val_bool () { return val_int () != 0 ; }
3270
3283
int cmp (const uchar *a, const uchar *b)
3271
3284
{
3272
3285
DBUG_ASSERT (ptr == a || ptr == b);
0 commit comments