~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
26
#include <storage/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>
30
#include <drizzled/nested_join.h>
353 by Brian Aker
Moved Field iterator out to its own definition.
31
#include <drizzled/field_iterator.h>
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
32
327.2.3 by Brian Aker
Refactoring of class Table
33
class Item;				/* Needed by order_st */
1 by brian
clean slate
34
class Item_subselect;
35
class st_select_lex_unit;
36
class st_select_lex;
37
class COND_EQUAL;
38
class Security_context;
327.2.4 by Brian Aker
Refactoring table.h
39
class TableList;
1 by brian
clean slate
40
41
/*************************************************************************/
42
43
enum tmp_table_type
44
{
45
  NO_TMP_TABLE, NON_TRANSACTIONAL_TMP_TABLE, TRANSACTIONAL_TMP_TABLE,
46
  INTERNAL_TMP_TABLE, SYSTEM_TMP_TABLE, TMP_TABLE_FRM_FILE_ONLY
47
};
48
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
49
bool mysql_frm_type(THD *thd, char *path, enum legacy_db_type *dbt);
1 by brian
clean slate
50
51
52
enum release_type { RELEASE_NORMAL, RELEASE_WAIT_FOR_DROP };
53
54
/*
55
  Values in this enum are used to indicate how a tables TIMESTAMP field
56
  should be treated. It can be set to the current timestamp on insert or
57
  update or both.
58
  WARNING: The values are used for bit operations. If you change the
59
  enum, you must keep the bitwise relation of the values. For example:
60
  (int) TIMESTAMP_AUTO_SET_ON_BOTH must be equal to
61
  (int) TIMESTAMP_AUTO_SET_ON_INSERT | (int) TIMESTAMP_AUTO_SET_ON_UPDATE.
62
  We use an enum here so that the debugger can display the value names.
63
*/
64
enum timestamp_auto_set_type
65
{
66
  TIMESTAMP_NO_AUTO_SET= 0, TIMESTAMP_AUTO_SET_ON_INSERT= 1,
67
  TIMESTAMP_AUTO_SET_ON_UPDATE= 2, TIMESTAMP_AUTO_SET_ON_BOTH= 3
68
};
69
#define clear_timestamp_auto_bits(_target_, _bits_) \
70
  (_target_)= (enum timestamp_auto_set_type)((int)(_target_) & ~(int)(_bits_))
71
72
class Field_timestamp;
73
class Field_blob;
74
75
/**
76
  Category of table found in the table share.
77
*/
78
enum enum_table_category
79
{
80
  /**
81
    Unknown value.
82
  */
83
  TABLE_UNKNOWN_CATEGORY=0,
84
85
  /**
86
    Temporary table.
87
    The table is visible only in the session.
88
    Therefore,
89
    - FLUSH TABLES WITH READ LOCK
90
    - SET GLOBAL READ_ONLY = ON
91
    do not apply to this table.
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
92
    Note that LOCK Table t FOR READ/WRITE
1 by brian
clean slate
93
    can be used on temporary tables.
94
    Temporary tables are not part of the table cache.
95
  */
96
  TABLE_CATEGORY_TEMPORARY=1,
97
98
  /**
99
    User table.
100
    These tables do honor:
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
101
    - LOCK Table t FOR READ/WRITE
1 by brian
clean slate
102
    - FLUSH TABLES WITH READ LOCK
103
    - SET GLOBAL READ_ONLY = ON
104
    User tables are cached in the table cache.
105
  */
106
  TABLE_CATEGORY_USER=2,
107
108
  /**
109
    Information schema tables.
110
    These tables are an interface provided by the system
111
    to inspect the system metadata.
112
    These tables do *not* honor:
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
113
    - LOCK Table t FOR READ/WRITE
1 by brian
clean slate
114
    - FLUSH TABLES WITH READ LOCK
115
    - SET GLOBAL READ_ONLY = ON
116
    as there is no point in locking explicitely
117
    an INFORMATION_SCHEMA table.
118
    Nothing is directly written to information schema tables.
119
    Note that this value is not used currently,
120
    since information schema tables are not shared,
121
    but implemented as session specific temporary tables.
122
  */
123
  /*
124
    TODO: Fixing the performance issues of I_S will lead
125
    to I_S tables in the table cache, which should use
126
    this table type.
127
  */
326 by Brian Aker
Remove server based system tables (we no longer have them).
128
  TABLE_CATEGORY_INFORMATION
1 by brian
clean slate
129
};
130
typedef enum enum_table_category TABLE_CATEGORY;
131
132
TABLE_CATEGORY get_table_category(const LEX_STRING *db,
133
                                  const LEX_STRING *name);
