~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
 */
1 by brian
clean slate
20
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
21
/* Structs that defines the Table */
1 by brian
clean slate
22
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
23
#ifndef DRIZZLED_TABLE_H
24
#define DRIZZLED_TABLE_H
25
992.1.25 by Monty Taylor
Moved myisam to new plugin system.
26
#include <plugin/myisam/myisam.h>
327.2.3 by Brian Aker
Refactoring of class Table
27
#include <drizzled/order.h>
28
#include <drizzled/filesort_info.h>
327.2.4 by Brian Aker
Refactoring table.h
29
#include <drizzled/natural_join_column.h>
353 by Brian Aker
Moved Field iterator out to its own definition.
30
#include <drizzled/field_iterator.h>
520.8.6 by Monty Taylor
Removed handler from common_includes.
31
#include <mysys/hash.h>
32
#include <drizzled/handler.h>
575.4.5 by Monty Taylor
Added lex_string.h header.
33
#include <drizzled/lex_string.h>
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.
34
#include <drizzled/table_list.h>
798 by Brian Aker
Updated table_share tto its own file (yess, it will eventually go away).
35
#include <drizzled/table_share.h>
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
36
584.1.13 by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes.
37
class Item;
1 by brian
clean slate
38
class Item_subselect;
848 by Brian Aker
typdef class removal (just... use the name of the class).
39
class Select_Lex_Unit;
846 by Brian Aker
Removing on typedeffed class.
40
class Select_Lex;
1 by brian
clean slate
41
class COND_EQUAL;
42
class Security_context;
327.2.4 by Brian Aker
Refactoring table.h
43
class TableList;
1 by brian
clean slate
44
45
/*************************************************************************/
46
47
48
class Field_timestamp;
49
class Field_blob;
50
51
typedef enum enum_table_category TABLE_CATEGORY;
52
53
TABLE_CATEGORY get_table_category(const LEX_STRING *db,
54
                                  const LEX_STRING *name);
55
56
366 by Patrick Galbraith
Ulong conversion
57
extern uint32_t refresh_version;
1 by brian
clean slate
58
327.2.3 by Brian Aker
Refactoring of class Table
59
typedef struct st_table_field_w_type
60
{
61
  LEX_STRING name;
62
  LEX_STRING type;
63
  LEX_STRING cset;
64
} TABLE_FIELD_W_TYPE;
65
520.1.22 by Brian Aker
Second pass of thd cleanup
66
bool create_myisam_from_heap(Session *session, Table *table,
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
67
                             MI_COLUMNDEF *start_recinfo,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
68
                             MI_COLUMNDEF **recinfo,
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
69
                             int error, bool ignore_last_dupp_key_error);
