From 48cdd978668dace6dd7a5de5ba5cb8bdc73cf1ae Mon Sep 17 00:00:00 2001
From: "bar@bar.mysql.r18.ru" <>
Date: Mon, 3 Mar 2003 10:53:08 +0400
Subject: [PATCH] Strings which appear without charset context, like
 number-to-string-convertion-result, now takes current database character set,
 instead of thread character set. This makes it easy to be SQL99 conformant
 and 4.0 compatible.

Item->thd_charset() is renamed to Item->default_charset()
as old name doesn't describe its nature anymore.
---
 sql/item.cc           | 20 +++++------
 sql/item.h            |  6 ++--
 sql/item_cmpfunc.cc   |  4 +--
 sql/item_func.cc      | 30 ++++++++---------
 sql/item_strfunc.cc   | 12 +++----
 sql/item_strfunc.h    | 12 +++----
 sql/item_subselect.cc |  4 +--
 sql/item_sum.cc       | 18 +++++-----
 sql/item_timefunc.cc  | 28 ++++++++--------
 sql/item_timefunc.h   | 78 +++++++++++++++++++++----------------------
 sql/procedure.h       | 10 +++---
 11 files changed, 111 insertions(+), 111 deletions(-)

diff --git a/sql/item.cc b/sql/item.cc
index ef2d68ab2bf..decd0ec044b 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -163,9 +163,9 @@ bool Item::get_time(TIME *ltime)
   return 0;
 }
 
-CHARSET_INFO * Item::thd_charset() const
+CHARSET_INFO * Item::default_charset() const
 {
-  return current_thd->variables.thd_charset;
+  return current_thd->db_charset;
 }
 
 Item_field::Item_field(Field *f) :Item_ident(NullS,f->table_name,f->field_name)
@@ -303,7 +303,7 @@ Item *Item_field::get_tmp_table_item(THD *thd)
 
 String *Item_int::val_str(String *str)
 {
-  str->set(value, thd_charset());
+  str->set(value, default_charset());
   return str;
 }
 
