![]()  | 
  
    MySQL 8.0.44
    
   Source Code Documentation 
   | 
 
A per-session context which is always available at any point of execution, because in practice it's accessible from THD which contains: More...
#include <opt_trace_context.h>
Classes | |
| class | Opt_trace_context_impl | 
| To have the smallest impact on THD's size, most of the implementation is moved to a separate class Opt_trace_context_impl which is instantiated on the heap when really needed.  More... | |
Public Types | |
| enum | { FLAG_DEFAULT = 0 , FLAG_ENABLED = 1 << 0 , FLAG_ONE_LINE = 1 << 1 } | 
| Flags' numeric values for @@optimizer_trace variable.  More... | |
| enum | feature_value {  GREEDY_SEARCH = 1 << 0 , RANGE_OPTIMIZER = 1 << 1 , DYNAMIC_RANGE = 1 << 2 , REPEATED_SUBSELECT = 1 << 3 , MISC = 1 << 7 }  | 
| Features' numeric values for @@optimizer_trace_features variable.  More... | |
Public Member Functions | |
| Opt_trace_context () | |
| ~Opt_trace_context () | |
| bool | start (bool support_I_S, bool support_dbug_or_missing_priv, bool end_marker, bool one_line, long offset, long limit, ulong max_mem_size, ulonglong features) | 
| Starts a new trace.  More... | |
| void | end () | 
| Ends the current (=open, unfinished, being-generated) trace.  More... | |
| bool | is_started () const | 
| Returns whether there is a current trace.  More... | |
| bool | support_I_S () const | 
| void | set_query (const char *query, size_t length, const CHARSET_INFO *charset) | 
| Set the "original" query (not transformed, as sent by client) for the current trace.  More... | |
| void | reset () | 
| Brainwash: deletes all remembered traces and resets counters regarding OFFSET/LIMIT (so that the next statement is considered as "at offset
0").  More... | |
| bool | get_end_marker () const | 
| bool | get_one_line () const | 
| void | missing_privilege () | 
| User lacks privileges to see the current trace.  More... | |
| bool | feature_enabled (feature_value f) const | 
| Opt_trace_stmt * | get_current_stmt_in_gen () | 
| Opt_trace_struct is passed Opt_trace_context*, and needs to know to which statement's trace to attach, so Opt_trace_context must provide this information.  More... | |
| const Opt_trace_stmt * | get_next_stmt_for_I_S (long *got_so_far) const | 
| void | disable_I_S_for_this_and_children () | 
| Temporarily disables I_S for this trace and its children.  More... | |
| void | restore_I_S () | 
| Restores I_S support to what it was before the previous call to disable_I_S_for_this_and_children().  More... | |
Static Public Attributes | |
| static const char * | flag_names [] | 
Names of flags for @@optimizer_trace variable of sys_vars.cc :  More... | |
| static const char * | feature_names [] | 
Features' names for @@optimizer_trace_features variable of sys_vars.cc:  More... | |
| static const feature_value | default_features | 
| Optimizer features which are traced by default.  More... | |
Private Member Functions | |
| void | purge_stmts (bool purge_all) | 
| Find and delete unneeded traces.  More... | |
| size_t | allowed_mem_size_for_current_stmt () const | 
| Compute maximum allowed memory size for current trace.  More... | |
| Opt_trace_context (const Opt_trace_context &) | |
| Not defined copy constructor, to disallow copy.  More... | |
| Opt_trace_context & | operator= (const Opt_trace_context &) | 
| Not defined assignment operator, to disallow assignment.  More... | |
Private Attributes | |
| Opt_trace_context_impl * | pimpl | 
| int | I_S_disabled | 
| Dynamically allocated implementation.  More... | |
A per-session context which is always available at any point of execution, because in practice it's accessible from THD which contains:
Opt_trace_context opt_trace;
It maintains properties of the session's regarding tracing: enabled/disabled state, style (all trace on one line, or not, etc), a list of all remembered traces of previous and current SQL statement (as restricted by OFFSET/LIMIT), and a pointer to the current (being-generated) trace (which itself has a pointer to its current open object/array).
Here is why the context needs to provide the current open object/array:
    #0  Item_in_subselect::single_value_transformer
        - opens an object for key "transformation"
    #1  Item_in_subselect::select_in_like_transformer - does no tracing
    #2  Item_allany_subselect::select_transformer - does no tracing
    #3  Query_block::prepare - opens an object for key "join_preparation"
 So the object opened in #3 would have to be passed in argument to #2 and #1 in order to finally reach #0 where object "transformation" would be added to it.| anonymous enum | 
Features' numeric values for @@optimizer_trace_features variable.
      
  | 
  inline | 
| Opt_trace_context::~Opt_trace_context | ( | ) | 
      
  | 
  private | 
Not defined copy constructor, to disallow copy.
      
  | 
  private | 
Compute maximum allowed memory size for current trace.
The current trace is the only one active. Other traces break down in two groups:
      
  | 
  inline | 
Temporarily disables I_S for this trace and its children.
| void Opt_trace_context::end | ( | void | ) | 
Ends the current (=open, unfinished, being-generated) trace.
If missing_privilege() has been called between start() and end(), end() restores I_S support to what it was before the call to missing_privilege(). This is the key to ensure that missing_privilege() does not disable I_S support for the rest of the connection's life! 
      
  | 
  inline | 
| f | feature | 
      
  | 
  inline | 
Opt_trace_struct is passed Opt_trace_context*, and needs to know to which statement's trace to attach, so Opt_trace_context must provide this information.
      
  | 
  inline | 
| const Opt_trace_stmt * Opt_trace_context::get_next_stmt_for_I_S | ( | long * | got_so_far | ) | const | 
| [in,out] | got_so_far | How many statements the caller got so far (by previous calls to this function); function updates this count. | 
      
  | 
  inline | 
      
  | 
  inline | 
Returns whether there is a current trace.
| void Opt_trace_context::missing_privilege | ( | ) | 
User lacks privileges to see the current trace.
Make the trace appear empty in Opt_trace_info, and disable I_S for all its upcoming children.
Once a call to this function has been made, subsequent calls to it before end() have no effects. 
      
  | 
  private | 
Not defined assignment operator, to disallow assignment.
      
  | 
  private | 
Find and delete unneeded traces.
For example if OFFSET=-1,LIMIT=1, only the last trace is needed. When a new trace is started, the previous traces becomes unneeded and this function deletes them which frees memory.
| purge_all | if true, ignore OFFSET and thus delete everything | 
| void Opt_trace_context::reset | ( | void | ) | 
Brainwash: deletes all remembered traces and resets counters regarding OFFSET/LIMIT (so that the next statement is considered as "at offset 0").
Does not reset the @@optimizer_trace_offset/limit variables.
      
  | 
  inline | 
Restores I_S support to what it was before the previous call to disable_I_S_for_this_and_children().
| void Opt_trace_context::set_query | ( | const char * | query, | 
| size_t | length, | ||
| const CHARSET_INFO * | charset | ||
| ) | 
Set the "original" query (not transformed, as sent by client) for the current trace.
| query | query | 
| length | query's length | 
| charset | charset which was used to encode this query | 
| bool Opt_trace_context::start | ( | bool | support_I_S, | 
| bool | support_dbug_or_missing_priv, | ||
| bool | end_marker, | ||
| bool | one_line, | ||
| long | offset, | ||
| long | limit, | ||
| ulong | max_mem_size, | ||
| ulonglong | features | ||
| ) | 
Starts a new trace.
| support_I_S | Whether this statement should have its trace in information_schema | 
| support_dbug_or_missing_priv | 'true' if this statement should have its trace in the dbug log (–debug), or if missing_privilege() may be called on this trace | 
| end_marker | For a key/(object|array) pair, should the key be repeated in a comment when the object|array closes? like                          "key_foo": {
                                      multi-line blah
                                    } / * key_foo * / This is for human-readability only, not valid in JSON. Note that YAML supports #-prefixed comments (we would just need to put the next item's "," before the current item's "#").  | 
| one_line | Should the trace be on a single line without indentation? (More compact for network transfer to programs, less human-readable.) | 
| offset | Offset for restricting trace production. | 
| limit | Limit for restricting trace production. | 
| max_mem_size | Maximum allowed for cumulated size of all remembered traces. | 
| features | Only these optimizer features should be traced. | 
| false | ok | 
| true | error (OOM): instance is unusable, so only destructor is permitted on it; any other member function has undefined effects. | 
| bool Opt_trace_context::support_I_S | ( | ) | const | 
      
  | 
  static | 
Optimizer features which are traced by default.
      
  | 
  static | 
Features' names for @@optimizer_trace_features variable of sys_vars.cc: 
      
  | 
  static | 
Names of flags for @@optimizer_trace variable of sys_vars.cc : 
      
  | 
  private | 
Dynamically allocated implementation.
<>0 <=> any to-be-created statement's trace should not be in information_schema. This applies to next statements, their substatements, etc.
      
  | 
  private |