134
135
/*
136
  This structure is shared between different table objects. There is one
137
  instance of table share per one table in the database.
138
*/
139
140
typedef struct st_table_share
141
{
142
  st_table_share() {}                    /* Remove gcc warning */
143
144
  /** Category of this table. */
145
  TABLE_CATEGORY table_category;
146
147
  /* hash of field names (contains pointers to elements of field array) */
148
  HASH	name_hash;			/* hash of field names */
149
  MEM_ROOT mem_root;
150
  TYPELIB keynames;			/* Pointers to keynames */
151
  TYPELIB fieldnames;			/* Pointer to fieldnames */
152
  TYPELIB *intervals;			/* pointer to interval info */
153
  pthread_mutex_t mutex;                /* For locking the share  */
154
  pthread_cond_t cond;			/* To signal that share is ready */
155
  struct st_table_share *next,		/* Link to unused shares */
156
    **prev;
157
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
158
  /* The following is copied to each Table on OPEN */
1 by brian
clean slate
159
  Field **field;
160
  Field **found_next_number_field;
161
  Field *timestamp_field;               /* Used only during open */
162
  KEY  *key_info;			/* data of keys in database */
163
  uint	*blob_field;			/* Index to blobs in Field arrray*/
164
165
  uchar	*default_values;		/* row with default values */
166
  LEX_STRING comment;			/* Comment about table */
264.2.6 by Andrey Hristov
Constify the usage of CHARSET_INFO almost to the last place in the code.
167
  const CHARSET_INFO *table_charset; /* Default charset of string fields */
1 by brian
clean slate
168
169
  MY_BITMAP all_set;
170
  /*
171
    Key which is used for looking-up table in table cache and in the list
172
    of thread's temporary tables. Has the form of:
173
      "database_name\0table_name\0" + optional part for temporary tables.
174
175
    Note that all three 'table_cache_key', 'db' and 'table_name' members
176
    must be set (and be non-zero) for tables in table cache. They also
177
    should correspond to each other.
178
    To ensure this one can use set_table_cache() methods.
179
  */
180
  LEX_STRING table_cache_key;
181
  LEX_STRING db;                        /* Pointer to db */
182
  LEX_STRING table_name;                /* Table name (for open) */
366 by Patrick Galbraith
Ulong conversion
183
  LEX_STRING path;	/* Path to .frm file (from datadir) */
1 by brian
clean slate
184
  LEX_STRING normalized_path;		/* unpack_filename(path) */
185
  LEX_STRING connect_string;
186
366 by Patrick Galbraith
Ulong conversion
187
  /*
1 by brian
clean slate
188
     Set of keys in use, implemented as a Bitmap.
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
189
     Excludes keys disabled by ALTER Table ... DISABLE KEYS.
1 by brian
clean slate
190
  */
191
  key_map keys_in_use;
192
  key_map keys_for_keyread;
193
  ha_rows min_rows, max_rows;		/* create information */
366 by Patrick Galbraith
Ulong conversion
194
  uint32_t   avg_row_length;		/* create information */
195
  uint32_t   block_size;                   /* create information */
196
  uint32_t   version, mysql_version;
197
  uint32_t   timestamp_offset;		/* Set to offset+1 of record */
198
  uint32_t   reclength;			/* Recordlength */
1 by brian
clean slate
199
200
  plugin_ref db_plugin;			/* storage engine plugin */
201
  inline handlerton *db_type() const	/* table_type for handler */
366 by Patrick Galbraith
Ulong conversion
202
  {
51.1.70 by Jay Pipes
Removed/replaced DBUG symbols and removed sql_test.cc from Makefile
203
    // assert(db_plugin);
1 by brian
clean slate
204
    return db_plugin ? plugin_data(db_plugin, handlerton*) : NULL;
205
  }
206
  enum row_type row_type;		/* How rows are stored */
207
  enum tmp_table_type tmp_table;
208
  enum ha_choice transactional;
209
  enum ha_choice page_checksum;
210
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
211
  uint ref_count;                       /* How many Table objects uses this */
1 by brian
clean slate
212
  uint open_count;			/* Number of tables in open list */
213
  uint blob_ptr_size;			/* 4 or 8 */
214
  uint key_block_size;			/* create key_block_size, if used */
215
  uint null_bytes, last_null_bit_pos;
216
  uint fields;				/* Number of fields */
217
  uint rec_buff_length;                 /* Size of table->record[] buffer */
218
  uint keys, key_parts;
219
  uint max_key_length, max_unique_length, total_key_length;
220
  uint uniques;                         /* Number of UNIQUE index */
221
  uint null_fields;			/* number of null fields */
222
  uint blob_fields;			/* number of blob fields */
223
  uint timestamp_field_offset;		/* Field number for timestamp field */
224
  uint varchar_fields;                  /* number of varchar fields */
225
  uint db_create_options;		/* Create options from database */
226
  uint db_options_in_use;		/* Options in use */
227
  uint db_record_offset;		/* if HA_REC_IN_SEQ */
228
  uint rowid_field_offset;		/* Field_nr +1 to rowid field */
229
  /* Index of auto-updated TIMESTAMP field in field array */
230
  uint primary_key;
231
  uint next_number_index;               /* autoincrement key number */
232
  uint next_number_key_offset;          /* autoinc keypart offset in a key */
233
  uint next_number_keypart;             /* autoinc keypart number in a key */
234
  uint error, open_errno, errarg;       /* error from open_table_def() */
235
  uint column_bitmap_size;
236
  uchar frm_version;
237
  bool null_field_first;
238
  bool db_low_byte_first;		/* Portable row format */
239
  bool crashed;
240
  bool name_lock, replace_with_name_lock;
241
  bool waiting_on_cond;                 /* Protection against free */
366 by Patrick Galbraith
Ulong conversion
242
  uint32_t table_map_id;                   /* for row-based replication */
1 by brian
clean slate
243
  uint64_t table_map_version;
244
245
  /*
246
    Cache for row-based replication table share checks that does not
247
    need to be repeated. Possible values are: -1 when cache value is
248
    not calculated yet, 0 when table *shall not* be replicated, 1 when
249
    table *may* be replicated.
250
  */
251
  int cached_row_logging_check;
252
253
  /*
254
    Set share's table cache key and update its db and table name appropriately.
255
256
    SYNOPSIS
257
      set_table_cache_key()
258
        key_buff    Buffer with already built table cache key to be
259
                    referenced from share.
260
        key_length  Key length.
261
262
    NOTES
263
      Since 'key_buff' buffer will be referenced from share it should has same
264
      life-time as share itself.
265
      This method automatically ensures that TABLE_SHARE::table_name/db have
266
      appropriate values by using table cache key as their source.
267
  */
268
269
  void set_table_cache_key(char *key_buff, uint key_length)
270
  {
271
    table_cache_key.str= key_buff;
272
    table_cache_key.length= key_length;
273
    /*
274
      Let us use the fact that the key is "db/0/table_name/0" + optional
275
      part for temporary tables.
276
    */
277
    db.str=            table_cache_key.str;
278
    db.length=         strlen(db.str);
279
    table_name.str=    db.str + db.length + 1;
280
    table_name.length= strlen(table_name.str);
281
  }
282
283
284
  /*
285
    Set share's table cache key and update its db and table name appropriately.
286
287
    SYNOPSIS
288
      set_table_cache_key()
289
        key_buff    Buffer to be used as storage for table cache key
290
                    (should be at least key_length bytes).
291
        key         Value for table cache key.
292
        key_length  Key length.
293
294
    NOTE
295
      Since 'key_buff' buffer will be used as storage for table cache key
296
      it should has same life-time as share itself.
297
  */
298
299
  void set_table_cache_key(char *key_buff, const char *key, uint key_length)
300
  {
301
    memcpy(key_buff, key, key_length);
302
    set_table_cache_key(key_buff, key_length);
303
  }
304
305
  inline bool honor_global_locks()
306
  {
326 by Brian Aker
Remove server based system tables (we no longer have them).
307
    return (table_category == TABLE_CATEGORY_USER);
1 by brian
clean slate
308
  }
309
366 by Patrick Galbraith
Ulong conversion
310
  inline uint32_t get_table_def_version()
1 by brian
clean slate
311
  {
312
    return table_map_id;
313
  }
314
315
} TABLE_SHARE;
316
317
366 by Patrick Galbraith
Ulong conversion
318
extern uint32_t refresh_version;
1 by brian
clean slate
319
320
/* Information for one open table */
321
enum index_hint_type
322
{
323
  INDEX_HINT_IGNORE,
324
  INDEX_HINT_USE,
325
  INDEX_HINT_FORCE
326
};
327
327.2.3 by Brian Aker
Refactoring of class Table
328
typedef struct st_table_field_w_type
329
{
330
  LEX_STRING name;
331
  LEX_STRING type;
332
  LEX_STRING cset;
333
} TABLE_FIELD_W_TYPE;
334
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
335
bool create_myisam_from_heap(THD *thd, Table *table,
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
336
                             MI_COLUMNDEF *start_recinfo,
337
                             MI_COLUMNDEF **recinfo, 
338
                             int error, bool ignore_last_dupp_key_error);
