~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2000-2006 MySQL AB
2
3
   This program is free software; you can redistribute it and/or modify
4
   it under the terms of the GNU General Public License as published by
5
   the Free Software Foundation; version 2 of the License.
6
7
   This program is distributed in the hope that it will be useful,
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
   GNU General Public License for more details.
11
12
   You should have received a copy of the GNU General Public License
13
   along with this program; if not, write to the Free Software
14
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
16
17
/* Structs that defines the TABLE */
18
19
class Item;				/* Needed by ORDER */
20
class Item_subselect;
21
class st_select_lex_unit;
22
class st_select_lex;
23
class COND_EQUAL;
24
class Security_context;
25
26
/*************************************************************************/
27
28
/* Order clause list element */
29
30
typedef struct st_order {
31
  struct st_order *next;
32
  Item	 **item;			/* Point at item in select fields */
33
  Item	 *item_ptr;			/* Storage for initial item */
34
  Item   **item_copy;			/* For SPs; the original item ptr */
35
  int    counter;                       /* position in SELECT list, correct
36
                                           only if counter_used is true*/
37
  bool	 asc;				/* true if ascending */
38
  bool	 free_me;			/* true if item isn't shared  */
39
  bool	 in_field_list;			/* true if in select field list */
40
  bool   counter_used;                  /* parameter was counter of columns */
41
  Field  *field;			/* If tmp-table group */
42
  char	 *buff;				/* If tmp-table group */
43
  table_map used, depend_map;
44
} ORDER;
45
46
enum tmp_table_type
47
{
48
  NO_TMP_TABLE, NON_TRANSACTIONAL_TMP_TABLE, TRANSACTIONAL_TMP_TABLE,
49
  INTERNAL_TMP_TABLE, SYSTEM_TMP_TABLE, TMP_TABLE_FRM_FILE_ONLY
50
};
51
52
enum frm_type_enum
53
{
54
  FRMTYPE_ERROR= 0,
53.2.2 by Monty Taylor
Updated everything that needs updating to compile with -std=gnu99 -pedantic
55
  FRMTYPE_TABLE
1 by brian
clean slate
56
};
57
58
frm_type_enum mysql_frm_type(THD *thd, char *path, enum legacy_db_type *dbt);
59
60
61
enum release_type { RELEASE_NORMAL, RELEASE_WAIT_FOR_DROP };
62
63
typedef struct st_filesort_info
64
{
65
  IO_CACHE *io_cache;           /* If sorted through filesort */
66
  uchar     **sort_keys;        /* Buffer for sorting keys */
67
  uchar     *buffpek;           /* Buffer for buffpek structures */
68
  uint      buffpek_len;        /* Max number of buffpeks in the buffer */
69
  uchar     *addon_buf;         /* Pointer to a buffer if sorted with fields */
70
  size_t    addon_length;       /* Length of the buffer */
71
  struct st_sort_addon_field *addon_field;     /* Pointer to the fields info */
72
  void    (*unpack)(struct st_sort_addon_field *, uchar *); /* To unpack back */
73
  uchar     *record_pointers;    /* If sorted in memory */
74
  ha_rows   found_records;      /* How many records in sort */
75
} FILESORT_INFO;
76
77
78
/*
79
  Values in this enum are used to indicate how a tables TIMESTAMP field
80
  should be treated. It can be set to the current timestamp on insert or
81
  update or both.
82
  WARNING: The values are used for bit operations. If you change the
83
  enum, you must keep the bitwise relation of the values. For example:
84
  (int) TIMESTAMP_AUTO_SET_ON_BOTH must be equal to
85
  (int) TIMESTAMP_AUTO_SET_ON_INSERT | (int) TIMESTAMP_AUTO_SET_ON_UPDATE.
86
  We use an enum here so that the debugger can display the value names.
87
*/
88
enum timestamp_auto_set_type
89
{
90
  TIMESTAMP_NO_AUTO_SET= 0, TIMESTAMP_AUTO_SET_ON_INSERT= 1,
91
  TIMESTAMP_AUTO_SET_ON_UPDATE= 2, TIMESTAMP_AUTO_SET_ON_BOTH= 3
92
};
93
#define clear_timestamp_auto_bits(_target_, _bits_) \
94
  (_target_)= (enum timestamp_auto_set_type)((int)(_target_) & ~(int)(_bits_))
95
96
class Field_timestamp;
97
class Field_blob;
98
class Table_triggers_list;
99
100
/**
101
  Category of table found in the table share.
102
*/
103
enum enum_table_category
104
{
105
  /**
106
    Unknown value.
107
  */
108
  TABLE_UNKNOWN_CATEGORY=0,
109
110
  /**
111
    Temporary table.
112
    The table is visible only in the session.
113
    Therefore,
114
    - FLUSH TABLES WITH READ LOCK
115
    - SET GLOBAL READ_ONLY = ON
116
    do not apply to this table.
117
    Note that LOCK TABLE t FOR READ/WRITE
118
    can be used on temporary tables.
119
    Temporary tables are not part of the table cache.
120
  */
121
  TABLE_CATEGORY_TEMPORARY=1,
122
123
  /**
124
    User table.
125
    These tables do honor:
126
    - LOCK TABLE t FOR READ/WRITE
127
    - FLUSH TABLES WITH READ LOCK
128
    - SET GLOBAL READ_ONLY = ON
129
    User tables are cached in the table cache.
130
  */
131
  TABLE_CATEGORY_USER=2,
132
133
  /**
134
    System table, maintained by the server.
135
    These tables do honor:
136
    - LOCK TABLE t FOR READ/WRITE
137
    - FLUSH TABLES WITH READ LOCK
138
    - SET GLOBAL READ_ONLY = ON
139
    Typically, writes to system tables are performed by
140
    the server implementation, not explicitly be a user.
141
    System tables are cached in the table cache.
142
  */
143
  TABLE_CATEGORY_SYSTEM=3,
144
145
  /**
146
    Information schema tables.
147
    These tables are an interface provided by the system
148
    to inspect the system metadata.
149
    These tables do *not* honor:
150
    - LOCK TABLE t FOR READ/WRITE
151
    - FLUSH TABLES WITH READ LOCK
152
    - SET GLOBAL READ_ONLY = ON
153
    as there is no point in locking explicitely
154
    an INFORMATION_SCHEMA table.
155
    Nothing is directly written to information schema tables.
156
    Note that this value is not used currently,
157
    since information schema tables are not shared,
158
    but implemented as session specific temporary tables.
159
  */
160
  /*
161
    TODO: Fixing the performance issues of I_S will lead
162
    to I_S tables in the table cache, which should use
163
    this table type.
164
  */
53.2.2 by Monty Taylor
Updated everything that needs updating to compile with -std=gnu99 -pedantic
165
  TABLE_CATEGORY_INFORMATION=4
1 by brian
clean slate
166
};
167
typedef enum enum_table_category TABLE_CATEGORY;
168
169
TABLE_CATEGORY get_table_category(const LEX_STRING *db,
170
                                  const LEX_STRING *name);