70
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
71
class Table {
72
public:
1005.2.5 by Monty Taylor
Merged with trunk.
73
  my_bitmap_map	*bitmap_init_value;
74
  MY_BITMAP     def_read_set, def_write_set, tmp_set; /* containers */
75
  MY_BITMAP     *read_set, *write_set;          /* Active column sets */
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
76
1000.1.3 by Brian Aker
Renamed TABLE_SHARE to TableShare
77
  TableShare	*s;
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
78
  Table() {}                               /* Remove gcc warning */
79
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
80
  /* SHARE methods */
1000.1.3 by Brian Aker
Renamed TABLE_SHARE to TableShare
81
  inline TableShare *getShare() { return s; } /* Get rid of this long term */
82
  inline void setShare(TableShare *new_share) { s= new_share; } /* Get rid of this long term */
482 by Brian Aker
Remove uint.
83
  inline uint32_t sizeKeys() { return s->keys; }
84
  inline uint32_t sizeFields() { return s->fields; }
85
  inline uint32_t getRecordLength() { return s->reclength; }
86
  inline uint32_t sizeBlobFields() { return s->blob_fields; }
87
  inline uint32_t *getBlobField() { return s->blob_field; }
88
  inline uint32_t getNullBytes() { return s->null_bytes; }
89
  inline uint32_t getNullFields() { return s->null_fields; }
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
90
  inline unsigned char *getDefaultValues() { return s->default_values; }
91
92
  inline bool isDatabaseLowByteFirst() { return s->db_low_byte_first; }		/* Portable row format */
93
  inline bool isCrashed() { return s->crashed; }
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
94
  inline bool isNameLock() { return s->name_lock; }
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
95
  inline bool isReplaceWithNameLock() { return s->replace_with_name_lock; }
96
  inline bool isWaitingOnCondition() { return s->waiting_on_cond; }                 /* Protection against free */
97
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
98
  /* For TMP tables, should be pulled out as a class */
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
99
  void updateCreateInfo(HA_CREATE_INFO *create_info);
1005.2.3 by Monty Taylor
Further reversion of P.
100
  void setup_tmp_table_column_bitmaps(unsigned char *bitmaps);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
101
  bool create_myisam_tmp_table(KEY *keyinfo,
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
102
                               MI_COLUMNDEF *start_recinfo,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
103
                               MI_COLUMNDEF **recinfo,
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
104
                               uint64_t options);
520.1.22 by Brian Aker
Second pass of thd cleanup
105
  void free_tmp_table(Session *session);
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
106
  bool open_tmp_table();
481 by Brian Aker
Remove all of uchar.
107
  size_t max_row_length(const unsigned char *data);
482 by Brian Aker
Remove uint.
108
  uint32_t find_shortest_key(const key_map *usable_keys);
355 by Brian Aker
More Table cleanup
109
  bool compare_record(Field **ptr);
110
  bool compare_record();
997.5.1 by chris
Replace macros around unireg.h, store_record,restore_record,cmp_record,empty_record
111
  /* TODO: the (re)storeRecord's may be able to be further condensed */
112
  void storeRecord();
113
  void storeRecordAsInsert();
114
  void storeRecordAsDefault();
115
  void restoreRecord();
116
  void restoreRecordAsDefault();
117
  void emptyRecord();
482 by Brian Aker
Remove uint.
118
  bool table_check_intact(const uint32_t table_f_count, const TABLE_FIELD_W_TYPE *table_def);
327.2.3 by Brian Aker
Refactoring of class Table
119
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
120
  /* See if this can be blown away */
482 by Brian Aker
Remove uint.
121
  inline uint32_t getDBStat () { return db_stat; }
122
  inline uint32_t setDBStat () { return db_stat; }
850 by Brian Aker
More class creation.
123
  uint32_t db_stat;		/* mode of file as in handler.h */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
124
1 by brian
clean slate
125
  handler	*file;
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
126
  Table *next, *prev;
1 by brian
clean slate
127
520.1.21 by Brian Aker
THD -> Session rename
128
  Session	*in_use;                        /* Which thread uses this */
1 by brian
clean slate
129
  Field **field;			/* Pointer to fields */
130
481 by Brian Aker
Remove all of uchar.
131
  unsigned char *record[2];			/* Pointer to records */
132
  unsigned char *write_row_record;		/* Used as optimisation in
520.1.21 by Brian Aker
THD -> Session rename
133
					   Session::write_row */
481 by Brian Aker
Remove all of uchar.
134
  unsigned char *insert_values;                  /* used by INSERT ... UPDATE */
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
135
  /*
136
    Map of keys that can be used to retrieve all data from this table
1 by brian
clean slate
137
    needed by the query without reading the row.
138
  */
139
  key_map covering_keys;
140
  key_map quick_keys, merge_keys;
141
  /*
142
    A set of keys that can be used in the query that references this
143
    table.
144
1000.1.3 by Brian Aker
Renamed TABLE_SHARE to TableShare
145
    All indexes disabled on the table's TableShare (see Table::s) will be
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
146
    subtracted from this set upon instantiation. Thus for any Table t it holds
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
147
    that t.keys_in_use_for_query is a subset of t.s.keys_in_use. Generally we
1 by brian
clean slate
148
    must not introduce any new keys here (see setup_tables).
149
150
    The set is implemented as a bitmap.
151
  */
152
  key_map keys_in_use_for_query;
153
  /* Map of keys that can be used to calculate GROUP BY without sorting */
154
  key_map keys_in_use_for_group_by;
155
  /* Map of keys that can be used to calculate ORDER BY without sorting */
156
  key_map keys_in_use_for_order_by;
157
  KEY  *key_info;			/* data of keys in database */
158
159
  Field *next_number_field;		/* Set if next_number is activated */
160
  Field *found_next_number_field;	/* Set on open */
161
  Field_timestamp *timestamp_field;
162
327.2.4 by Brian Aker
Refactoring table.h
163
  TableList *pos_in_table_list;/* Element referring to this table */
327.2.3 by Brian Aker
Refactoring of class Table
164
  order_st *group;
1 by brian
clean slate
165
  const char	*alias;            	  /* alias or table name */
481 by Brian Aker
Remove all of uchar.
166
  unsigned char		*null_flags;
1 by brian
clean slate
167
  /*
168
   The ID of the query that opened and is using this table. Has different
169
   meanings depending on the table type.
170
171
   Temporary tables:
172
520.1.22 by Brian Aker
Second pass of thd cleanup
173
   table->query_id is set to session->query_id for the duration of a statement
1 by brian
clean slate
174
   and is reset to 0 once it is closed by the same statement. A non-zero
175
   table->query_id means that a statement is using the table even if it's
176
   not the current statement (table is in use by some outer statement).
177
178
   Non-temporary tables:
179
520.1.22 by Brian Aker
Second pass of thd cleanup
180
   Under pre-locked or LOCK TABLES mode: query_id is set to session->query_id
1 by brian
clean slate
181
   for the duration of a statement and is reset to 0 once it is closed by
182
   the same statement. A non-zero query_id is used to control which tables
183
   in the list of pre-opened and locked tables are actually being used.
184
  */
185
  query_id_t	query_id;
186
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
187
  /*
1005.2.6 by Monty Taylor
Re-added bitset<> as a replacement for Bitmap<>
188
    For each key that has quick_keys.test(key) == true: estimate of #records
1 by brian
clean slate
189
    and max #key parts that range access would use.
190
  */
191
  ha_rows	quick_rows[MAX_KEY];
192
193
  /* Bitmaps of key parts that =const for the entire join. */
194
  key_part_map  const_key_parts[MAX_KEY];
195
196
  uint		quick_key_parts[MAX_KEY];
197
  uint		quick_n_ranges[MAX_KEY];
198
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
199
  /*
1 by brian
clean slate
200
    Estimate of number of records that satisfy SARGable part of the table
201
    condition, or table->file->records if no SARGable condition could be
202
    constructed.
203
    This value is used by join optimizer as an estimate of number of records
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
204
    that will pass the table condition (condition that depends on fields of
1 by brian
clean slate
205
    this table and constants)
206
  */
207
  ha_rows       quick_condition_rows;
208
209
  /*
210
    If this table has TIMESTAMP field with auto-set property (pointed by
211
    timestamp_field member) then this variable indicates during which
212
    operations (insert only/on update/in both cases) we should set this
213
    field to current timestamp. If there are no such field in this table
214
    or we should not automatically set its value during execution of current
215
    statement then the variable contains TIMESTAMP_NO_AUTO_SET (i.e. 0).
216
217
    Value of this variable is set for each statement in open_table() and
218
    if needed cleared later in statement processing code (see mysql_update()
219
    as example).
220
  */
221
  timestamp_auto_set_type timestamp_field_type;
222
  table_map	map;                    /* ID bit of table (1,2,4,8,16...) */
223
482 by Brian Aker
Remove uint.
224
  uint32_t          lock_position;          /* Position in DRIZZLE_LOCK.table */
225
  uint32_t          lock_data_start;        /* Start pos. in DRIZZLE_LOCK.locks */
226
  uint32_t          lock_count;             /* Number of locks */
1 by brian
clean slate
227
  uint		tablenr,used_fields;
482 by Brian Aker
Remove uint.
228
  uint32_t          temp_pool_slot;		/* Used by intern temp tables */
1 by brian
clean slate
229
  uint		status;                 /* What's in record[0] */
230
  /* number of select if it is derived table */
482 by Brian Aker
Remove uint.
231
  uint32_t          derived_select_number;
1 by brian
clean slate
232
  int		current_lock;           /* Type of lock on table */
274 by Brian Aker
my_bool conversion in Table
233
  bool copy_blobs;			/* copy_blobs when storing */
1 by brian
clean slate
234
235
  /*
236
    0 or JOIN_TYPE_{LEFT|RIGHT}. Currently this is only compared to 0.
237
    If maybe_null !=0, this table is inner w.r.t. some outer join operation,
238
    and null_row may be true.
239
  */
327.1.3 by Brian Aker
Cleaned up depend in Proto utils. Modified int to bool. Put TmpTable class
240
  bool maybe_null;
241
1 by brian
clean slate
242
  /*
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
243
    If true, the current table row is considered to have all columns set to
1 by brian
clean slate
244
    NULL, including columns declared as "not null" (see maybe_null).
245
  */
274 by Brian Aker
my_bool conversion in Table
246
  bool null_row;
1 by brian
clean slate
247
274 by Brian Aker
my_bool conversion in Table
248
  bool force_index;
249
  bool distinct,const_table,no_rows;
250
  bool key_read, no_keyread;
1 by brian
clean slate
251
  /*
252
    Placeholder for an open table which prevents other connections
253
    from taking name-locks on this table. Typically used with
1000.1.3 by Brian Aker
Renamed TABLE_SHARE to TableShare
254
    TableShare::version member to take an exclusive name-lock on
1 by brian
clean slate
255
    this table name -- a name lock that not only prevents other
256
    threads from opening the table, but also blocks other name
257
    locks. This is achieved by:
258
    - setting open_placeholder to 1 - this will block other name
259
      locks, as wait_for_locked_table_name will be forced to wait,
260
      see table_is_used for details.
261
    - setting version to 0 - this will force other threads to close
262
      the instance of this table and wait (this is the same approach
263
      as used for usual name locks).
264
    An exclusively name-locked table currently can have no handler
265
    object associated with it (db_stat is always 0), but please do
266
    not rely on that.
267
  */
274 by Brian Aker
my_bool conversion in Table
268
  bool open_placeholder;
269
  bool locked_by_logger;
1005.2.1 by Monty Taylor
Reverted a crap-ton of padraig's work.
270
  bool no_replicate;
274 by Brian Aker
my_bool conversion in Table
271
  bool locked_by_name;
272
  bool no_cache;
1 by brian
clean slate
273
  /*
274
    To indicate that a non-null value of the auto_increment field
275
    was provided by the user or retrieved from the current record.
276
    Used only in the MODE_NO_AUTO_VALUE_ON_ZERO mode.
277
  */
274 by Brian Aker
my_bool conversion in Table
278
  bool auto_increment_field_not_null;
279
  bool insert_or_update;             /* Can be used by the handler */
280
  bool alias_name_used;		/* true if table_name is alias */
281
  bool get_fields_in_item_tree;      /* Signal to fix_field */
1 by brian
clean slate
282
283
  REGINFO reginfo;			/* field connections */
284
  MEM_ROOT mem_root;
327.2.3 by Brian Aker
Refactoring of class Table
285
  filesort_info_st sort;
1 by brian
clean slate
286
287
  bool fill_item_list(List<Item> *item_list) const;
288
  void reset_item_list(List<Item> *item_list) const;
289
  void clear_column_bitmaps(void);
290
  void prepare_for_position(void);
1005.2.3 by Monty Taylor
Further reversion of P.
291
  void mark_columns_used_by_index_no_reset(uint32_t index, MY_BITMAP *map);
1003.1.7 by Brian Aker
Add mark_columns_used_by_index_no_reset() with just index (assumes read_set
292
  void mark_columns_used_by_index_no_reset(uint32_t index);
482 by Brian Aker
Remove uint.
293
  void mark_columns_used_by_index(uint32_t index);
1 by brian
clean slate
294
  void restore_column_maps_after_mark_index();
295
  void mark_auto_increment_column(void);
296
  void mark_columns_needed_for_update(void);
297
  void mark_columns_needed_for_delete(void);
298
  void mark_columns_needed_for_insert(void);
1005.2.3 by Monty Taylor
Further reversion of P.
299
  inline void column_bitmaps_set(MY_BITMAP *read_set_arg,
300
                                 MY_BITMAP *write_set_arg)
1 by brian
clean slate
301
  {
302
    read_set= read_set_arg;
303
    write_set= write_set_arg;
304
  }
354 by Brian Aker
Refactor of Table methods.
305
1005.2.3 by Monty Taylor
Further reversion of P.
306
  void restore_column_map(my_bitmap_map *old);
354 by Brian Aker
Refactor of Table methods.
307
1005.2.3 by Monty Taylor
Further reversion of P.
308
  my_bitmap_map *use_all_columns(MY_BITMAP *bitmap);
1 by brian
clean slate
309
  inline void use_all_columns()
310
  {
311
    column_bitmaps_set(&s->all_set, &s->all_set);
312
  }
354 by Brian Aker
Refactor of Table methods.
313
1 by brian
clean slate
314
  inline void default_column_bitmaps()
315
  {
316
    read_set= &def_read_set;
317
    write_set= &def_write_set;
318
  }
354 by Brian Aker
Refactor of Table methods.
319
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
320
  /* Both of the below should go away once we can move this bit to the field objects */
321
  inline bool isReadSet(uint32_t index)
322
  {
1005.2.5 by Monty Taylor
Merged with trunk.
323
    return bitmap_is_set(read_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
324
  }
325
326
  inline void setReadSet(uint32_t index)
327
  {
1005.2.5 by Monty Taylor
Merged with trunk.
328
    bitmap_set_bit(read_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
329
  }
330
1005.2.12 by Monty Taylor
Moved some things to the API.
331
  inline void setReadSet()
332
  {
333
    bitmap_set_all(read_set);
334
  }
335
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
336
  inline bool isWriteSet(uint32_t index)
337
  {
1005.2.5 by Monty Taylor
Merged with trunk.
338
    return bitmap_is_set(write_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
339
  }
340
341
  inline void setWriteSet(uint32_t index)
342
  {
1005.2.5 by Monty Taylor
Merged with trunk.
343
    bitmap_set_bit(write_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
344
  }
345
1005.2.12 by Monty Taylor
Moved some things to the API.
346
  inline void setWriteSet()
347
  {
348
    bitmap_set_all(write_set);
349
  }
350
1 by brian
clean slate
351
  /* Is table open or should be treated as such by name-locking? */
352
  inline bool is_name_opened() { return db_stat || open_placeholder; }
353
  /*
354
    Is this instance of the table should be reopen or represents a name-lock?
355
  */
356
  inline bool needs_reopen_or_name_lock()
357
  { return s->version != refresh_version; }
354 by Brian Aker
Refactor of Table methods.
358
359
  int report_error(int error);
793 by Brian Aker
Pass through on refactoring functions to clases.
360
  int closefrm(bool free_share);
361
  uint32_t tmpkeyval();
934.1.1 by Brian Aker
Moved two functions in classes.
362
363
  /**
364
    clean/setup table fields and map.
365
366
    @param table        Table structure pointer (which should be setup)
367
    @param table_list   TableList structure pointer (owner of Table)
368
    @param tablenr     table number
369
  */
370
  void setup_table_map(TableList *table_list, uint32_t tablenr);
371
  inline void mark_as_null_row()
372
  {
373
    null_row=1;
374
    status|=STATUS_NULL_ROW;
375
    memset(null_flags, 255, s->null_bytes);
376
  }
377
1 by brian
clean slate
378
};
379
575.4.7 by Monty Taylor
More header cleanup.
380
Table *create_virtual_tmp_table(Session *session,
381
                                List<Create_field> &field_list);
382
1 by brian
clean slate
383
typedef struct st_foreign_key_info
384
{
385
  LEX_STRING *forein_id;
386
  LEX_STRING *referenced_db;
387
  LEX_STRING *referenced_table;
388
  LEX_STRING *update_method;
389
  LEX_STRING *delete_method;
390
  LEX_STRING *referenced_key_name;
391
  List<LEX_STRING> foreign_fields;
392
  List<LEX_STRING> referenced_fields;
393
} FOREIGN_KEY_INFO;
394
395
typedef struct st_field_info
396
{
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
397
  /**
398
      This is used as column name.
1 by brian
clean slate
399
  */
400
  const char* field_name;
401
  /**
402
     For string-type columns, this is the maximum number of
403
     characters. Otherwise, it is the 'display-length' for the column.
404
  */
482 by Brian Aker
Remove uint.
405
  uint32_t field_length;
1 by brian
clean slate
406
  /**
407
     This denotes data type for the column. For the most part, there seems to
408
     be one entry in the enum for each SQL data type, although there seem to
409
     be a number of additional entries in the enum.
410
  */
411
  enum enum_field_types field_type;
412
  int value;
413
  /**
414
     This is used to set column attributes. By default, columns are @c NOT
415
     @c NULL and @c SIGNED, and you can deviate from the default
416
     by setting the appopriate flags. You can use either one of the flags
417
     @c MY_I_S_MAYBE_NULL and @cMY_I_S_UNSIGNED or
418
     combine them using the bitwise or operator @c |. Both flags are
419
     defined in table.h.
420
   */
482 by Brian Aker
Remove uint.
421
  uint32_t field_flags;        // Field atributes(maybe_null, signed, unsigned etc.)
1 by brian
clean slate
422
  const char* old_name;
423
  /**
424
     This should be one of @c SKIP_OPEN_TABLE,
425
     @c OPEN_FRM_ONLY or @c OPEN_FULL_TABLE.
426
  */
482 by Brian Aker
Remove uint.
427
  uint32_t open_method;
1 by brian
clean slate
428
} ST_FIELD_INFO;
429
430
327.2.4 by Brian Aker
Refactoring table.h
431
class TableList;
1 by brian
clean slate
432
typedef class Item COND;
433
971.1.68 by Monty Taylor
Renamed ST_SCHEMA_TABLE to InfoSchemaTable. One step down towards making the darned thing a class. (/me shudders)
434
struct InfoSchemaTable
1 by brian
clean slate
435
{
436
  const char* table_name;
437
  ST_FIELD_INFO *fields_info;
438
  /* Create information_schema table */
520.1.22 by Brian Aker
Second pass of thd cleanup
439
  Table *(*create_table)  (Session *session, TableList *table_list);
1 by brian
clean slate
440
  /* Fill table with data */
520.1.22 by Brian Aker
Second pass of thd cleanup
441
  int (*fill_table) (Session *session, TableList *tables, COND *cond);
1 by brian
clean slate
442
  /* Handle fileds for old SHOW */
971.1.68 by Monty Taylor
Renamed ST_SCHEMA_TABLE to InfoSchemaTable. One step down towards making the darned thing a class. (/me shudders)
443
  int (*old_format) (Session *session, struct InfoSchemaTable *schema_table);
520.1.22 by Brian Aker
Second pass of thd cleanup
444
  int (*process_table) (Session *session, TableList *tables, Table *table,
1 by brian
clean slate
445
                        bool res, LEX_STRING *db_name, LEX_STRING *table_name);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
446
  int idx_field1, idx_field2;
1 by brian
clean slate
447
  bool hidden;
482 by Brian Aker
Remove uint.
448
  uint32_t i_s_requested_object;  /* the object we need to open(Table | VIEW) */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
449
};
1 by brian
clean slate
450
451
452
#define JOIN_TYPE_LEFT	1
453
#define JOIN_TYPE_RIGHT	2
454
455
struct st_lex;
456
class select_union;
851 by Brian Aker
Class rewrite of Session (aka get all of the junk out)
457
class Tmp_Table_Param;
1 by brian
clean slate
458
459
typedef struct st_changed_table_list
460
{
461
  struct	st_changed_table_list *next;
462
  char		*key;
205 by Brian Aker
uint32 -> uin32_t
463
  uint32_t        key_length;
327.2.4 by Brian Aker
Refactoring table.h
464
} CHANGED_TableList;
1 by brian
clean slate
465
466
352 by Brian Aker
Merge of Brian's tree to main tree.
467
typedef struct st_open_table_list
468
{
1 by brian
clean slate
469
  struct st_open_table_list *next;
470
  char	*db,*table;
205 by Brian Aker
uint32 -> uin32_t
471
  uint32_t in_use,locked;
327.2.4 by Brian Aker
Refactoring table.h
472
} OPEN_TableList;
1 by brian
clean slate
473
327.2.3 by Brian Aker
Refactoring of class Table
474
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
475
#endif /* DRIZZLED_TABLE_H */