summaryrefslogtreecommitdiff
path: root/sql/set_var.cc
diff options
context:
space:
mode:
authorunknown <bar@bar.mysql.r18.ru>2003-05-30 13:03:56 +0500
committerunknown <bar@bar.mysql.r18.ru>2003-05-30 13:03:56 +0500
commitf46e958e1e0a6ca13bb94dea7064b338c5474a8d (patch)
tree7682d84ae2c4a6586327f259fdad9663290deb15 /sql/set_var.cc
parent69e084af1eedff2dda70fcf073dd4fa349718b69 (diff)
downloadmariadb-git-f46e958e1e0a6ca13bb94dea7064b338c5474a8d.tar.gz
character_set_server is now updatable
character_set_database was added Code optimization: reuse more code for all character sets variables sql/mysqld.cc: character_set_server is now updatable character_set_database was added sql/set_var.cc: character_set_server is now updatable character_set_database was added sql/set_var.h: character_set_server is now updatable character_set_database was added sql/sql_base.cc: character_set_server is now updatable character_set_database was added sql/sql_class.cc: character_set_server is now updatable character_set_database was added sql/sql_class.h: character_set_server is now updatable character_set_database was added sql/sql_db.cc: character_set_server is now updatable character_set_database was added sql/sql_load.cc: character_set_server is now updatable character_set_database was added sql/sql_table.cc: character_set_server is now updatable character_set_database was added sql/sql_yacc.yy: character_set_server is now updatable character_set_database was added BitKeeper/etc/ignore: Added scripts/mysql_create_system_tables to the ignore list
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r--sql/set_var.cc107
1 files changed, 68 insertions, 39 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 3145504951d..e6cdaf1d3fb 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -103,14 +103,12 @@ 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_server",
- sys_check_charset,
- sys_update_charset,
- sys_set_default_charset);
-sys_var_str sys_charset_system("character_set_system",
+sys_var_character_set_server sys_character_set_server("character_set_server");
+sys_var_str sys_charset_system("character_set_system",
sys_check_charset,
sys_update_charset,
sys_set_default_charset);
+sys_var_character_set_database sys_character_set_database("character_set_database");
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");
@@ -362,6 +360,8 @@ sys_var *sys_variables[]=
&sys_binlog_cache_size,
&sys_buffer_results,
&sys_bulk_insert_buff_size,
+ &sys_character_set_server,
+ &sys_character_set_database,
&sys_character_set_client,
&sys_character_set_results,
&sys_collation_connection,
@@ -481,8 +481,9 @@ struct show_var_st init_vars[]= {
#endif
{sys_binlog_cache_size.name,(char*) &sys_binlog_cache_size, SHOW_SYS},
{sys_bulk_insert_buff_size.name,(char*) &sys_bulk_insert_buff_size,SHOW_SYS},
- {sys_charset.name, (char*) &sys_charset, SHOW_SYS},
+ {sys_character_set_server.name, (char*) &sys_character_set_server,SHOW_SYS},
{sys_charset_system.name, (char*) &sys_charset_system, SHOW_SYS},
+ {sys_character_set_database.name, (char*) &sys_character_set_database,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},
@@ -1288,23 +1289,28 @@ bool sys_var_character_set::check(THD *thd, set_var *var)
return 0;
}
-bool sys_var_character_set_client::update(THD *thd, set_var *var)
+bool sys_var_character_set::update(THD *thd, set_var *var)
{
- if (var->type == OPT_GLOBAL)
- global_system_variables.character_set_client= var->save_result.charset;
- else
- thd->variables.character_set_client= var->save_result.charset;
+ ci_ptr(thd,var->type)[0]= var->save_result.charset;
return 0;
}
-byte *sys_var_character_set_client::value_ptr(THD *thd, enum_var_type type)
+byte *sys_var_character_set::value_ptr(THD *thd, enum_var_type type)
{
- CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
- global_system_variables.character_set_client :
- thd->variables.character_set_client);
+ CHARSET_INFO *cs= ci_ptr(thd,type)[0];
return cs ? (byte*) cs->csname : (byte*) "NULL";
}
+
+
+CHARSET_INFO ** sys_var_character_set_client::ci_ptr(THD *thd, enum_var_type type)
+{
+ if (type == OPT_GLOBAL)
+ return &global_system_variables.character_set_client;
+ else
+ return &thd->variables.character_set_client;
+}
+
void sys_var_character_set_client::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
@@ -1313,58 +1319,81 @@ void sys_var_character_set_client::set_default(THD *thd, enum_var_type type)
thd->variables.character_set_client= global_system_variables.character_set_client;
}
-
-bool sys_var_collation_connection::update(THD *thd, set_var *var)
+CHARSET_INFO ** sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type)
{
- if (var->type == OPT_GLOBAL)
- global_system_variables.collation_connection= var->save_result.charset;
+ if (type == OPT_GLOBAL)
+ return &global_system_variables.character_set_results;
else
- thd->variables.collation_connection= var->save_result.charset;
- return 0;
+ return &thd->variables.character_set_results;
}
-byte *sys_var_collation_connection::value_ptr(THD *thd, enum_var_type type)
+void sys_var_character_set_results::set_default(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*) "NULL";
+ if (type == OPT_GLOBAL)
+ global_system_variables.character_set_results= NULL;
+ else
+ thd->variables.character_set_results= global_system_variables.character_set_results;
}
-void sys_var_collation_connection::set_default(THD *thd, enum_var_type type)
+CHARSET_INFO ** sys_var_character_set_server::ci_ptr(THD *thd, enum_var_type type)
+{
+ if (type == OPT_GLOBAL)
+ return &global_system_variables.character_set_server;
+ else
+ return &thd->variables.character_set_server;
+}
+
+void sys_var_character_set_server::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
- global_system_variables.collation_connection= default_charset_info;
+ global_system_variables.character_set_server= default_charset_info;
else
- thd->variables.collation_connection= global_system_variables.collation_connection;
+ thd->variables.character_set_server= global_system_variables.character_set_server;
+}
+
+CHARSET_INFO ** sys_var_character_set_database::ci_ptr(THD *thd, enum_var_type type)
+{
+ if (type == OPT_GLOBAL)
+ return &global_system_variables.character_set_database;
+ else
+ return &thd->variables.character_set_database;
}
-bool sys_var_character_set_results::update(THD *thd, set_var *var)
+void sys_var_character_set_database::set_default(THD *thd, enum_var_type type)
+{
+ if (type == OPT_GLOBAL)
+ global_system_variables.character_set_database= default_charset_info;
+ else
+ thd->variables.character_set_database= thd->db_charset;
+}
+
+bool sys_var_collation_connection::update(THD *thd, set_var *var)
{
if (var->type == OPT_GLOBAL)
- global_system_variables.character_set_results= var->save_result.charset;
+ global_system_variables.collation_connection= var->save_result.charset;
else
- thd->variables.character_set_results= var->save_result.charset;
+ thd->variables.collation_connection= var->save_result.charset;
return 0;
}
-byte *sys_var_character_set_results::value_ptr(THD *thd, enum_var_type type)
+byte *sys_var_collation_connection::value_ptr(THD *thd, enum_var_type type)
{
CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
- global_system_variables.character_set_results :
- thd->variables.character_set_results);
- return cs ? (byte*) cs->csname : (byte*) "NULL";
+ global_system_variables.collation_connection :
+ thd->variables.collation_connection);
+ return cs ? (byte*) cs->name : (byte*) "NULL";
}
-void sys_var_character_set_results::set_default(THD *thd, enum_var_type type)
+void sys_var_collation_connection::set_default(THD *thd, enum_var_type type)
{
if (type == OPT_GLOBAL)
- global_system_variables.character_set_results= NULL;
+ global_system_variables.collation_connection= default_charset_info;
else
- thd->variables.character_set_results= global_system_variables.character_set_results;
+ thd->variables.collation_connection= global_system_variables.collation_connection;
}
+
/*****************************************************************************
Functions to handle SET NAMES and SET CHARACTER SET
*****************************************************************************/