171
172
/*
173
  This structure is shared between different table objects. There is one
174
  instance of table share per one table in the database.
175
*/
176
177
typedef struct st_table_share
178
{
179
  st_table_share() {}                    /* Remove gcc warning */
180
181
  /** Category of this table. */
182
  TABLE_CATEGORY table_category;
183
184
  /* hash of field names (contains pointers to elements of field array) */
185
  HASH	name_hash;			/* hash of field names */
186
  MEM_ROOT mem_root;
187
  TYPELIB keynames;			/* Pointers to keynames */
188
  TYPELIB fieldnames;			/* Pointer to fieldnames */
189
  TYPELIB *intervals;			/* pointer to interval info */
190
  pthread_mutex_t mutex;                /* For locking the share  */
191
  pthread_cond_t cond;			/* To signal that share is ready */
192
  struct st_table_share *next,		/* Link to unused shares */
193
    **prev;
194
195
  /* The following is copied to each TABLE on OPEN */
196
  Field **field;
197
  Field **found_next_number_field;
198
  Field *timestamp_field;               /* Used only during open */
199
  KEY  *key_info;			/* data of keys in database */
200
  uint	*blob_field;			/* Index to blobs in Field arrray*/
201
202
  uchar	*default_values;		/* row with default values */
203
  LEX_STRING comment;			/* Comment about table */
204
  CHARSET_INFO *table_charset;		/* Default charset of string fields */
205
206
  MY_BITMAP all_set;
207
  /*
208
    Key which is used for looking-up table in table cache and in the list
209
    of thread's temporary tables. Has the form of:
210
      "database_name\0table_name\0" + optional part for temporary tables.
211
212
    Note that all three 'table_cache_key', 'db' and 'table_name' members
213
    must be set (and be non-zero) for tables in table cache. They also
214
    should correspond to each other.
215
    To ensure this one can use set_table_cache() methods.
216
  */
217
  LEX_STRING table_cache_key;
218
  LEX_STRING db;                        /* Pointer to db */
219
  LEX_STRING table_name;                /* Table name (for open) */
220
  LEX_STRING path;                	/* Path to .frm file (from datadir) */
221
  LEX_STRING normalized_path;		/* unpack_filename(path) */
222
  LEX_STRING connect_string;
223
224
  /* 
225
     Set of keys in use, implemented as a Bitmap.
226
     Excludes keys disabled by ALTER TABLE ... DISABLE KEYS.
227
  */
228
  key_map keys_in_use;
229
  key_map keys_for_keyread;
230
  ha_rows min_rows, max_rows;		/* create information */
231
  ulong   avg_row_length;		/* create information */
232
  ulong   version, mysql_version;
233
  ulong   timestamp_offset;		/* Set to offset+1 of record */
234
  ulong   reclength;			/* Recordlength */
235
236
  plugin_ref db_plugin;			/* storage engine plugin */
237
  inline handlerton *db_type() const	/* table_type for handler */
238
  { 
239
    // DBUG_ASSERT(db_plugin);
240
    return db_plugin ? plugin_data(db_plugin, handlerton*) : NULL;
241
  }
242
  enum row_type row_type;		/* How rows are stored */
243
  enum tmp_table_type tmp_table;
244
  enum ha_choice transactional;
245
  enum ha_choice page_checksum;
246
247
  uint ref_count;                       /* How many TABLE objects uses this */
248
  uint open_count;			/* Number of tables in open list */
249
  uint blob_ptr_size;			/* 4 or 8 */
250
  uint key_block_size;			/* create key_block_size, if used */
251
  uint null_bytes, last_null_bit_pos;
252
  uint fields;				/* Number of fields */
253
  uint rec_buff_length;                 /* Size of table->record[] buffer */
254
  uint keys, key_parts;
255
  uint max_key_length, max_unique_length, total_key_length;
256
  uint uniques;                         /* Number of UNIQUE index */
257
  uint null_fields;			/* number of null fields */
258
  uint blob_fields;			/* number of blob fields */
259
  uint timestamp_field_offset;		/* Field number for timestamp field */
260
  uint varchar_fields;                  /* number of varchar fields */
261
  uint db_create_options;		/* Create options from database */
262
  uint db_options_in_use;		/* Options in use */
263
  uint db_record_offset;		/* if HA_REC_IN_SEQ */
264
  uint raid_type, raid_chunks;
265
  uint rowid_field_offset;		/* Field_nr +1 to rowid field */
266
  /* Index of auto-updated TIMESTAMP field in field array */
267
  uint primary_key;
268
  uint next_number_index;               /* autoincrement key number */
269
  uint next_number_key_offset;          /* autoinc keypart offset in a key */
270
  uint next_number_keypart;             /* autoinc keypart number in a key */
271
  uint error, open_errno, errarg;       /* error from open_table_def() */
272
  uint column_bitmap_size;
273
  uchar frm_version;
274
  bool null_field_first;
275
  bool system;                          /* Set if system table (one record) */
276
  bool crypted;                         /* If .frm file is crypted */
277
  bool db_low_byte_first;		/* Portable row format */
278
  bool crashed;
279
  bool name_lock, replace_with_name_lock;
280
  bool waiting_on_cond;                 /* Protection against free */
281
  ulong table_map_id;                   /* for row-based replication */
282
  uint64_t table_map_version;
283
284
  /*
285
    Cache for row-based replication table share checks that does not
286
    need to be repeated. Possible values are: -1 when cache value is
287
    not calculated yet, 0 when table *shall not* be replicated, 1 when
288
    table *may* be replicated.
289
  */
290
  int cached_row_logging_check;
291
292
  /*
293
    Set share's table cache key and update its db and table name appropriately.
294
295
    SYNOPSIS
296
      set_table_cache_key()
297
        key_buff    Buffer with already built table cache key to be
298
                    referenced from share.
299
        key_length  Key length.
300
301
    NOTES
302
      Since 'key_buff' buffer will be referenced from share it should has same
303
      life-time as share itself.
304
      This method automatically ensures that TABLE_SHARE::table_name/db have
305
      appropriate values by using table cache key as their source.
306
  */
307
308
  void set_table_cache_key(char *key_buff, uint key_length)
309
  {
310
    table_cache_key.str= key_buff;
311
    table_cache_key.length= key_length;
312
    /*
313
      Let us use the fact that the key is "db/0/table_name/0" + optional
314
      part for temporary tables.
315
    */
316
    db.str=            table_cache_key.str;
317
    db.length=         strlen(db.str);
318
    table_name.str=    db.str + db.length + 1;
319
    table_name.length= strlen(table_name.str);
320
  }
321
322
323
  /*
324
    Set share's table cache key and update its db and table name appropriately.
325
326
    SYNOPSIS
327
      set_table_cache_key()
328
        key_buff    Buffer to be used as storage for table cache key
329
                    (should be at least key_length bytes).
330
        key         Value for table cache key.
331
        key_length  Key length.
332
333
    NOTE
334
      Since 'key_buff' buffer will be used as storage for table cache key
335
      it should has same life-time as share itself.
336
  */
337
338
  void set_table_cache_key(char *key_buff, const char *key, uint key_length)
339
  {
340
    memcpy(key_buff, key, key_length);
341
    set_table_cache_key(key_buff, key_length);
342
  }
343
344
  inline bool honor_global_locks()
345
  {
346
    return ((table_category == TABLE_CATEGORY_USER)
347
            || (table_category == TABLE_CATEGORY_SYSTEM));
348
  }
349
350
  inline ulong get_table_def_version()
351
  {
352
    return table_map_id;
353
  }
354
355
} TABLE_SHARE;
356
357
358
extern ulong refresh_version;
359
360
/* Information for one open table */
361
enum index_hint_type
362
{
363
  INDEX_HINT_IGNORE,
364
  INDEX_HINT_USE,
365
  INDEX_HINT_FORCE
366
};
367
368
struct st_table {
369
  st_table() {}                               /* Remove gcc warning */
370
371
  TABLE_SHARE	*s;
372
  handler	*file;
373
  struct st_table *next, *prev;
374
375
  THD	*in_use;                        /* Which thread uses this */
376
  Field **field;			/* Pointer to fields */
377
378
  uchar *record[2];			/* Pointer to records */
379
  uchar *write_row_record;		/* Used as optimisation in
380
					   THD::write_row */
381
  uchar *insert_values;                  /* used by INSERT ... UPDATE */
382
  /* 
383
    Map of keys that can be used to retrieve all data from this table 
384
    needed by the query without reading the row.
385
  */
386
  key_map covering_keys;
387
  key_map quick_keys, merge_keys;
388
  /*
389
    A set of keys that can be used in the query that references this
390
    table.
391
392
    All indexes disabled on the table's TABLE_SHARE (see TABLE::s) will be 
393
    subtracted from this set upon instantiation. Thus for any TABLE t it holds
394
    that t.keys_in_use_for_query is a subset of t.s.keys_in_use. Generally we 
395
    must not introduce any new keys here (see setup_tables).
396
397
    The set is implemented as a bitmap.
398
  */
399
  key_map keys_in_use_for_query;
400
  /* Map of keys that can be used to calculate GROUP BY without sorting */
401
  key_map keys_in_use_for_group_by;
402
  /* Map of keys that can be used to calculate ORDER BY without sorting */
403
  key_map keys_in_use_for_order_by;
404
  KEY  *key_info;			/* data of keys in database */
405
406
  Field *next_number_field;		/* Set if next_number is activated */
407
  Field *found_next_number_field;	/* Set on open */
408
  Field_timestamp *timestamp_field;
409
410
  /* Table's triggers, 0 if there are no of them */
411
  Table_triggers_list *triggers;
412
  TABLE_LIST *pos_in_table_list;/* Element referring to this table */
413
  ORDER		*group;
414
  const char	*alias;            	  /* alias or table name */
415
  uchar		*null_flags;
416
  my_bitmap_map	*bitmap_init_value;
417
  MY_BITMAP     def_read_set, def_write_set, tmp_set; /* containers */
418
  MY_BITMAP     *read_set, *write_set;          /* Active column sets */
419
  /*
420
   The ID of the query that opened and is using this table. Has different
421
   meanings depending on the table type.
422
423
   Temporary tables:
424
425
   table->query_id is set to thd->query_id for the duration of a statement
426
   and is reset to 0 once it is closed by the same statement. A non-zero
427
   table->query_id means that a statement is using the table even if it's
428
   not the current statement (table is in use by some outer statement).
429
430
   Non-temporary tables:
431
432
   Under pre-locked or LOCK TABLES mode: query_id is set to thd->query_id
433
   for the duration of a statement and is reset to 0 once it is closed by
434
   the same statement. A non-zero query_id is used to control which tables
435
   in the list of pre-opened and locked tables are actually being used.
436
  */
437
  query_id_t	query_id;
438
439
  /* 
440
    For each key that has quick_keys.is_set(key) == TRUE: estimate of #records
441
    and max #key parts that range access would use.
442
  */
443
  ha_rows	quick_rows[MAX_KEY];
444
445
  /* Bitmaps of key parts that =const for the entire join. */
446
  key_part_map  const_key_parts[MAX_KEY];
447
448
  uint		quick_key_parts[MAX_KEY];
449
  uint		quick_n_ranges[MAX_KEY];
450
451
  /* 
452
    Estimate of number of records that satisfy SARGable part of the table
453
    condition, or table->file->records if no SARGable condition could be
454
    constructed.
455
    This value is used by join optimizer as an estimate of number of records
456
    that will pass the table condition (condition that depends on fields of 
457
    this table and constants)
458
  */
459
  ha_rows       quick_condition_rows;
460
461
  /*
462
    If this table has TIMESTAMP field with auto-set property (pointed by
463
    timestamp_field member) then this variable indicates during which
464
    operations (insert only/on update/in both cases) we should set this
465
    field to current timestamp. If there are no such field in this table
466
    or we should not automatically set its value during execution of current
467
    statement then the variable contains TIMESTAMP_NO_AUTO_SET (i.e. 0).
468
469
    Value of this variable is set for each statement in open_table() and
470
    if needed cleared later in statement processing code (see mysql_update()
471
    as example).
472
  */
473
  timestamp_auto_set_type timestamp_field_type;
474
  table_map	map;                    /* ID bit of table (1,2,4,8,16...) */
475
476
  uint          lock_position;          /* Position in MYSQL_LOCK.table */
477
  uint          lock_data_start;        /* Start pos. in MYSQL_LOCK.locks */
478
  uint          lock_count;             /* Number of locks */
479
  uint		tablenr,used_fields;
480
  uint          temp_pool_slot;		/* Used by intern temp tables */
481
  uint		status;                 /* What's in record[0] */
482
  uint		db_stat;		/* mode of file as in handler.h */
483
  /* number of select if it is derived table */
484
  uint          derived_select_number;
485
  int		current_lock;           /* Type of lock on table */
486
  my_bool copy_blobs;			/* copy_blobs when storing */
487
488
  /*
489
    0 or JOIN_TYPE_{LEFT|RIGHT}. Currently this is only compared to 0.
490
    If maybe_null !=0, this table is inner w.r.t. some outer join operation,
491
    and null_row may be true.
492
  */
493
  uint maybe_null;
494
  /*
495
    If true, the current table row is considered to have all columns set to 
496
    NULL, including columns declared as "not null" (see maybe_null).
497
  */
498
  my_bool null_row;
499
500
  /*
501
    TODO: Each of the following flags take up 8 bits. They can just as easily
502
    be put into one single unsigned long and instead of taking up 18
503
    bytes, it would take up 4.
504
  */
505
  my_bool force_index;
506
  my_bool distinct,const_table,no_rows;
507
  my_bool key_read, no_keyread;
508
  /*
509
    Placeholder for an open table which prevents other connections
510
    from taking name-locks on this table. Typically used with
511
    TABLE_SHARE::version member to take an exclusive name-lock on
512
    this table name -- a name lock that not only prevents other
513
    threads from opening the table, but also blocks other name
514
    locks. This is achieved by:
515
    - setting open_placeholder to 1 - this will block other name
516
      locks, as wait_for_locked_table_name will be forced to wait,
517
      see table_is_used for details.
518
    - setting version to 0 - this will force other threads to close
519
      the instance of this table and wait (this is the same approach
520
      as used for usual name locks).
521
    An exclusively name-locked table currently can have no handler
522
    object associated with it (db_stat is always 0), but please do
523
    not rely on that.
524
  */
525
  my_bool open_placeholder;
526
  my_bool locked_by_logger;
527
  my_bool no_replicate;
528
  my_bool locked_by_name;
529
  my_bool fulltext_searched;
530
  my_bool no_cache;
531
  /* To signal that the table is associated with a HANDLER statement */
532
  my_bool open_by_handler;
533
  /*
534
    To indicate that a non-null value of the auto_increment field
535
    was provided by the user or retrieved from the current record.
536
    Used only in the MODE_NO_AUTO_VALUE_ON_ZERO mode.
537
  */
538
  my_bool auto_increment_field_not_null;
539
  my_bool insert_or_update;             /* Can be used by the handler */
540
  my_bool alias_name_used;		/* true if table_name is alias */
541
  my_bool get_fields_in_item_tree;      /* Signal to fix_field */
542
543
  REGINFO reginfo;			/* field connections */
544
  MEM_ROOT mem_root;
545
  FILESORT_INFO sort;
546
547
  bool fill_item_list(List<Item> *item_list) const;
548
  void reset_item_list(List<Item> *item_list) const;
549
  void clear_column_bitmaps(void);
550
  void prepare_for_position(void);
551
  void mark_columns_used_by_index_no_reset(uint index, MY_BITMAP *map);
552
  void mark_columns_used_by_index(uint index);
553
  void restore_column_maps_after_mark_index();
554
  void mark_auto_increment_column(void);
555
  void mark_columns_needed_for_update(void);
556
  void mark_columns_needed_for_delete(void);
557
  void mark_columns_needed_for_insert(void);
558
  inline void column_bitmaps_set(MY_BITMAP *read_set_arg,
559
                                 MY_BITMAP *write_set_arg)
560
  {
561
    read_set= read_set_arg;
562
    write_set= write_set_arg;
563
    if (file)
564
      file->column_bitmaps_signal();
565
  }
566
  inline void column_bitmaps_set_no_signal(MY_BITMAP *read_set_arg,
567
                                           MY_BITMAP *write_set_arg)
568
  {
569
    read_set= read_set_arg;
570
    write_set= write_set_arg;
571
  }
572
  inline void use_all_columns()
573
  {
574
    column_bitmaps_set(&s->all_set, &s->all_set);
575
  }
576
  inline void default_column_bitmaps()
577
  {
578
    read_set= &def_read_set;
579
    write_set= &def_write_set;
580
  }
581
  /* Is table open or should be treated as such by name-locking? */
582
  inline bool is_name_opened() { return db_stat || open_placeholder; }
583
  /*
584
    Is this instance of the table should be reopen or represents a name-lock?
585
  */
586
  inline bool needs_reopen_or_name_lock()
587
  { return s->version != refresh_version; }
588
};
589
590
enum enum_schema_table_state
591
{ 
592
  NOT_PROCESSED= 0,
593
  PROCESSED_BY_CREATE_SORT_INDEX,
594
  PROCESSED_BY_JOIN_EXEC
595
};
596
597
typedef struct st_foreign_key_info
598
{
599
  LEX_STRING *forein_id;
600
  LEX_STRING *referenced_db;
601
  LEX_STRING *referenced_table;
602
  LEX_STRING *update_method;
603
  LEX_STRING *delete_method;
604
  LEX_STRING *referenced_key_name;
605
  List<LEX_STRING> foreign_fields;
606
  List<LEX_STRING> referenced_fields;
607
} FOREIGN_KEY_INFO;
608
609
/*
610
  Make sure that the order of schema_tables and enum_schema_tables are the same.
611
*/
612
613
enum enum_schema_tables
614
{
615
  SCH_CHARSETS= 0,
616
  SCH_COLLATIONS,
617
  SCH_COLLATION_CHARACTER_SET_APPLICABILITY,
618
  SCH_COLUMNS,
619
  SCH_GLOBAL_STATUS,
620
  SCH_GLOBAL_VARIABLES,
621
  SCH_KEY_COLUMN_USAGE,
622
  SCH_OPEN_TABLES,
623
  SCH_PLUGINS,
624
  SCH_PROCESSLIST,
625
  SCH_REFERENTIAL_CONSTRAINTS,
626
  SCH_SCHEMATA,
627
  SCH_SESSION_STATUS,
628
  SCH_SESSION_VARIABLES,
629
  SCH_STATISTICS,
630
  SCH_STATUS,
631
  SCH_TABLES,
632
  SCH_TABLE_CONSTRAINTS,
633
  SCH_TABLE_NAMES,
53.2.2 by Monty Taylor
Updated everything that needs updating to compile with -std=gnu99 -pedantic
634
  SCH_VARIABLES
1 by brian
clean slate
635
};
636
637
638
#define MY_I_S_MAYBE_NULL 1
639
#define MY_I_S_UNSIGNED   2
640
641
642
#define SKIP_OPEN_TABLE 0                // do not open table
643
#define OPEN_FRM_ONLY   1                // open FRM file only
644
#define OPEN_FULL_TABLE 2                // open FRM,MYD, MYI files
645
646
typedef struct st_field_info
647
{
648
  /** 
649
      This is used as column name. 
650
  */
651
  const char* field_name;
652
  /**
653
     For string-type columns, this is the maximum number of
654
     characters. Otherwise, it is the 'display-length' for the column.
655
  */
656
  uint field_length;
657
  /**
658
     This denotes data type for the column. For the most part, there seems to
659
     be one entry in the enum for each SQL data type, although there seem to
660
     be a number of additional entries in the enum.
661
  */
662
  enum enum_field_types field_type;
663
  int value;
664
  /**
665
     This is used to set column attributes. By default, columns are @c NOT
666
     @c NULL and @c SIGNED, and you can deviate from the default
667
     by setting the appopriate flags. You can use either one of the flags
668
     @c MY_I_S_MAYBE_NULL and @cMY_I_S_UNSIGNED or
669
     combine them using the bitwise or operator @c |. Both flags are
670
     defined in table.h.
671
   */
672
  uint field_flags;        // Field atributes(maybe_null, signed, unsigned etc.)
673
  const char* old_name;
674
  /**
675
     This should be one of @c SKIP_OPEN_TABLE,
676
     @c OPEN_FRM_ONLY or @c OPEN_FULL_TABLE.
677
  */
678
  uint open_method;
679
} ST_FIELD_INFO;
680
681
682
struct TABLE_LIST;
683
typedef class Item COND;
684
685
typedef struct st_schema_table
686
{
687
  const char* table_name;
688
  ST_FIELD_INFO *fields_info;
689
  /* Create information_schema table */
690
  TABLE *(*create_table)  (THD *thd, TABLE_LIST *table_list);
691
  /* Fill table with data */
692
  int (*fill_table) (THD *thd, TABLE_LIST *tables, COND *cond);
693
  /* Handle fileds for old SHOW */
694
  int (*old_format) (THD *thd, struct st_schema_table *schema_table);
695
  int (*process_table) (THD *thd, TABLE_LIST *tables, TABLE *table,
696
                        bool res, LEX_STRING *db_name, LEX_STRING *table_name);
697
  int idx_field1, idx_field2; 
698
  bool hidden;
699
  uint i_s_requested_object;  /* the object we need to open(TABLE | VIEW) */
700
} ST_SCHEMA_TABLE;
701
702
703
#define JOIN_TYPE_LEFT	1
704
#define JOIN_TYPE_RIGHT	2
705
706
struct st_lex;
707
class select_union;
708
class TMP_TABLE_PARAM;
709
710
Item *create_view_field(THD *thd, TABLE_LIST *view, Item **field_ref,
711
                        const char *name);