339
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
340
class Table {
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
341
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
342
public:
1 by brian
clean slate
343
  TABLE_SHARE	*s;
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
344
  Table() {}                               /* Remove gcc warning */
345
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
346
  /* SHARE methods */
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
347
  inline TABLE_SHARE *getShare() { return s; } /* Get rid of this long term */
348
  inline void setShare(TABLE_SHARE *new_share) { s= new_share; } /* Get rid of this long term */
349
  inline uint sizeKeys() { return s->keys; }
350
  inline uint sizeFields() { return s->fields; }
351
  inline uint getRecordLength() { return s->reclength; }
352
  inline uint sizeBlobFields() { return s->blob_fields; }
353
  inline uint *getBlobField() { return s->blob_field; }
354
  inline uint getNullBytes() { return s->null_bytes; }
355
  inline uint getNullFields() { return s->null_fields; }
356
  inline unsigned char *getDefaultValues() { return s->default_values; }
357
358
  inline bool isNullFieldFirst() { return s->null_field_first; }
359
  inline bool isDatabaseLowByteFirst() { return s->db_low_byte_first; }		/* Portable row format */
360
  inline bool isCrashed() { return s->crashed; }
361
  inline bool isNameLock() { return s->name_lock; } 
362
  inline bool isReplaceWithNameLock() { return s->replace_with_name_lock; }
363
  inline bool isWaitingOnCondition() { return s->waiting_on_cond; }                 /* Protection against free */
364
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
365
  /* For TMP tables, should be pulled out as a class */
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
366
  void updateCreateInfo(HA_CREATE_INFO *create_info);
367
  void setup_tmp_table_column_bitmaps(uchar *bitmaps);
368
  bool create_myisam_tmp_table(KEY *keyinfo, 
369
                               MI_COLUMNDEF *start_recinfo,
370
                               MI_COLUMNDEF **recinfo, 
371
                               uint64_t options);
372
  void free_tmp_table(THD *thd);
373
  bool open_tmp_table();
354 by Brian Aker
Refactor of Table methods.
374
  size_t max_row_length(const uchar *data);
355 by Brian Aker
More Table cleanup
375
  uint find_shortest_key(const key_map *usable_keys);
376
  bool compare_record(Field **ptr);
377
  bool compare_record();
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
378
327.2.3 by Brian Aker
Refactoring of class Table
379
  bool table_check_intact(const uint table_f_count, const TABLE_FIELD_W_TYPE *table_def);
380
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
381
  /* See if this can be blown away */
382
  inline uint getDBStat () { return db_stat; }
383
  inline uint setDBStat () { return db_stat; }
384
  uint		db_stat;		/* mode of file as in handler.h */
385
1 by brian
clean slate
386
  handler	*file;
327.1.1 by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure).
387
  Table *next, *prev;
