nisam.h
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:7k
源码类别:

MySQL数据库

开发平台:

Visual C++

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