From 85f35cbf574eac4bbc0f5dda0416da33da086cd0 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 30 Oct 2002 16:19:43 +0400 Subject: All String->set() now have charset argument --- sql/field.cc | 10 ++++------ sql/item.cc | 14 +++++++------- sql/item_func.cc | 34 +++++++++++++++++----------------- sql/item_strfunc.cc | 2 +- sql/item_subselect.cc | 2 +- sql/item_sum.cc | 16 ++++++++-------- sql/item_timefunc.h | 11 +++++++++-- sql/mysql_priv.h | 2 ++ sql/procedure.h | 8 ++++---- sql/sql_analyse.cc | 6 +++--- sql/sql_analyse.h | 48 ++++++++++++++++++++++++++++-------------------- sql/sql_string.cc | 10 +++++++--- sql/sql_string.h | 7 +++---- 13 files changed, 94 insertions(+), 76 deletions(-) (limited to 'sql') diff --git a/sql/field.cc b/sql/field.cc index 8f61e053d27..374b62f5191 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4316,17 +4316,15 @@ int Field_blob::store(const char *from,uint len,CHARSET_INFO *cs) int Field_blob::store(double nr) { - value.set(nr); - return Field_blob::store(value.ptr(),(uint) value.length(), - default_charset_info); + value.set(nr,2,my_thd_charset); + return Field_blob::store(value.ptr(),(uint) value.length(), value.charset()); } int Field_blob::store(longlong nr) { - value.set(nr); - return Field_blob::store(value.ptr(), (uint) value.length(), - default_charset_info); + value.set(nr,my_thd_charset); + return Field_blob::store(value.ptr(), (uint) value.length(), value.charset()); } diff --git a/sql/item.cc b/sql/item.cc index 58564fa2e0c..7673aaf097e 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -234,7 +234,7 @@ table_map Item_field::used_tables() const String *Item_int::val_str(String *str) { - str->set(value); + str->set(value, my_thd_charset); return str; } @@ -242,7 +242,7 @@ void Item_int::print(String *str) { if (!name) { - str_value.set(value); + str_value.set(value, my_thd_charset); name=str_value.c_ptr(); } str->append(name); @@ -250,7 +250,7 @@ void Item_int::print(String *str) String *Item_uint::val_str(String *str) { - str->set((ulonglong) value); + str->set((ulonglong) value, my_thd_charset); return str; } @@ -258,7 +258,7 @@ void Item_uint::print(String *str) { if (!name) { - str_value.set((ulonglong) value); + str_value.set((ulonglong) value, my_thd_charset); name=str_value.c_ptr(); } str->append(name); @@ -267,7 +267,7 @@ void Item_uint::print(String *str) String *Item_real::val_str(String *str) { - str->set(value,decimals); + str->set(value,decimals,my_thd_charset); return str; } @@ -384,10 +384,10 @@ String *Item_param::val_str(String* str) { switch (item_result_type) { case INT_RESULT: - str->set(int_value); + str->set(int_value, my_thd_charset); return str; case REAL_RESULT: - str->set(real_value); + str->set(real_value, 2, my_thd_charset); return str; default: return (String*) &str_value; diff --git a/sql/item_func.cc b/sql/item_func.cc index 6fce3df683a..c03e77821f1 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -245,7 +245,7 @@ String *Item_real_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); return str; } @@ -258,9 +258,9 @@ String *Item_num_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else if (!unsigned_flag) - str->set(nr); + str->set(nr,my_thd_charset); else - str->set((ulonglong) nr); + str->set((ulonglong) nr,my_thd_charset); } else { @@ -268,7 +268,7 @@ String *Item_num_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); } return str; } @@ -288,9 +288,9 @@ String *Item_int_func::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr); + str->set(nr,my_thd_charset); else - str->set((ulonglong) nr); + str->set((ulonglong) nr,my_thd_charset); return str; } @@ -317,9 +317,9 @@ String *Item_num_op::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else if (!unsigned_flag) - str->set(nr); + str->set(nr,my_thd_charset); else - str->set((ulonglong) nr); + str->set((ulonglong) nr,my_thd_charset); } else { @@ -327,7 +327,7 @@ String *Item_num_op::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); } return str; } @@ -815,9 +815,9 @@ String *Item_func_min_max::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr); + str->set(nr,my_thd_charset); else - str->set((ulonglong) nr); + str->set((ulonglong) nr,my_thd_charset); return str; } case REAL_RESULT: @@ -826,7 +826,7 @@ String *Item_func_min_max::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); return str; } case STRING_RESULT: @@ -1449,7 +1449,7 @@ String *Item_func_udf_float::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); return str; } @@ -1470,9 +1470,9 @@ String *Item_func_udf_int::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr); + str->set(nr,my_thd_charset); else - str->set((ulonglong) nr); + str->set((ulonglong) nr,my_thd_charset); return str; } @@ -2036,10 +2036,10 @@ Item_func_get_user_var::val_str(String *str) return NULL; switch (entry->type) { case REAL_RESULT: - str->set(*(double*) entry->value,decimals); + str->set(*(double*) entry->value,decimals,my_thd_charset); break; case INT_RESULT: - str->set(*(longlong*) entry->value); + str->set(*(longlong*) entry->value,my_thd_charset); break; case STRING_RESULT: if (str->copy(entry->value, entry->length-1)) diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc index c744e5ed77a..20b01c9f1e8 100644 --- a/sql/item_strfunc.cc +++ b/sql/item_strfunc.cc @@ -1469,7 +1469,7 @@ String *Item_func_format::val_str(String *str) if ((null_value=args[0]->null_value)) return 0; /* purecov: inspected */ dec= decimals ? decimals+1 : 0; - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); str_length=str->length(); if (nr < 0) str_length--; // Don't count sign diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc index 456ce5f22ba..82310710a9d 100644 --- a/sql/item_subselect.cc +++ b/sql/item_subselect.cc @@ -200,7 +200,7 @@ String *Item_exists_subselect::val_str(String *str) assign_null(); return 0; } - str->set(value); + str->set(value,my_thd_charset); return str; } diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 46e6b146380..ae1a86845bf 100644 --- a/sql/item_sum.cc +++ b/sql/item_sum.cc @@ -93,7 +93,7 @@ Item_sum_num::val_str(String *str) double nr=val(); if (null_value) return 0; - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); return str; } @@ -359,13 +359,13 @@ Item_sum_hybrid::val_str(String *str) case STRING_RESULT: return &value; case REAL_RESULT: - str->set(sum,decimals); + str->set(sum,decimals,my_thd_charset); break; case INT_RESULT: if (unsigned_flag) - str->set((ulonglong) sum_int); + str->set((ulonglong) sum_int,my_thd_charset); else - str->set((longlong) sum_int); + str->set((longlong) sum_int,my_thd_charset); break; } return str; // Keep compiler happy @@ -810,7 +810,7 @@ String *Item_avg_field::val_str(String *str) double nr=Item_avg_field::val(); if (null_value) return 0; - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); return str; } @@ -847,7 +847,7 @@ String *Item_std_field::val_str(String *str) double nr=val(); if (null_value) return 0; - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); return str; } @@ -1174,7 +1174,7 @@ String *Item_sum_udf_float::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals); + str->set(nr,decimals,my_thd_charset); return str; } @@ -1193,7 +1193,7 @@ String *Item_sum_udf_int::val_str(String *str) if (null_value) return 0; else - str->set(nr); + str->set(nr,my_thd_charset); return str; } diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index 94e8e6eba43..66c9a1a4438 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -67,7 +67,11 @@ public: Item_func_month(Item *a) :Item_func(a) {} longlong val_int(); double val() { return (double) Item_func_month::val_int(); } - String *val_str(String *str) { str->set(val_int()); return null_value ? 0 : str;} + String *val_str(String *str) + { + str->set(val_int(), my_thd_charset); + return null_value ? 0 : str; + } const char *func_name() const { return "month"; } enum Item_result result_type () const { return INT_RESULT; } void fix_length_and_dec() { decimals=0; max_length=2; maybe_null=1; } @@ -172,7 +176,10 @@ public: :Item_func(a), odbc_type(type_arg) {} longlong val_int(); double val() { return (double) val_int(); } - String *val_str(String *str) { str->set(val_int()); return null_value ? 0 : str;} + String *val_str(String *str) { + str->set(val_int(), my_thd_charset); + return null_value ? 0 : str; + } const char *func_name() const { return "weekday"; } enum Item_result result_type () const { return INT_RESULT; } void fix_length_and_dec() { decimals=0; max_length=1; maybe_null=1; } diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index f261c9f4632..b7dc51755fb 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -61,6 +61,8 @@ char* query_table_status(THD *thd,const char *db,const char *table_name); #endif #endif +#define my_thd_charset default_charset_info + /*************************************************************************** Configuration parameters ****************************************************************************/ diff --git a/sql/procedure.h b/sql/procedure.h index 349908a8d84..3792d823b12 100644 --- a/sql/procedure.h +++ b/sql/procedure.h @@ -62,7 +62,7 @@ public: { value=atof(str); } double val() { return value; } longlong val_int() { return (longlong) value; } - String *val_str(String *s) { s->set(value,decimals); return s; } + String *val_str(String *s) { s->set(value,decimals,my_thd_charset); return s; } unsigned int size_of() { return sizeof(*this);} }; @@ -80,7 +80,7 @@ public: { value=strtoll(str,NULL,10); } double val() { return (double) value; } longlong val_int() { return value; } - String *val_str(String *s) { s->set(value); return s; } + String *val_str(String *s) { s->set(value, my_thd_charset); return s; } unsigned int size_of() { return sizeof(*this);} }; @@ -92,8 +92,8 @@ public: { this->max_length=length; } enum Item_result result_type () const { return STRING_RESULT; } enum_field_types field_type() const { return FIELD_TYPE_STRING; } - void set(double nr) { str_value.set(nr); } - void set(longlong nr) { str_value.set(nr); } + void set(double nr) { str_value.set(nr, 2, my_thd_charset); } + void set(longlong nr) { str_value.set(nr, my_thd_charset); } void set(const char *str, uint length) { str_value.copy(str,length); } double val() { return atof(str_value.ptr()); } longlong val_int() { return strtoll(str_value.ptr(),NULL,10); } diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index deb1e2821c1..d1ecdd029d5 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -903,7 +903,7 @@ int collect_real(double *element, element_count count __attribute__((unused)), else info->found = 1; info->str->append('\''); - s.set(*element, info->item->decimals); + s.set(*element, info->item->decimals, my_thd_charset); info->str->append(s); info->str->append('\''); return 0; @@ -922,7 +922,7 @@ int collect_longlong(longlong *element, else info->found = 1; info->str->append('\''); - s.set(*element); + s.set(*element,default_charset_info); info->str->append(s); info->str->append('\''); return 0; @@ -941,7 +941,7 @@ int collect_ulonglong(ulonglong *element, else info->found = 1; info->str->append('\''); - s.set(*element); + s.set(*element,default_charset_info); info->str->append(s); info->str->append('\''); return 0; diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h index 403ddbe6fee..ada46374a15 100644 --- a/sql/sql_analyse.h +++ b/sql/sql_analyse.h @@ -128,10 +128,10 @@ public: String *avg(String *s, ha_rows rows) { if (!(rows - nulls)) - s->set((double) 0.0, 1); + s->set((double) 0.0, 1,my_thd_charset); else s->set((ulonglong2double(sum) / ulonglong2double(rows - nulls)), - DEC_IN_AVG); + DEC_IN_AVG,my_thd_charset); return s; } friend int collect_string(String *element, element_count count, @@ -160,26 +160,34 @@ public: void add(); void get_opt_type(String*, ha_rows); - String *get_min_arg(String *s) { s->set(min_arg, item->decimals); return s; } - String *get_max_arg(String *s) { s->set(max_arg, item->decimals); return s; } + String *get_min_arg(String *s) + { + s->set(min_arg, item->decimals,my_thd_charset); + return s; + } + String *get_max_arg(String *s) + { + s->set(max_arg, item->decimals,my_thd_charset); + return s; + } String *avg(String *s, ha_rows rows) { if (!(rows - nulls)) - s->set((double) 0.0, 1); + s->set((double) 0.0, 1,my_thd_charset); else - s->set(((double)sum / (double) (rows - nulls)), item->decimals); + s->set(((double)sum / (double) (rows - nulls)), item->decimals,my_thd_charset); return s; } String *std(String *s, ha_rows rows) { double tmp = ulonglong2double(rows); if (!(tmp - nulls)) - s->set((double) 0.0, 1); + s->set((double) 0.0, 1,my_thd_charset); else { double tmp2 = ((sum_sqr - sum * sum / (tmp - nulls)) / (tmp - nulls)); - s->set(((double) tmp2 <= 0.0 ? 0.0 : sqrt(tmp2)), item->decimals); + s->set(((double) tmp2 <= 0.0 ? 0.0 : sqrt(tmp2)), item->decimals,my_thd_charset); } return s; } @@ -206,26 +214,26 @@ public: void add(); void get_opt_type(String*, ha_rows); - String *get_min_arg(String *s) { s->set(min_arg); return s; } - String *get_max_arg(String *s) { s->set(max_arg); return s; } + String *get_min_arg(String *s) { s->set(min_arg,my_thd_charset); return s; } + String *get_max_arg(String *s) { s->set(max_arg,my_thd_charset); return s; } String *avg(String *s, ha_rows rows) { if (!(rows - nulls)) - s->set((double) 0.0, 1); + s->set((double) 0.0, 1,my_thd_charset); else - s->set(((double) sum / (double) (rows - nulls)), DEC_IN_AVG); + s->set(((double) sum / (double) (rows - nulls)), DEC_IN_AVG,my_thd_charset); return s; } String *std(String *s, ha_rows rows) { double tmp = ulonglong2double(rows); if (!(tmp - nulls)) - s->set((double) 0.0, 1); + s->set((double) 0.0, 1,my_thd_charset); else { double tmp2 = ((sum_sqr - sum * sum / (tmp - nulls)) / (tmp - nulls)); - s->set(((double) tmp2 <= 0.0 ? 0.0 : sqrt(tmp2)), DEC_IN_AVG); + s->set(((double) tmp2 <= 0.0 ? 0.0 : sqrt(tmp2)), DEC_IN_AVG,my_thd_charset); } return s; } @@ -250,28 +258,28 @@ public: (qsort_cmp2) compare_ulonglong2, 0, NULL, NULL); } void add(); void get_opt_type(String*, ha_rows); - String *get_min_arg(String *s) { s->set(min_arg); return s; } - String *get_max_arg(String *s) { s->set(max_arg); return s; } + String *get_min_arg(String *s) { s->set(min_arg,my_thd_charset); return s; } + String *get_max_arg(String *s) { s->set(max_arg,my_thd_charset); return s; } String *avg(String *s, ha_rows rows) { if (!(rows - nulls)) - s->set((double) 0.0, 1); + s->set((double) 0.0, 1,my_thd_charset); else s->set((ulonglong2double(sum) / ulonglong2double(rows - nulls)), - DEC_IN_AVG); + DEC_IN_AVG,my_thd_charset); return s; } String *std(String *s, ha_rows rows) { double tmp = ulonglong2double(rows); if (!(tmp - nulls)) - s->set((double) 0.0, 1); + s->set((double) 0.0, 1,my_thd_charset); else { double tmp2 = ((ulonglong2double(sum_sqr) - ulonglong2double(sum * sum) / (tmp - nulls)) / (tmp - nulls)); - s->set(((double) tmp2 <= 0.0 ? 0.0 : sqrt(tmp2)), DEC_IN_AVG); + s->set(((double) tmp2 <= 0.0 ? 0.0 : sqrt(tmp2)), DEC_IN_AVG,my_thd_charset); } return s; } diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 457e555463d..1276020e3c3 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -91,25 +91,29 @@ bool String::realloc(uint32 alloc_length) return FALSE; } -bool String::set(longlong num) +bool String::set(longlong num, CHARSET_INFO *cs) { if (alloc(21)) return TRUE; str_length=(uint32) (longlong10_to_str(num,Ptr,-10)-Ptr); + str_charset=cs; return FALSE; } -bool String::set(ulonglong num) +bool String::set(ulonglong num, CHARSET_INFO *cs) { if (alloc(21)) return TRUE; str_length=(uint32) (longlong10_to_str(num,Ptr,10)-Ptr); + str_charset=cs; return FALSE; } -bool String::set(double num,uint decimals) +bool String::set(double num,uint decimals, CHARSET_INFO *cs) { char buff[331]; + + str_charset=cs; if (decimals >= NOT_FIXED_DEC) { sprintf(buff,"%.14g",num); // Enough for a DATETIME diff --git a/sql/sql_string.h b/sql/sql_string.h index e94981d22c3..c881cb22c5c 100644 --- a/sql/sql_string.h +++ b/sql/sql_string.h @@ -125,10 +125,9 @@ public: } str_charset=cs; } - bool set(longlong num); - /* bool set(long num); */ - bool set(ulonglong num); - bool set(double num,uint decimals=2); + bool set(longlong num, CHARSET_INFO *cs); + bool set(ulonglong num, CHARSET_INFO *cs); + bool set(double num,uint decimals, CHARSET_INFO *cs); inline void free() { if (alloced) -- cgit v1.2.1