1 by brian
clean slate
388
389
  THD	*in_use;                        /* Which thread uses this */
390
  Field **field;			/* Pointer to fields */
391
392
  uchar *record[2];			/* Pointer to records */
393
  uchar *write_row_record;		/* Used as optimisation in
394
					   THD::write_row */
395
  uchar *insert_values;                  /* used by INSERT ... UPDATE */
396
  /* 
397
    Map of keys that can be used to retrieve all data from this table 
398
    needed by the query without reading the row.
399
  */
400
  key_map covering_keys;
401
  key_map quick_keys, merge_keys;
402
  /*
403
    A set of keys that can be used in the query that references this
404
    table.
405
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
406
    All indexes disabled on the table's TABLE_SHARE (see Table::s) will be 
407
    subtracted from this set upon instantiation. Thus for any Table t it holds
1 by brian
clean slate
408
    that t.keys_in_use_for_query is a subset of t.s.keys_in_use. Generally we 
409
    must not introduce any new keys here (see setup_tables).
410
411
    The set is implemented as a bitmap.
412
  */
413
  key_map keys_in_use_for_query;
414
  /* Map of keys that can be used to calculate GROUP BY without sorting */
415
  key_map keys_in_use_for_group_by;
416
  /* Map of keys that can be used to calculate ORDER BY without sorting */
