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

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 includes constants used with all databases */
  18. /* Author: Michael Widenius */
  19. #ifndef _my_base_h
  20. #define _my_base_h
  21. #ifndef stdin /* Included first in handler */
  22. #define USES_TYPES /* my_dir with sys/types is included */
  23. #define CHSIZE_USED
  24. #include <global.h>
  25. #include <my_dir.h> /* This includes types */
  26. #include <my_sys.h>
  27. #include <m_string.h>
  28. #include <errno.h>
  29. #ifdef MSDOS
  30. #include <share.h> /* Neaded for sopen() */
  31. #endif
  32. #if !defined(USE_MY_FUNC) && !defined(THREAD)
  33. #include <my_nosys.h> /* For faster code, after test */
  34. #endif /* USE_MY_FUNC */
  35. #endif /* stdin */
  36. #include <my_list.h>
  37. /* The following is bits in the flag parameter to ha_open() */
  38. #define HA_OPEN_ABORT_IF_LOCKED 0 /* default */
  39. #define HA_OPEN_WAIT_IF_LOCKED 1
  40. #define HA_OPEN_IGNORE_IF_LOCKED 2
  41. #define HA_OPEN_TMP_TABLE 4 /* Table is a temp table */
  42. #define HA_OPEN_DELAY_KEY_WRITE 8 /* Don't update index  */
  43. #define HA_OPEN_ABORT_IF_CRASHED 16
  44. #define HA_OPEN_FOR_REPAIR 32 /* open even if crashed */
  45. /* The following is parameter to ha_rkey() how to use key */
  46. enum ha_rkey_function {
  47.   HA_READ_KEY_EXACT, /* Find first record else error */
  48.   HA_READ_KEY_OR_NEXT, /* Record or next record */
  49.   HA_READ_KEY_OR_PREV, /* Record or previous */
  50.   HA_READ_AFTER_KEY, /* Find next rec. after key-record */
  51.   HA_READ_BEFORE_KEY, /* Find next rec. before key-record */
  52.   HA_READ_PREFIX, /* Key which as same prefix */
  53.   HA_READ_PREFIX_LAST /* Last key with the same prefix */
  54. };
  55. /* The following is parameter to ha_extra() */
  56. enum ha_extra_function {
  57.   HA_EXTRA_NORMAL=0, /* Optimize for space (def) */
  58.   HA_EXTRA_QUICK=1, /* Optimize for speed */
  59.   HA_EXTRA_RESET=2, /* Reset database to after open */
  60.   HA_EXTRA_CACHE=3, /* Cash record in HA_rrnd() */
  61.   HA_EXTRA_NO_CACHE=4, /* End cacheing of records (def) */
  62.   HA_EXTRA_NO_READCHECK=5, /* No readcheck on update */
  63.   HA_EXTRA_READCHECK=6, /* Use readcheck (def) */
  64.   HA_EXTRA_KEYREAD=7, /* Read only key to database */
  65.   HA_EXTRA_NO_KEYREAD=8, /* Normal read of records (def) */
  66.   HA_EXTRA_NO_USER_CHANGE=9, /* No user is allowed to write */
  67.   HA_EXTRA_KEY_CACHE=10,
  68.   HA_EXTRA_NO_KEY_CACHE=11,
  69.   HA_EXTRA_WAIT_LOCK=12, /* Wait until file is avalably (def) */
  70.   HA_EXTRA_NO_WAIT_LOCK=13, /* If file is locked, return quickly */
  71.   HA_EXTRA_WRITE_CACHE=14, /* Use write cache in ha_write() */
  72.   HA_EXTRA_FLUSH_CACHE=15, /* flush write_record_cache */
  73.   HA_EXTRA_NO_KEYS=16, /* Remove all update of keys */
  74.   HA_EXTRA_KEYREAD_CHANGE_POS=17, /* Keyread, but change pos */
  75. /* xxxxchk -r must be used */
  76.   HA_EXTRA_REMEMBER_POS=18, /* Remember pos for next/prev */
  77.   HA_EXTRA_RESTORE_POS=19,
  78.   HA_EXTRA_REINIT_CACHE=20, /* init cache from current record */
  79.   HA_EXTRA_FORCE_REOPEN=21, /* Datafile have changed on disk */
  80.   HA_EXTRA_FLUSH, /* Flush tables to disk */
  81.   HA_EXTRA_NO_ROWS, /* Don't write rows */
  82.   HA_EXTRA_RESET_STATE, /* Reset positions */
  83.   HA_EXTRA_IGNORE_DUP_KEY, /* Dup keys don't rollback everything*/
  84.   HA_EXTRA_NO_IGNORE_DUP_KEY,
  85.   HA_EXTRA_DONT_USE_CURSOR_TO_UPDATE /* Cursor will not be used for update */
  86. };
  87. /* The following is parameter to ha_panic() */
  88. enum ha_panic_function {
  89.   HA_PANIC_CLOSE, /* Close all databases */
  90.   HA_PANIC_WRITE, /* Unlock and write status */
  91.   HA_PANIC_READ /* Lock and read keyinfo */
  92. };
  93. /* The following is parameter to ha_create(); keytypes */
  94. enum ha_base_keytype {
  95.   HA_KEYTYPE_END=0,
  96.   HA_KEYTYPE_TEXT=1, /* Key is sorted as letters */
  97.   HA_KEYTYPE_BINARY=2, /* Key is sorted as unsigned chars */
  98.   HA_KEYTYPE_SHORT_INT=3,
  99.   HA_KEYTYPE_LONG_INT=4,
  100.   HA_KEYTYPE_FLOAT=5,
  101.   HA_KEYTYPE_DOUBLE=6,
  102.   HA_KEYTYPE_NUM=7, /* Not packed num with pre-space */
  103.   HA_KEYTYPE_USHORT_INT=8,
  104.   HA_KEYTYPE_ULONG_INT=9,
  105.   HA_KEYTYPE_LONGLONG=10,
  106.   HA_KEYTYPE_ULONGLONG=11,
  107.   HA_KEYTYPE_INT24=12,
  108.   HA_KEYTYPE_UINT24=13,
  109.   HA_KEYTYPE_INT8=14,
  110.   HA_KEYTYPE_VARTEXT=15, /* Key is sorted as letters */
  111.   HA_KEYTYPE_VARBINARY=16 /* Key is sorted as unsigned chars */
  112. };
  113. #define HA_MAX_KEYTYPE 31 /* Must be log2-1 */
  114. /* These flags kan be OR:ed to key-flag */
  115. #define HA_NOSAME  1 /* Set if not dupplicated records */
  116. #define HA_PACK_KEY  2 /* Pack string key to previous key */
  117. #define HA_AUTO_KEY  16
  118. #define HA_BINARY_PACK_KEY  32 /* Packing of all keys to prev key */
  119. #define HA_FULLTEXT 128     /* SerG: for full-text search */
  120. #define HA_UNIQUE_CHECK 256 /* Check the key for uniqueness */
  121. /* Automatic bits in key-flag */
  122. #define HA_SPACE_PACK_USED  4 /* Test for if SPACE_PACK used */
  123. #define HA_VAR_LENGTH_KEY  8
  124. #define HA_NULL_PART_KEY  64
  125. #ifndef ISAM_LIBRARY
  126. #define HA_SORT_ALLOWS_SAME      512    /* Intern bit when sorting records */
  127. #else
  128. /* poor old NISAM has 8-bit flags :-( */
  129. #define HA_SORT_ALLOWS_SAME  128 /* Intern bit when sorting records */
  130. #endif
  131. /* These flags can be order to key-seg-flag */
  132. #define HA_SPACE_PACK  1 /* Pack space in key-seg */
  133. #define HA_PART_KEY  4 /* Used by MySQL for part-key-cols */
  134. #define HA_VAR_LENGTH  8
  135. #define HA_NULL_PART  16
  136. #define HA_BLOB_PART  32
  137. #define HA_SWAP_KEY  64
  138. #define HA_REVERSE_SORT  128 /* Sort key in reverse order */
  139. /* optionbits for database */
  140. #define HA_OPTION_PACK_RECORD 1
  141. #define HA_OPTION_PACK_KEYS 2
  142. #define HA_OPTION_COMPRESS_RECORD 4
  143. #define HA_OPTION_LONG_BLOB_PTR 8 /* new ISAM format */
  144. #define HA_OPTION_TMP_TABLE 16
  145. #define HA_OPTION_CHECKSUM 32
  146. #define HA_OPTION_DELAY_KEY_WRITE 64
  147. #define HA_OPTION_NO_PACK_KEYS 128  /* Reserved for MySQL */
  148. #define HA_OPTION_TEMP_COMPRESS_RECORD ((uint) 16384) /* set by isamchk */
  149. #define HA_OPTION_READ_ONLY_DATA ((uint) 32768) /* Set by isamchk */
  150. /* Bits in flag to create() */
  151. #define HA_DONT_TOUCH_DATA 1 /* Don't empty datafile (isamchk) */
  152. #define HA_PACK_RECORD 2 /* Request packed record format */
  153. #define HA_CREATE_TMP_TABLE 4
  154. #define HA_CREATE_CHECKSUM 8
  155. #define HA_CREATE_DELAY_KEY_WRITE 64
  156. /* Bits in flag to _status */
  157. #define HA_STATUS_POS 1 /* Return position */
  158. #define HA_STATUS_NO_LOCK  2 /* Don't use external lock */
  159. #define HA_STATUS_TIME 4 /* Return update time */
  160. #define HA_STATUS_CONST 8 /* Return constants values */
  161. #define HA_STATUS_VARIABLE 16
  162. #define HA_STATUS_ERRKEY 32
  163. #define HA_STATUS_AUTO 64
  164. /* Errorcodes given by functions */
  165. #define HA_ERR_KEY_NOT_FOUND 120 /* Didn't find key on read or update */
  166. #define HA_ERR_FOUND_DUPP_KEY 121 /* Dupplicate key on write */
  167. #define HA_ERR_RECORD_CHANGED 123 /* Uppdate with is recoverable */
  168. #define HA_ERR_WRONG_INDEX 124 /* Wrong index given to function */
  169. #define HA_ERR_CRASHED 126 /* Indexfile is crashed */
  170. #define HA_ERR_WRONG_IN_RECORD 127 /* Record-file is crashed */
  171. #define HA_ERR_OUT_OF_MEM 128 /* Record-file is crashed */
  172. #define HA_ERR_WRONG_COMMAND 131 /* Command not supported */
  173. #define HA_ERR_OLD_FILE 132 /* old databasfile */
  174. #define HA_ERR_NO_ACTIVE_RECORD 133 /* No record read in update() */
  175. #define HA_ERR_RECORD_DELETED 134 /* Intern error-code */
  176. #define HA_ERR_RECORD_FILE_FULL 135 /* No more room in file */
  177. #define HA_ERR_INDEX_FILE_FULL 136 /* No more room in file */
  178. #define HA_ERR_END_OF_FILE 137 /* end in next/prev/first/last */
  179. #define HA_ERR_UNSUPPORTED 138 /* unsupported extension used */
  180. #define HA_ERR_TO_BIG_ROW 139 /* Too big row */
  181. #define HA_WRONG_CREATE_OPTION 140 /* Wrong create option */
  182. #define HA_ERR_FOUND_DUPP_UNIQUE 141 /* Dupplicate unique on write */
  183. #define HA_ERR_UNKNOWN_CHARSET  142 /* Can't open charset */
  184. #define HA_ERR_WRONG_TABLE_DEF  143
  185. #define HA_ERR_CRASHED_ON_REPAIR 144 /* Last (automatic?) repair failed */
  186. #define HA_ERR_CRASHED_ON_USAGE  145 /* Table must be repaired */
  187. /* Other constants */
  188. #define HA_NAMELEN 64 /* Max length of saved filename */
  189. /* Intern constants in databases */
  190. /* bits in _search */
  191. #define SEARCH_FIND 1
  192. #define SEARCH_NO_FIND 2
  193. #define SEARCH_SAME 4
  194. #define SEARCH_BIGGER 8
  195. #define SEARCH_SMALLER 16
  196. #define SEARCH_SAVE_BUFF 32
  197. #define SEARCH_UPDATE 64
  198. #define SEARCH_PREFIX 128
  199. #define SEARCH_LAST 256
  200. /* bits in opt_flag */
  201. #define QUICK_USED 1
  202. #define READ_CACHE_USED 2
  203. #define READ_CHECK_USED 4
  204. #define KEY_READ_USED 8
  205. #define WRITE_CACHE_USED 16
  206. #define OPT_NO_ROWS  32
  207. /* bits in update */
  208. #define HA_STATE_CHANGED 1 /* Database has changed */
  209. #define HA_STATE_AKTIV 2 /* Has a current record */
  210. #define HA_STATE_WRITTEN 4 /* Record is written */
  211. #define HA_STATE_DELETED 8
  212. #define HA_STATE_NEXT_FOUND 16 /* Next found record (record before) */
  213. #define HA_STATE_PREV_FOUND 32 /* Prev found record (record after) */
  214. #define HA_STATE_NO_KEY 64 /* Last read didn't find record */
  215. #define HA_STATE_KEY_CHANGED 128
  216. #define HA_STATE_WRITE_AT_END 256 /* set in _ps_find_writepos */
  217. #define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */
  218. #define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */
  219. #define HA_STATE_EXTEND_BLOCK 2048
  220. enum en_fieldtype {
  221.   FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIPP_ENDSPACE,FIELD_SKIPP_PRESPACE,
  222.   FIELD_SKIPP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO,
  223.   FIELD_VARCHAR,FIELD_CHECK
  224. };
  225. enum data_file_type {
  226.   STATIC_RECORD,DYNAMIC_RECORD,COMPRESSED_RECORD
  227. };
  228. /* For number of records */
  229. #ifdef BIG_TABLES
  230. typedef my_off_t ha_rows;
  231. #else
  232. typedef ulong ha_rows;
  233. #endif
  234. #define HA_POS_ERROR (~ (ha_rows) 0)
  235. #define HA_OFFSET_ERROR (~ (my_off_t) 0)
  236. #if SYSTEM_SIZEOF_OFF_T == 4
  237. #define MAX_FILE_SIZE INT_MAX32
  238. #else
  239. #define MAX_FILE_SIZE LONGLONG_MAX
  240. #endif
  241. #endif /* _my_base_h */