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 / nisam.h < prev    next >
C/C++ Source or Header  |  2000-08-31  |  7KB  |  214 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 nisam_funktions */
  19. /* Author: Michael Widenius */
  20.  
  21. #ifndef _nisam_h
  22. #define _nisam_h
  23. #ifdef    __cplusplus
  24. extern "C" {
  25. #endif
  26.  
  27. #ifndef _my_base_h
  28. #include <my_base.h>
  29. #endif
  30.     /* defines used by nisam-funktions */
  31.  
  32. #define N_MAXKEY    16        /* Max allowed keys */
  33. #define N_MAXKEY_SEG    16        /* Max segments for key */
  34. #define N_MAX_KEY_LENGTH 256        /* May be increased up to 500 */
  35. #define N_MAX_KEY_BUFF     (N_MAX_KEY_LENGTH+N_MAXKEY_SEG+sizeof(double)-1)
  36. #define N_MAX_POSSIBLE_KEY_BUFF 500+9
  37.  
  38. #define N_NAME_IEXT    ".ISM"
  39. #define N_NAME_DEXT    ".ISD"
  40. #define NI_POS_ERROR    (~ (ulong) 0)
  41.  
  42.  
  43.     /* Param to/from nisam_info */
  44.  
  45. typedef struct st_n_isaminfo        /* Struct from h_info */
  46. {
  47.   ulong records;            /* Records in database */
  48.   ulong deleted;            /* Deleted records in database */
  49.   ulong recpos;                /* Pos for last used record */
  50.   ulong newrecpos;            /* Pos if we write new record */
  51.   ulong dupp_key_pos;            /* Position to record with dupp key */
  52.   ulong data_file_length,        /* Length of data file */
  53.         max_data_file_length,
  54.         index_file_length,
  55.         max_index_file_length,
  56.         delete_length;
  57.   uint    reclength;            /* Recordlength */
  58.   uint    mean_reclength;            /* Mean recordlength (if packed) */
  59.   uint    keys;                /* How many keys used */
  60.   uint    options;            /* HA_OPTIONS_... used */
  61.   int    errkey,                /* With key was dupplicated on err */
  62.     sortkey;            /* clustered by this key */
  63.   File    filenr;                /* (uniq) filenr for datafile */
  64.   time_t create_time;            /* When table was created */
  65.   time_t isamchk_time;
  66.   time_t update_time;
  67.   ulong *rec_per_key;            /* for sql optimizing */
  68. } N_ISAMINFO;
  69.  
  70.  
  71.     /* Info saved on file for each info-part */
  72.  
  73. #ifdef __WATCOMC__
  74. #pragma pack(2)
  75. #define uint uint16            /* Same format as in MSDOS */
  76. #endif
  77.  
  78. #ifdef __ZTC__
  79. #pragma ZTC align 2
  80. #define uint uint16            /* Same format as in MSDOS */
  81. #endif
  82.  
  83. typedef struct st_n_save_keyseg        /* Key-portion */
  84. {
  85.   uint8  type;                /* Typ av nyckel (f|r sort) */
  86.   uint8  flag;                /* HA_DIFF_LENGTH */
  87.   uint16 start;                /* Start of key in record */
  88.   uint16 length;            /* Keylength */
  89. } N_SAVE_KEYSEG;
  90.  
  91. typedef struct st_n_save_keydef /* Key definition with create & info */
  92. {
  93.   uint8 flag;                /* NOSAME, PACK_USED */
  94.   uint8 keysegs;            /* Number of key-segment */
  95.   uint16 block_length;            /* Length of keyblock (auto) */
  96.   uint16 keylength;            /* Tot length of keyparts (auto) */
  97.   uint16 minlength;            /* min length of (packed) key (auto) */
  98.   uint16 maxlength;            /* max length of (packed) key (auto) */
  99. } N_SAVE_KEYDEF;
  100.  
  101. typedef struct st_n_save_recinfo    /* Info of record */
  102. {
  103.   int16  type;                /* en_fieldtype */
  104.   uint16 length;            /* length of field */
  105. } N_SAVE_RECINFO;
  106.  
  107.  
  108. #ifdef __ZTC__
  109. #pragma ZTC align
  110. #undef uint
  111. #endif
  112.  
  113. #ifdef __WATCOMC__
  114. #pragma pack()
  115. #undef uint
  116. #endif
  117.  
  118.  
  119. struct st_isam_info;            /* For referense */
  120.  
  121. #ifndef ISAM_LIBRARY
  122. typedef struct st_isam_info N_INFO;
  123. #endif
  124.  
  125. typedef struct st_n_keyseg        /* Key-portion */
  126. {
  127.   N_SAVE_KEYSEG base;
  128. } N_KEYSEG;
  129.  
  130.  
  131. typedef struct st_n_keydef        /* Key definition with open & info */
  132. {
  133.   N_SAVE_KEYDEF base;
  134.   N_KEYSEG seg[N_MAXKEY_SEG+1];
  135.   int (*bin_search)(struct st_isam_info *info,struct st_n_keydef *keyinfo,
  136.             uchar *page,uchar *key,
  137.             uint key_len,uint comp_flag,uchar * *ret_pos,
  138.             uchar *buff);
  139.   uint (*get_key)(struct st_n_keydef *keyinfo,uint nod_flag,uchar * *page,
  140.           uchar *key);
  141. } N_KEYDEF;
  142.  
  143.  
  144. typedef struct st_decode_tree        /* Decode huff-table */
  145. {
  146.   uint16 *table;
  147.   uint     quick_table_bits;
  148.   byte     *intervalls;
  149. } DECODE_TREE;
  150.  
  151.  
  152. struct st_bit_buff;
  153.  
  154. typedef struct st_n_recinfo        /* Info of record */
  155. {
  156.   N_SAVE_RECINFO base;
  157. #ifndef NOT_PACKED_DATABASES
  158.   void (*unpack)(struct st_n_recinfo *rec,struct st_bit_buff *buff,
  159.          uchar *start,uchar *end);
  160.   enum en_fieldtype base_type;
  161.   uint space_length_bits,pack_type;
  162.   DECODE_TREE *huff_tree;
  163. #endif
  164. } N_RECINFO;
  165.  
  166.  
  167. extern my_string nisam_log_filename;        /* Name of logfile */
  168. extern uint nisam_block_size;
  169. extern my_bool nisam_flush;
  170.  
  171.     /* Prototypes for nisam-functions */
  172.  
  173. extern int nisam_close(struct st_isam_info *file);
  174. extern int nisam_delete(struct st_isam_info *file,const byte *buff);
  175. extern struct st_isam_info *nisam_open(const char *name,int mode,
  176.                     uint wait_if_locked);
  177. extern int nisam_panic(enum ha_panic_function function);
  178. extern int nisam_rfirst(struct st_isam_info *file,byte *buf,int inx);
  179. extern int nisam_rkey(struct st_isam_info *file,byte *buf,int inx,
  180.            const byte *key,
  181.            uint key_len, enum ha_rkey_function search_flag);
  182. extern int nisam_rlast(struct st_isam_info *file,byte *buf,int inx);
  183. extern int nisam_rnext(struct st_isam_info *file,byte *buf,int inx);
  184. extern int nisam_rprev(struct st_isam_info *file,byte *buf,int inx);
  185. extern int nisam_rrnd(struct st_isam_info *file,byte *buf,ulong pos);
  186. extern int nisam_rsame(struct st_isam_info *file,byte *record,int inx);
  187. extern int nisam_rsame_with_pos(struct st_isam_info *file,byte *record,
  188.                  int inx,ulong pos);
  189. extern int nisam_update(struct st_isam_info *file,const byte *old,
  190.              const byte *new_record);
  191. extern int nisam_write(struct st_isam_info *file,const byte *buff);
  192. extern int nisam_info(struct st_isam_info *file,N_ISAMINFO *x,int flag);
  193. extern ulong nisam_position(struct st_isam_info *info);
  194. extern int nisam_lock_database(struct st_isam_info *file,int lock_type);
  195. extern int nisam_create(const char *name,uint keys,N_KEYDEF *keyinfo,
  196.              N_RECINFO *recinfo,ulong records,
  197.              ulong reloc,uint flags,uint options,
  198.              ulong data_file_length);
  199. extern int nisam_extra(struct st_isam_info *file,
  200.             enum ha_extra_function function);
  201. extern ulong nisam_records_in_range(struct st_isam_info *info,int inx,
  202.                  const byte *start_key,uint start_key_len,
  203.                  enum ha_rkey_function start_search_flag,
  204.                  const byte *end_key,uint end_key_len,
  205.                  enum ha_rkey_function end_search_flag);
  206. extern int nisam_log(int activate_log);
  207. extern int nisam_is_changed(struct st_isam_info *info);
  208. extern uint _calc_blob_length(uint length , const byte *pos);
  209.  
  210. #ifdef    __cplusplus
  211. }
  212. #endif
  213. #endif
  214.