@@ -311,7 +311,7 @@ void Item_int::print(String *str)
 {
   if (!name)
   {
-    str_value.set(value, thd_charset());
+    str_value.set(value, default_charset());
     name=str_value.c_ptr();
   }
   str->append(name);
@@ -319,7 +319,7 @@ void Item_int::print(String *str)
 
 String *Item_uint::val_str(String *str)
 {
-  str->set((ulonglong) value, thd_charset());
+  str->set((ulonglong) value, default_charset());
   return str;
 }
 
@@ -327,7 +327,7 @@ void Item_uint::print(String *str)
 {
   if (!name)
   {
-    str_value.set((ulonglong) value, thd_charset());
+    str_value.set((ulonglong) value, default_charset());
     name=str_value.c_ptr();
   }
   str->append(name);
@@ -336,7 +336,7 @@ void Item_uint::print(String *str)
 
 String *Item_real::val_str(String *str)
 {
-  str->set(value,decimals,thd_charset());
+  str->set(value,decimals,default_charset());
   return str;
 }
 
@@ -377,7 +377,7 @@ void Item_param::set_double(double value)
 
 void Item_param::set_value(const char *str, uint length)
 {  
-  str_value.set(str,length,thd_charset());
+  str_value.set(str,length,default_charset());
   item_type = STRING_ITEM;
 }
 
@@ -474,10 +474,10 @@ String *Item_param::val_str(String* str)
 { 
   switch (item_result_type) {
   case INT_RESULT:
-    str->set(int_value, thd_charset());
+    str->set(int_value, default_charset());
     return str;
   case REAL_RESULT:
-    str->set(real_value, 2, thd_charset());
+    str->set(real_value, 2, default_charset());
     return str;
   default:
     return (String*) &str_value;
diff --git a/sql/item.h b/sql/item.h
index ddf704ea1db..3cf8a885018 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -110,7 +110,7 @@ class Item {
 
   virtual bool binary() const
   { return str_value.charset()->state & MY_CS_BINSORT ? 1 : 0 ; }
-  CHARSET_INFO *thd_charset() const;
+  CHARSET_INFO *default_charset() const;
   CHARSET_INFO *charset() const { return str_value.charset(); };
   void set_charset(CHARSET_INFO *cs) { str_value.set_charset(cs); }
   virtual void set_outer_resolving() {}
@@ -773,7 +773,7 @@ class Item_cache_int: public Item_cache
   }
   double val() { return (double) value; }
   longlong val_int() { return value; }
-  String* val_str(String *str) { str->set(value, thd_charset()); return str; }
+  String* val_str(String *str) { str->set(value, default_charset()); return str; }
   enum Item_result result_type() const { return INT_RESULT; }
 };
 
@@ -792,7 +792,7 @@ class Item_cache_real: public Item_cache
   longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5)); }
   String* val_str(String *str)
   {
-    str->set(value, decimals, thd_charset());
+    str->set(value, decimals, default_charset());
     return str;
   }
   enum Item_result result_type() const { return REAL_RESULT; }
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index 0993b8b155a..7ff36bb32ed 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -873,7 +873,7 @@ String *Item_func_case::val_str(String *str)
 longlong Item_func_case::val_int()
 {
   char buff[MAX_FIELD_WIDTH];
-  String dummy_str(buff,sizeof(buff),thd_charset());
+  String dummy_str(buff,sizeof(buff),default_charset());
   Item *item=find_item(&dummy_str);
   longlong res;
 
@@ -890,7 +890,7 @@ longlong Item_func_case::val_int()
 double Item_func_case::val()
 {
   char buff[MAX_FIELD_WIDTH];
-  String dummy_str(buff,sizeof(buff),thd_charset());
+  String dummy_str(buff,sizeof(buff),default_charset());
   Item *item=find_item(&dummy_str);
   double res;
 
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 1382766c205..545cb14bf2a 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -286,7 +286,7 @@ String *Item_real_func::val_str(String *str)
   if (null_value)
     return 0; /* purecov: inspected */
   else
-    str->set(nr,decimals,thd_charset());
+    str->set(nr,decimals,default_charset());
   return str;
 }
 
@@ -299,9 +299,9 @@ String *Item_num_func::val_str(String *str)
     if (null_value)
       return 0; /* purecov: inspected */
     else if (!unsigned_flag)
-      str->set(nr,thd_charset());
+      str->set(nr,default_charset());
     else
-      str->set((ulonglong) nr,thd_charset());
+      str->set((ulonglong) nr,default_charset());
   }
   else
   {
@@ -309,7 +309,7 @@ String *Item_num_func::val_str(String *str)
     if (null_value)
       return 0; /* purecov: inspected */
     else
-      str->set(nr,decimals,thd_charset());
+      str->set(nr,decimals,default_charset());
   }
   return str;
 }
@@ -336,9 +336,9 @@ String *Item_int_func::val_str(String *str)
   if (null_value)
     return 0;
   else if (!unsigned_flag)
-    str->set(nr,thd_charset());
+    str->set(nr,default_charset());
   else
-    str->set((ulonglong) nr,thd_charset());
+    str->set((ulonglong) nr,default_charset());
   return str;
 }
 
@@ -365,9 +365,9 @@ String *Item_num_op::val_str(String *str)
     if (null_value)
       return 0; /* purecov: inspected */
     else if (!unsigned_flag)
-      str->set(nr,thd_charset());
+      str->set(nr,default_charset());
     else
-      str->set((ulonglong) nr,thd_charset());
+      str->set((ulonglong) nr,default_charset());
   }
   else
   {
@@ -375,7 +375,7 @@ String *Item_num_op::val_str(String *str)
     if (null_value)
       return 0; /* purecov: inspected */
     else
-      str->set(nr,decimals,thd_charset());
+      str->set(nr,decimals,default_charset());
   }
   return str;
 }
@@ -890,9 +890,9 @@ String *Item_func_min_max::val_str(String *str)
     if (null_value)
       return 0;
     else if (!unsigned_flag)
-      str->set(nr,thd_charset());
+      str->set(nr,default_charset());
     else
-      str->set((ulonglong) nr,thd_charset());
+      str->set((ulonglong) nr,default_charset());
     return str;
   }
   case REAL_RESULT:
@@ -901,7 +901,7 @@ String *Item_func_min_max::val_str(String *str)
     if (null_value)
       return 0; /* purecov: inspected */
     else
