table.h 5.62 KB
Newer Older
unknown's avatar
unknown committed
1
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
unknown's avatar
unknown committed
2

unknown's avatar
unknown committed
3 4 5 6
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
unknown's avatar
unknown committed
7

unknown's avatar
unknown committed
8 9 10 11
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
unknown's avatar
unknown committed
12

unknown's avatar
unknown committed
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */


/* Structs that defines the TABLE */

class Item;				/* Needed by ORDER */
class GRANT_TABLE;

/* Order clause list element */

typedef struct st_order {
  struct st_order *next;
  Item	 **item;			/* Point at item in select fields */
  bool	 asc;				/* true if ascending */
  bool	 free_me;			/* true if item isn't shared  */
  bool	 in_field_list;			/* true if in select field list */
  Field  *field;			/* If tmp-table group */
  char	 *buff;				/* If tmp-table group */
  table_map used,depend_map;
} ORDER;

typedef struct st_grant_info
{
  GRANT_TABLE *grant_table;
  uint version;
unknown's avatar
unknown committed
40 41
  ulong privilege;
  ulong want_privilege;
unknown's avatar
unknown committed
42 43
} GRANT_INFO;

unknown's avatar
unknown committed
44 45
enum tmp_table_type {NO_TMP_TABLE=0, TMP_TABLE=1, TRANSACTIONAL_TMP_TABLE=2};

unknown's avatar
unknown committed
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
/* Table cache entry struct */

class Field_timestamp;
class Field_blob;

struct st_table {
  handler *file;
  Field **field;			/* Pointer to fields */
  Field_blob **blob_field;		/* Pointer to blob fields */
  HASH	name_hash;			/* hash of field names */
  byte *record[3];			/* Pointer to records */
  uint fields;				/* field count */
  uint reclength;			/* Recordlength */
  uint rec_buff_length;
  uint keys,key_parts,primary_key,max_key_length,max_unique_length;
  uint uniques;
  uint null_fields;			/* number of null fields */
  uint blob_fields;			/* number of blob fields */
64 65
  key_map keys_in_use, keys_for_keyread;
  key_map quick_keys, used_keys, keys_in_use_for_query;
unknown's avatar
unknown committed
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
  KEY  *key_info;			/* data of keys in database */
  TYPELIB keynames;			/* Pointers to keynames */
  ha_rows max_rows;			/* create information */
  ha_rows min_rows;			/* create information */
  ulong   avg_row_length;		/* create information */
  ulong   raid_chunksize;
  TYPELIB fieldnames;			/* Pointer to fieldnames */
  TYPELIB *intervals;			/* pointer to interval info */
  enum db_type db_type;			/* table_type for handler */
  enum row_type row_type;		/* How rows are stored */
  uint db_create_options;		/* Create options from database */
  uint db_options_in_use;		/* Options in use */
  uint db_record_offset;		/* if HA_REC_IN_SEQ */
  uint db_stat;				/* mode of file as in handler.h */
  uint raid_type,raid_chunks;
  uint status;				/* Used by postfix.. */
  uint system;				/* Set if system record */
  ulong time_stamp;			/* Set to offset+1 of record */
  uint timestamp_field_offset;
  uint next_number_index;
  uint blob_ptr_size;			/* 4 or 8 */
  uint next_number_key_offset;
  int current_lock;			/* Type of lock on table */
unknown's avatar
unknown committed
89
  enum tmp_table_type tmp_table;
unknown's avatar
unknown committed
90 91 92
  my_bool copy_blobs;			/* copy_blobs when storing */
  my_bool null_row;			/* All columns are null */
  my_bool maybe_null,outer_join;	/* Used with OUTER JOIN */
93
  my_bool distinct,const_table,no_rows;
unknown's avatar
unknown committed
94 95 96 97
  my_bool key_read;
  my_bool crypted;
  my_bool db_low_byte_first;		/* Portable row format */
  my_bool locked_by_flush;
unknown's avatar
unknown committed
98
  my_bool locked_by_name;
unknown's avatar
unknown committed
99
  my_bool fulltext_searched;
100
  my_bool crashed;
unknown's avatar
unknown committed
101
  my_bool is_view;
unknown's avatar
unknown committed
102
  my_bool no_keyread;
unknown's avatar
unknown committed
103 104 105 106 107 108 109 110 111 112 113 114 115
  Field *next_number_field,		/* Set if next_number is activated */
	*found_next_number_field,	/* Set on open */
        *rowid_field;
  Field_timestamp *timestamp_field;
  my_string comment;			/* Comment about table */
  REGINFO reginfo;			/* field connections */
  MEM_ROOT mem_root;
  GRANT_INFO grant;

  char		*table_cache_key;
  char		*table_name,*real_name,*path;
  uint		key_length;		/* Length of key */
  uint		tablenr,used_fields,null_bytes;
unknown's avatar
unknown committed
116
  table_map	map;                    /* ID bit of table (1,2,4,8,16...) */
unknown's avatar
unknown committed
117 118 119 120 121 122 123 124 125 126 127
  ulong		version,flush_version;
  uchar		*null_flags;
  IO_CACHE	*io_cache;			/* If sorted trough file*/
  byte		*record_pointers;		/* If sorted in memory */
  ha_rows	found_records;			/* How many records in sort */
  ORDER		*group;
  ha_rows	quick_rows[MAX_KEY];
  uint		quick_key_parts[MAX_KEY];
  key_part_map  const_key_parts[MAX_KEY];
  ulong		query_id;

128 129
  uint          temp_pool_slot;

unknown's avatar
unknown committed
130 131 132 133 134
  THD		*in_use;			/* Which thread uses this */
  struct st_table *next,*prev;
};


135 136 137
#define JOIN_TYPE_LEFT	1
#define JOIN_TYPE_RIGHT	2

138 139
typedef struct st_table_list
{
unknown's avatar
unknown committed
140 141
  struct	st_table_list *next;
  char		*db,*name,*real_name;
142
  uint32        db_length, real_name_length;
unknown's avatar
unknown committed
143 144
  Item		*on_expr;			/* Used with outer join */
  struct st_table_list *natural_join;		/* natural join on this table*/
unknown's avatar
unknown committed
145 146
  /* ... join ... USE INDEX ... IGNORE INDEX */
  List<String>	*use_index,*ignore_index; 
147
  TABLE		*table;
unknown's avatar
unknown committed
148
  GRANT_INFO	grant;
149 150 151
  thr_lock_type lock_type;
  uint		outer_join;			/* Which join type */
  bool		straight;			/* optimize with prev table */
unknown's avatar
unknown committed
152
  bool          updating;                   /* for replicate-do/ignore table */
153
  bool		shared;				/* Used twice in union */
154
  bool		do_redirect;            	/* To get the struct in UNION's */
unknown's avatar
unknown committed
155
} TABLE_LIST;
156

157 158 159

typedef struct st_changed_table_list
{
160
  struct	st_changed_table_list *next;
161
  char		*key;
162 163 164
  uint32        key_length;
} CHANGED_TABLE_LIST;

165

166 167 168 169 170 171
typedef struct st_open_table_list
{
  struct st_open_table_list *next;
  char	*db,*table;
  uint32 in_use,locked;
} OPEN_TABLE_LIST;