~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
1014.2.10 by Monty Taylor
Made REGINFO into RegInfo and responsible for initializing itself.
66
520.1.22 by Brian Aker
Second pass of thd cleanup
67
bool create_myisam_from_heap(Session *session, Table *table,
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
68
                             MI_COLUMNDEF *start_recinfo,
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
69
                             MI_COLUMNDEF **recinfo,
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
70
                             int error, bool ignore_last_dupp_key_error);
71
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
72
class Table {
73
public:
1030.1.1 by Brian Aker
Straighten out structures (remove some some dead bits).
74
75
  TableShare	*s;
76
  Field **field;			/* Pointer to fields */
77
78
  handler	*file;
79
  Table *next;
80
  Table *prev;
81
1030.1.2 by Brian Aker
More alignment for structures
82
  MY_BITMAP     *read_set;          /* Active column sets */
83
  MY_BITMAP     *write_set;          /* Active column sets */
84
85
  uint32_t		tablenr;
1030.1.1 by Brian Aker
Straighten out structures (remove some some dead bits).
86
  uint32_t db_stat;		/* mode of file as in handler.h */
87
1005.2.5 by Monty Taylor
Merged with trunk.
88
  my_bitmap_map	*bitmap_init_value;
89
  MY_BITMAP     def_read_set, def_write_set, tmp_set; /* containers */
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
90
520.1.21 by Brian Aker
THD -> Session rename
91
  Session	*in_use;                        /* Which thread uses this */
1 by brian
clean slate
92
481 by Brian Aker
Remove all of uchar.
93
  unsigned char *record[2];			/* Pointer to records */
94
  unsigned char *write_row_record;		/* Used as optimisation in
520.1.21 by Brian Aker
THD -> Session rename
95
					   Session::write_row */
481 by Brian Aker
Remove all of uchar.
96
  unsigned char *insert_values;                  /* used by INSERT ... UPDATE */
1 by brian
clean slate
97
  KEY  *key_info;			/* data of keys in database */
98
  Field *next_number_field;		/* Set if next_number is activated */
99
  Field *found_next_number_field;	/* Set on open */
100
  Field_timestamp *timestamp_field;
101
327.2.4 by Brian Aker
Refactoring table.h
102
  TableList *pos_in_table_list;/* Element referring to this table */
327.2.3 by Brian Aker
Refactoring of class Table
103
  order_st *group;
1 by brian
clean slate
104
  const char	*alias;            	  /* alias or table name */
481 by Brian Aker
Remove all of uchar.
105
  unsigned char		*null_flags;
1 by brian
clean slate
106
482 by Brian Aker
Remove uint.
107
  uint32_t          lock_position;          /* Position in DRIZZLE_LOCK.table */
108
  uint32_t          lock_data_start;        /* Start pos. in DRIZZLE_LOCK.locks */
109
  uint32_t          lock_count;             /* Number of locks */
1030.1.2 by Brian Aker
More alignment for structures
110
  uint32_t used_fields;
482 by Brian Aker
Remove uint.
111
  uint32_t          temp_pool_slot;		/* Used by intern temp tables */
1030.1.2 by Brian Aker
More alignment for structures
112
  uint32_t		status;                 /* What's in record[0] */
1 by brian
clean slate
113
  /* number of select if it is derived table */
482 by Brian Aker
Remove uint.
114
  uint32_t          derived_select_number;
1 by brian
clean slate
115
  int		current_lock;           /* Type of lock on table */
274 by Brian Aker
my_bool conversion in Table
116
  bool copy_blobs;			/* copy_blobs when storing */
1 by brian
clean slate
117
118
  /*
119
    0 or JOIN_TYPE_{LEFT|RIGHT}. Currently this is only compared to 0.
120
    If maybe_null !=0, this table is inner w.r.t. some outer join operation,
121
    and null_row may be true.
122
  */
327.1.3 by Brian Aker
Cleaned up depend in Proto utils. Modified int to bool. Put TmpTable class
123
  bool maybe_null;
124
1 by brian
clean slate
125
  /*
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
126
    If true, the current table row is considered to have all columns set to
1 by brian
clean slate
127
    NULL, including columns declared as "not null" (see maybe_null).
128
  */
274 by Brian Aker
my_bool conversion in Table
129
  bool null_row;
1 by brian
clean slate
130
274 by Brian Aker
my_bool conversion in Table
131
  bool force_index;
132
  bool distinct,const_table,no_rows;
1030.1.2 by Brian Aker
More alignment for structures
133
  bool key_read;
134
  bool no_keyread;
1 by brian
clean slate
135
  /*
136
    Placeholder for an open table which prevents other connections
137
    from taking name-locks on this table. Typically used with
1000.1.3 by Brian Aker
Renamed TABLE_SHARE to TableShare
138
    TableShare::version member to take an exclusive name-lock on
1 by brian
clean slate
139
    this table name -- a name lock that not only prevents other
140
    threads from opening the table, but also blocks other name
141
    locks. This is achieved by:
142
    - setting open_placeholder to 1 - this will block other name
143
      locks, as wait_for_locked_table_name will be forced to wait,
144
      see table_is_used for details.
145
    - setting version to 0 - this will force other threads to close
146
      the instance of this table and wait (this is the same approach
147
      as used for usual name locks).
148
    An exclusively name-locked table currently can have no handler
149
    object associated with it (db_stat is always 0), but please do
150
    not rely on that.
151
  */
274 by Brian Aker
my_bool conversion in Table
152
  bool open_placeholder;
153
  bool locked_by_name;
154
  bool no_cache;
1 by brian
clean slate
155
  /*
156
    To indicate that a non-null value of the auto_increment field
157
    was provided by the user or retrieved from the current record.
158
    Used only in the MODE_NO_AUTO_VALUE_ON_ZERO mode.
159
  */
274 by Brian Aker
my_bool conversion in Table
160
  bool auto_increment_field_not_null;
161
  bool insert_or_update;             /* Can be used by the handler */
162
  bool alias_name_used;		/* true if table_name is alias */
163
  bool get_fields_in_item_tree;      /* Signal to fix_field */
1030.1.2 by Brian Aker
More alignment for structures
164
  int report_error(int error);
165
  int closefrm(bool free_share);
166
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
173
   table->query_id is set to session->query_id for the duration of a statement
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
180
   Under pre-locked or LOCK TABLES mode: query_id is set to session->query_id
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
187
  /*
188
    Estimate of number of records that satisfy SARGable part of the table
189
    condition, or table->file->records if no SARGable condition could be
190
    constructed.
191
    This value is used by join optimizer as an estimate of number of records
192
    that will pass the table condition (condition that depends on fields of
193
    this table and constants)
194
  */
195
  ha_rows       quick_condition_rows;
196
197
  /*
198
    If this table has TIMESTAMP field with auto-set property (pointed by
199
    timestamp_field member) then this variable indicates during which
200
    operations (insert only/on update/in both cases) we should set this
201
    field to current timestamp. If there are no such field in this table
202
    or we should not automatically set its value during execution of current
203
    statement then the variable contains TIMESTAMP_NO_AUTO_SET (i.e. 0).
204
205
    Value of this variable is set for each statement in open_table() and
206
    if needed cleared later in statement processing code (see mysql_update()
207
    as example).
208
  */
209
  timestamp_auto_set_type timestamp_field_type;
210
  table_map	map;                    /* ID bit of table (1,2,4,8,16...) */
1 by brian
clean slate
211
1014.2.10 by Monty Taylor
Made REGINFO into RegInfo and responsible for initializing itself.
212
  RegInfo reginfo;			/* field connections */
1030.1.2 by Brian Aker
More alignment for structures
213
214
  /*
215
    Map of keys that can be used to retrieve all data from this table
216
    needed by the query without reading the row.
217
  */
218
  key_map covering_keys;
219
220
221
  key_map quick_keys;
222
  key_map merge_keys;
223
224
  /*
225
    A set of keys that can be used in the query that references this
226
    table.
227
228
    All indexes disabled on the table's TableShare (see Table::s) will be
229
    subtracted from this set upon instantiation. Thus for any Table t it holds
230
    that t.keys_in_use_for_query is a subset of t.s.keys_in_use. Generally we
231
    must not introduce any new keys here (see setup_tables).
232
233
    The set is implemented as a bitmap.
234
  */
235
  key_map keys_in_use_for_query;
236
  /* Map of keys that can be used to calculate GROUP BY without sorting */
237
  key_map keys_in_use_for_group_by;
238
  /* Map of keys that can be used to calculate ORDER BY without sorting */
239
  key_map keys_in_use_for_order_by;
240
241
  /*
242
    For each key that has quick_keys.test(key) == true: estimate of #records
243
    and max #key parts that range access would use.
244
  */
245
  ha_rows	quick_rows[MAX_KEY];
246
247
  /* Bitmaps of key parts that =const for the entire join. */
248
  key_part_map  const_key_parts[MAX_KEY];
249
250
  uint32_t		quick_key_parts[MAX_KEY];
251
  uint32_t		quick_n_ranges[MAX_KEY];
252
1 by brian
clean slate
253
  MEM_ROOT mem_root;
327.2.3 by Brian Aker
Refactoring of class Table
254
  filesort_info_st sort;
1 by brian
clean slate
255
1030.1.2 by Brian Aker
More alignment for structures
256
1014.2.8 by Monty Taylor
Less fail.
257
  Table()
1014.2.9 by Monty Taylor
Merged trunk.
258
    : s(NULL), field(NULL), 
259
      file(NULL), next(NULL), prev(NULL),
260
      read_set(NULL), write_set(NULL),
1014.2.10 by Monty Taylor
Made REGINFO into RegInfo and responsible for initializing itself.
261
      tablenr(0), db_stat(0),
1014.2.9 by Monty Taylor
Merged trunk.
262
      bitmap_init_value(NULL),
263
/* TODO: ensure that MY_BITMAP has a constructor for def_read_set, def_write_set and tmp_set */
264
      in_use(NULL),
265
      write_row_record(NULL), insert_values(NULL), key_info(NULL),
1014.2.8 by Monty Taylor
Less fail.
266
      next_number_field(NULL), found_next_number_field(NULL),
1014.2.9 by Monty Taylor
Merged trunk.
267
      timestamp_field(NULL),
268
      pos_in_table_list(NULL), group(NULL), alias(NULL), null_flags(NULL),
1014.2.8 by Monty Taylor
Less fail.
269
      lock_position(0), lock_data_start(0), lock_count(0),
1014.2.9 by Monty Taylor
Merged trunk.
270
      used_fields(0), temp_pool_slot(0),
1014.2.8 by Monty Taylor
Less fail.
271
      status(0), derived_select_number(0), current_lock(F_UNLCK),
272
      copy_blobs(false), maybe_null(false), null_row(false),
273
      force_index(false), distinct(false), const_table(false),
274
      no_rows(false), key_read(false), no_keyread(false),
1014.2.9 by Monty Taylor
Merged trunk.
275
      open_placeholder(false), locked_by_name(false), no_cache(false),
1014.2.8 by Monty Taylor
Less fail.
276
      auto_increment_field_not_null(false), insert_or_update(false),
1014.2.9 by Monty Taylor
Merged trunk.
277
      alias_name_used(false), get_fields_in_item_tree(false),
278
      query_id(0), quick_condition_rows(0),
279
      timestamp_field_type(TIMESTAMP_NO_AUTO_SET), map(0)
1039.1.10 by Brian Aker
Minor formating, change of one name to make grep easier :)
280
  {
1014.2.8 by Monty Taylor
Less fail.
281
    memset(record, 0, sizeof(unsigned char *) * 2);
1014.2.9 by Monty Taylor
Merged trunk.
282
283
    covering_keys.reset();
284
285
    quick_keys.reset();
286
    merge_keys.reset();
287
288
    keys_in_use_for_query.reset();
289
    keys_in_use_for_group_by.reset();
290
    keys_in_use_for_order_by.reset();
291
1014.2.8 by Monty Taylor
Less fail.
292
    memset(quick_rows, 0, sizeof(query_id_t) * MAX_KEY);
293
    memset(const_key_parts, 0, sizeof(ha_rows) * MAX_KEY);
1014.2.9 by Monty Taylor
Merged trunk.
294
1014.2.8 by Monty Taylor
Less fail.
295
    memset(quick_key_parts, 0, sizeof(unsigned int) * MAX_KEY);
296
    memset(quick_n_ranges, 0, sizeof(unsigned int) * MAX_KEY);
1014.2.9 by Monty Taylor
Merged trunk.
297
298
    init_sql_alloc(&mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
1014.2.8 by Monty Taylor
Less fail.
299
    memset(&sort, 0, sizeof(filesort_info_st));
300
  }
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
301
1039.1.10 by Brian Aker
Minor formating, change of one name to make grep easier :)
302
  void resetTable(Session *session, TableShare *share, uint32_t db_stat_arg)
