home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / mysql / mysql-3.23.28g-win-source.exe / sql / table.h < prev    next >
C/C++ Source or Header  |  2000-11-16  |  5KB  |  143 lines

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult 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; either version 2 of the License, or
  6.    (at your option) any later version.
  7.    
  8.    This program is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.    GNU General Public License for more details.
  12.    
  13.    You should have received a copy of the GNU General Public License
  14.    along with this program; if not, write to the Free Software
  15.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  16.  
  17.  
  18. /* Structs that defines the TABLE */
  19.  
  20. class Item;                /* Needed by ORDER */
  21. class GRANT_TABLE;
  22.  
  23. /* Order clause list element */
  24.  
  25. typedef struct st_order {
  26.   struct st_order *next;
  27.   Item     **item;            /* Point at item in select fields */
  28.   bool     asc;                /* true if ascending */
  29.   bool     free_me;            /* true if item isn't shared  */
  30.   bool     in_field_list;            /* true if in select field list */
  31.   Field  *field;            /* If tmp-table group */
  32.   char     *buff;                /* If tmp-table group */
  33.   table_map used,depend_map;
  34. } ORDER;
  35.  
  36. typedef struct st_grant_info
  37. {
  38.   GRANT_TABLE *grant_table;
  39.   uint version;
  40.   uint privilege;
  41.   uint want_privilege;
  42. } GRANT_INFO;
  43.  
  44. /* Table cache entry struct */
  45.  
  46. class Field_timestamp;
  47. class Field_blob;
  48.  
  49. struct st_table {
  50.   handler *file;
  51.   Field **field;            /* Pointer to fields */
  52.   Field_blob **blob_field;        /* Pointer to blob fields */
  53.   HASH    name_hash;            /* hash of field names */
  54.   byte *record[3];            /* Pointer to records */
  55.   uint fields;                /* field count */
  56.   uint reclength;            /* Recordlength */
  57.   uint rec_buff_length;
  58.   uint keys,key_parts,primary_key,max_key_length,max_unique_length;
  59.   uint uniques;
  60.   uint null_fields;            /* number of null fields */
  61.   uint blob_fields;            /* number of blob fields */
  62.   key_map keys_in_use, keys_in_use_for_query;
  63.   KEY  *key_info;            /* data of keys in database */
  64.   TYPELIB keynames;            /* Pointers to keynames */
  65.   ha_rows max_rows;            /* create information */
  66.   ha_rows min_rows;            /* create information */
  67.   ulong   avg_row_length;        /* create information */
  68.   ulong   raid_chunksize;
  69.   TYPELIB fieldnames;            /* Pointer to fieldnames */
  70.   TYPELIB *intervals;            /* pointer to interval info */
  71.   enum db_type db_type;            /* table_type for handler */
  72.   enum row_type row_type;        /* How rows are stored */
  73.   uint db_create_options;        /* Create options from database */
  74.   uint db_options_in_use;        /* Options in use */
  75.   uint db_record_offset;        /* if HA_REC_IN_SEQ */
  76.   uint db_stat;                /* mode of file as in handler.h */
  77.   uint raid_type,raid_chunks;
  78.   uint status;                /* Used by postfix.. */
  79.   uint system;                /* Set if system record */
  80.   ulong time_stamp;            /* Set to offset+1 of record */
  81.   uint timestamp_field_offset;
  82.   uint next_number_index;
  83.   uint blob_ptr_size;            /* 4 or 8 */
  84.   uint next_number_key_offset;
  85.   int current_lock;            /* Type of lock on table */
  86.   my_bool copy_blobs;            /* copy_blobs when storing */
  87.   my_bool null_row;            /* All columns are null */
  88.   my_bool maybe_null,outer_join;    /* Used with OUTER JOIN */
  89.   my_bool distinct,tmp_table,const_table;
  90.   my_bool key_read;
  91.   my_bool crypted;
  92.   my_bool db_low_byte_first;        /* Portable row format */
  93.   my_bool locked_by_flush;
  94.   my_bool locked_by_name;
  95.   my_bool crashed;
  96.   Field *next_number_field,        /* Set if next_number is activated */
  97.     *found_next_number_field,    /* Set on open */
  98.         *rowid_field;
  99.   Field_timestamp *timestamp_field;
  100.   my_string comment;            /* Comment about table */
  101.   REGINFO reginfo;            /* field connections */
  102.   MEM_ROOT mem_root;
  103.   GRANT_INFO grant;
  104.  
  105.   char        *table_cache_key;
  106.   char        *table_name,*real_name,*path;
  107.   uint        key_length;        /* Length of key */
  108.   uint        tablenr,used_fields,null_bytes;
  109.   table_map    map;
  110.   ulong        version,flush_version;
  111.   uchar        *null_flags;
  112.   IO_CACHE    *io_cache;            /* If sorted trough file*/
  113.   byte        *record_pointers;        /* If sorted in memory */
  114.   ha_rows    found_records;            /* How many records in sort */
  115.   ORDER        *group;
  116.   key_map    quick_keys, used_keys, ref_primary_key;
  117.   ha_rows    quick_rows[MAX_KEY];
  118.   uint        quick_key_parts[MAX_KEY];
  119.   key_part_map  const_key_parts[MAX_KEY];
  120.   ulong        query_id;
  121.  
  122.   THD        *in_use;            /* Which thread uses this */
  123.   struct st_table *next,*prev;
  124. };
  125.  
  126.  
  127. #define JOIN_TYPE_LEFT    1
  128. #define JOIN_TYPE_RIGHT    2
  129.  
  130. typedef struct st_table_list {
  131.   struct    st_table_list *next;
  132.   char        *db,*name,*real_name;
  133.   Item        *on_expr;            /* Used with outer join */
  134.   struct st_table_list *natural_join;        /* natural join on this table*/
  135.   List<String>    *use_index,*ignore_index;
  136.   TABLE        *table;
  137.   GRANT_INFO    grant;
  138.   thr_lock_type lock_type;
  139.   uint        outer_join;            /* Which join type */
  140.   bool        straight;            /* optimize with prev table */
  141.   bool          updating;     /* for replicate-do/ignore table */
  142. } TABLE_LIST;
  143.