summaryrefslogtreecommitdiff
path: root/sql/set_var.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r--sql/set_var.cc24
1 files changed, 15 insertions, 9 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 9744f0f6f39..067abcb049e 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -533,7 +533,6 @@ static my_old_conv old_conv[]=
CHARSET_INFO *get_old_charset_by_name(const char *name)
{
my_old_conv *conv;
-
for (conv= old_conv; conv->old_name; conv++)
{
if (!my_strcasecmp(&my_charset_latin1, name, conv->old_name))
@@ -826,15 +825,20 @@ int set_var::check(THD *thd)
*/
int set_var::light_check(THD *thd)
{
+ if (var->is_readonly())
+ {
+ my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0), var->name.str, "read only");
+ return -1;
+ }
if (var->check_type(type))
{
int err= type == OPT_GLOBAL ? ER_LOCAL_VARIABLE : ER_GLOBAL_VARIABLE;
my_error(err, MYF(0), var->name.str);
return -1;
}
- if (type == OPT_GLOBAL &&
- check_global_access(thd, PRIV_SET_GLOBAL_SYSTEM_VARIABLE))
- return 1;
+
+ if (type == OPT_GLOBAL && var->on_check_access_global(thd))
+ return 1;
if (value && value->fix_fields_if_needed_for_scalar(thd, &value))
return -1;
@@ -1034,7 +1038,7 @@ int set_var_collation_client::check(THD *thd)
if (!is_supported_parser_charset(character_set_client))
{
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "character_set_client",
- character_set_client->csname);
+ character_set_client->cs_name.str);
return 1;
}
return 0;
@@ -1089,7 +1093,7 @@ int fill_sysvars(THD *thd, TABLE_LIST *tables, COND *cond)
StringBuffer<STRING_BUFFER_USUAL_SIZE> strbuf(scs);
const char *wild= thd->lex->wild ? thd->lex->wild->ptr() : 0;
Field **fields=tables->table->field;
- bool has_file_acl= !check_access(thd, FILE_ACL, any_db, NULL, NULL, 0, 1);
+ bool has_file_acl= !check_access(thd, FILE_ACL, any_db.str, NULL,NULL,0,1);
DBUG_ASSERT(tables->table->in_use == thd);
@@ -1219,12 +1223,14 @@ int fill_sysvars(THD *thd, TABLE_LIST *tables, COND *cond)
{
uint i;
strbuf.length(0);
- for (i=0; i + 1 < tl->count; i++)
+ for (i=0; i < tl->count; i++)
{
- strbuf.append(tl->type_names[i]);
+ const char *name= tl->type_names[i];
+ strbuf.append(name, strlen(name));
strbuf.append(',');
}
- strbuf.append(tl->type_names[i]);
+ if (!strbuf.is_empty())
+ strbuf.chop();
fields[11]->set_notnull();
fields[11]->store(strbuf.ptr(), strbuf.length(), scs);
}