1014.2.7 by Monty Taylor
First malloc(Table) stab (doesn't work)
303
  {
1014.2.8 by Monty Taylor
Less fail.
304
1014.2.9 by Monty Taylor
Merged trunk.
305
    s= share;
306
    field= NULL;
307
1014.2.8 by Monty Taylor
Less fail.
308
    file= NULL;
309
    next= NULL;
310
    prev= NULL;
1014.2.9 by Monty Taylor
Merged trunk.
311
312
    read_set= NULL;
313
    write_set= NULL;
314
315
    tablenr= 0;
316
    db_stat= db_stat_arg;
317
318
    bitmap_init_value= NULL;
319
320
    in_use= session;
321
    memset(record, 0, sizeof(unsigned char *) * 2);
322
1014.2.8 by Monty Taylor
Less fail.
323
    write_row_record= NULL;
324
    insert_values= NULL;
325
    key_info= NULL;
326
    next_number_field= NULL;
327
    found_next_number_field= NULL;
328
    timestamp_field= NULL;
1014.2.9 by Monty Taylor
Merged trunk.
329
1014.2.8 by Monty Taylor
Less fail.
330
    pos_in_table_list= NULL;
331
    group= NULL;
332
    alias= NULL;
333
    null_flags= NULL;
334
     
335
    lock_position= 0;
336
    lock_data_start= 0;
337
    lock_count= 0;
338
    used_fields= 0;
339
    temp_pool_slot= 0;
340
    status= 0;
341
    derived_select_number= 0;
342
    current_lock= F_UNLCK;
343
    copy_blobs= false;
1014.2.9 by Monty Taylor
Merged trunk.
344
1014.2.8 by Monty Taylor
Less fail.
345
    maybe_null= false;
1014.2.9 by Monty Taylor
Merged trunk.
346
1014.2.8 by Monty Taylor
Less fail.
347
    null_row= false;
1014.2.9 by Monty Taylor
Merged trunk.
348
1014.2.8 by Monty Taylor
Less fail.
349
    force_index= false;
350
    distinct= false;
351
    const_table= false;
352
    no_rows= false;
353
    key_read= false;
354
    no_keyread= false;
1014.2.9 by Monty Taylor
Merged trunk.
355
1014.2.8 by Monty Taylor
Less fail.
356
    open_placeholder= false;
357
    locked_by_name= false;
358
    no_cache= false;
1014.2.9 by Monty Taylor
Merged trunk.
359
1014.2.8 by Monty Taylor
Less fail.
360
    auto_increment_field_not_null= false;
361
    insert_or_update= false;
362
    alias_name_used= false;
363
    get_fields_in_item_tree= false;
364
    
1014.2.9 by Monty Taylor
Merged trunk.
365
    query_id= 0;
366
    quick_condition_rows= 0;
367
     
368
    timestamp_field_type= TIMESTAMP_NO_AUTO_SET;
369
    map= 0;
370
1014.2.10 by Monty Taylor
Made REGINFO into RegInfo and responsible for initializing itself.
371
    reginfo.reset();
1014.2.8 by Monty Taylor
Less fail.
372
1014.2.9 by Monty Taylor
Merged trunk.
373
    covering_keys.reset();
1014.2.8 by Monty Taylor
Less fail.
374
1014.2.7 by Monty Taylor
First malloc(Table) stab (doesn't work)
375
    quick_keys.reset();
1014.2.9 by Monty Taylor
Merged trunk.
376
    merge_keys.reset();
377
1014.2.7 by Monty Taylor
First malloc(Table) stab (doesn't work)
378
    keys_in_use_for_query.reset();
1014.2.9 by Monty Taylor
Merged trunk.
379
    keys_in_use_for_group_by.reset();
380
    keys_in_use_for_order_by.reset();
1014.2.7 by Monty Taylor
First malloc(Table) stab (doesn't work)
381
1014.2.8 by Monty Taylor
Less fail.
382
    memset(quick_rows, 0, sizeof(query_id_t) * MAX_KEY);
383
    memset(const_key_parts, 0, sizeof(ha_rows) * MAX_KEY);
1014.2.9 by Monty Taylor
Merged trunk.
384
1014.2.8 by Monty Taylor
Less fail.
385
    memset(quick_key_parts, 0, sizeof(unsigned int) * MAX_KEY);
386
    memset(quick_n_ranges, 0, sizeof(unsigned int) * MAX_KEY);
1014.2.9 by Monty Taylor
Merged trunk.
387
388
    init_sql_alloc(&mem_root, TABLE_ALLOC_BLOCK_SIZE, 0);
1014.2.8 by Monty Taylor
Less fail.
389
    memset(&sort, 0, sizeof(filesort_info_st));
1014.2.9 by Monty Taylor
Merged trunk.
390
1014.2.8 by Monty Taylor
Less fail.
391
1014.2.7 by Monty Taylor
First malloc(Table) stab (doesn't work)
392
  }
1030.1.2 by Brian Aker
More alignment for structures
393
1030.1.1 by Brian Aker
Straighten out structures (remove some some dead bits).
394
  /* SHARE methods */
395
  inline TableShare *getShare() { return s; } /* Get rid of this long term */
396
  inline void setShare(TableShare *new_share) { s= new_share; } /* Get rid of this long term */
397
  inline uint32_t sizeKeys() { return s->keys; }
398
  inline uint32_t sizeFields() { return s->fields; }
399
  inline uint32_t getRecordLength() { return s->reclength; }
400
  inline uint32_t sizeBlobFields() { return s->blob_fields; }
401
  inline uint32_t *getBlobField() { return s->blob_field; }
402
  inline uint32_t getNullBytes() { return s->null_bytes; }
403
  inline uint32_t getNullFields() { return s->null_fields; }
404
  inline unsigned char *getDefaultValues() { return s->default_values; }
405
406
  inline bool isDatabaseLowByteFirst() { return s->db_low_byte_first; }		/* Portable row format */
407
  inline bool isCrashed() { return s->crashed; }
408
  inline bool isNameLock() { return s->name_lock; }
409
  inline bool isReplaceWithNameLock() { return s->replace_with_name_lock; }
410
  inline bool isWaitingOnCondition() { return s->waiting_on_cond; }                 /* Protection against free */
411
412
  /* For TMP tables, should be pulled out as a class */
413
  void updateCreateInfo(HA_CREATE_INFO *create_info);
414
  void setup_tmp_table_column_bitmaps(unsigned char *bitmaps);
415
  bool create_myisam_tmp_table(KEY *keyinfo,
416
                               MI_COLUMNDEF *start_recinfo,
417
                               MI_COLUMNDEF **recinfo,
418
                               uint64_t options);
419
  void free_tmp_table(Session *session);
420
  bool open_tmp_table();
421
  size_t max_row_length(const unsigned char *data);
422
  uint32_t find_shortest_key(const key_map *usable_keys);
423
  bool compare_record(Field **ptr);
424
  bool compare_record();
425
  /* TODO: the (re)storeRecord's may be able to be further condensed */
426
  void storeRecord();
427
  void storeRecordAsInsert();
428
  void storeRecordAsDefault();
429
  void restoreRecord();
430
  void restoreRecordAsDefault();
431
  void emptyRecord();
432
  bool table_check_intact(const uint32_t table_f_count, const TABLE_FIELD_W_TYPE *table_def);
433
434
  /* See if this can be blown away */
435
  inline uint32_t getDBStat () { return db_stat; }
436
  inline uint32_t setDBStat () { return db_stat; }
1 by brian
clean slate
437
  bool fill_item_list(List<Item> *item_list) const;
438
  void clear_column_bitmaps(void);
439
  void prepare_for_position(void);
1005.2.3 by Monty Taylor
Further reversion of P.
440
  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
441
  void mark_columns_used_by_index_no_reset(uint32_t index);
482 by Brian Aker
Remove uint.
442
  void mark_columns_used_by_index(uint32_t index);
1 by brian
clean slate
443
  void restore_column_maps_after_mark_index();
444
  void mark_auto_increment_column(void);
445
  void mark_columns_needed_for_update(void);
446
  void mark_columns_needed_for_delete(void);
447
  void mark_columns_needed_for_insert(void);
1005.2.3 by Monty Taylor
Further reversion of P.
448
  inline void column_bitmaps_set(MY_BITMAP *read_set_arg,
449
                                 MY_BITMAP *write_set_arg)
1 by brian
clean slate
450
  {
451
    read_set= read_set_arg;
452
    write_set= write_set_arg;
453
  }
354 by Brian Aker
Refactor of Table methods.
454
1005.2.3 by Monty Taylor
Further reversion of P.
455
  void restore_column_map(my_bitmap_map *old);
354 by Brian Aker
Refactor of Table methods.
456
1005.2.3 by Monty Taylor
Further reversion of P.
457
  my_bitmap_map *use_all_columns(MY_BITMAP *bitmap);
1 by brian
clean slate
458
  inline void use_all_columns()
459
  {
460
    column_bitmaps_set(&s->all_set, &s->all_set);
461
  }
354 by Brian Aker
Refactor of Table methods.
462
1 by brian
clean slate
463
  inline void default_column_bitmaps()
464
  {
465
    read_set= &def_read_set;
466
    write_set= &def_write_set;
467
  }
354 by Brian Aker
Refactor of Table methods.
468
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
469
  /* Both of the below should go away once we can move this bit to the field objects */
470
  inline bool isReadSet(uint32_t index)
471
  {
1005.2.5 by Monty Taylor
Merged with trunk.
472
    return bitmap_is_set(read_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
473
  }
474
475
  inline void setReadSet(uint32_t index)
476
  {
1005.2.5 by Monty Taylor
Merged with trunk.
477
    bitmap_set_bit(read_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
478
  }
479
1005.2.12 by Monty Taylor
Moved some things to the API.
480
  inline void setReadSet()
481
  {
482
    bitmap_set_all(read_set);
483
  }
484
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
485
  inline bool isWriteSet(uint32_t index)
486
  {
1005.2.5 by Monty Taylor
Merged with trunk.
487
    return bitmap_is_set(write_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
488
  }
489
490
  inline void setWriteSet(uint32_t index)
491
  {
1005.2.5 by Monty Taylor
Merged with trunk.
492
    bitmap_set_bit(write_set, index);
1003.1.12 by Brian Aker
Begin of abstract out the bitmap from direct reference.
493
  }
494
1005.2.12 by Monty Taylor
Moved some things to the API.
495
  inline void setWriteSet()
496
  {
497
    bitmap_set_all(write_set);
498
  }
499
1 by brian
clean slate
500
  /* Is table open or should be treated as such by name-locking? */
501
  inline bool is_name_opened() { return db_stat || open_placeholder; }
502
  /*
503
    Is this instance of the table should be reopen or represents a name-lock?
504
  */
505
  inline bool needs_reopen_or_name_lock()
506
  { return s->version != refresh_version; }
354 by Brian Aker
Refactor of Table methods.
507
934.1.1 by Brian Aker
Moved two functions in classes.
508
  /**
509
    clean/setup table fields and map.
510
511
    @param table        Table structure pointer (which should be setup)
512
    @param table_list   TableList structure pointer (owner of Table)
513
    @param tablenr     table number
514
  */
515
  void setup_table_map(TableList *table_list, uint32_t tablenr);
516
  inline void mark_as_null_row()
517
  {
518
    null_row=1;
519
    status|=STATUS_NULL_ROW;
520
    memset(null_flags, 255, s->null_bytes);
521
  }
522
1 by brian
clean slate
523
};
524
575.4.7 by Monty Taylor
More header cleanup.
525
Table *create_virtual_tmp_table(Session *session,
526
                                List<Create_field> &field_list);
527
1 by brian
clean slate
528
typedef struct st_foreign_key_info
529
{
530
  LEX_STRING *forein_id;
531
  LEX_STRING *referenced_db;
532
  LEX_STRING *referenced_table;
533
  LEX_STRING *update_method;
534
  LEX_STRING *delete_method;
535
  LEX_STRING *referenced_key_name;
536
  List<LEX_STRING> foreign_fields;
537
  List<LEX_STRING> referenced_fields;
538
} FOREIGN_KEY_INFO;
539
540
typedef struct st_field_info
541
{
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
542
  /**
543
      This is used as column name.
1 by brian
clean slate
544
  */
545
  const char* field_name;
546
  /**
547
     For string-type columns, this is the maximum number of
548
     characters. Otherwise, it is the 'display-length' for the column.
549
  */
482 by Brian Aker
Remove uint.
550
  uint32_t field_length;
1 by brian
clean slate
551
  /**
552
     This denotes data type for the column. For the most part, there seems to
553
     be one entry in the enum for each SQL data type, although there seem to
554
     be a number of additional entries in the enum.
555
  */
556
  enum enum_field_types field_type;
557
  int value;
558
  /**
559
     This is used to set column attributes. By default, columns are @c NOT
560
     @c NULL and @c SIGNED, and you can deviate from the default
561
     by setting the appopriate flags. You can use either one of the flags
562
     @c MY_I_S_MAYBE_NULL and @cMY_I_S_UNSIGNED or
563
     combine them using the bitwise or operator @c |. Both flags are
564
     defined in table.h.
565
   */
482 by Brian Aker
Remove uint.
566
  uint32_t field_flags;        // Field atributes(maybe_null, signed, unsigned etc.)
1 by brian
clean slate
567
  const char* old_name;
568
  /**
569
     This should be one of @c SKIP_OPEN_TABLE,
570
     @c OPEN_FRM_ONLY or @c OPEN_FULL_TABLE.
571
  */
482 by Brian Aker
Remove uint.
572
  uint32_t open_method;
1 by brian
clean slate
573
} ST_FIELD_INFO;
574
575
327.2.4 by Brian Aker
Refactoring table.h
576
class TableList;
1 by brian
clean slate
577
typedef class Item COND;
578
971.1.68 by Monty Taylor
Renamed ST_SCHEMA_TABLE to InfoSchemaTable. One step down towards making the darned thing a class. (/me shudders)
579
struct InfoSchemaTable
1 by brian
clean slate
580
{
581
  const char* table_name;
582
  ST_FIELD_INFO *fields_info;
583
  /* Create information_schema table */
520.1.22 by Brian Aker
Second pass of thd cleanup
584
  Table *(*create_table)  (Session *session, TableList *table_list);
1 by brian
clean slate
585
  /* Fill table with data */
520.1.22 by Brian Aker
Second pass of thd cleanup
586
  int (*fill_table) (Session *session, TableList *tables, COND *cond);
1 by brian
clean slate
587
  /* 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)
588
  int (*old_format) (Session *session, struct InfoSchemaTable *schema_table);
520.1.22 by Brian Aker
Second pass of thd cleanup
589
  int (*process_table) (Session *session, TableList *tables, Table *table,
1 by brian
clean slate
590
                        bool res, LEX_STRING *db_name, LEX_STRING *table_name);
660.1.3 by Eric Herman
removed trailing whitespace with simple script:
591
  int idx_field1, idx_field2;
1 by brian
clean slate
592
  bool hidden;
482 by Brian Aker
Remove uint.
593
  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
594
};
1 by brian
clean slate
595
596
597
#define JOIN_TYPE_LEFT	1
598
#define JOIN_TYPE_RIGHT	2
599
600
struct st_lex;
601
class select_union;
851 by Brian Aker
Class rewrite of Session (aka get all of the junk out)
602
class Tmp_Table_Param;
1 by brian
clean slate
603
604
typedef struct st_changed_table_list
605
{
606
  struct	st_changed_table_list *next;
607
  char		*key;
1046.1.6 by Brian Aker
Formatting/style cleanup.
608
  uint32_t key_length;
327.2.4 by Brian Aker
Refactoring table.h
609
} CHANGED_TableList;
1 by brian
clean slate
610
611
352 by Brian Aker
Merge of Brian's tree to main tree.
612
typedef struct st_open_table_list
613
{
1 by brian
clean slate
614
  struct st_open_table_list *next;
1046.1.6 by Brian Aker
Formatting/style cleanup.
615
  char	*db;
616
  char	*table;
205 by Brian Aker
uint32 -> uin32_t
617
  uint32_t in_use,locked;
327.2.4 by Brian Aker
Refactoring table.h
618
} OPEN_TableList;
1 by brian
clean slate
619
327.2.3 by Brian Aker
Refactoring of class Table
620
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
621
#endif /* DRIZZLED_TABLE_H */