-      str->set(nr,decimals,thd_charset());
+      str->set(nr,decimals,default_charset());
     return str;
   }
   case STRING_RESULT:
@@ -1563,7 +1563,7 @@ String *Item_func_udf_float::val_str(String *str)
   if (null_value)
     return 0;					/* purecov: inspected */
   else
-    str->set(nr,decimals,thd_charset());
+    str->set(nr,decimals,default_charset());
   return str;
 }
 
@@ -1584,9 +1584,9 @@ String *Item_func_udf_int::val_str(String *str)
   if (null_value)
     return 0;
   else if (!unsigned_flag)
-    str->set(nr,thd_charset());
+    str->set(nr,default_charset());
   else
-    str->set((ulonglong) nr,thd_charset());
+    str->set((ulonglong) nr,default_charset());
   return str;
 }
 
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index b1bc92a1210..68f186982ed 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -1429,14 +1429,14 @@ String *Item_func_database::val_str(String *str)
     str->length(0);
   else
     str->copy((const char*) thd->db,(uint) strlen(thd->db),
-	      system_charset_info, thd->variables.thd_charset);
+	      system_charset_info, default_charset());
   return str;
 }
 
 String *Item_func_user::val_str(String *str)
 {
   THD          *thd=current_thd;
-  CHARSET_INFO *cs=thd->variables.thd_charset;
+  CHARSET_INFO *cs= default_charset();
   const char   *host=thd->host ? thd->host : thd->ip ? thd->ip : "";
   uint32       res_length=(strlen(thd->user)+strlen(host)+10) * cs->mbmaxlen;
 
@@ -1543,7 +1543,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,thd_charset());
+  str->set(nr,decimals,default_charset());
   str_length=str->length();
   if (nr < 0)
     str_length--;				// Don't count sign
@@ -2007,7 +2007,7 @@ String *Item_func_conv::val_str(String *str)
   else
     dec= (longlong) my_strntoull(res->charset(),res->ptr(),res->length(),from_base,&endptr,&err);
   ptr= longlong2str(dec,ans,to_base);
-  if (str->copy(ans,(uint32) (ptr-ans), thd_charset()))
+  if (str->copy(ans,(uint32) (ptr-ans), default_charset()))
     return &empty_string;
   return str;
 }
@@ -2242,7 +2242,7 @@ String *Item_func_charset::val_str(String *str)
   if ((null_value=(args[0]->null_value || !res->charset())))
     return 0;
   str->copy(res->charset()->csname,strlen(res->charset()->csname),
-	    &my_charset_latin1, thd_charset());
+	    &my_charset_latin1, default_charset());
   return str;
 }
 
@@ -2253,7 +2253,7 @@ String *Item_func_collation::val_str(String *str)
   if ((null_value=(args[0]->null_value || !res->charset())))
     return 0;
   str->copy(res->charset()->name,strlen(res->charset()->name),
-	    &my_charset_latin1, thd_charset());
+	    &my_charset_latin1, default_charset());
   return str;
 }
 
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 63b3bb20dc3..b01787d0d20 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -333,8 +333,8 @@ class Item_func_database :public Item_str_func
   String *val_str(String *);
   void fix_length_and_dec() 
   { 
-    max_length= MAX_FIELD_NAME * thd_charset()->mbmaxlen; 
-    set_charset(thd_charset());
+    max_length= MAX_FIELD_NAME * default_charset()->mbmaxlen; 
+    set_charset(default_charset());
   }
   const char *func_name() const { return "database"; }
 };
@@ -346,8 +346,8 @@ class Item_func_user :public Item_str_func
   String *val_str(String *);
   void fix_length_and_dec() 
   { 
-    max_length= (USERNAME_LENGTH+HOSTNAME_LENGTH+1)*thd_charset()->mbmaxlen; 
-    set_charset(thd_charset());
+    max_length= (USERNAME_LENGTH+HOSTNAME_LENGTH+1)*default_charset()->mbmaxlen; 
+    set_charset(default_charset());
   }
   const char *func_name() const { return "user"; }
 };