712
713
struct Field_translator
714
{
715
  Item *item;
716
  const char *name;
717
};
718
719
720
/*
721
  Column reference of a NATURAL/USING join. Since column references in
722
  joins can be both from views and stored tables, may point to either a
723
  Field (for tables), or a Field_translator (for views).
724
*/
725
726
class Natural_join_column: public Sql_alloc
727
{
728
public:
729
  Field_translator *view_field;  /* Column reference of merge view. */
730
  Field            *table_field; /* Column reference of table or temp view. */
731
  TABLE_LIST *table_ref; /* Original base table/view reference. */
732
  /*
733
    True if a common join column of two NATURAL/USING join operands. Notice
734
    that when we have a hierarchy of nested NATURAL/USING joins, a column can
735
    be common at some level of nesting but it may not be common at higher
736
    levels of nesting. Thus this flag may change depending on at which level
737
    we are looking at some column.
738
  */
739
  bool is_common;
740
public:
741
  Natural_join_column(Field_translator *field_param, TABLE_LIST *tab);
742
  Natural_join_column(Field *field_param, TABLE_LIST *tab);
743
  const char *name();
744
  Item *create_item(THD *thd);
745
  Field *field();
746
  const char *table_name();
747
  const char *db_name();
748
};
749
750
751
/*
752
  Table reference in the FROM clause.
753
754
  These table references can be of several types that correspond to
755
  different SQL elements. Below we list all types of TABLE_LISTs with
756
  the necessary conditions to determine when a TABLE_LIST instance
757
  belongs to a certain type.
758
759
  1) table (TABLE_LIST::view == NULL)
760
     - base table
761
       (TABLE_LIST::derived == NULL)
762
     - subquery - TABLE_LIST::table is a temp table
763
       (TABLE_LIST::derived != NULL)
764
     - information schema table
765
       (TABLE_LIST::schema_table != NULL)
766
       NOTICE: for schema tables TABLE_LIST::field_translation may be != NULL
767
  2) view (TABLE_LIST::view != NULL)
768
     - merge    (TABLE_LIST::effective_algorithm == VIEW_ALGORITHM_MERGE)
769
           also (TABLE_LIST::field_translation != NULL)
770
     - tmptable (TABLE_LIST::effective_algorithm == VIEW_ALGORITHM_TMPTABLE)
771
           also (TABLE_LIST::field_translation == NULL)
772
  3) nested table reference (TABLE_LIST::nested_join != NULL)
773
     - table sequence - e.g. (t1, t2, t3)
774
       TODO: how to distinguish from a JOIN?
775
     - general JOIN
776
       TODO: how to distinguish from a table sequence?
777
     - NATURAL JOIN
778
       (TABLE_LIST::natural_join != NULL)
779
       - JOIN ... USING
780
         (TABLE_LIST::join_using_fields != NULL)
781
     - semi-join
782
       ;
783
*/
784
785
class Index_hint;
786
struct TABLE_LIST
787
{
788
  TABLE_LIST() {}                          /* Remove gcc warning */
789
790
  /**
791
    Prepare TABLE_LIST that consists of one table instance to use in
792
    simple_open_and_lock_tables
793
  */
794
  inline void init_one_table(const char *db_name_arg,
795
                             const char *table_name_arg,
796
                             enum thr_lock_type lock_type_arg)
797
  {
798
    bzero((char*) this, sizeof(*this));
799
    db= (char*) db_name_arg;
800
    table_name= alias= (char*) table_name_arg;
801
    lock_type= lock_type_arg;
802
  }
803
804
  /*
805
    List of tables local to a subquery (used by SQL_LIST). Considers
806
    views as leaves (unlike 'next_leaf' below). Created at parse time
807
    in st_select_lex::add_table_to_list() -> table_list.link_in_list().
808
  */
809
  TABLE_LIST *next_local;
810
  /* link in a global list of all queries tables */
811
  TABLE_LIST *next_global, **prev_global;
812
  char		*db, *alias, *table_name, *schema_table_name;
813
  char          *option;                /* Used by cache index  */
814
  Item		*on_expr;		/* Used with outer join */
815
  Item          *sj_on_expr;
816
  /*
817
    (Valid only for semi-join nests) Bitmap of tables that are within the
818
    semi-join (this is different from bitmap of all nest's children because
819
    tables that were pulled out of the semi-join nest remain listed as
820
    nest's children).
821
  */
822
  table_map     sj_inner_tables;
823
  /* Number of IN-compared expressions */
824
  uint          sj_in_exprs; 
825
  /*
826
    The structure of ON expression presented in the member above
827
    can be changed during certain optimizations. This member
828
    contains a snapshot of AND-OR structure of the ON expression
829
    made after permanent transformations of the parse tree, and is
830
    used to restore ON clause before every reexecution of a prepared
831
    statement or stored procedure.
832
  */
833
  Item          *prep_on_expr;
834
  COND_EQUAL    *cond_equal;            /* Used with outer join */
835
  /*
836
    During parsing - left operand of NATURAL/USING join where 'this' is
837
    the right operand. After parsing (this->natural_join == this) iff
838
    'this' represents a NATURAL or USING join operation. Thus after
839
    parsing 'this' is a NATURAL/USING join iff (natural_join != NULL).
840
  */
841
  TABLE_LIST *natural_join;
842
  /*
843
    True if 'this' represents a nested join that is a NATURAL JOIN.
844
    For one of the operands of 'this', the member 'natural_join' points
845
    to the other operand of 'this'.
846
  */
847
  bool is_natural_join;
848
  /* Field names in a USING clause for JOIN ... USING. */
849
  List<String> *join_using_fields;
850
  /*
851
    Explicitly store the result columns of either a NATURAL/USING join or
852
    an operand of such a join.
853
  */
854
  List<Natural_join_column> *join_columns;
855
  /* TRUE if join_columns contains all columns of this table reference. */
856
  bool is_join_columns_complete;
857
858
  /*
859
    List of nodes in a nested join tree, that should be considered as
860
    leaves with respect to name resolution. The leaves are: views,
861
    top-most nodes representing NATURAL/USING joins, subqueries, and
862
    base tables. All of these TABLE_LIST instances contain a
863
    materialized list of columns. The list is local to a subquery.
864
  */
865
  TABLE_LIST *next_name_resolution_table;
866
  /* Index names in a "... JOIN ... USE/IGNORE INDEX ..." clause. */
867
  List<Index_hint> *index_hints;
868
  TABLE        *table;                          /* opened table */
869
  uint          table_id; /* table id (from binlog) for opened table */
870
  /*
871
    select_result for derived table to pass it from table creation to table
872
    filling procedure
873
  */
874
  select_union  *derived_result;
875
  /*
876
    Reference from aux_tables to local list entry of main select of
877
    multi-delete statement:
878
    delete t1 from t2,t1 where t1.a<'B' and t2.b=t1.b;
879
    here it will be reference of first occurrence of t1 to second (as you
880
    can see this lists can't be merged)
881
  */
882
  TABLE_LIST	*correspondent_table;
883
  st_select_lex_unit *derived;		/* SELECT_LEX_UNIT of derived table */
884
  ST_SCHEMA_TABLE *schema_table;        /* Information_schema table */
885
  st_select_lex	*schema_select_lex;
886
  /*
887
    True when the view field translation table is used to convert
888
    schema table fields for backwards compatibility with SHOW command.
889
  */
890
  bool schema_table_reformed;
891
  TMP_TABLE_PARAM *schema_table_param;
892
  /* link to select_lex where this table was used */
893
  st_select_lex	*select_lex;
894
  Field_translator *field_translation;	/* array of VIEW fields */
895
  /* pointer to element after last one in translation table above */
896
  Field_translator *field_translation_end;
897
  /*
898
    List (based on next_local) of underlying tables of this view. I.e. it
899
    does not include the tables of subqueries used in the view. Is set only
900
    for merged views.
901
  */
902
  TABLE_LIST	*merge_underlying_list;
903
  /*
904
    - 0 for base tables
905
    - in case of the view it is the list of all (not only underlying
906
    tables but also used in subquery ones) tables of the view.
907
  */
908
  List<TABLE_LIST> *view_tables;
909
  /* most upper view this table belongs to */
910
  TABLE_LIST	*belong_to_view;
911
  /* Ptr to parent MERGE table list item. See top comment in ha_myisammrg.cc */
912
  TABLE_LIST    *parent_l;
913
  /*
914
    List of all base tables local to a subquery including all view
915
    tables. Unlike 'next_local', this in this list views are *not*
916
    leaves. Created in setup_tables() -> make_leaves_list().
917
  */
918
  TABLE_LIST	*next_leaf;
919
  /* data need by some engines in query cache*/
920
  uint64_t     engine_data;
921
  /* call back function for asking handler about caching in query cache */
922
  qc_engine_callback callback_func;
923
  thr_lock_type lock_type;
924
  uint		outer_join;		/* Which join type */
925
  uint		shared;			/* Used in multi-upd */
926
  size_t        db_length;
927
  size_t        table_name_length;
928
  bool		straight;		/* optimize with prev table */
929
  bool          updating;               /* for replicate-do/ignore table */
930
  bool		force_index;		/* prefer index over table scan */
931
  bool          ignore_leaves;          /* preload only non-leaf nodes */
932
  table_map     dep_tables;             /* tables the table depends on      */
933
  table_map     on_expr_dep_tables;     /* tables on expression depends on  */
934
  struct st_nested_join *nested_join;   /* if the element is a nested join  */
935
  TABLE_LIST *embedding;             /* nested join containing the table */
936
  List<TABLE_LIST> *join_list;/* join list the table belongs to   */
937
  bool		cacheable_table;	/* stop PS caching */
938
  /* FRMTYPE_ERROR if any type is acceptable */
939
  enum frm_type_enum required_type;
940
  handlerton	*db_type;		/* table_type for handler */
941
  char		timestamp_buffer[20];	/* buffer for timestamp (19+1) */
942
  /*
943
    This TABLE_LIST object corresponds to the table to be created
944
    so it is possible that it does not exist (used in CREATE TABLE
945
    ... SELECT implementation).
946
  */
947
  bool          create;
948
  /* For transactional locking. */
949
  int           lock_timeout;           /* NOWAIT or WAIT [X]               */
950
  bool          lock_transactional;     /* If transactional lock requested. */
951
  bool          internal_tmp_table;
952
  /** TRUE if an alias for this table was specified in the SQL. */
953
  bool          is_alias;
954
  /** TRUE if the table is referred to in the statement using a fully
955
      qualified name (<db_name>.<table_name>).
956
  */
957
  bool          is_fqtn;
958
959
  uint i_s_requested_object;
960
  bool has_db_lookup_value;
961
  bool has_table_lookup_value;
962
  uint table_open_method;
963
  enum enum_schema_table_state schema_table_state;
964
  void set_underlying_merge();
965
  bool setup_underlying(THD *thd);
966
  void cleanup_items();
967
  /*
968
    If you change placeholder(), please check the condition in
969
    check_transactional_lock() too.
970
  */
971
  bool placeholder()
972
  {
973
    return derived || schema_table || (create && !table->db_stat) || !table;
974
  }
975
  void print(THD *thd, String *str, enum_query_type query_type);
976
  bool set_insert_values(MEM_ROOT *mem_root);
977
  TABLE_LIST *find_underlying_table(TABLE *table);
978
  TABLE_LIST *first_leaf_for_name_resolution();
979
  TABLE_LIST *last_leaf_for_name_resolution();
980
  bool is_leaf_for_name_resolution();
981
  inline TABLE_LIST *top_table()
982
    { return belong_to_view ? belong_to_view : this; }
983
984
  /*
985
    Cleanup for re-execution in a prepared statement or a stored
986
    procedure.
987
  */
988
  void reinit_before_use(THD *thd);
989
  Item_subselect *containing_subselect();
990
991
  /* 
992
    Compiles the tagged hints list and fills up st_table::keys_in_use_for_query,
993
    st_table::keys_in_use_for_group_by, st_table::keys_in_use_for_order_by,
994
    st_table::force_index and st_table::covering_keys.
995
  */
996
  bool process_index_hints(TABLE *table);
997
998
private:
999
  bool prep_where(THD *thd, Item **conds, bool no_where_clause);
1000
  /*
1001
    Cleanup for re-execution in a prepared statement or a stored
1002
    procedure.
1003
  */
1004
};
1005
1006
class Item;
1007
1008
/*
1009
  Iterator over the fields of a generic table reference.
1010
*/
1011
1012
class Field_iterator: public Sql_alloc
1013
{
1014
public:
1015
  Field_iterator() {}                         /* Remove gcc warning */
1016
  virtual ~Field_iterator() {}
1017
  virtual void set(TABLE_LIST *)= 0;
1018
  virtual void next()= 0;
1019
  virtual bool end_of_fields()= 0;              /* Return 1 at end of list */
1020
  virtual const char *name()= 0;
1021
  virtual Item *create_item(THD *)= 0;
1022
  virtual Field *field()= 0;
1023
};
1024
1025
1026
/* 
1027
  Iterator over the fields of a base table, view with temporary
1028
  table, or subquery.
1029
*/
1030
1031
class Field_iterator_table: public Field_iterator
1032
{
1033
  Field **ptr;
1034
public:
1035
  Field_iterator_table() :ptr(0) {}
1036
  void set(TABLE_LIST *table) { ptr= table->table->field; }
1037
  void set_table(TABLE *table) { ptr= table->field; }
1038
  void next() { ptr++; }
1039
  bool end_of_fields() { return *ptr == 0; }
1040
  const char *name();
1041
  Item *create_item(THD *thd);
1042
  Field *field() { return *ptr; }
1043
};
1044
1045
1046
/* Iterator over the fields of a merge view. */
1047
1048
class Field_iterator_view: public Field_iterator
1049
{
1050
  Field_translator *ptr, *array_end;
1051
  TABLE_LIST *view;
1052
public:
1053
  Field_iterator_view() :ptr(0), array_end(0) {}
1054
  void set(TABLE_LIST *table);
1055
  void next() { ptr++; }
1056
  bool end_of_fields() { return ptr == array_end; }
1057
  const char *name();
1058
  Item *create_item(THD *thd);
1059
  Item **item_ptr() {return &ptr->item; }
1060
  Field *field() { return 0; }
1061
  inline Item *item() { return ptr->item; }
1062
  Field_translator *field_translator() { return ptr; }
1063
};
1064
1065
1066
/*
1067
  Field_iterator interface to the list of materialized fields of a
1068
  NATURAL/USING join.
1069
*/
1070
1071
class Field_iterator_natural_join: public Field_iterator
1072
{
1073
  List_iterator_fast<Natural_join_column> column_ref_it;
1074
  Natural_join_column *cur_column_ref;
1075
public:
1076
  Field_iterator_natural_join() :cur_column_ref(NULL) {}
1077
  ~Field_iterator_natural_join() {}
1078
  void set(TABLE_LIST *table);
1079
  void next();
1080
  bool end_of_fields() { return !cur_column_ref; }
1081
  const char *name() { return cur_column_ref->name(); }
1082
  Item *create_item(THD *thd) { return cur_column_ref->create_item(thd); }
1083
  Field *field() { return cur_column_ref->field(); }
1084
  Natural_join_column *column_ref() { return cur_column_ref; }
1085
};
1086
1087
1088
/*
1089
  Generic iterator over the fields of an arbitrary table reference.
1090
1091
  DESCRIPTION
1092
    This class unifies the various ways of iterating over the columns
1093
    of a table reference depending on the type of SQL entity it
1094
    represents. If such an entity represents a nested table reference,
1095
    this iterator encapsulates the iteration over the columns of the
1096
    members of the table reference.
1097
1098
  IMPLEMENTATION
1099
    The implementation assumes that all underlying NATURAL/USING table
1100
    references already contain their result columns and are linked into
1101
    the list TABLE_LIST::next_name_resolution_table.
1102
*/
1103
1104
class Field_iterator_table_ref: public Field_iterator
1105
{
1106
  TABLE_LIST *table_ref, *first_leaf, *last_leaf;
1107
  Field_iterator_table        table_field_it;
1108
  Field_iterator_view         view_field_it;
1109
  Field_iterator_natural_join natural_join_it;
1110
  Field_iterator *field_it;
1111
  void set_field_iterator();
1112
public:
1113
  Field_iterator_table_ref() :field_it(NULL) {}
1114
  void set(TABLE_LIST *table);
1115
  void next();
1116
  bool end_of_fields()
1117
  { return (table_ref == last_leaf && field_it->end_of_fields()); }
1118
  const char *name() { return field_it->name(); }
1119
  const char *table_name();
1120
  const char *db_name();
1121
  Item *create_item(THD *thd) { return field_it->create_item(thd); }
1122
  Field *field() { return field_it->field(); }
1123
  Natural_join_column *get_or_create_column_ref(TABLE_LIST *parent_table_ref);
1124
  Natural_join_column *get_natural_column_ref();
1125
};
1126
1127
1128
typedef struct st_nested_join
1129
{
1130
  List<TABLE_LIST>  join_list;       /* list of elements in the nested join */
1131
  table_map         used_tables;     /* bitmap of tables in the nested join */
1132
  table_map         not_null_tables; /* tables that rejects nulls           */
1133
  struct st_join_table *first_nested;/* the first nested table in the plan  */
1134
  /* 
1135
    Used to count tables in the nested join in 2 isolated places:
1136
    1. In make_outerjoin_info(). 
1137
    2. check_interleaving_with_nj/restore_prev_nj_state (these are called
1138
       by the join optimizer. 
1139
    Before each use the counters are zeroed by reset_nj_counters.
1140
  */
1141
  uint              counter_;
1142
  nested_join_map   nj_map;          /* Bit used to identify this nested join*/
1143
  /*
1144
    (Valid only for semi-join nests) Bitmap of tables outside the semi-join
1145
    that are used within the semi-join's ON condition.
1146
  */
1147
  table_map         sj_depends_on;
1148
  /* Outer non-trivially correlated tables */
1149
  table_map         sj_corr_tables;
1150
  List<Item>        sj_outer_expr_list;
1151
} NESTED_JOIN;
1152
1153
1154
typedef struct st_changed_table_list
1155
{
1156
  struct	st_changed_table_list *next;
1157
  char		*key;
1158
  uint32        key_length;
1159
} CHANGED_TABLE_LIST;
1160
1161
1162
typedef struct st_open_table_list{
1163
  struct st_open_table_list *next;
1164
  char	*db,*table;
1165
  uint32 in_use,locked;
1166
} OPEN_TABLE_LIST;
1167
1168
typedef struct st_table_field_w_type
1169
{
1170
  LEX_STRING name;
1171
  LEX_STRING type;
1172
  LEX_STRING cset;
1173
} TABLE_FIELD_W_TYPE;
1174
1175
1176
my_bool
1177
table_check_intact(TABLE *table, const uint table_f_count,
1178
                   const TABLE_FIELD_W_TYPE *table_def);
