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