summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2002-11-06 15:49:53 +0400
committerunknown <bar@bar.mysql.r18.ru>2002-11-06 15:49:53 +0400
commitb0b72e4d52d525b82f9649cc7d57d647950ec59b (patch)
tree327d33408ca6f413ce8f595905d090403c11124b /sql
parent1e63509dfc5828fbd2180d3bc2bbeae0a32e42ee (diff)
downloadmariadb-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.cc4
-rw-r--r--sql/item.cc19
-rw-r--r--sql/item.h1
-rw-r--r--sql/item_func.cc34
-rw-r--r--sql/item_strfunc.cc2
-rw-r--r--sql/item_subselect.cc2
-rw-r--r--sql/item_sum.cc16
-rw-r--r--sql/item_timefunc.h18
-rw-r--r--sql/sql_analyse.cc4
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;