diff options
author | unknown <konstantin@mysql.com> | 2003-12-10 17:30:37 +0300 |
---|---|---|
committer | unknown <konstantin@mysql.com> | 2003-12-10 17:30:37 +0300 |
commit | f195cf9d1455f05bd6e6b1e0225f1062dc28d9f7 (patch) | |
tree | 0902a94e5ddab6700bd2269d5af63e9a7875179b /sql | |
parent | 4c00978b43921525d59f52da1ad13b516da16f1e (diff) | |
download | mariadb-git-f195cf9d1455f05bd6e6b1e0225f1062dc28d9f7.tar.gz |
fix for bug #1993 'bit functions do not return unsigned values'
introduced base class Item_func_bit for bit functions
mysql-test/r/func_op.result:
test results for bug #1993 'bit functions do not return unsigned values'
mysql-test/t/func_op.test:
added tests for bug #1993 'bit functions do not return unsigned values'
Diffstat (limited to 'sql')
-rw-r--r-- | sql/item_func.h | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/sql/item_func.h b/sql/item_func.h index 09aba9694dd..4d171cda490 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -642,23 +642,30 @@ public: unsigned int size_of() { return sizeof(*this);} }; +/* Base class for all bit functions: '~', '|', '^', '&', '>>', '<<' */ -class Item_func_bit_or :public Item_int_func +class Item_func_bit: public Item_int_func { public: - Item_func_bit_or(Item *a,Item *b) :Item_int_func(a,b) {} + Item_func_bit(Item *a, Item *b) :Item_int_func(a, b) {} + Item_func_bit(Item *a) :Item_int_func(a) {} + void fix_length_and_dec() { unsigned_flag= 1; } +}; + +class Item_func_bit_or :public Item_func_bit +{ +public: + Item_func_bit_or(Item *a, Item *b) :Item_func_bit(a, b) {} longlong val_int(); const char *func_name() const { return "|"; } - void fix_length_and_dec() { unsigned_flag=1; } }; -class Item_func_bit_and :public Item_int_func +class Item_func_bit_and :public Item_func_bit { public: - Item_func_bit_and(Item *a,Item *b) :Item_int_func(a,b) {} + Item_func_bit_and(Item *a, Item *b) :Item_func_bit(a, b) {} longlong val_int(); const char *func_name() const { return "&"; } - void fix_length_and_dec() { unsigned_flag=1; } }; class Item_func_bit_count :public Item_int_func @@ -670,30 +677,28 @@ public: void fix_length_and_dec() { max_length=2; } }; -class Item_func_shift_left :public Item_int_func +class Item_func_shift_left :public Item_func_bit { public: - Item_func_shift_left(Item *a,Item *b) :Item_int_func(a,b) {} + Item_func_shift_left(Item *a, Item *b) :Item_func_bit(a, b) {} longlong val_int(); const char *func_name() const { return "<<"; } - void fix_length_and_dec() { unsigned_flag=1; } }; -class Item_func_shift_right :public Item_int_func +class Item_func_shift_right :public Item_func_bit { public: - Item_func_shift_right(Item *a,Item *b) :Item_int_func(a,b) {} + Item_func_shift_right(Item *a, Item *b) :Item_func_bit(a, b) {} longlong val_int(); const char *func_name() const { return ">>"; } }; -class Item_func_bit_neg :public Item_int_func +class Item_func_bit_neg :public Item_func_bit { public: - Item_func_bit_neg(Item *a) :Item_int_func(a) {} + Item_func_bit_neg(Item *a) :Item_func_bit(a) {} longlong val_int(); const char *func_name() const { return "~"; } - void fix_length_and_dec() { unsigned_flag=1; } }; class Item_func_set_last_insert_id :public Item_int_func @@ -1018,13 +1023,12 @@ enum Item_cast Item *create_func_cast(Item *a, Item_cast cast_type); -class Item_func_bit_xor : public Item_int_func +class Item_func_bit_xor : public Item_func_bit { public: - Item_func_bit_xor(Item *a,Item *b) :Item_int_func(a,b) {} + Item_func_bit_xor(Item *a, Item *b) :Item_func_bit(a, b) {} longlong val_int(); const char *func_name() const { return "^"; } - void fix_length_xor_dec() { unsigned_flag=1; } }; class Item_func_is_free_lock :public Item_int_func |