417
  key_map keys_in_use_for_order_by;
418
  KEY  *key_info;			/* data of keys in database */
419
420
  Field *next_number_field;		/* Set if next_number is activated */
421
  Field *found_next_number_field;	/* Set on open */
422
  Field_timestamp *timestamp_field;
423
327.2.4 by Brian Aker
Refactoring table.h
424
  TableList *pos_in_table_list;/* Element referring to this table */
327.2.3 by Brian Aker
Refactoring of class Table
425
  order_st *group;
1 by brian
clean slate
426
  const char	*alias;            	  /* alias or table name */
427
  uchar		*null_flags;
428
  my_bitmap_map	*bitmap_init_value;
429
  MY_BITMAP     def_read_set, def_write_set, tmp_set; /* containers */
430
  MY_BITMAP     *read_set, *write_set;          /* Active column sets */
431
  /*
432
   The ID of the query that opened and is using this table. Has different
433
   meanings depending on the table type.
434
435
   Temporary tables:
436
437
   table->query_id is set to thd->query_id for the duration of a statement
438
   and is reset to 0 once it is closed by the same statement. A non-zero
439
   table->query_id means that a statement is using the table even if it's
440
   not the current statement (table is in use by some outer statement).
441
442
   Non-temporary tables:
443
444
   Under pre-locked or LOCK TABLES mode: query_id is set to thd->query_id
445
   for the duration of a statement and is reset to 0 once it is closed by
446
   the same statement. A non-zero query_id is used to control which tables
447
   in the list of pre-opened and locked tables are actually being used.
448
  */
449
  query_id_t	query_id;
450
451
  /* 
51.1.70 by Jay Pipes
Removed/replaced DBUG symbols and removed sql_test.cc from Makefile
452
    For each key that has quick_keys.is_set(key) == true: estimate of #records
1 by brian
clean slate
453
    and max #key parts that range access would use.
454
  */
455
  ha_rows	quick_rows[MAX_KEY];
456
457
  /* Bitmaps of key parts that =const for the entire join. */
458
  key_part_map  const_key_parts[MAX_KEY];
459
460
  uint		quick_key_parts[MAX_KEY];
461
  uint		quick_n_ranges[MAX_KEY];
462
463
  /* 
464
    Estimate of number of records that satisfy SARGable part of the table
465
    condition, or table->file->records if no SARGable condition could be
466
    constructed.
467
    This value is used by join optimizer as an estimate of number of records
468
    that will pass the table condition (condition that depends on fields of 
469
    this table and constants)
470
  */
471
  ha_rows       quick_condition_rows;
