diff options
author | unknown <bar@bar.mysql.r18.ru> | 2002-11-06 15:49:53 +0400 |
---|---|---|
committer | unknown <bar@bar.mysql.r18.ru> | 2002-11-06 15:49:53 +0400 |
commit | b0b72e4d52d525b82f9649cc7d57d647950ec59b (patch) | |
tree | 327d33408ca6f413ce8f595905d090403c11124b /sql | |
parent | 1e63509dfc5828fbd2180d3bc2bbeae0a32e42ee (diff) | |
download | mariadb-git-b0b72e4d52d525b82f9649cc7d57d647950ec59b.tar.gz |
Item->thd_charset() - returns a default charset which should be used
to compose strings appeared without charset context, for example,
in convertion from numer into string type.
Diffstat (limited to 'sql')
-rw-r--r-- | sql/field.cc | 4 | ||||
-rw-r--r-- | sql/item.cc | 19 | ||||
-rw-r--r-- | sql/item.h | 1 | ||||
-rw-r--r-- | sql/item_func.cc | 34 | ||||
-rw-r--r-- | sql/item_strfunc.cc | 2 | ||||
-rw-r--r-- | sql/item_subselect.cc | 2 | ||||
-rw-r--r-- | sql/item_sum.cc | 16 | ||||
-rw-r--r-- | sql/item_timefunc.h | 18 | ||||
-rw-r--r-- | sql/sql_analyse.cc | 4 |
9 files changed, 53 insertions, 47 deletions
diff --git a/sql/field.cc b/sql/field.cc index d8742d487f9..a219a23ec70 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -4316,14 +4316,14 @@ int Field_blob::store(const char *from,uint len,CHARSET_INFO *cs) int Field_blob::store(double nr) { - value.set(nr,2,my_thd_charset); + value.set(nr,2,current_thd->thd_charset); return Field_blob::store(value.ptr(),(uint) value.length(), value.charset()); } int Field_blob::store(longlong nr) { - value.set(nr,my_thd_charset); + value.set(nr,current_thd->thd_charset); return Field_blob::store(value.ptr(), (uint) value.length(), value.charset()); } diff --git a/sql/item.cc b/sql/item.cc index 037e57b2b8a..d97f8dc4b71 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -117,6 +117,11 @@ bool Item::get_time(TIME *ltime) return 0; } +CHARSET_INFO * Item::thd_charset() const +{ + return current_thd->thd_charset; +} + Item_field::Item_field(Field *f) :Item_ident(NullS,f->table_name,f->field_name) { set_field(f); @@ -234,7 +239,7 @@ table_map Item_field::used_tables() const String *Item_int::val_str(String *str) { - str->set(value, my_thd_charset); + str->set(value, thd_charset()); return str; } @@ -242,7 +247,7 @@ void Item_int::print(String *str) { if (!name) { - str_value.set(value, my_thd_charset); + str_value.set(value, thd_charset()); name=str_value.c_ptr(); } str->append(name); @@ -250,7 +255,7 @@ void Item_int::print(String *str) String *Item_uint::val_str(String *str) { - str->set((ulonglong) value, my_thd_charset); + str->set((ulonglong) value, thd_charset()); return str; } @@ -258,7 +263,7 @@ void Item_uint::print(String *str) { if (!name) { - str_value.set((ulonglong) value, my_thd_charset); + str_value.set((ulonglong) value, thd_charset()); name=str_value.c_ptr(); } str->append(name); @@ -267,7 +272,7 @@ void Item_uint::print(String *str) String *Item_real::val_str(String *str) { - str->set(value,decimals,my_thd_charset); + str->set(value,decimals,thd_charset()); return str; } @@ -384,10 +389,10 @@ String *Item_param::val_str(String* str) { switch (item_result_type) { case INT_RESULT: - str->set(int_value, my_thd_charset); + str->set(int_value, thd_charset()); return str; case REAL_RESULT: - str->set(real_value, 2, my_thd_charset); + str->set(real_value, 2, thd_charset()); return str; default: return (String*) &str_value; diff --git a/sql/item.h b/sql/item.h index fc36148e443..c7c66102b43 100644 --- a/sql/item.h +++ b/sql/item.h @@ -84,6 +84,7 @@ public: virtual bool get_date(TIME *ltime,bool fuzzydate); virtual bool get_time(TIME *ltime); virtual bool is_null() { return 0; }; + virtual CHARSET_INFO *thd_charset() const; virtual CHARSET_INFO *charset() const { return str_value.charset(); }; virtual bool binary() const { return str_value.charset()->state & MY_CS_BINSORT ? 1 : 0 ; } virtual void set_charset(CHARSET_INFO *cs) { str_value.set_charset(cs); } diff --git a/sql/item_func.cc b/sql/item_func.cc index 8b2b2fc83a3..6cb98d4ed90 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -243,7 +243,7 @@ String *Item_real_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,my_thd_charset); + str->set(nr,decimals,thd_charset()); return str; } @@ -256,9 +256,9 @@ String *Item_num_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else if (!unsigned_flag) - str->set(nr,my_thd_charset); + str->set(nr,thd_charset()); else - str->set((ulonglong) nr,my_thd_charset); + str->set((ulonglong) nr,thd_charset()); } else { @@ -266,7 +266,7 @@ String *Item_num_func::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,my_thd_charset); + str->set(nr,decimals,thd_charset()); } return str; } @@ -286,9 +286,9 @@ String *Item_int_func::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr,my_thd_charset); + str->set(nr,thd_charset()); else - str->set((ulonglong) nr,my_thd_charset); + str->set((ulonglong) nr,thd_charset()); return str; } @@ -315,9 +315,9 @@ String *Item_num_op::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else if (!unsigned_flag) - str->set(nr,my_thd_charset); + str->set(nr,thd_charset()); else - str->set((ulonglong) nr,my_thd_charset); + str->set((ulonglong) nr,thd_charset()); } else { @@ -325,7 +325,7 @@ String *Item_num_op::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,my_thd_charset); + str->set(nr,decimals,thd_charset()); } return str; } @@ -813,9 +813,9 @@ String *Item_func_min_max::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr,my_thd_charset); + str->set(nr,thd_charset()); else - str->set((ulonglong) nr,my_thd_charset); + str->set((ulonglong) nr,thd_charset()); return str; } case REAL_RESULT: @@ -824,7 +824,7 @@ String *Item_func_min_max::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,my_thd_charset); + str->set(nr,decimals,thd_charset()); return str; } case STRING_RESULT: @@ -1447,7 +1447,7 @@ String *Item_func_udf_float::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,my_thd_charset); + str->set(nr,decimals,thd_charset()); return str; } @@ -1468,9 +1468,9 @@ String *Item_func_udf_int::val_str(String *str) if (null_value) return 0; else if (!unsigned_flag) - str->set(nr,my_thd_charset); + str->set(nr,thd_charset()); else - str->set((ulonglong) nr,my_thd_charset); + str->set((ulonglong) nr,thd_charset()); return str; } @@ -2034,10 +2034,10 @@ Item_func_get_user_var::val_str(String *str) return NULL; switch (entry->type) { case REAL_RESULT: - str->set(*(double*) entry->value,decimals,my_thd_charset); + str->set(*(double*) entry->value,decimals,thd_charset()); break; case INT_RESULT: - str->set(*(longlong*) entry->value,my_thd_charset); + str->set(*(longlong*) entry->value,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 20b01c9f1e8..40e9315d786 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,my_thd_charset); + str->set(nr,decimals,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 f45f386fe46..703173b191c 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,my_thd_charset); + str->set(value,thd_charset()); return str; } diff --git a/sql/item_sum.cc b/sql/item_sum.cc index 22b5e47fab5..e28e878e57f 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,my_thd_charset); + str->set(nr,decimals,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,my_thd_charset); + str->set(sum,decimals,thd_charset()); break; case INT_RESULT: if (unsigned_flag) - str->set((ulonglong) sum_int,my_thd_charset); + str->set((ulonglong) sum_int,thd_charset()); else - str->set((longlong) sum_int,my_thd_charset); + str->set((longlong) sum_int,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,my_thd_charset); + str->set(nr,decimals,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,my_thd_charset); + str->set(nr,decimals,thd_charset()); return str; } @@ -1177,7 +1177,7 @@ String *Item_sum_udf_float::val_str(String *str) if (null_value) return 0; /* purecov: inspected */ else - str->set(nr,decimals,my_thd_charset); + str->set(nr,decimals,thd_charset()); return str; } @@ -1196,7 +1196,7 @@ String *Item_sum_udf_int::val_str(String *str) if (null_value) return 0; else - str->set(nr,my_thd_charset); + str->set(nr,thd_charset()); return str; } diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index fab8ea9fa9c..de2860d24ef 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -69,7 +69,7 @@ public: double val() { return (double) Item_func_month::val_int(); } String *val_str(String *str) { - str->set(val_int(), my_thd_charset); + str->set(val_int(), thd_charset()); return null_value ? 0 : str; } const char *func_name() const { return "month"; } @@ -177,7 +177,7 @@ public: longlong val_int(); double val() { return (double) val_int(); } String *val_str(String *str) { - str->set(val_int(), my_thd_charset); + str->set(val_int(), thd_charset()); return null_value ? 0 : str; } const char *func_name() const { return "weekday"; } @@ -243,7 +243,7 @@ public: } Field *tmp_table_field(TABLE *t_arg) { - return (!t_arg) ? result_field : new Field_date(maybe_null, name, t_arg, my_thd_charset); + return (!t_arg) ? result_field : new Field_date(maybe_null, name, t_arg, thd_charset()); } }; @@ -261,7 +261,7 @@ public: Field *tmp_table_field(TABLE *t_arg) { return (!t_arg) ? result_field : new Field_datetime(maybe_null, name, - t_arg, my_thd_charset); + t_arg, thd_charset()); } }; @@ -288,7 +288,7 @@ public: Field *tmp_table_field(TABLE *t_arg) { return (!t_arg) ? result_field : - new Field_time(maybe_null, name, t_arg, my_thd_charset); + new Field_time(maybe_null, name, t_arg, thd_charset()); } }; @@ -381,7 +381,7 @@ public: Field *tmp_table_field(TABLE *t_arg) { return (!t_arg) ? result_field : - new Field_time(maybe_null, name, t_arg, my_thd_charset); + new Field_time(maybe_null, name, t_arg, thd_charset()); } }; @@ -446,7 +446,7 @@ public: Field *tmp_table_field(TABLE *t_arg) { return (!t_arg) ? result_field : - new Field_date(maybe_null, name, t_arg, my_thd_charset); + new Field_date(maybe_null, name, t_arg, thd_charset()); } }; @@ -462,7 +462,7 @@ public: Field *tmp_table_field(TABLE *t_arg) { return (!t_arg) ? result_field : - new Field_time(maybe_null, name, t_arg, my_thd_charset); + new Field_time(maybe_null, name, t_arg, thd_charset()); } }; @@ -478,6 +478,6 @@ public: Field *tmp_table_field(TABLE *t_arg) { return (!t_arg) ? result_field : new Field_datetime(maybe_null, name, - t_arg, my_thd_charset); + t_arg, thd_charset()); } }; diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index d1ecdd029d5..5c735ab35d5 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -896,14 +896,14 @@ int collect_real(double *element, element_count count __attribute__((unused)), TREE_INFO *info) { char buff[MAX_FIELD_WIDTH]; - String s(buff, sizeof(buff),default_charset_info); + String s(buff, sizeof(buff),current_thd->thd_charset); if (info->found) info->str->append(','); else info->found = 1; info->str->append('\''); - s.set(*element, info->item->decimals, my_thd_charset); + s.set(*element, info->item->decimals, current_thd->thd_charset); info->str->append(s); info->str->append('\''); return 0; |