From 99fd8f728b9c96a5403346ef85004d8b490576e6 Mon Sep 17 00:00:00 2001 From: "serg@serg.mylan" <> Date: Wed, 14 Jun 2006 23:09:03 +0200 Subject: [PATCH] cleanup String::set(integer) --- sql/field.cc | 5 +---- sql/item.cc | 5 +---- sql/item_func.cc | 20 ++++---------------- sql/item_sum.cc | 5 +---- sql/sql_string.cc | 16 +++------------- sql/sql_string.h | 7 +++++-- 6 files changed, 15 insertions(+), 43 deletions(-) diff --git a/sql/field.cc b/sql/field.cc index 1f65adca2d5..b51e5b63779 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -7125,10 +7125,7 @@ int Field_blob::store(double nr) int Field_blob::store(longlong nr, bool unsigned_val) { CHARSET_INFO *cs=charset(); - if (unsigned_val) - value.set((ulonglong) nr, cs); - else - value.set(nr, cs); + value.set(nr, unsigned_val, cs); return Field_blob::store(value.ptr(), (uint) value.length(), cs); } diff --git a/sql/item.cc b/sql/item.cc index 5fa3ad61c15..cb5bbab53a2 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -212,10 +212,7 @@ String *Item::val_string_from_int(String *str) longlong nr= val_int(); if (null_value) return 0; - if (unsigned_flag) - str->set((ulonglong) nr, &my_charset_bin); - else - str->set(nr, &my_charset_bin); + str->set(nr, unsigned_flag, &my_charset_bin); return str; } diff --git a/sql/item_func.cc b/sql/item_func.cc index 051238843fa..5030c9729cd 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -556,10 +556,7 @@ String *Item_int_func::val_str(String *str) longlong nr=val_int(); if (null_value) return 0; - if (!unsigned_flag) - str->set(nr,&my_charset_bin); - else - str->set((ulonglong) nr,&my_charset_bin); + str->set(nr, unsigned_flag, &my_charset_bin); return str; } @@ -701,10 +698,7 @@ String *Item_func_numhybrid::val_str(String *str) longlong nr= int_op(); if (null_value) return 0; /* purecov: inspected */ - if (!unsigned_flag) - str->set(nr,&my_charset_bin); - else - str->set((ulonglong) nr,&my_charset_bin); + str->set(nr, unsigned_flag, &my_charset_bin); break; } case REAL_RESULT: @@ -2058,10 +2052,7 @@ String *Item_func_min_max::val_str(String *str) longlong nr=val_int(); if (null_value) return 0; - if (!unsigned_flag) - str->set(nr,&my_charset_bin); - else - str->set((ulonglong) nr,&my_charset_bin); + str->set(nr, unsigned_flag, &my_charset_bin); return str; } case DECIMAL_RESULT: @@ -2847,10 +2838,7 @@ String *Item_func_udf_int::val_str(String *str) longlong nr=val_int(); if (null_value) return 0; - if (!unsigned_flag) - str->set(nr,&my_charset_bin); - else - str->set((ulonglong) nr,&my_charset_bin); + str->set(nr, unsigned_flag, &my_charset_bin); return str; } diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 1285e842769..2479d181276 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -1584,10 +1584,7 @@ Item_sum_hybrid::val_str(String *str) my_decimal2string(E_DEC_FATAL_ERROR, &sum_dec, 0, 0, 0, str); return str; case INT_RESULT: - if (unsigned_flag) - str->set((ulonglong) sum_int, &my_charset_bin); - else - str->set((longlong) sum_int, &my_charset_bin); + str->set(sum_int, unsigned_flag, &my_charset_bin); break; case ROW_RESULT: default: diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 19ee9f259dc..39395ae2ca5 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -96,24 +96,14 @@ bool String::realloc(uint32 alloc_length) return FALSE; } -bool String::set(longlong num, CHARSET_INFO *cs) +bool String::set(longlong num, bool unsigned_flag, CHARSET_INFO *cs) { uint l=20*cs->mbmaxlen+1; + int base= unsigned_flag ? 10 : -10; if (alloc(l)) return TRUE; - str_length=(uint32) (cs->cset->longlong10_to_str)(cs,Ptr,l,-10,num); - str_charset=cs; - return FALSE; -} - -bool String::set(ulonglong num, CHARSET_INFO *cs) -{ - uint l=20*cs->mbmaxlen+1; - - if (alloc(l)) - return TRUE; - str_length=(uint32) (cs->cset->longlong10_to_str)(cs,Ptr,l,10,num); + str_length=(uint32) (cs->cset->longlong10_to_str)(cs,Ptr,l,base,num); str_charset=cs; return FALSE; } diff --git a/sql/sql_string.h b/sql/sql_string.h index ddae6368228..4e1d3a4837e 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -139,8 +139,11 @@ public: } str_charset=cs; } - bool set(longlong num, CHARSET_INFO *cs); - bool set(ulonglong num, CHARSET_INFO *cs); + bool set(longlong num, bool unsigned_flag, CHARSET_INFO *cs); + bool set(longlong num, CHARSET_INFO *cs) + { return set(num, false, cs); } + bool set(ulonglong num, CHARSET_INFO *cs) + { return set((longlong)num, true, cs); } bool set(double num,uint decimals, CHARSET_INFO *cs); /*