~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/name_resolution_context.h

  • Committer: Jay Pipes
  • Date: 2009-06-11 20:45:34 UTC
  • mto: This revision was merged to the branch mainline in revision 1061.
  • Revision ID: jpipes@serialcoder-20090611204534-oz8iqxwlazqriuf4
Doxygenates documentation for name_resolution_context.h

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
class Session;
26
26
class Select_Lex;
27
27
 
28
 
/*
29
 
  Instances of Name_resolution_context store the information necesary for
30
 
  name resolution of Items and other context analysis of a query made in
31
 
  fix_fields().
32
 
 
33
 
  This structure is a part of Select_Lex, a pointer to this structure is
34
 
  assigned when an item is created (which happens mostly during  parsing
35
 
  (sql_yacc.yy)), but the structure itself will be initialized after parsing
36
 
  is complete
37
 
 
38
 
  TODO: move subquery of INSERT ... SELECT and CREATE ... SELECT to
39
 
  separate Select_Lex which allow to remove tricks of changing this
40
 
  structure before and after INSERT/CREATE and its SELECT to make correct
41
 
  field name resolution.
42
 
*/
43
 
 
 
28
/**
 
29
 * Instances of Name_resolution_context store the information necesary for
 
30
 * name resolution of Items and other context analysis of a query made in
 
31
 * fix_fields().
 
32
 *
 
33
 * This structure is a part of Select_Lex, a pointer to this structure is
 
34
 * assigned when an item is created (which happens mostly during  parsing
 
35
 * (sql_yacc.yy)), but the structure itself will be initialized after parsing
 
36
 * is complete
 
37
 *
 
38
 * @todo
 
39
 *
 
40
 * Move subquery of INSERT ... SELECT and CREATE ... SELECT to
 
41
 * separate Select_Lex which allow to remove tricks of changing this
 
42
 * structure before and after INSERT/CREATE and its SELECT to make correct
 
43
 * field name resolution.
 
44
 */