472
473
  /*
474
    If this table has TIMESTAMP field with auto-set property (pointed by
475
    timestamp_field member) then this variable indicates during which
476
    operations (insert only/on update/in both cases) we should set this
477
    field to current timestamp. If there are no such field in this table
478
    or we should not automatically set its value during execution of current
479
    statement then the variable contains TIMESTAMP_NO_AUTO_SET (i.e. 0).
480
481
    Value of this variable is set for each statement in open_table() and
482
    if needed cleared later in statement processing code (see mysql_update()
483
    as example).
484
  */
485
  timestamp_auto_set_type timestamp_field_type;
486
  table_map	map;                    /* ID bit of table (1,2,4,8,16...) */
487
319.1.1 by Grant Limberg
renamed all instances of MYSQL_ to DRIZZLE_
488
  uint          lock_position;          /* Position in DRIZZLE_LOCK.table */
489
  uint          lock_data_start;        /* Start pos. in DRIZZLE_LOCK.locks */
1 by brian
clean slate
490
  uint          lock_count;             /* Number of locks */
491
  uint		tablenr,used_fields;
492
  uint          temp_pool_slot;		/* Used by intern temp tables */
493
  uint		status;                 /* What's in record[0] */
494
  /* number of select if it is derived table */
495
  uint          derived_select_number;
496
  int		current_lock;           /* Type of lock on table */
274 by Brian Aker
my_bool conversion in Table
497
  bool copy_blobs;			/* copy_blobs when storing */
1 by brian
clean slate
498
499
  /*
500
    0 or JOIN_TYPE_{LEFT|RIGHT}. Currently this is only compared to 0.
501
    If maybe_null !=0, this table is inner w.r.t. some outer join operation,
502
    and null_row may be true.
503
  */
327.1.3 by Brian Aker
Cleaned up depend in Proto utils. Modified int to bool. Put TmpTable class
504
  bool maybe_null;
505
1 by brian
clean slate
506
  /*
507
    If true, the current table row is considered to have all columns set to 
508
    NULL, including columns declared as "not null" (see maybe_null).
509
  */
274 by Brian Aker
my_bool conversion in Table
510
  bool null_row;
1 by brian
clean slate
511
274 by Brian Aker
my_bool conversion in Table
512
  bool force_index;
513
  bool distinct,const_table,no_rows;
514
  bool key_read, no_keyread;
1 by brian
clean slate
515
  /*
516
    Placeholder for an open table which prevents other connections
517
    from taking name-locks on this table. Typically used with
518
    TABLE_SHARE::version member to take an exclusive name-lock on
519
    this table name -- a name lock that not only prevents other
520
    threads from opening the table, but also blocks other name
521
    locks. This is achieved by:
522
    - setting open_placeholder to 1 - this will block other name
523
      locks, as wait_for_locked_table_name will be forced to wait,
524
      see table_is_used for details.
525
    - setting version to 0 - this will force other threads to close
526
      the instance of this table and wait (this is the same approach
527
      as used for usual name locks).
528
    An exclusively name-locked table currently can have no handler
529
    object associated with it (db_stat is always 0), but please do
530
    not rely on that.
531
  */
274 by Brian Aker
my_bool conversion in Table
532
  bool open_placeholder;
533
  bool locked_by_logger;
534
  bool no_replicate;
535
  bool locked_by_name;
536
  bool no_cache;
1 by brian
clean slate
537
  /* To signal that the table is associated with a HANDLER statement */
274 by Brian Aker
my_bool conversion in Table
538
  bool open_by_handler;
1 by brian
clean slate
539
  /*
540
    To indicate that a non-null value of the auto_increment field
541
    was provided by the user or retrieved from the current record.
542
    Used only in the MODE_NO_AUTO_VALUE_ON_ZERO mode.
543
  */
274 by Brian Aker
my_bool conversion in Table
544
  bool auto_increment_field_not_null;
545
  bool insert_or_update;             /* Can be used by the handler */
546
  bool alias_name_used;		/* true if table_name is alias */
547
  bool get_fields_in_item_tree;      /* Signal to fix_field */
1 by brian
clean slate
548
549
  REGINFO reginfo;			/* field connections */
550
  MEM_ROOT mem_root;
327.2.3 by Brian Aker
Refactoring of class Table
551
  filesort_info_st sort;
