1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems, Inc.
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 2 of the License.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
20
#ifndef DRIZZLED_NAME_RESOLUTION_CONTEXT_H
21
#define DRIZZLED_NAME_RESOLUTION_CONTEXT_H
23
#include "drizzled/item.h"
29
class SecurityContext;
34
* Instances of Name_resolution_context store the information necesary for
35
* name resolution of Items and other context analysis of a query made in
38
* This structure is a part of Select_Lex, a pointer to this structure is
39
* assigned when an item is created (which happens mostly during parsing
40
* (sql_yacc.yy)), but the structure itself will be initialized after parsing
45
* Move subquery of INSERT ... SELECT and CREATE ... SELECT to
46
* separate Select_Lex which allow to remove tricks of changing this
47
* structure before and after INSERT/CREATE and its SELECT to make correct
48
* field name resolution.
50
class Name_resolution_context: public memory::SqlAlloc
54
* The name resolution context to search in when an Item cannot be
55
* resolved in this context (the context of an outer select)
57
Name_resolution_context *outer_context;
60
* List of tables used to resolve the items of this context. Usually these
61
* are tables from the FROM clause of SELECT statement. The exceptions are
62
* INSERT ... SELECT and CREATE ... SELECT statements, where SELECT
63
* subquery is not moved to a separate Select_Lex. For these types of
64
* statements we have to change this member dynamically to ensure correct
65
* name resolution of different parts of the statement.
67
TableList *table_list;
69
* In most cases the two table references below replace 'table_list' above
70
* for the purpose of name resolution. The first and last name resolution
71
* table references allow us to search only in a sub-tree of the nested
72
* join tree in a FROM clause. This is needed for NATURAL JOIN, JOIN ... USING
75
TableList *first_name_resolution_table;
77
* Last table to search in the list of leaf table references that begins
78
* with first_name_resolution_table.
80
TableList *last_name_resolution_table;
83
* Select_Lex item belong to, in case of merged VIEW it can differ from
84
* Select_Lex where item was created, so we can't use table_list/field_list
87
Select_Lex *select_lex;
90
* Processor of errors caused during Item name resolving, now used only to
91
* hide underlying tables in errors about views (i.e. it substitute some
94
void (*error_processor)(Session *, void *);
95
void *error_processor_data;
98
* When true items are resolved in this context both against the
99
* SELECT list and this->table_list. If false, items are resolved
100
* only against this->table_list.
102
bool resolve_in_select_list;
105
* Security context of this name resolution context. It's used for views
106
* and is non-zero only if the view is defined with SQL SECURITY DEFINER.
108
SecurityContext *security_ctx;
110
Name_resolution_context()
115
error_processor_data(0),
121
resolve_in_select_list= false;
122
error_processor= &dummy_error_processor;
123
first_name_resolution_table= NULL;
124
last_name_resolution_table= NULL;
127
inline void resolve_in_table_list_only(TableList *tables)
129
table_list= first_name_resolution_table= tables;
130
resolve_in_select_list= false;
133
inline void process_error(Session *session)
135
(*error_processor)(session, error_processor_data);
139
} /* namespace drizzled */
141
#endif /* DRIZZLED_NAME_RESOLUTION_CONTEXT_H */