summaryrefslogtreecommitdiff
path: root/sql/set_var.cc
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-05-21 17:44:12 +0500
committerunknown <bar@bar.mysql.r18.ru>2003-05-21 17:44:12 +0500
commit4637832fa19b2866929c1e5cb7c9dd0a40db15c9 (patch)
treec1d41d9ae86450c3c93a4424253c8553ffcec322 /sql/set_var.cc
parent01add721927cf92ec3368cb56d685777aacbfe42 (diff)
downloadmariadb-git-4637832fa19b2866929c1e5cb7c9dd0a40db15c9.tar.gz
Some SHOW VARIABLES have been renamed:
collation_client -> character_set_client collation_results -> character_set_results character_set -> character_set_server SET NAMES now doesn't start client->server conversion SET CHARACTER SET now starts both client->server and server->client conversion
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r--sql/set_var.cc82
1 files changed, 50 insertions, 32 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index c9b8584e672..a102991a0f2 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -101,7 +101,7 @@ sys_var_long_ptr sys_binlog_cache_size("binlog_cache_size",
&binlog_cache_size);
sys_var_thd_ulong sys_bulk_insert_buff_size("bulk_insert_buffer_size",
&SV::bulk_insert_buff_size);
-sys_var_str sys_charset("character_set",
+sys_var_str sys_charset("character_set_server",
sys_check_charset,
sys_update_charset,
sys_set_default_charset);
@@ -109,9 +109,9 @@ sys_var_str sys_charset_system("character_set_system",
sys_check_charset,
sys_update_charset,
sys_set_default_charset);
-sys_var_collation_client sys_collation_client("collation_client");
+sys_var_character_set_client sys_character_set_client("character_set_client");
+sys_var_character_set_results sys_character_set_results("character_set_results");
sys_var_collation_connection sys_collation_connection("collation_connection");
-sys_var_collation_results sys_collation_results("collation_results");
sys_var_bool_ptr sys_concurrent_insert("concurrent_insert",
&myisam_concurrent_insert);
sys_var_long_ptr sys_connect_timeout("connect_timeout",
@@ -353,9 +353,9 @@ sys_var *sys_variables[]=
&sys_binlog_cache_size,
&sys_buffer_results,
&sys_bulk_insert_buff_size,
- &sys_collation_client,
+ &sys_character_set_client,
+ &sys_character_set_results,
&sys_collation_connection,
- &sys_collation_results,
&sys_concurrent_insert,
&sys_connect_timeout,
&sys_default_week_format,
@@ -469,9 +469,9 @@ 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},
{sys_charset_system.name, (char*) &sys_charset_system, SHOW_SYS},
- {sys_collation_client.name, (char*) &sys_collation_client, SHOW_SYS},
+ {sys_character_set_client.name,(char*) &sys_character_set_client,SHOW_SYS},
+ {sys_character_set_results.name,(char*) &sys_character_set_results, SHOW_SYS},
{sys_collation_connection.name,(char*) &sys_collation_connection, SHOW_SYS},
- {sys_collation_results.name, (char*) &sys_collation_results, SHOW_SYS},
{sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS},
{sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS},
{"datadir", mysql_real_data_home, SHOW_CHAR},
@@ -1207,7 +1207,7 @@ CHARSET_INFO *get_old_charset_by_name(const char *name)
for (c= old_conv; c->old_name; c++)
{
if (!my_strcasecmp(&my_charset_latin1,name,c->old_name))
- return get_charset_by_name(c->new_name,MYF(0));
+ return get_charset_by_csname(c->new_name,MY_CS_PRIMARY,MYF(0));
}
return NULL;
}
@@ -1221,7 +1221,25 @@ bool sys_var_collation::check(THD *thd, set_var *var)
if (!(res=var->value->val_str(&str)))
res= &empty_string;
- if (!(tmp=get_charset_by_name(res->c_ptr(),MYF(0))) &&
+ if (!(tmp=get_charset_by_name(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_character_set::check(THD *thd, set_var *var)
+{
+ CHARSET_INFO *tmp;
+ char buff[80];
+ String str(buff,sizeof(buff), system_charset_info), *res;
+
+ if (!(res=var->value->val_str(&str)))
+ res= &empty_string;
+
+ if (!(tmp=get_charset_by_csname(res->c_ptr(),MY_CS_PRIMARY,MYF(0))) &&
!(tmp=get_old_charset_by_name(res->c_ptr())))
{
my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr());
@@ -1231,29 +1249,29 @@ bool sys_var_collation::check(THD *thd, set_var *var)
return 0;
}
-bool sys_var_collation_client::update(THD *thd, set_var *var)
+bool sys_var_character_set_client::update(THD *thd, set_var *var)
{
if (var->type == OPT_GLOBAL)
- global_system_variables.collation_client= var->save_result.charset;
+ global_system_variables.character_set_client= var->save_result.charset;
else
- thd->variables.collation_client= var->save_result.charset;
+ thd->variables.character_set_client= var->save_result.charset;
return 0;
}
-byte *sys_var_collation_client::value_ptr(THD *thd, enum_var_type type)
+byte *sys_var_character_set_client::value_ptr(THD *thd, enum_var_type type)
{
CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
- global_system_variables.collation_client :
- thd->variables.collation_client);
- return cs ? (byte*) cs->name : (byte*) "";
+ global_system_variables.character_set_client :
+ thd->variables.character_set_client);
+ return cs ? (byte*) cs->csname : (byte*) "NULL";
}
-void sys_var_collation_client::set_default(THD *thd, enum_var_type type)
+void sys_var_character_set_client::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
- global_system_variables.collation_client= default_charset_info;
+ global_system_variables.character_set_client= default_charset_info;
else
- thd->variables.collation_client= global_system_variables.collation_client;
+ thd->variables.character_set_client= global_system_variables.character_set_client;
}
@@ -1271,7 +1289,7 @@ byte *sys_var_collation_connection::value_ptr(THD *thd, enum_var_type type)
CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
global_system_variables.collation_connection :
thd->variables.collation_connection);
- return cs ? (byte*) cs->name : (byte*) "";
+ return cs ? (byte*) cs->name : (byte*) "NULL";
}
void sys_var_collation_connection::set_default(THD *thd, enum_var_type type)
@@ -1282,29 +1300,29 @@ void sys_var_collation_connection::set_default(THD *thd, enum_var_type type)
thd->variables.collation_connection= global_system_variables.collation_connection;
}
-bool sys_var_collation_results::update(THD *thd, set_var *var)
+bool sys_var_character_set_results::update(THD *thd, set_var *var)
{
if (var->type == OPT_GLOBAL)
- global_system_variables.collation_results= var->save_result.charset;
+ global_system_variables.character_set_results= var->save_result.charset;
else
- thd->variables.collation_results= var->save_result.charset;
+ thd->variables.character_set_results= var->save_result.charset;
return 0;
}
-byte *sys_var_collation_results::value_ptr(THD *thd, enum_var_type type)
+byte *sys_var_character_set_results::value_ptr(THD *thd, enum_var_type type)
{
CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
- global_system_variables.collation_results :
- thd->variables.collation_results);
- return cs ? (byte*) cs->name : (byte*) "";
+ global_system_variables.character_set_results :
+ thd->variables.character_set_results);
+ return cs ? (byte*) cs->csname : (byte*) "NULL";
}
-void sys_var_collation_results::set_default(THD *thd, enum_var_type type)
+void sys_var_character_set_results::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
- global_system_variables.collation_results= default_charset_info;
+ global_system_variables.character_set_results= NULL;
else
- thd->variables.collation_results= global_system_variables.collation_results;
+ thd->variables.character_set_results= global_system_variables.character_set_results;
}
@@ -1319,9 +1337,9 @@ int set_var_collation_client::check(THD *thd)
int set_var_collation_client::update(THD *thd)
{
- thd->variables.collation_client= collation_client;
+ thd->variables.character_set_client= character_set_client;
+ thd->variables.character_set_results= character_set_results;
thd->variables.collation_connection= collation_connection;
- thd->variables.collation_results= collation_results;
thd->protocol_simple.init(thd);
thd->protocol_prep.init(thd);
return 0;