44
45
class Name_resolution_context: public Sql_alloc
45
46
{
46
47
public:
47
 
  /*
48
 
    The name resolution context to search in when an Item cannot be
49
 
    resolved in this context (the context of an outer select)
50
 
  */
 
48
  /**
 
49
   * The name resolution context to search in when an Item cannot be
 
50
   * resolved in this context (the context of an outer select)
 
51
   */
51
52
  Name_resolution_context *outer_context;
52
53
 
53
 
  /*
54
 
    List of tables used to resolve the items of this context.  Usually these
55
 
    are tables from the FROM clause of SELECT statement.  The exceptions are
56
 
    INSERT ... SELECT and CREATE ... SELECT statements, where SELECT
57
 
    subquery is not moved to a separate Select_Lex.  For these types of
58
 
    statements we have to change this member dynamically to ensure correct
59
 
    name resolution of different parts of the statement.
60
 
  */
 
54
  /**
 
55
   * List of tables used to resolve the items of this context.  Usually these
 
56
   * are tables from the FROM clause of SELECT statement.  The exceptions are
 
57
   * INSERT ... SELECT and CREATE ... SELECT statements, where SELECT
 
58
   * subquery is not moved to a separate Select_Lex.  For these types of
 
59
   * statements we have to change this member dynamically to ensure correct
 
60
   * name resolution of different parts of the statement.
 
61
   */
61
62
  TableList *table_list;
62
 
  /*
63
 
    In most cases the two table references below replace 'table_list' above
64
 
    for the purpose of name resolution. The first and last name resolution
65
 
    table references allow us to search only in a sub-tree of the nested
66
 
    join tree in a FROM clause. This is needed for NATURAL JOIN, JOIN ... USING
67
 
    and JOIN ... ON.
68
 
  */
 
63
  /**
 
64
   * In most cases the two table references below replace 'table_list' above
 
65
   * for the purpose of name resolution. The first and last name resolution
 
66
   * table references allow us to search only in a sub-tree of the nested
 
67
   * join tree in a FROM clause. This is needed for NATURAL JOIN, JOIN ... USING
 
68
   * and JOIN ... ON.
 
69
   */
69
70
  TableList *first_name_resolution_table;
70
 
  /*
71
 
    Last table to search in the list of leaf table references that begins
72
 
    with first_name_resolution_table.
73
 
  */
 
71
  /**
 
72
   * Last table to search in the list of leaf table references that begins
 
73
   * with first_name_resolution_table.
 
74
   */
74
75
  TableList *last_name_resolution_table;
75
76
 
76
 
  /*
77
 
    Select_Lex item belong to, in case of merged VIEW it can differ from
78
 
    Select_Lex where item was created, so we can't use table_list/field_list
79
 
    from there
80
 
  */
 
77
  /**
 
78
   * Select_Lex item belong to, in case of merged VIEW it can differ from
 
79
   * Select_Lex where item was created, so we can't use table_list/field_list
 
80
   * from there
 
81
   */
81
82
  Select_Lex *select_lex;
82
83
 
83
 
  /*
84
 
    Processor of errors caused during Item name resolving, now used only to
85
 
    hide underlying tables in errors about views (i.e. it substitute some
86
 
    errors for views)
87
 
  */
 
84
  /**
 
85
   * Processor of errors caused during Item name resolving, now used only to
 
86
   * hide underlying tables in errors about views (i.e. it substitute some
 
87
   * errors for views)
 
88
   */
88
89
  void (*error_processor)(Session *, void *);
89
90
  void *error_processor_data;
90
91
 
91
 
  /*
92
 
    When true items are resolved in this context both against the
93
 
    SELECT list and this->table_list. If false, items are resolved
94
 
    only against this->table_list.
95
 
  */
 
92
  /**
 
93
   * When true items are resolved in this context both against the
 
94
   * SELECT list and this->table_list. If false, items are resolved
 
95
   * only against this->table_list.
 
96
   */
96
97
  bool resolve_in_select_list;
97
98
 
98
 
  /*
99
 
    Security context of this name resolution context. It's used for views
100
 
    and is non-zero only if the view is defined with SQL SECURITY DEFINER.
101
 
  */
 
99
  /**
 
100
   * Security context of this name resolution context. It's used for views
 
101
   * and is non-zero only if the view is defined with SQL SECURITY DEFINER.
 
102
   */
102
103
  Security_context *security_ctx;
103
104
 
104
105
  Name_resolution_context()
105
 
    :outer_context(0), table_list(0), select_lex(0),
106
 
     error_processor_data(0),
107
 
     security_ctx(0)
 
106
    :
 
107
      outer_context(0), 
 
108
      table_list(0), 
 
109
      select_lex(0),
 
110
      error_processor_data(0),
 
111
      security_ctx(0)
108
112
    {}
109
113
 
110
 
  void init()
111
 
    {
112
 
      resolve_in_select_list= false;
113
 
      error_processor= &dummy_error_processor;
114
 
      first_name_resolution_table= NULL;
115
 
      last_name_resolution_table= NULL;
116
 
    }
117
 
 
118
 
  void resolve_in_table_list_only(TableList *tables)
119
 
    {
120
 
      table_list= first_name_resolution_table= tables;
121
 
      resolve_in_select_list= false;
122
 
    }
123
 
 
124
 
  void process_error(Session *session)
125
 
    {
126
 
      (*error_processor)(session, error_processor_data);
127
 
    }
 
114
  inline void init()
 
115
  {
 
116
    resolve_in_select_list= false;
 
117
    error_processor= &dummy_error_processor;
 
118
    first_name_resolution_table= NULL;
 
119
    last_name_resolution_table= NULL;
 
120
  }
 
121
 
 
122
  inline void resolve_in_table_list_only(TableList *tables)
 
123
  {
 
124
    table_list= first_name_resolution_table= tables;
 
125
    resolve_in_select_list= false;
 
126
  }
 
127
 
 
128
  inline void process_error(Session *session)
 
129
  {
 
130
    (*error_processor)(session, error_processor_data);
 
131
  }
128
132
};
129
133
 
130
134
#endif /* DRIZZLED_NAME_RESOLUTION_CONTEXT_H */