home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / mysql / mysql-3.23.28g-win-source.exe / include / heap.h < prev    next >
C/C++ Source or Header  |  2000-08-31  |  6KB  |  182 lines

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    
  3.    This library is free software; you can redistribute it and/or
  4.    modify it under the terms of the GNU Library General Public
  5.    License as published by the Free Software Foundation; either
  6.    version 2 of the License, or (at your option) any later version.
  7.    
  8.    This library 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 GNU
  11.    Library General Public License for more details.
  12.    
  13.    You should have received a copy of the GNU Library General Public
  14.    License along with this library; if not, write to the Free
  15.    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
  16.    MA 02111-1307, USA */
  17.  
  18. /* This file should be included when using heap_database_funktions */
  19. /* Author: Michael Widenius */
  20.  
  21. #ifndef _heap_h
  22. #define _heap_h
  23. #ifdef    __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27. #ifndef _my_base_h
  28. #include <my_base.h>
  29. #endif
  30. #ifdef THREAD
  31. #include <my_pthread.h>
  32. #include <thr_lock.h>
  33. #endif
  34.  
  35.     /* defines used by heap-funktions */
  36.  
  37. #define HP_MAX_LEVELS    4        /* 128^5 records is enough */
  38. #define HP_PTRS_IN_NOD    128
  39.  
  40.     /* struct used with heap_funktions */
  41.  
  42. typedef struct st_heapinfo        /* Struct from heap_info */
  43. {
  44.   ulong records;            /* Records in database */
  45.   ulong deleted;            /* Deleted records in database */
  46.   ulong max_records;
  47.   ulong data_length;
  48.   ulong index_length;
  49.   uint reclength;            /* Length of one record */
  50.   int errkey;
  51. } HEAPINFO;
  52.  
  53.  
  54.     /* Structs used by heap-database-handler */
  55.  
  56. typedef struct st_heap_ptrs
  57. {
  58.   byte *blocks[HP_PTRS_IN_NOD];        /* pointers to HP_PTRS or records */
  59. } HP_PTRS;
  60.  
  61. struct st_level_info
  62. {
  63.   uint free_ptrs_in_block,records_under_level;
  64.   HP_PTRS *last_blocks;            /* pointers to HP_PTRS or records */
  65. };
  66.  
  67. typedef struct st_heap_block        /* The data is saved in blocks */
  68. {
  69.   HP_PTRS *root;
  70.   struct st_level_info level_info[HP_MAX_LEVELS+1];
  71.   uint levels;
  72.   uint records_in_block;        /* Records in a heap-block */
  73.   uint recbuffer;            /* Length of one saved record */
  74.   ulong last_allocated;            /* Blocks allocated, used by keys */
  75. } HP_BLOCK;
  76.  
  77. typedef struct st_hp_keyseg        /* Key-portion */
  78. {
  79.   uint start;                /* Start of key in record (from 0) */
  80.   uint length;                /* Keylength */
  81.   uint type;
  82. } HP_KEYSEG;
  83.  
  84. typedef struct st_hp_keydef        /* Key definition with open */
  85. {
  86.   uint flag;                /* NOSAME */
  87.   uint keysegs;                /* Number of key-segment */
  88.   uint length;                /* Length of key (automatic) */
  89.   HP_KEYSEG *seg;
  90.   HP_BLOCK block;            /* Where keys are saved */
  91. } HP_KEYDEF;
  92.  
  93. typedef struct st_heap_share
  94. {
  95.   HP_BLOCK block;
  96.   HP_KEYDEF  *keydef;
  97.   ulong min_records,max_records;    /* Params to open */
  98.   ulong data_length,index_length;
  99.   uint records;                /* records */
  100.   uint blength;
  101.   uint deleted;                /* Deleted records in database */
  102.   uint reclength;            /* Length of one record */
  103.   uint changed;
  104.   uint keys,max_key_length;
  105.   uint open_count;
  106.   byte *del_link;            /* Link to next block with del. rec */
  107.   my_string name;            /* Name of "memory-file" */
  108. #ifdef THREAD
  109.   THR_LOCK lock;
  110.   pthread_mutex_t intern_lock;        /* Locking for use with _locking */
  111. #endif
  112.   LIST open_list;
  113. } HP_SHARE;
  114.  
  115. struct st_hash_info;
  116.  
  117. typedef struct st_heap_info
  118. {
  119.   HP_SHARE *s;
  120.   byte *current_ptr;
  121.   struct st_hash_info *current_hash_ptr;
  122.   ulong current_record,next_block;
  123.   int lastinx,errkey;
  124.   int  mode;                /* Mode of file (READONLY..) */
  125.   uint opt_flag,update;
  126.   byte *lastkey;            /* Last used key with rkey */
  127. #ifdef THREAD
  128.   THR_LOCK_DATA lock;
  129. #endif
  130.   LIST open_list;
  131. } HP_INFO;
  132.  
  133.     /* Prototypes for heap-functions */
  134.  
  135. extern HP_INFO* heap_open(const char *name,int mode,uint keys,
  136.               HP_KEYDEF *keydef,uint reclength,
  137.               ulong max_records,ulong min_reloc);
  138. extern int heap_close(HP_INFO *info);
  139. extern int heap_write(HP_INFO *info,const byte *buff);
  140. extern int heap_update(HP_INFO *info,const byte *old,const byte *newdata);
  141. extern int heap_rrnd(HP_INFO *info,byte *buf,byte *pos);
  142. extern int heap_scan_init(HP_INFO *info);
  143. extern int heap_scan(register HP_INFO *info, byte *record);
  144. extern int heap_delete(HP_INFO *info,const byte *buff);
  145. extern int heap_info(HP_INFO *info,HEAPINFO *x,int flag);
  146. extern int heap_create(const char *name);
  147. extern int heap_delete_all(const char *name);
  148. extern int heap_extra(HP_INFO *info,enum ha_extra_function function);
  149. extern int heap_rename(const char *old_name,const char *new_name);
  150. extern int heap_panic(enum ha_panic_function flag);
  151. extern int heap_rsame(HP_INFO *info,byte *record,int inx);
  152. extern int heap_rnext(HP_INFO *info,byte *record);
  153. extern int heap_rprev(HP_INFO *info,byte *record);
  154. extern int heap_rfirst(HP_INFO *info,byte *record);
  155. extern int heap_rlast(HP_INFO *info,byte *record);
  156. extern void heap_clear(HP_INFO *info);
  157. extern int heap_rkey(HP_INFO *info,byte *record,int inx,const byte *key);
  158. extern gptr heap_find(HP_INFO *info,int inx,const byte *key);
  159. extern int heap_check_heap(HP_INFO *info);
  160. extern byte *heap_position(HP_INFO *info);
  161.  
  162. /* The following is for programs that uses the old HEAP interface where
  163.    pointer to rows where a long instead of a (byte*).
  164. */
  165.  
  166. #if defined(WANT_OLD_HEAP_VERSION) || defined(OLD_HEAP_VERSION)
  167. extern int heap_rrnd_old(HP_INFO *info,byte *buf,ulong pos);
  168. extern ulong heap_position_old(HP_INFO *info);
  169. #endif
  170. #ifdef OLD_HEAP_VERSION
  171. typedef ulong HEAP_PTR;
  172. #define heap_position(A) heap_position_old(A)
  173. #define heap_rrnd(A,B,C) heap_rrnd_old(A,B,C)
  174. #else
  175. typedef byte *HEAP_PTR;
  176. #endif
  177.  
  178. #ifdef    __cplusplus
  179. }
  180. #endif
  181. #endif
  182.