nisam.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /* This file should be included when using nisam_funktions */
  14. /* Author: Michael Widenius */
  15. #ifndef _nisam_h
  16. #define _nisam_h
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. #ifndef _my_base_h
  21. #include <my_base.h>
  22. #endif
  23. /* defines used by nisam-funktions */
  24. #define N_MAXKEY 16 /* Max allowed keys */
  25. #define N_MAXKEY_SEG 16 /* Max segments for key */
  26. #define N_MAX_KEY_LENGTH 256 /* May be increased up to 500 */
  27. #define N_MAX_KEY_BUFF  (N_MAX_KEY_LENGTH+N_MAXKEY_SEG+sizeof(double)-1)
  28. #define N_MAX_POSSIBLE_KEY_BUFF 500+9
  29. #define N_NAME_IEXT ".ISM"
  30. #define N_NAME_DEXT ".ISD"
  31. #define NI_POS_ERROR (~ (ulong) 0)
  32. /* Param to/from nisam_info */
  33. typedef struct st_n_isaminfo /* Struct from h_info */
  34. {
  35.   ulong records; /* Records in database */
  36.   ulong deleted; /* Deleted records in database */
  37.   ulong recpos; /* Pos for last used record */
  38.   ulong newrecpos; /* Pos if we write new record */
  39.   ulong dupp_key_pos; /* Position to record with dupp key */
  40.   ulong data_file_length, /* Length of data file */
  41.         max_data_file_length,
  42.         index_file_length,
  43.         max_index_file_length,
  44.         delete_length;
  45.   uint reclength; /* Recordlength */
  46.   uint mean_reclength; /* Mean recordlength (if packed) */
  47.   uint keys; /* How many keys used */
  48.   uint options; /* HA_OPTION_... used */
  49.   int errkey, /* With key was dupplicated on err */
  50. sortkey; /* clustered by this key */
  51.   File filenr; /* (uniq) filenr for datafile */
  52.   time_t create_time; /* When table was created */
  53.   time_t isamchk_time;
  54.   time_t update_time;
  55.   ulong *rec_per_key; /* for sql optimizing */
  56. } N_ISAMINFO;
  57. /* Info saved on file for each info-part */
  58. #ifdef __WATCOMC__
  59. #pragma pack(2)
  60. #define uint uint16 /* Same format as in MSDOS */
  61. #endif
  62. #ifdef __ZTC__
  63. #pragma ZTC align 2
  64. #define uint uint16 /* Same format as in MSDOS */
  65. #endif
  66. typedef struct st_n_save_keyseg /* Key-portion */
  67. {
  68.   uint8  type; /* Typ av nyckel (f|r sort) */
  69.   uint8  flag; /* HA_DIFF_LENGTH */
  70.   uint16 start; /* Start of key in record */
  71.   uint16 length; /* Keylength */
  72. } N_SAVE_KEYSEG;
  73. typedef struct st_n_save_keydef /* Key definition with create & info */
  74. {
  75.   uint8 flag; /* NOSAME, PACK_USED */
  76.   uint8 keysegs; /* Number of key-segment */
  77.   uint16 block_length; /* Length of keyblock (auto) */
  78.   uint16 keylength; /* Tot length of keyparts (auto) */
  79.   uint16 minlength; /* min length of (packed) key (auto) */
  80.   uint16 maxlength; /* max length of (packed) key (auto) */
  81. } N_SAVE_KEYDEF;
  82. typedef struct st_n_save_recinfo /* Info of record */
  83. {
  84.   int16  type; /* en_fieldtype */
  85.   uint16 length; /* length of field */
  86. } N_SAVE_RECINFO;
  87. #ifdef __ZTC__
  88. #pragma ZTC align
  89. #undef uint
  90. #endif
  91. #ifdef __WATCOMC__
  92. #pragma pack()
  93. #undef uint
  94. #endif
  95. struct st_isam_info; /* For referense */
  96. #ifndef ISAM_LIBRARY
  97. typedef struct st_isam_info N_INFO;
  98. #endif
  99. typedef struct st_n_keyseg /* Key-portion */
  100. {
  101.   N_SAVE_KEYSEG base;
  102. } N_KEYSEG;
  103. typedef struct st_n_keydef /* Key definition with open & info */
  104. {
  105.   N_SAVE_KEYDEF base;
  106.   N_KEYSEG seg[N_MAXKEY_SEG+1];
  107.   int (*bin_search)(struct st_isam_info *info,struct st_n_keydef *keyinfo,
  108.     uchar *page,uchar *key,
  109.     uint key_len,uint comp_flag,uchar * *ret_pos,
  110.     uchar *buff);
  111.   uint (*get_key)(struct st_n_keydef *keyinfo,uint nod_flag,uchar * *page,
  112.   uchar *key);
  113. } N_KEYDEF;
  114. typedef struct st_decode_tree /* Decode huff-table */
  115. {
  116.   uint16 *table;
  117.   uint  quick_table_bits;
  118.   byte  *intervalls;
  119. } DECODE_TREE;
  120. struct st_bit_buff;
  121. typedef struct st_n_recinfo /* Info of record */
  122. {
  123.   N_SAVE_RECINFO base;
  124. #ifndef NOT_PACKED_DATABASES
  125.   void (*unpack)(struct st_n_recinfo *rec,struct st_bit_buff *buff,
  126.  uchar *start,uchar *end);
  127.   enum en_fieldtype base_type;
  128.   uint space_length_bits,pack_type;
  129.   DECODE_TREE *huff_tree;
  130. #endif
  131. } N_RECINFO;
  132. extern my_string nisam_log_filename; /* Name of logfile */
  133. extern uint nisam_block_size;
  134. extern my_bool nisam_flush;
  135. /* Prototypes for nisam-functions */
  136. extern int nisam_close(struct st_isam_info *file);
  137. extern int nisam_delete(struct st_isam_info *file,const byte *buff);
  138. extern struct st_isam_info *nisam_open(const char *name,int mode,
  139.     uint wait_if_locked);
  140. extern int nisam_panic(enum ha_panic_function function);
  141. extern int nisam_rfirst(struct st_isam_info *file,byte *buf,int inx);
  142. extern int nisam_rkey(struct st_isam_info *file,byte *buf,int inx,
  143.    const byte *key,
  144.    uint key_len, enum ha_rkey_function search_flag);
  145. extern int nisam_rlast(struct st_isam_info *file,byte *buf,int inx);
  146. extern int nisam_rnext(struct st_isam_info *file,byte *buf,int inx);
  147. extern int nisam_rprev(struct st_isam_info *file,byte *buf,int inx);
  148. extern int nisam_rrnd(struct st_isam_info *file,byte *buf,ulong pos);
  149. extern int nisam_rsame(struct st_isam_info *file,byte *record,int inx);
  150. extern int nisam_rsame_with_pos(struct st_isam_info *file,byte *record,
  151.      int inx,ulong pos);
  152. extern int nisam_update(struct st_isam_info *file,const byte *old,
  153.      const byte *new_record);
  154. extern int nisam_write(struct st_isam_info *file,const byte *buff);
  155. extern int nisam_info(struct st_isam_info *file,N_ISAMINFO *x,int flag);
  156. extern ulong nisam_position(struct st_isam_info *info);
  157. extern int nisam_lock_database(struct st_isam_info *file,int lock_type);
  158. extern int nisam_create(const char *name,uint keys,N_KEYDEF *keyinfo,
  159.      N_RECINFO *recinfo,ulong records,
  160.      ulong reloc,uint flags,uint options,
  161.      ulong data_file_length);
  162. extern int nisam_extra(struct st_isam_info *file,
  163.     enum ha_extra_function function);
  164. extern ulong nisam_records_in_range(struct st_isam_info *info,int inx,
  165.  const byte *start_key,uint start_key_len,
  166.  enum ha_rkey_function start_search_flag,
  167.  const byte *end_key,uint end_key_len,
  168.  enum ha_rkey_function end_search_flag);
  169. extern int nisam_log(int activate_log);
  170. extern int nisam_is_changed(struct st_isam_info *info);
  171. extern uint _calc_blob_length(uint length , const byte *pos);
  172. #ifdef __cplusplus
  173. }
  174. #endif
  175. #endif