~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
 *
1999.6.1 by kalebral at gmail
update Copyright strings to a more common format to help with creating the master debian copyright file
4
 *  Copyright (C) 2008 Sun Microsystems, Inc.
390.1.2 by Monty Taylor
Fixed copyright headers in drizzled/
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
2234 by Brian Aker
Mass removal of ifdef/endif in favor of pragma once.
21
#pragma once
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
22
2141.3.1 by vjsamuel1990 at gmail
Merge encapsulate join_read_const_table() into JoinTable.
23
#include <drizzled/nested_join.h>
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
24
#include <drizzled/table.h>
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
25
2252.1.18 by Olaf van der Spek
Common fwd
26
namespace drizzled {
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
27
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
28
/**
29
 * A Table referenced in the FROM clause.
30
 *
31
 * These table references can be of several types that correspond to
32
 * different SQL elements. Below we list all types of TableLists with
33
 * the necessary conditions to determine when a TableList instance
34
 * belongs to a certain type.
35
 *
36
 * 1) table (TableList::view == NULL)
37
 *    - base table
38
 *    (TableList::derived == NULL)
39
 *    - subquery - TableList::table is a temp table
40
 *    (TableList::derived != NULL)
41
 *    
42
 *    @note
43
 *
44
 *    for schema tables TableList::field_translation may be != NULL
45
 *
46
 * 2) Was VIEW 
47
 * 3) nested table reference (TableList::nested_join != NULL)
48
 *     - table sequence - e.g. (t1, t2, t3)
49
 *     @todo how to distinguish from a JOIN?
50
 *     - general JOIN
51
 *     @todo how to distinguish from a table sequence?
52
 *     - NATURAL JOIN
53
 *     (TableList::natural_join != NULL)
54
 *     - JOIN ... USING
55
 *     (TableList::join_using_fields != NULL)
56
 *     - semi-join
57
 */
327.2.4 by Brian Aker
Refactoring table.h
58
class TableList
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
59
{
60
public:
1034.1.4 by Brian Aker
Fixed TableList to correctly construct (and removed memset() calls in
61
  TableList():
62
    next_local(NULL),
63
    next_global(NULL),
64
    prev_global(NULL),
65
    db(NULL),
66
    alias(NULL),
67
    table_name(NULL),
68
    option(NULL),
69
    on_expr(NULL),
70
    table(NULL),
71
    prep_on_expr(NULL),
72
    cond_equal(NULL),
73
    natural_join(NULL),
74
    is_natural_join(false),
75
    is_join_columns_complete(false),
76
    straight(false),
77
    force_index(false),
78
    ignore_leaves(false),
79
    join_using_fields(NULL),
80
    join_columns(NULL),
81
    next_name_resolution_table(NULL),
82
    index_hints(NULL),
83
    derived_result(NULL),
84
    derived(NULL),
85
    schema_select_lex(NULL),
86
    select_lex(NULL),
87
    next_leaf(NULL),
88
    outer_join(0),
89
    db_length(0),
90
    table_name_length(0),
91
    dep_tables(0),
92
    on_expr_dep_tables(0),
93
    nested_join(NULL),
94
    embedding(NULL),
95
    join_list(NULL),
96
    db_type(NULL),
97
    internal_tmp_table(false),
98
    is_alias(false),
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
99
    is_fqtn(false),
100
    create(false)
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
101
  {}
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
102
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
103
  /**
104
   * List of tables local to a subquery (used by SQL_LIST). Considers
105
   * views as leaves (unlike 'next_leaf' below). Created at parse time
106
   * in Select_Lex::add_table_to_list() -> table_list.link_in_list().
107
   */
327.2.4 by Brian Aker
Refactoring table.h
108
  TableList *next_local;
1034.1.4 by Brian Aker
Fixed TableList to correctly construct (and removed memset() calls in
109
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
110
  /** link in a global list of all queries tables */
1034.1.4 by Brian Aker
Fixed TableList to correctly construct (and removed memset() calls in
111
  TableList *next_global; 
112
  TableList **prev_global;
1874.1.1 by Brian Aker
Encapsulate schema_name it table_list.
113
114
private:
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
115
  char *db;
1874.1.1 by Brian Aker
Encapsulate schema_name it table_list.
116
117
public:
118
  const char *getSchemaName()
119
  {
120
    return db;
121
  }
122
123
  char **getSchemaNamePtr()
124
  {
125
    return &db;
126
  }
127
128
  void setSchemaName(char *arg)
129
  {
130
    db= arg;
131
  }
132
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
133
  const char *alias;
1874.1.2 by Brian Aker
Encapsulate table_name from table_list.
134
135
private:
2151.2.10 by Olaf van der Spek
Const fixes
136
  const char *table_name;
1874.1.2 by Brian Aker
Encapsulate table_name from table_list.
137
138
public:
139
  const char *getTableName()
140
  {
141
    return table_name;
142
  }
143
2151.2.10 by Olaf van der Spek
Const fixes
144
  void setTableName(const char *arg)
1874.1.2 by Brian Aker
Encapsulate table_name from table_list.
145
  {
146
    table_name= arg;
147
  }
148
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
149
  char *option; ///< Used by cache index
150
  Item *on_expr; ///< Used with outer join
151
  Table *table; ///< opened table
152
  /**
153
   * The structure of ON expression presented in the member above
154
   * can be changed during certain optimizations. This member
155
   * contains a snapshot of AND-OR structure of the ON expression
156
   * made after permanent transformations of the parse tree, and is
157
   * used to restore ON clause before every reexecution of a prepared
158
   * statement or stored procedure.
159
   */
160
  Item *prep_on_expr;
161
  COND_EQUAL *cond_equal; ///< Used with outer join
162
  /**
163
   * During parsing - left operand of NATURAL/USING join where 'this' is
164
   * the right operand. After parsing (this->natural_join == this) iff
165
   * 'this' represents a NATURAL or USING join operation. Thus after
166
   * parsing 'this' is a NATURAL/USING join iff (natural_join != NULL).
167
   */
327.2.4 by Brian Aker
Refactoring table.h
168
  TableList *natural_join;
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
169
  /**
170
   * True if 'this' represents a nested join that is a NATURAL JOIN.
171
   * For one of the operands of 'this', the member 'natural_join' points
172
   * to the other operand of 'this'.
173
   */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
174
  bool is_natural_join;
1030.1.2 by Brian Aker
More alignment for structures
175
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
176
  /** true if join_columns contains all columns of this table reference. */
1030.1.2 by Brian Aker
More alignment for structures
177
  bool is_join_columns_complete;
178
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
179
  bool straight; ///< optimize with prev table
180
  bool force_index; ///< prefer index over table scan
181
  bool ignore_leaves; ///< preload only non-leaf nodes
182
1637.1.3 by Brian Aker
This fixes the parser to no longer do the bad syntax around the cross join
183
  /*
184
    is the table a cartesian join, assumption is yes unless "solved"
185
  */
186
  bool isCartesian() const;
187
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
188
  /** Field names in a USING clause for JOIN ... USING. */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
189
  List<String> *join_using_fields;
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
190
  /**
191
   * Explicitly store the result columns of either a NATURAL/USING join or
192
   * an operand of such a join.
193
   */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
194
  List<Natural_join_column> *join_columns;
195
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
196
  /**
197
   * List of nodes in a nested join tree, that should be considered as
198
   * leaves with respect to name resolution. The leaves are: views,
199
   * top-most nodes representing NATURAL/USING joins, subqueries, and
200
   * base tables. All of these TableList instances contain a
201
   * materialized list of columns. The list is local to a subquery.
202
   */
327.2.4 by Brian Aker
Refactoring table.h
203
  TableList *next_name_resolution_table;
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
204
  /** Index names in a "... JOIN ... USE/IGNORE INDEX ..." clause. */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
205
  List<Index_hint> *index_hints;
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
206
  /**
207
   * select_result for derived table to pass it from table creation to table
208
   * filling procedure
209
   */
210
  select_union *derived_result;
211
  Select_Lex_Unit *derived; ///< Select_Lex_Unit of derived table */
212
  Select_Lex *schema_select_lex;
213
  /** link to select_lex where this table was used */
214
  Select_Lex *select_lex;
215
  /**
216
   * List of all base tables local to a subquery including all view
217
   * tables. Unlike 'next_local', this in this list views are *not*
218
   * leaves. Created in setup_tables() -> make_leaves_list().
219
   */
220
  TableList *next_leaf;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
221
  thr_lock_type lock_type;
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
222
  uint32_t outer_join; ///< Which join type
223
  size_t db_length;
224
  size_t table_name_length;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
225
226
  void set_underlying_merge();
520.1.22 by Brian Aker
Second pass of thd cleanup
227
  bool setup_underlying(Session *session);
1034.1.4 by Brian Aker
Fixed TableList to correctly construct (and removed memset() calls in
228
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
229
  /**
230
   * If you change placeholder(), please check the condition in
231
   * check_transactional_lock() too.
232
   */
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.
233
  bool placeholder();
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
234
  /**
235
   * Print table as it should be in join list.
236
   * 
237
   * @param str   string where table should be printed
238
   */
2215.2.1 by Stewart Smith
remove enum_query_type which was effectively unused. It was set to one value once, compared to it once (i.e. always true) and passed around everywhere doing nothing.
239
  void print(Session *session, String *str);
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
240
  /**
241
   * Sets insert_values buffer
242
   *
243
   * @param[in] memory pool for allocating
244
   *
245
   * @retval
246
   *  false - OK
247
   * @retval
248
   *  true - out of memory
249
   */
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
250
  bool set_insert_values(memory::Root *mem_root);
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
251
  /**
252
   * Find underlying base tables (TableList) which represent given
253
   * table_to_find (Table)
254
   *
255
   * @param[in] table to find
256
   *
257
   * @retval
258
   *  NULL if table is not found
259
   * @retval
260
   *  Pointer to found table reference
261
   */
327.2.4 by Brian Aker
Refactoring table.h
262
  TableList *find_underlying_table(Table *table);
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
263
  /**
264
   * Retrieve the first (left-most) leaf in a nested join tree with
265
   * respect to name resolution.
266
   *
267
   * @details
268
   *
269
   * Given that 'this' is a nested table reference, recursively walk
270
   * down the left-most children of 'this' until we reach a leaf
271
   * table reference with respect to name resolution.
272
   *
273
   * @retval
274
   *  If 'this' is a nested table reference - the left-most child of
275
   *  the tree rooted in 'this',
276
   *  else return 'this'
277
   */
327.2.4 by Brian Aker
Refactoring table.h
278
  TableList *first_leaf_for_name_resolution();
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
279
  /**
280
   * Retrieve the last (right-most) leaf in a nested join tree with
281
   * respect to name resolution.
282
   *
283
   * @details
284
   *
285
   * Given that 'this' is a nested table reference, recursively walk
286
   * down the right-most children of 'this' until we reach a leaf
287
   * table reference with respect to name resolution.
288
   *
289
   * @retval
290
   *  If 'this' is a nested table reference - the right-most child of
291
   *  the tree rooted in 'this',
292
   *  else 'this'
293
   */
327.2.4 by Brian Aker
Refactoring table.h
294
  TableList *last_leaf_for_name_resolution();
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
295
  /**
296
   * Test if this is a leaf with respect to name resolution.
297
   *
298
   * @details
299
   * 
300
   * A table reference is a leaf with respect to name resolution if
301
   * it is either a leaf node in a nested join tree (table, view,
302
   * schema table, subquery), or an inner node that represents a
303
   * NATURAL/USING join, or a nested join with materialized join
304
   * columns.
305
   *
306
   * @retval
307
   *  true if a leaf, false otherwise.
308
   */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
309
  bool is_leaf_for_name_resolution();
327.2.4 by Brian Aker
Refactoring table.h
310
  inline TableList *top_table()
1054.1.7 by Brian Aker
Refactor TableList methods.
311
  { return this; }
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
312
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
313
  /**
314
   * Return subselect that contains the FROM list this table is taken from
315
   *
316
   * @retval
317
   *  Subselect item for the subquery that contains the FROM list
318
   *  this table is taken from if there is any
319
   * @retval
320
   *  NULL otherwise
321
   */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
322
  Item_subselect *containing_subselect();
323
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
324
  /**
325
   * Compiles the tagged hints list and fills up st_table::keys_in_use_for_query,
326
   * st_table::keys_in_use_for_group_by, st_table::keys_in_use_for_order_by,
327
   * st_table::force_index and st_table::covering_keys.
1188.1.2 by Jay Pipes
Style and doxygen cleanup ONLY. Moves method documentation from source into header files. Removes TAB characters and cleans up indentation.
328
   *
329
   * @param the Table to operate on.
330
   *
331
   * @details
332
   *
333
   * The parser collects the index hints for each table in a "tagged list"
334
   * (TableList::index_hints). Using the information in this tagged list
335
   * this function sets the members Table::keys_in_use_for_query,
336
   * Table::keys_in_use_for_group_by, Table::keys_in_use_for_order_by,
337
   * Table::force_index and Table::covering_keys.
338
   *
339
   * Current implementation of the runtime does not allow mixing FORCE INDEX
340
   * and USE INDEX, so this is checked here. Then the FORCE INDEX list
341
   * (if non-empty) is appended to the USE INDEX list and a flag is set.
342
   * 
343
   * Multiple hints of the same kind are processed so that each clause
344
   * is applied to what is computed in the previous clause.
345
   * 
346
   * For example:
347
   *       USE INDEX (i1) USE INDEX (i2)
348
   *    is equivalent to
349
   *       USE INDEX (i1,i2)
350
   *    and means "consider only i1 and i2".
351
   *
352
   * Similarly
353
   *       USE INDEX () USE INDEX (i1)
354
   *    is equivalent to
355
   *       USE INDEX (i1)
356
   *    and means "consider only the index i1"
357
   *
358
   * It is OK to have the same index several times, e.g. "USE INDEX (i1,i1)" is
359
   * not an error.
360
   *
361
   * Different kind of hints (USE/FORCE/IGNORE) are processed in the following
362
   * order:
363
   *    1. All indexes in USE (or FORCE) INDEX are added to the mask.
364
   *    2. All IGNORE INDEX
365
   *       e.g. "USE INDEX i1, IGNORE INDEX i1, USE INDEX i1" will not use i1 at all
366
   *       as if we had "USE INDEX i1, USE INDEX i1, IGNORE INDEX i1".
367
   *       As an optimization if there is a covering index, and we have
368
   *       IGNORE INDEX FOR GROUP/order_st, and this index is used for the JOIN part,
369
   *       then we have to ignore the IGNORE INDEX FROM GROUP/order_st.
370
   *
371
   * @retval
372
   *   false no errors found
373
   * @retval
374
   *   true found and reported an error.
1188.1.1 by Jay Pipes
Style-only cleanups and doxygenation of TableList class and its members.
375
   */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
376
  bool process_index_hints(Table *table);
1637.1.3 by Brian Aker
This fixes the parser to no longer do the bad syntax around the cross join
377
378
  friend std::ostream& operator<<(std::ostream& output, const TableList &list)
379
  {
380
    output << "TableList:(";
381
    output << list.db;
382
    output << ", ";
383
    output << list.table_name;
384
    output << ", ";
385
    output << list.alias;
386
    output << ", ";
387
    output << "is_natural_join:" << list.is_natural_join;
388
    output << ", ";
389
    output << "is_join_columns_complete:" << list.is_join_columns_complete;
390
    output << ", ";
391
    output << "straight:" << list.straight;
392
    output << ", ";
393
    output << "force_index" << list.force_index;
394
    output << ", ";
395
    output << "ignore_leaves:" << list.ignore_leaves;
396
    output << ", ";
397
    output << "create:" << list.create;
398
    output << ", ";
399
    output << "outer_join:" << list.outer_join;
400
    output << ", ";
401
    output << "nested_join:" << list.nested_join;
402
    output << ")";
403
404
    return output;  // for multiple << operators.
405
  }
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
406
407
  void setIsAlias(bool in_is_alias)
408
  {
409
    is_alias= in_is_alias;
410
  }
411
412
  void setIsFqtn(bool in_is_fqtn)
413
  {
414
    is_fqtn= in_is_fqtn;
415
  }
416
417
  void setCreate(bool in_create)
418
  {
419
    create= in_create;
420
  }
421
422
  void setInternalTmpTable(bool in_internal_tmp_table)
423
  {
424
    internal_tmp_table= in_internal_tmp_table;
425
  }
426
427
  void setDbType(plugin::StorageEngine *in_db_type)
428
  {
429
    db_type= in_db_type;
430
  }
431
432
  void setJoinList(List<TableList> *in_join_list)
433
  {
434
    join_list= in_join_list;
435
  }
436
1637.2.7 by Vijay Samuel
Merge encapsulate TableList-2.
437
  void setEmbedding(TableList *in_embedding)
438
  {
439
    embedding= in_embedding;
440
  }
441
2141.3.3 by vjsamuel1990 at gmail
Merge change nested_join_st to NestedJoin
442
  void setNestedJoin(NestedJoin *in_nested_join)
1637.2.7 by Vijay Samuel
Merge encapsulate TableList-2.
443
  {
444
    nested_join= in_nested_join;
445
  }
446
447
  void setDepTables(table_map in_dep_tables)
448
  {
449
    dep_tables= in_dep_tables;
450
  }
451
452
  void setOnExprDepTables(table_map in_on_expr_dep_tables)
453
  {
454
    on_expr_dep_tables= in_on_expr_dep_tables;
455
  }
456
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
457
  bool getIsAlias() const
458
  {
459
    return is_alias;
460
  }
461
462
  bool getIsFqtn() const
463
  {
464
    return is_fqtn;
465
  }
466
1637.2.9 by Vijay Samuel
Merge Brian's request for isCreate() instead of getCreate().
467
  bool isCreate() const
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
468
  {
469
    return create;
470
  }
471
472
  bool getInternalTmpTable() const
473
  {
474
    return internal_tmp_table;
475
  }
476
477
  plugin::StorageEngine *getDbType() const
478
  {
479
    return db_type;
480
  }
481
1637.2.7 by Vijay Samuel
Merge encapsulate TableList-2.
482
  TableList *getEmbedding() const
483
  {
484
    return embedding;
485
  }
486
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
487
  List<TableList> *getJoinList() const
488
  {
489
    return join_list;
490
  }
491
2141.3.3 by vjsamuel1990 at gmail
Merge change nested_join_st to NestedJoin
492
  NestedJoin *getNestedJoin() const
1637.2.7 by Vijay Samuel
Merge encapsulate TableList-2.
493
  {
494
    return nested_join;
495
  }
496
497
  table_map getDepTables() const
498
  {
499
    return dep_tables;
500
  }
501
502
  table_map getOnExprDepTables() const
503
  {
504
    return on_expr_dep_tables;
505
  }
506
1910.2.4 by Brian Aker
Push some functions behind classes.
507
  void unlock_table_name();
508
  void unlock_table_names(TableList *last_table= NULL);
509
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
510
private:
1637.2.7 by Vijay Samuel
Merge encapsulate TableList-2.
511
  table_map dep_tables; ///< tables the table depends on
512
  table_map on_expr_dep_tables; ///< tables on expression depends on
2141.3.3 by vjsamuel1990 at gmail
Merge change nested_join_st to NestedJoin
513
  NestedJoin *nested_join; ///< if the element is a nested join
1637.2.7 by Vijay Samuel
Merge encapsulate TableList-2.
514
  TableList *embedding; ///< nested join containing the table
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
515
  List<TableList> *join_list; ///< join list the table belongs to
516
  plugin::StorageEngine *db_type; ///< table_type for handler
517
  bool internal_tmp_table;
2134.1.1 by Brian Aker
Remove dead bit from tablelist class.
518
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
519
  /** true if an alias for this table was specified in the SQL. */
520
  bool is_alias;
521
522
  /** 
523
   * true if the table is referred to in the statement using a fully
524
   * qualified name (<db_name>.<table_name>).
525
   */
526
  bool is_fqtn;
2134.1.1 by Brian Aker
Remove dead bit from tablelist class.
527
1641.1.1 by Zimin
move the comment of 'create' in TableList as well
528
  /**
529
   * This TableList object corresponds to the table to be created
530
   * so it is possible that it does not exist (used in CREATE TABLE
531
   * ... SELECT implementation).
532
   */
1637.2.6 by Vijay Samuel
Merge encapsulate TableList-1.
533
  bool create;
534
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
535
};
520.6.7 by Monty Taylor
Moved a bunch of crap out of common_includes.
536
537
void close_thread_tables(Session *session);
538
1280.1.10 by Monty Taylor
Put everything in drizzled into drizzled namespace.
539
} /* namespace drizzled */
540