1179
1180
static inline my_bitmap_map *tmp_use_all_columns(TABLE *table,
1181
                                                 MY_BITMAP *bitmap)
1182
{
1183
  my_bitmap_map *old= bitmap->bitmap;
1184
  bitmap->bitmap= table->s->all_set.bitmap;
1185
  return old;
1186
}
1187
1188
1189
static inline void tmp_restore_column_map(MY_BITMAP *bitmap,
1190
                                          my_bitmap_map *old)
1191
{
1192
  bitmap->bitmap= old;
1193
}
1194
1195
/* The following is only needed for debugging */
1196
53.2.32 by Monty Taylor
First large swath at getting handler stuff clean.
1197
static inline my_bitmap_map *dbug_tmp_use_all_columns(TABLE *table __attribute__((__unused__)),
1198
                                                      MY_BITMAP *bitmap __attribute__((__unused__)))
1 by brian
clean slate
1199
{
1200
  return 0;
1201
}
1202
53.2.32 by Monty Taylor
First large swath at getting handler stuff clean.
1203
static inline void dbug_tmp_restore_column_map(MY_BITMAP *bitmap __attribute__((__unused__)),
1204
                                               my_bitmap_map *old __attribute__((__unused__)))
1 by brian
clean slate
1205
{
53.2.32 by Monty Taylor
First large swath at getting handler stuff clean.
1206
  return;
1 by brian
clean slate
1207
}
1208
1209
size_t max_row_length(TABLE *table, const uchar *data);
1210