1 by brian
clean slate
552
553
  bool fill_item_list(List<Item> *item_list) const;
554
  void reset_item_list(List<Item> *item_list) const;
555
  void clear_column_bitmaps(void);
556
  void prepare_for_position(void);
557
  void mark_columns_used_by_index_no_reset(uint index, MY_BITMAP *map);
558
  void mark_columns_used_by_index(uint index);
559
  void restore_column_maps_after_mark_index();
560
  void mark_auto_increment_column(void);
561
  void mark_columns_needed_for_update(void);
562
  void mark_columns_needed_for_delete(void);
563
  void mark_columns_needed_for_insert(void);
564
  inline void column_bitmaps_set(MY_BITMAP *read_set_arg,
565
                                 MY_BITMAP *write_set_arg)
566
  {
567
    read_set= read_set_arg;
568
    write_set= write_set_arg;
569
    if (file)
570
      file->column_bitmaps_signal();
571
  }
572
  inline void column_bitmaps_set_no_signal(MY_BITMAP *read_set_arg,
573
                                           MY_BITMAP *write_set_arg)
574
  {
575
    read_set= read_set_arg;
576
    write_set= write_set_arg;
577
  }
354 by Brian Aker
Refactor of Table methods.
578
579
  void restore_column_map(my_bitmap_map *old);
580
581
  my_bitmap_map *use_all_columns(MY_BITMAP *bitmap);
1 by brian
clean slate
582
  inline void use_all_columns()
583
  {
584
    column_bitmaps_set(&s->all_set, &s->all_set);
585
  }
354 by Brian Aker
Refactor of Table methods.
586
1 by brian
clean slate
587
  inline void default_column_bitmaps()
588
  {
589
    read_set= &def_read_set;
590
    write_set= &def_write_set;
591
  }
354 by Brian Aker
Refactor of Table methods.
592
1 by brian
clean slate
593
  /* Is table open or should be treated as such by name-locking? */
594
  inline bool is_name_opened() { return db_stat || open_placeholder; }
595
  /*
596
    Is this instance of the table should be reopen or represents a name-lock?
597
  */
598
  inline bool needs_reopen_or_name_lock()
599
  { return s->version != refresh_version; }
354 by Brian Aker
Refactor of Table methods.
600
601
  int report_error(int error);
