List:Internals« Previous MessageNext Message »
From:Sergei Golubchik Date:July 12 2009 9:09am
Subject:Re: *offset question - what is it and where is it set
View as plain text  
Hi, Joseph!

On Jul 11, Joseph Lukas wrote:
> Ok so I think I found how to get the value for the variables as
> currently set.  However I am having trouble getting it to get the
> variable.
>
> In looking at the set_default which gets the global_system_variable
> value I cannot find anywhere what *offset is nor any place it is
> defined. I tried a search of all files in the MySQL repository folder
> but with 631 different possible files is a little bit hard.
>
> What I want to do is have set function check if the variable is valid
> then use thd->variables.<variable> to get the value.  As in searching
> this is the location of system variables for the session.  I looked at
> the definition and it does not help that the names are a little
> different. Such as sort_buffer_size is sortbuffer_size in the struct
> for the variables.

if you look at how SET @@variable= is parsed in sql_yacc.yy, you'll find
the function to check if the variable is valid.

It's find_sys_var().

> Implemented in one set default is in set_var.cc
>
> void sys_var_thd_storage_engine::set_default(THD *thd, enum_var_type type)
> {
>   plugin_ref old_value, new_value, *value;
>   if (type == OPT_GLOBAL)
>   {
>     value= &(global_system_variables.*offset);
>     new_value= ha_lock_engine(NULL, myisam_hton);
>   }
>   else
>   {
>     value= &(thd->variables.*offset);
>     new_value= my_plugin_lock(NULL, &(global_system_variables.*offset));
>   }
>   DBUG_ASSERT(new_value);
>   old_value= *value;
>   *value= new_value;
>   plugin_unlock(NULL, old_value);
> }
>
> If I can use *offset in the same way in another file I should have no
> problem but I have to know what the *offset is defined as and how it
> sets to the proper variable.

You cannot use *offset, it's not even public in some classes.
You should use public methods like check(), uppate(), and set_default().

> Can somebody please help explain where *offset is setup or how it
> works above?  This is my current set back and I am getting very
> frustrated.

Please, don't invent new ways to bypass the interface, SET is already
implemented, use the existing functions and solutions.

Regards / Mit vielen Grüßen,
Sergei

-- 
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /   Sergei Golubchik <serg@stripped>
 / /|_/ / // /\ \/ /_/ / /__  Principal Software Engineer/Server Architect
/_/  /_/\_, /___/\___\_\___/  Sun Microsystems GmbH, HRB München 161028
       <___/                  Sonnenallee 1, 85551 Kirchheim-Heimstetten
Geschäftsführer: Thomas Schroeder, Wolfgang Engels, Wolf Frenkel
Vorsitzender des Aufsichtsrates: Martin Häring
Thread
*offset question - what is it and where is it set Joseph Lukas11 Jul
  • Re: *offset question - what is it and where is it setDavi Arnaut12 Jul
  • Re: *offset question - what is it and where is it setSergei Golubchik12 Jul
    • *offset question - what is it and where is it setJoseph Lukas12 Jul
      • Re: *offset question - what is it and where is it setSergei Golubchik13 Jul