@@ -612,7 +612,7 @@ class Item_func_charset :public Item_str_func
   void fix_length_and_dec() 
   {
      max_length=40; // should be enough
-     set_charset(thd_charset());
+     set_charset(default_charset());
   };
 };
 
@@ -625,7 +625,7 @@ class Item_func_collation :public Item_str_func
   void fix_length_and_dec() 
   {
      max_length=40; // should be enough
-     set_charset(thd_charset());
+     set_charset(default_charset());
   };
 };
 
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index fb51b5561e9..a29cf57b4e1 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -372,7 +372,7 @@ String *Item_exists_subselect::val_str(String *str)
     reset();
     return 0;
   }
-  str->set(value,thd_charset());
+  str->set(value,default_charset());
   return str;
 }
 
@@ -415,7 +415,7 @@ String *Item_in_subselect::val_str(String *str)
     null_value= 1;
     return 0;
   }
-  str->set(value,thd_charset());
+  str->set(value,default_charset());
   return str;
 }
 
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index ca6f17d486a..a0f8bc8b8a2 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -124,7 +124,7 @@ Item_sum_num::val_str(String *str)
   double nr=val();
   if (null_value)
     return 0;
-  str->set(nr,decimals,thd_charset());
+  str->set(nr,decimals,default_charset());
   return str;
 }
 
@@ -135,7 +135,7 @@ Item_sum_int::val_str(String *str)
   longlong nr=val_int();
   if (null_value)
     return 0;
-  str->set(nr,thd_charset());
+  str->set(nr,default_charset());
   return str;
 }
 
@@ -416,13 +416,13 @@ Item_sum_hybrid::val_str(String *str)
   case STRING_RESULT:
     return &value;
   case REAL_RESULT:
-    str->set(sum,decimals,thd_charset());
+    str->set(sum,decimals,default_charset());
     break;
   case INT_RESULT:
     if (unsigned_flag)
-      str->set((ulonglong) sum_int,thd_charset());
+      str->set((ulonglong) sum_int,default_charset());
     else
-      str->set((longlong) sum_int,thd_charset());
+      str->set((longlong) sum_int,default_charset());
     break;
   case ROW_RESULT:
   default:
@@ -879,7 +879,7 @@ String *Item_avg_field::val_str(String *str)
   double nr=Item_avg_field::val();
   if (null_value)
     return 0;
-  str->set(nr,decimals,thd_charset());
+  str->set(nr,decimals,default_charset());
   return str;
 }
 
@@ -927,7 +927,7 @@ String *Item_variance_field::val_str(String *str)
   double nr=val();
   if (null_value)
     return 0;
-  str->set(nr,decimals,thd_charset());
+  str->set(nr,decimals,default_charset());
   return str;
 }
 
@@ -1281,7 +1281,7 @@ String *Item_sum_udf_float::val_str(String *str)
   if (null_value)
     return 0;					/* purecov: inspected */
   else
-    str->set(nr,decimals,thd_charset());
+    str->set(nr,decimals,default_charset());
   return str;
 }
 
@@ -1300,7 +1300,7 @@ String *Item_sum_udf_int::val_str(String *str)
   if (null_value)
     return 0;
   else
-    str->set(nr,thd_charset());
+    str->set(nr,default_charset());
   return str;
 }
 
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index a032e25cec8..997247b6141 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -162,7 +162,7 @@ String* Item_func_monthname::val_str(String* str)
   null_value=0;
   
   String *m=&month_names[month-1];
-  str->copy(m->ptr(), m->length(), m->charset(), thd_charset());
+  str->copy(m->ptr(), m->length(), m->charset(), default_charset());
   return str;
 }
 
@@ -252,7 +252,7 @@ String* Item_func_dayname::val_str(String* str)
     return (String*) 0;
   
   String *d=&day_names[weekday];
-  str->copy(d->ptr(), d->length(), d->charset(), thd_charset());
+  str->copy(d->ptr(), d->length(), d->charset(), default_charset());
   return str;
 }
 
@@ -416,7 +416,7 @@ String *Item_date::val_str(String *str)
     return (String*) 0;
   if (!value)					// zero daynr
   {
-    str->copy("0000-00-00",10,&my_charset_latin1,thd_charset());
+    str->copy("0000-00-00",10,&my_charset_latin1,default_charset());
     return str;
   }
   