1 by brian
clean slate
602
};
603
604
typedef struct st_foreign_key_info
605
{
606
  LEX_STRING *forein_id;
607
  LEX_STRING *referenced_db;
608
  LEX_STRING *referenced_table;
609
  LEX_STRING *update_method;
610
  LEX_STRING *delete_method;
611
  LEX_STRING *referenced_key_name;
612
  List<LEX_STRING> foreign_fields;
613
  List<LEX_STRING> referenced_fields;
614
} FOREIGN_KEY_INFO;
615
616
/*
617
  Make sure that the order of schema_tables and enum_schema_tables are the same.
618
*/
619
620
enum enum_schema_tables
621
{
622
  SCH_CHARSETS= 0,
623
  SCH_COLLATIONS,
624
  SCH_COLLATION_CHARACTER_SET_APPLICABILITY,
625
  SCH_COLUMNS,
626
  SCH_GLOBAL_STATUS,
627
  SCH_GLOBAL_VARIABLES,
628
  SCH_KEY_COLUMN_USAGE,
629
  SCH_OPEN_TABLES,
630
  SCH_PLUGINS,
631
  SCH_PROCESSLIST,
632
  SCH_REFERENTIAL_CONSTRAINTS,
633
  SCH_SCHEMATA,
634
  SCH_SESSION_STATUS,
635
  SCH_SESSION_VARIABLES,
636
  SCH_STATISTICS,
637
  SCH_STATUS,
638
  SCH_TABLES,
639
  SCH_TABLE_CONSTRAINTS,
640
  SCH_TABLE_NAMES,
53.2.2 by Monty Taylor
Updated everything that needs updating to compile with -std=gnu99 -pedantic
641
  SCH_VARIABLES
1 by brian
clean slate
642
};
643
644
645
#define MY_I_S_MAYBE_NULL 1
646
#define MY_I_S_UNSIGNED   2
647
648
649
#define SKIP_OPEN_TABLE 0                // do not open table
650
#define OPEN_FRM_ONLY   1                // open FRM file only
651
#define OPEN_FULL_TABLE 2                // open FRM,MYD, MYI files
652
653
typedef struct st_field_info
654
{
655
  /** 
656
      This is used as column name. 
657
  */
658
  const char* field_name;
659
  /**
660
     For string-type columns, this is the maximum number of
661
     characters. Otherwise, it is the 'display-length' for the column.
662
  */
663
  uint field_length;
664
  /**
665
     This denotes data type for the column. For the most part, there seems to
666
     be one entry in the enum for each SQL data type, although there seem to
667
     be a number of additional entries in the enum.
668
  */
669
  enum enum_field_types field_type;
670
  int value;
671
  /**
672
     This is used to set column attributes. By default, columns are @c NOT
673
     @c NULL and @c SIGNED, and you can deviate from the default
674
     by setting the appopriate flags. You can use either one of the flags
675
     @c MY_I_S_MAYBE_NULL and @cMY_I_S_UNSIGNED or
676
     combine them using the bitwise or operator @c |. Both flags are
677
     defined in table.h.
678
   */
679
  uint field_flags;        // Field atributes(maybe_null, signed, unsigned etc.)
680
  const char* old_name;
681
  /**
682
     This should be one of @c SKIP_OPEN_TABLE,
683
     @c OPEN_FRM_ONLY or @c OPEN_FULL_TABLE.
684
  */
685
  uint open_method;
686
} ST_FIELD_INFO;
687
688
327.2.4 by Brian Aker
Refactoring table.h
689
class TableList;
1 by brian
clean slate
690
typedef class Item COND;
691
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
692
struct ST_SCHEMA_TABLE
1 by brian
clean slate
693
{
694
  const char* table_name;
695
  ST_FIELD_INFO *fields_info;
696
  /* Create information_schema table */
327.2.4 by Brian Aker
Refactoring table.h
697
  Table *(*create_table)  (THD *thd, TableList *table_list);
1 by brian
clean slate
698
  /* Fill table with data */
327.2.4 by Brian Aker
Refactoring table.h
699
  int (*fill_table) (THD *thd, TableList *tables, COND *cond);
1 by brian
clean slate
700
  /* Handle fileds for old SHOW */
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
701
  int (*old_format) (THD *thd, struct ST_SCHEMA_TABLE *schema_table);
327.2.4 by Brian Aker
Refactoring table.h
702
  int (*process_table) (THD *thd, TableList *tables, Table *table,
1 by brian
clean slate
703
                        bool res, LEX_STRING *db_name, LEX_STRING *table_name);
704
  int idx_field1, idx_field2; 
705
  bool hidden;
327.1.5 by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h
706
  uint i_s_requested_object;  /* the object we need to open(Table | VIEW) */
707
};
1 by brian
clean slate
708
709
710
#define JOIN_TYPE_LEFT	1
711
#define JOIN_TYPE_RIGHT	2
712
713
struct st_lex;
714
class select_union;
715
class TMP_TABLE_PARAM;
716
717
struct Field_translator
718
{
719
  Item *item;
720
  const char *name;
721
};
722
723
724
typedef struct st_changed_table_list
725
{
726
  struct	st_changed_table_list *next;
727
  char		*key;
205 by Brian Aker
uint32 -> uin32_t
728
  uint32_t        key_length;
327.2.4 by Brian Aker
Refactoring table.h
729
} CHANGED_TableList;
1 by brian
clean slate
730
731
352 by Brian Aker
Merge of Brian's tree to main tree.
732
typedef struct st_open_table_list
733
{
1 by brian
clean slate
734
  struct st_open_table_list *next;
735
  char	*db,*table;
205 by Brian Aker
uint32 -> uin32_t
736
  uint32_t in_use,locked;
327.2.4 by Brian Aker
Refactoring table.h
737
} OPEN_TableList;
1 by brian
clean slate
738
327.2.3 by Brian Aker
Refactoring of class Table
739
327.1.2 by Brian Aker
Commiting next pass of Table class cleanup.
740
#endif /* DRIZZLED_TABLE_H */