~drizzle-trunk/drizzle/development

390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
 *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
3
 *
4
 *  Copyright (C) 2008 Sun Microsystems
5
 *
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; either version 2 of the License, or
9
 *  (at your option) any later version.
10
 *
11
 *  This program is distributed in the hope that it will be useful,
12
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 *  GNU General Public License for more details.
15
 *
16
 *  You should have received a copy of the GNU General Public License
17
 *  along with this program; if not, write to the Free Software
18
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
19
 */
20
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
21
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
22
#ifndef DRIZZLED_TABLE_LIST_H
23
#define DRIZZLED_TABLE_LIST_H
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
24
353 by Brian Aker
Moved Field iterator out to its own definition.
25
/*
26
  Table reference in the FROM clause.
27
28
  These table references can be of several types that correspond to
29
  different SQL elements. Below we list all types of TableLists with
30
  the necessary conditions to determine when a TableList instance
31
  belongs to a certain type.
32
33
  1) table (TableList::view == NULL)
34
     - base table
35
       (TableList::derived == NULL)
36
     - subquery - TableList::table is a temp table
37
       (TableList::derived != NULL)
38
     - information schema table
39
       (TableList::schema_table != NULL)
40
       NOTICE: for schema tables TableList::field_translation may be != NULL
769 by Brian Aker
Removing dead field translator code.
41
  2) Was VIEW 
353 by Brian Aker
Moved Field iterator out to its own definition.
42
  3) nested table reference (TableList::nested_join != NULL)
43
     - table sequence - e.g. (t1, t2, t3)
44
       TODO: how to distinguish from a JOIN?
45
     - general JOIN
46
       TODO: how to distinguish from a table sequence?
47
     - NATURAL JOIN
48
       (TableList::natural_join != NULL)
49
       - JOIN ... USING
50
         (TableList::join_using_fields != NULL)
51
     - semi-join
52
       ;
53
*/
54
55
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
56
#include <drizzled/table.h>
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
57
58
class Index_hint;
59
class COND_EQUAL;
60
class Natural_join_column;
61
class select_union;
62
class st_select_lex_unit;
63
class ST_SCHEMA_TABLE;
64
class st_select_lex;
65
class TMP_TABLE_PARAM;
66
class Item_subselect;
67
class Table;
68
553.1.3 by Monty Taylor
Split out nested_join.h.
69
struct nested_join_st;
70
327.2.4 by Brian Aker
Refactoring table.h
71
class TableList
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
72
{
73
public:
327.2.4 by Brian Aker
Refactoring table.h
74
  TableList() {}                          /* Remove gcc warning */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
75
76
  /**
327.2.4 by Brian Aker
Refactoring table.h
77
    Prepare TableList that consists of one table instance to use in
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
78
    simple_open_and_lock_tables
79
  */
80
  inline void init_one_table(const char *db_name_arg,
81
                             const char *table_name_arg,
82
                             enum thr_lock_type lock_type_arg)
83
  {
84
    memset(this, 0, sizeof(*this));
85
    db= (char*) db_name_arg;
86
    table_name= alias= (char*) table_name_arg;
87
    lock_type= lock_type_arg;
88
  }
89
90
  /*
91
    List of tables local to a subquery (used by SQL_LIST). Considers
92
    views as leaves (unlike 'next_leaf' below). Created at parse time
93
    in st_select_lex::add_table_to_list() -> table_list.link_in_list().
94
  */
327.2.4 by Brian Aker
Refactoring table.h
95
  TableList *next_local;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
96
  /* link in a global list of all queries tables */
327.2.4 by Brian Aker
Refactoring table.h
97
  TableList *next_global, **prev_global;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
98
  char		*db, *alias, *table_name, *schema_table_name;
99
  char          *option;                /* Used by cache index  */
100
  Item		*on_expr;		/* Used with outer join */
101
  Item          *sj_on_expr;
102
  /*
103
    (Valid only for semi-join nests) Bitmap of tables that are within the
104
    semi-join (this is different from bitmap of all nest's children because
105
    tables that were pulled out of the semi-join nest remain listed as
106
    nest's children).
107
  */
108
  table_map     sj_inner_tables;
109
  /* Number of IN-compared expressions */
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
110
  uint32_t          sj_in_exprs;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
111
  /*
112
    The structure of ON expression presented in the member above
113
    can be changed during certain optimizations. This member
114
    contains a snapshot of AND-OR structure of the ON expression
115
    made after permanent transformations of the parse tree, and is
116
    used to restore ON clause before every reexecution of a prepared
117
    statement or stored procedure.
118
  */
119
  Item          *prep_on_expr;
120
  COND_EQUAL    *cond_equal;            /* Used with outer join */
121
  /*
122
    During parsing - left operand of NATURAL/USING join where 'this' is
123
    the right operand. After parsing (this->natural_join == this) iff
124
    'this' represents a NATURAL or USING join operation. Thus after
125
    parsing 'this' is a NATURAL/USING join iff (natural_join != NULL).
126
  */
327.2.4 by Brian Aker
Refactoring table.h
127
  TableList *natural_join;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
128
  /*
129
    True if 'this' represents a nested join that is a NATURAL JOIN.
130
    For one of the operands of 'this', the member 'natural_join' points
131
    to the other operand of 'this'.
132
  */
133
  bool is_natural_join;
134
  /* Field names in a USING clause for JOIN ... USING. */
135
  List<String> *join_using_fields;
136
  /*
137
    Explicitly store the result columns of either a NATURAL/USING join or
138
    an operand of such a join.
139
  */
140
  List<Natural_join_column> *join_columns;
141
  /* true if join_columns contains all columns of this table reference. */
142
  bool is_join_columns_complete;
143
144
  /*
145
    List of nodes in a nested join tree, that should be considered as
146
    leaves with respect to name resolution. The leaves are: views,
147
    top-most nodes representing NATURAL/USING joins, subqueries, and
327.2.4 by Brian Aker
Refactoring table.h
148
    base tables. All of these TableList instances contain a
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
149
    materialized list of columns. The list is local to a subquery.
150
  */
327.2.4 by Brian Aker
Refactoring table.h
151
  TableList *next_name_resolution_table;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
152
  /* Index names in a "... JOIN ... USE/IGNORE INDEX ..." clause. */
153
  List<Index_hint> *index_hints;
154
  Table        *table;    /* opened table */
482 by Brian Aker
Remove uint.
155
  uint32_t          table_id; /* table id (from binlog) for opened table */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
156
  /*
157
    select_result for derived table to pass it from table creation to table
158
    filling procedure
159
  */
160
  select_union  *derived_result;
161
  /*
162
    Reference from aux_tables to local list entry of main select of
163
    multi-delete statement:
164
    delete t1 from t2,t1 where t1.a<'B' and t2.b=t1.b;
165
    here it will be reference of first occurrence of t1 to second (as you
166
    can see this lists can't be merged)
167
  */
327.2.4 by Brian Aker
Refactoring table.h
168
  TableList	*correspondent_table;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
169
  st_select_lex_unit *derived;		/* SELECT_LEX_UNIT of derived table */
170
  ST_SCHEMA_TABLE *schema_table;        /* Information_schema table */
171
  st_select_lex	*schema_select_lex;
172
  /*
173
    True when the view field translation table is used to convert
174
    schema table fields for backwards compatibility with SHOW command.
175
  */
176
  bool schema_table_reformed;
177
  TMP_TABLE_PARAM *schema_table_param;
178
  /* link to select_lex where this table was used */
179
  st_select_lex	*select_lex;
180
  /*
181
    List (based on next_local) of underlying tables of this view. I.e. it
182
    does not include the tables of subqueries used in the view. Is set only
183
    for merged views.
184
  */
327.2.4 by Brian Aker
Refactoring table.h
185
  TableList	*merge_underlying_list;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
186
  /*
187
    List of all base tables local to a subquery including all view
188
    tables. Unlike 'next_local', this in this list views are *not*
189
    leaves. Created in setup_tables() -> make_leaves_list().
190
  */
327.2.4 by Brian Aker
Refactoring table.h
191
  TableList	*next_leaf;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
192
  thr_lock_type lock_type;
193
  uint		outer_join;		/* Which join type */
194
  uint		shared;			/* Used in multi-upd */
195
  size_t        db_length;
196
  size_t        table_name_length;
197
  bool		straight;		/* optimize with prev table */
198
  bool          updating;               /* for replicate-do/ignore table */
199
  bool		force_index;		/* prefer index over table scan */
200
  bool          ignore_leaves;          /* preload only non-leaf nodes */
201
  table_map     dep_tables;             /* tables the table depends on      */
202
  table_map     on_expr_dep_tables;     /* tables on expression depends on  */
327.2.4 by Brian Aker
Refactoring table.h
203
  nested_join_st *nested_join;   /* if the element is a nested join  */
204
  TableList *embedding;             /* nested join containing the table */
205
  List<TableList> *join_list;/* join list the table belongs to   */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
206
  bool		cacheable_table;	/* stop PS caching */
207
  handlerton	*db_type;		/* table_type for handler */
208
  char		timestamp_buffer[20];	/* buffer for timestamp (19+1) */
209
  /*
327.2.4 by Brian Aker
Refactoring table.h
210
    This TableList object corresponds to the table to be created
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
211
    so it is possible that it does not exist (used in CREATE TABLE
212
    ... SELECT implementation).
213
  */
214
  bool          create;
215
  /* For transactional locking. */
216
  int           lock_timeout;           /* NOWAIT or WAIT [X]               */
217
  bool          lock_transactional;     /* If transactional lock requested. */
218
  bool          internal_tmp_table;
219
  /** true if an alias for this table was specified in the SQL. */
220
  bool          is_alias;
221
  /** true if the table is referred to in the statement using a fully
222
      qualified name (<db_name>.<table_name>).
223
  */
224
  bool          is_fqtn;
225
482 by Brian Aker
Remove uint.
226
  uint32_t i_s_requested_object;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
227
  bool has_db_lookup_value;
228
  bool has_table_lookup_value;
482 by Brian Aker
Remove uint.
229
  uint32_t table_open_method;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
230
  enum enum_schema_table_state schema_table_state;
231
  void set_underlying_merge();
520.1.22 by Brian Aker
Second pass of thd cleanup
232
  bool setup_underlying(Session *session);
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
233
  void cleanup_items();
234
  /*
235
    If you change placeholder(), please check the condition in
236
    check_transactional_lock() too.
237
  */
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
238
  bool placeholder();
520.1.22 by Brian Aker
Second pass of thd cleanup
239
  void print(Session *session, String *str, enum_query_type query_type);
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
240
  bool set_insert_values(MEM_ROOT *mem_root);
327.2.4 by Brian Aker
Refactoring table.h
241
  TableList *find_underlying_table(Table *table);
242
  TableList *first_leaf_for_name_resolution();
243
  TableList *last_leaf_for_name_resolution();
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
244
  bool is_leaf_for_name_resolution();
327.2.4 by Brian Aker
Refactoring table.h
245
  inline TableList *top_table()
327.1.7 by Brian Aker
Removed belong_to_view variable
246
    { return this; }
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
247
248
  /*
249
    Cleanup for re-execution in a prepared statement or a stored
250
    procedure.
251
  */
520.1.22 by Brian Aker
Second pass of thd cleanup
252
  void reinit_before_use(Session *session);
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
253
  Item_subselect *containing_subselect();
254
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
255
  /*
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
256
    Compiles the tagged hints list and fills up st_table::keys_in_use_for_query,
257
    st_table::keys_in_use_for_group_by, st_table::keys_in_use_for_order_by,
258
    st_table::force_index and st_table::covering_keys.
259
  */
260
  bool process_index_hints(Table *table);
261
};
520.6.7 by Monty Taylor
Moved a bunch of crap out of common_includes.
262
263
void close_thread_tables(Session *session);
264
584.1.15 by Monty Taylor
The mega-patch from hell. Renamed sql_class to session (since that's what it is) and removed it and field and table from common_includes.
265
#endif /* DRIZZLED_TABLE_LIST_H */