summaryrefslogtreecommitdiff
path: root/sql/set_var.cc
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-02-26 16:37:41 +0400
committerunknown <bar@bar.mysql.r18.ru>2003-02-26 16:37:41 +0400
commit61bd85562387986531efaa556935e409d592951a (patch)
tree1bc6834a9211d78b78e8ed505bb83afa26969219 /sql/set_var.cc
parent2667f61b76d2749540525cd905e9449d6050fa6a (diff)
downloadmariadb-git-61bd85562387986531efaa556935e409d592951a.tar.gz
set_var.cc, set_var.h:
New thread variable client_character_set sql/set_var.h: New thread variable client_character_set sql/set_var.cc: New thread variable client_character_set
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r--sql/set_var.cc52
1 files changed, 52 insertions, 0 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index f09d0441cfe..1f31633980a 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -104,6 +104,7 @@ sys_var_str sys_charset("character_set",
sys_check_charset,
sys_update_charset,
sys_set_default_charset);
+sys_var_thd_client_charset sys_client_charset("client_character_set");
sys_var_thd_conv_charset sys_convert_charset("convert_character_set");
sys_var_bool_ptr sys_concurrent_insert("concurrent_insert",
&myisam_concurrent_insert);
@@ -331,6 +332,7 @@ sys_var *sys_variables[]=
&sys_binlog_cache_size,
&sys_buffer_results,
&sys_bulk_insert_buff_size,
+ &sys_client_charset,
&sys_concurrent_insert,
&sys_connect_timeout,
&sys_convert_charset,
@@ -437,6 +439,7 @@ struct show_var_st init_vars[]= {
{sys_bulk_insert_buff_size.name,(char*) &sys_bulk_insert_buff_size,SHOW_SYS},
{sys_charset.name, (char*) &sys_charset, SHOW_SYS},
{"character_sets", (char*) &charsets_list, SHOW_CHAR_PTR},
+ {sys_client_charset.name, (char*) &sys_client_charset, SHOW_SYS},
{sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS},
{sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS},
{sys_convert_charset.name, (char*) &sys_convert_charset, SHOW_SYS},
@@ -1174,6 +1177,55 @@ byte *sys_var_thd_conv_charset::value_ptr(THD *thd, enum_var_type type)
}
+bool sys_var_thd_client_charset::check(THD *thd, set_var *var)
+{
+ CHARSET_INFO *tmp;
+ char buff[80];
+ String str(buff,sizeof(buff), system_charset_info), *res;
+
+ if (!var->value) // Default value
+ {
+ var->save_result.charset= (var->type != OPT_GLOBAL ?
+ global_system_variables.thd_charset
+ : default_charset_info);
+ return 0;
+ }
+
+ if (!(res=var->value->val_str(&str)))
+ res= &empty_string;
+
+ if (!(tmp=get_charset_by_csname(res->c_ptr(),MYF(0))))
+ {
+ my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr());
+ return 1;
+ }
+ var->save_result.charset= tmp; // Save for update
+ return 0;
+}
+
+bool sys_var_thd_client_charset::update(THD *thd, set_var *var)
+{
+ if (var->type == OPT_GLOBAL)
+ global_system_variables.thd_charset= var->save_result.charset;
+ else
+ {
+ thd->variables.thd_charset= var->save_result.charset;
+ thd->protocol_simple.init(thd);
+ thd->protocol_prep.init(thd);
+ }
+ return 0;
+}
+
+
+byte *sys_var_thd_client_charset::value_ptr(THD *thd, enum_var_type type)
+{
+ CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
+ global_system_variables.thd_charset :
+ thd->variables.thd_charset);
+ return cs ? (byte*) cs->csname : (byte*) "";
+}
+
+
bool sys_var_timestamp::update(THD *thd, set_var *var)
{