@@ -425,7 +425,7 @@ String *Item_date::val_str(String *str)
 	  (int) (value/10000L) % 10000,
 	  (int) (value/100)%100,
 	  (int) (value%100));
-  str->copy(tmpbuff,10,&my_charset_latin1,thd_charset());
+  str->copy(tmpbuff,10,&my_charset_latin1,default_charset());
   return str;
 }
 
@@ -463,9 +463,9 @@ void Item_func_curdate::fix_length_and_dec()
   struct tm tm_tmp,*start;
   time_t query_start=current_thd->query_start();
   
-  set_charset(thd_charset());
+  set_charset(default_charset());
   decimals=0; 
-  max_length=10*thd_charset()->mbmaxlen;
+  max_length=10*default_charset()->mbmaxlen;
   localtime_r(&query_start,&tm_tmp);
   start=&tm_tmp;
   value=(longlong) ((ulong) ((uint) start->tm_year+1900)*10000L+
@@ -492,7 +492,7 @@ bool Item_func_curdate::get_date(TIME *res,
 
 String *Item_func_curtime::val_str(String *str)
 { 
-  str_value.set(buff,buff_length,thd_charset());
+  str_value.set(buff,buff_length,default_charset());
   return &str_value;
 }
 
@@ -500,7 +500,7 @@ void Item_func_curtime::fix_length_and_dec()
 {
   struct tm tm_tmp,*start;
   time_t query_start=current_thd->query_start();
-  CHARSET_INFO *cs=thd_charset();
+  CHARSET_INFO *cs=default_charset();
 
   decimals=0; 
   max_length=8*cs->mbmaxlen;
@@ -520,7 +520,7 @@ void Item_func_curtime::fix_length_and_dec()
 
 String *Item_func_now::val_str(String *str)
 {
-  str_value.set(buff,buff_length,thd_charset());
+  str_value.set(buff,buff_length,default_charset());
   return &str_value;
 }
 
@@ -595,7 +595,7 @@ String *Item_func_sec_to_time::val_str(String *str)
   uint sec= (uint) ((ulonglong) seconds % 3600);
   length= my_sprintf(buff,(buff,"%s%02lu:%02u:%02u",sign,(long) (seconds/3600),
 			   sec/60, sec % 60));
-  str->copy(buff, length, &my_charset_latin1, thd_charset());
+  str->copy(buff, length, &my_charset_latin1, default_charset());
   return str;
 }
 
@@ -940,7 +940,7 @@ String *Item_func_from_unixtime::val_str(String *str)
   struct tm tm_tmp,*start;
   time_t tmp=(time_t) args[0]->val_int();
   uint32 l;
-  CHARSET_INFO *cs=thd_charset();
+  CHARSET_INFO *cs=default_charset();
   
   if ((null_value=args[0]->null_value))
     return 0;
@@ -1003,9 +1003,9 @@ bool Item_func_from_unixtime::get_date(TIME *ltime,
 void Item_date_add_interval::fix_length_and_dec()
 {
   enum_field_types arg0_field_type;
-  set_charset(thd_charset());
+  set_charset(default_charset());
   maybe_null=1;
-  max_length=19*thd_charset()->mbmaxlen;
+  max_length=19*default_charset()->mbmaxlen;
   value.alloc(32);
 
   /*
@@ -1124,7 +1124,7 @@ bool Item_date_add_interval::get_date(TIME *ltime, bool fuzzy_date)
 String *Item_date_add_interval::val_str(String *str)
 {
   TIME ltime;
-  CHARSET_INFO *cs=thd_charset();
+  CHARSET_INFO *cs=default_charset();
   uint32 l;
 
   if (Item_date_add_interval::get_date(&ltime,0))
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index 03180793d8a..2ed126b58e5 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -29,7 +29,7 @@ class Item_func_period_add :public Item_int_func
   const char *func_name() const { return "period_add"; }
   void fix_length_and_dec() 
   { 
-    max_length=6*thd_charset()->mbmaxlen;
+    max_length=6*default_charset()->mbmaxlen;
   }
 };
 
@@ -43,7 +43,7 @@ class Item_func_period_diff :public Item_int_func
   void fix_length_and_dec()
   { 
     decimals=0;
-    max_length=6*thd_charset()->mbmaxlen;
+    max_length=6*default_charset()->mbmaxlen;
   }
 };
 
@@ -57,7 +57,7 @@ class Item_func_to_days :public Item_int_func
   void fix_length_and_dec() 
   { 
     decimals=0; 
-    max_length=6*thd_charset()->mbmaxlen;
+    max_length=6*default_charset()->mbmaxlen;
     maybe_null=1; 
   }
 };
@@ -72,7 +72,7 @@ class Item_func_dayofmonth :public Item_int_func
   void fix_length_and_dec() 
   { 
     decimals=0; 
-    max_length=2*thd_charset()->mbmaxlen;
+    max_length=2*default_charset()->mbmaxlen;
     maybe_null=1; 
   }
 };
@@ -86,16 +86,16 @@ class Item_func_month :public Item_func
   double val() { return (double) Item_func_month::val_int(); }
   String *val_str(String *str) 
   {
-    str->set(val_int(), thd_charset());
+    str->set(val_int(), default_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() 
   { 
-    set_charset(thd_charset());
+    set_charset(default_charset());
     decimals=0;
-    max_length=2*thd_charset()->mbmaxlen;
+    max_length=2*default_charset()->mbmaxlen;
     maybe_null=1; 
   }
 };
@@ -110,9 +110,9 @@ class Item_func_monthname :public Item_func_month
   enum Item_result result_type () const { return STRING_RESULT; }
   void fix_length_and_dec() 
   {
-    set_charset(thd_charset());
+    set_charset(default_charset());
     decimals=0;
-    max_length=10*thd_charset()->mbmaxlen;
+    max_length=10*default_charset()->mbmaxlen;
     maybe_null=1; 
   }
 };
@@ -127,7 +127,7 @@ class Item_func_dayofyear :public Item_int_func
   void fix_length_and_dec() 
   { 
     decimals=0;
-    max_length=3*thd_charset()->mbmaxlen;
+    max_length=3*default_charset()->mbmaxlen;
     maybe_null=1; 
   }
 };
@@ -142,7 +142,7 @@ class Item_func_hour :public Item_int_func
   void fix_length_and_dec()
   {
     decimals=0;
-    max_length=2*thd_charset()->mbmaxlen;
+    max_length=2*default_charset()->mbmaxlen;
     maybe_null=1;
   }
 };
@@ -157,7 +157,7 @@ class Item_func_minute :public Item_int_func
   void fix_length_and_dec()
   {
     decimals=0;
-    max_length=2*thd_charset()->mbmaxlen;
+    max_length=2*default_charset()->mbmaxlen;
     maybe_null=1;
   }
 };
@@ -172,7 +172,7 @@ class Item_func_quarter :public Item_int_func
   void fix_length_and_dec()
   { 
      decimals=0;
-     max_length=1*thd_charset()->mbmaxlen;
+     max_length=1*default_charset()->mbmaxlen;
      maybe_null=1;
   }
 };
@@ -187,7 +187,7 @@ class Item_func_second :public Item_int_func
   void fix_length_and_dec() 
   { 
     decimals=0;
-    max_length=2*thd_charset()->mbmaxlen;
+    max_length=2*default_charset()->mbmaxlen;
     maybe_null=1;
   }
 };
@@ -202,7 +202,7 @@ class Item_func_week :public Item_int_func
   void fix_length_and_dec()
   { 
     decimals=0;
-    max_length=2*thd_charset()->mbmaxlen;
+    max_length=2*default_charset()->mbmaxlen;
     maybe_null=1;
   }
 };
@@ -216,7 +216,7 @@ class Item_func_yearweek :public Item_int_func
   void fix_length_and_dec()
   { 
     decimals=0;
-    max_length=6*thd_charset()->mbmaxlen;
+    max_length=6*default_charset()->mbmaxlen;
     maybe_null=1;
   }
 };
@@ -231,7 +231,7 @@ class Item_func_year :public Item_int_func
   void fix_length_and_dec()
   { 
     decimals=0;
-    max_length=4*thd_charset()->mbmaxlen;
+    max_length=4*default_charset()->mbmaxlen;
     maybe_null=1;
   }
 };
@@ -247,16 +247,16 @@ class Item_func_weekday :public Item_func
   double val() { return (double) val_int(); }
   String *val_str(String *str)
   { 
-    str->set(val_int(), thd_charset());
+    str->set(val_int(), default_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()
   {
-    set_charset(thd_charset());
+    set_charset(default_charset());
     decimals=0;
-    max_length=1*thd_charset()->mbmaxlen;
+    max_length=1*default_charset()->mbmaxlen;
     maybe_null=1;
   }
 };
@@ -270,9 +270,9 @@ class Item_func_dayname :public Item_func_weekday
   enum Item_result result_type () const { return STRING_RESULT; }
   void fix_length_and_dec() 
   { 
-    set_charset(thd_charset());
+    set_charset(default_charset());
     decimals=0; 
-    max_length=9*thd_charset()->mbmaxlen;
+    max_length=9*default_charset()->mbmaxlen;
     maybe_null=1; 
   }
 };
@@ -289,7 +289,7 @@ class Item_func_unix_timestamp :public Item_int_func
   void fix_length_and_dec()
   {
     decimals=0;
-    max_length=10*thd_charset()->mbmaxlen;
+    max_length=10*default_charset()->mbmaxlen;
   }
 };
 
@@ -303,7 +303,7 @@ class Item_func_time_to_sec :public Item_int_func
   void fix_length_and_dec()
   {
     decimals=0;
-    max_length=10*thd_charset()->mbmaxlen;
+    max_length=10*default_charset()->mbmaxlen;
   }
 };
 
@@ -322,15 +322,15 @@ class Item_date :public Item_func
   const char *func_name() const { return "date"; }
   void fix_length_and_dec()
   { 
-    set_charset(thd_charset());
+    set_charset(default_charset());
     decimals=0;
-    max_length=10*thd_charset()->mbmaxlen;
+    max_length=10*default_charset()->mbmaxlen;
   }
   int save_in_field(Field *to, bool no_conversions);
   Field *tmp_table_field() { return result_field; }
   Field *tmp_table_field(TABLE *t_arg)
   {
-    return (new Field_date(maybe_null, name, t_arg, thd_charset()));
+    return (new Field_date(maybe_null, name, t_arg, default_charset()));
   }  
 };
 
@@ -345,7 +345,7 @@ class Item_date_func :public Item_str_func
   Field *tmp_table_field() { return result_field; }
   Field *tmp_table_field(TABLE *t_arg)
   {
-    return  (new Field_datetime(maybe_null, name, t_arg, thd_charset()));
+    return  (new Field_datetime(maybe_null, name, t_arg, default_charset()));
   }
 };
 
@@ -368,7 +368,7 @@ class Item_func_curtime :public Item_func
   Field *tmp_table_field() { return result_field; }
   Field *tmp_table_field(TABLE *t_arg)
   {
-    return (new Field_time(maybe_null, name, t_arg, thd_charset()));
+    return (new Field_time(maybe_null, name, t_arg, default_charset()));
   }  
 };
 
@@ -440,9 +440,9 @@ class Item_func_from_unixtime :public Item_date_func
   const char *func_name() const { return "from_unixtime"; }
   void fix_length_and_dec()
   { 
-    set_charset(thd_charset());
+    set_charset(default_charset());
     decimals=0;
-    max_length=19*thd_charset()->mbmaxlen;
+    max_length=19*default_charset()->mbmaxlen;
   }
   bool get_date(TIME *res,bool fuzzy_date);
 };
@@ -457,16 +457,16 @@ class Item_func_sec_to_time :public Item_str_func
   String *val_str(String *);
   void fix_length_and_dec()
   { 
-    set_charset(thd_charset());
+    set_charset(default_charset());
     maybe_null=1;
-    max_length=13*thd_charset()->mbmaxlen;
+    max_length=13*default_charset()->mbmaxlen;
   }
   enum_field_types field_type() const { return MYSQL_TYPE_TIME; }
   const char *func_name() const { return "sec_to_time"; }
   Field *tmp_table_field() { return result_field; }
   Field *tmp_table_field(TABLE *t_arg)
   {
-    return (new Field_time(maybe_null, name, t_arg, thd_charset()));
+    return (new Field_time(maybe_null, name, t_arg, default_charset()));
   }
 };
 
@@ -532,7 +532,7 @@ class Item_typecast :public Item_str_func
   }
   void fix_length_and_dec()
   {
-    set_charset(thd_charset());
+    set_charset(default_charset());
     max_length=args[0]->max_length;
   }
   void print(String *str);
@@ -545,7 +545,7 @@ class Item_char_typecast :public Item_typecast
   Item_char_typecast(Item *a) :Item_typecast(a) {}
   void fix_length_and_dec()
   {
-    set_charset(thd_charset());
+    set_charset(default_charset());
     max_length=args[0]->max_length;
   }
 };
@@ -560,7 +560,7 @@ class Item_date_typecast :public Item_typecast
   Field *tmp_table_field() { return result_field; }
   Field *tmp_table_field(TABLE *t_arg)
   {
-    return (new Field_date(maybe_null, name, t_arg, thd_charset()));
+    return (new Field_date(maybe_null, name, t_arg, default_charset()));
   }  
 };
 
@@ -574,7 +574,7 @@ class Item_time_typecast :public Item_typecast
   Field *tmp_table_field() { return result_field; }
   Field *tmp_table_field(TABLE *t_arg)
   {
-    return (new Field_time(maybe_null, name, t_arg, thd_charset()));
+    return (new Field_time(maybe_null, name, t_arg, default_charset()));
   }
 };
 
@@ -588,6 +588,6 @@ class Item_datetime_typecast :public Item_typecast
   Field *tmp_table_field() { return result_field; }
   Field *tmp_table_field(TABLE *t_arg)
   {
-    return (new Field_datetime(maybe_null, name, t_arg, thd_charset()));
+    return (new Field_datetime(maybe_null, name, t_arg, default_charset()));
   }
 };
diff --git a/sql/procedure.h b/sql/procedure.h
index 03a45488b03..5365b2e1102 100644
--- a/sql/procedure.h
+++ b/sql/procedure.h
@@ -38,7 +38,7 @@ class Item_proc :public Item
   virtual void set(const char *str,uint length,CHARSET_INFO *cs)=0;
   virtual void set(longlong nr)=0;
   virtual enum_field_types field_type() const=0;
-  void set(const char *str) { set(str,(uint) strlen(str), thd_charset()); }
+  void set(const char *str) { set(str,(uint) strlen(str), default_charset()); }
   void make_field(Send_field *tmp_field)
   {
     init_make_field(tmp_field,field_type());
@@ -62,7 +62,7 @@ class Item_proc_real :public Item_proc
   { int err; value=my_strntod(cs,(char*) str,length,(char**)0,&err); }
   double val() { return value; }
   longlong val_int() { return (longlong) value; }
-  String *val_str(String *s) { s->set(value,decimals,thd_charset()); return s; }
+  String *val_str(String *s) { s->set(value,decimals,default_charset()); return s; }
   unsigned int size_of() { return sizeof(*this);}  
 };
 
@@ -80,7 +80,7 @@ class Item_proc_int :public Item_proc
   { int err; value=my_strntoll(cs,str,length,10,NULL,&err); }
   double val() { return (double) value; }
   longlong val_int() { return value; }
-  String *val_str(String *s) { s->set(value, thd_charset()); return s; }
+  String *val_str(String *s) { s->set(value, default_charset()); return s; }
   unsigned int size_of() { return sizeof(*this);}  
 };
 
@@ -92,8 +92,8 @@ class Item_proc_string :public Item_proc
     { this->max_length=length; }
   enum Item_result result_type () const { return STRING_RESULT; }
   enum_field_types field_type() const { return MYSQL_TYPE_STRING; }
-  void set(double nr) { str_value.set(nr, 2, thd_charset()); }
-  void set(longlong nr) { str_value.set(nr, thd_charset()); }
+  void set(double nr) { str_value.set(nr, 2, default_charset()); }
+  void set(longlong nr) { str_value.set(nr, default_charset()); }
   void set(const char *str, uint length, CHARSET_INFO *cs)
   { str_value.copy(str,length,cs); }
   double val() 
-- 
2.30.9