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

MySQL数据库

开发平台:

Visual C++

  1. /***************************************************************************
  2. Version control for database, common definitions, and include files
  3. (c) 1994 - 2000 Innobase Oy
  4. Created 1/20/1994 Heikki Tuuri
  5. ****************************************************************************/
  6. #ifndef univ_i
  7. #define univ_i
  8. #if (defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)) && !defined(MYSQL_SERVER) && !defined(__WIN__)
  9. #undef __WIN__
  10. #define __WIN__
  11. #include <windows.h>
  12. #if !defined(WIN64) && !defined(_WIN64)
  13. #define UNIV_CAN_USE_X86_ASSEMBLER
  14. #endif
  15. #ifdef _NT_
  16. #define __NT__
  17. #endif
  18. #else
  19. /* The defines used with MySQL */
  20. /* Include two header files from MySQL to make the Unix flavor used
  21. in compiling more Posix-compatible. These headers also define __WIN__
  22. if we are compiling on Windows. */
  23. #include <my_global.h>
  24. #include <my_pthread.h>
  25. /* Include <sys/stat.h> to get S_I... macros defined for os0file.c */
  26. #include <sys/stat.h>
  27. #undef PACKAGE
  28. #undef VERSION
  29. /* Include the header file generated by GNU autoconf */
  30. #include "../ib_config.h"
  31. #ifdef HAVE_SCHED_H
  32. #include <sched.h>
  33. #endif
  34. /* When compiling for Itanium IA64, undefine the flag below to prevent use
  35. of the 32-bit x86 assembler in mutex operations. */
  36. #if defined(__WIN__) && !defined(WIN64) && !defined(_WIN64)
  37. #define UNIV_CAN_USE_X86_ASSEMBLER
  38. #endif
  39. /* We only try to do explicit inlining of functions with gcc and
  40. Microsoft Visual C++ */
  41. #if !defined(__GNUC__) && !defined(__WIN__)
  42. #undef  UNIV_MUST_NOT_INLINE /* Remove compiler warning */
  43. #define UNIV_MUST_NOT_INLINE
  44. #endif
  45. #ifdef HAVE_PREAD
  46. #define HAVE_PWRITE
  47. #endif
  48. #endif /* #if (defined(WIN32) || ... */
  49. /* DEBUG VERSION CONTROL
  50. ===================== */
  51. /* The following flag will make InnoDB to initialize
  52. all memory it allocates to zero. It hides Purify
  53. warnings about reading unallocated memory unless
  54. memory is read outside the allocated blocks. */
  55. /*
  56. #define UNIV_INIT_MEM_TO_ZERO
  57. */
  58. /* Make a non-inline debug version */
  59. /*
  60. #define UNIV_DEBUG
  61. #define UNIV_MEM_DEBUG
  62. #define UNIV_IBUF_DEBUG
  63. #define UNIV_SYNC_DEBUG
  64. #define UNIV_SEARCH_DEBUG
  65. #define UNIV_SYNC_PERF_STAT
  66. #define UNIV_SEARCH_PERF_STAT
  67. */
  68. #define UNIV_LIGHT_MEM_DEBUG
  69. #define YYDEBUG 1
  70. #ifdef HAVE_purify
  71. /* The following sets all new allocated memory to zero before use:
  72. this can be used to eliminate unnecessary Purify warnings, but note that
  73. it also masks many bugs Purify could detect. For detailed Purify analysis it
  74. is best to remove the define below and look through the warnings one
  75. by one. */
  76. #define UNIV_SET_MEM_TO_ZERO
  77. #endif
  78. /*
  79. #define UNIV_SQL_DEBUG
  80. #define UNIV_LOG_DEBUG
  81. */
  82. /* the above option prevents forcing of log to disk
  83. at a buffer page write: it should be tested with this
  84. option off; also some ibuf tests are suppressed */
  85. /*
  86. #define UNIV_BASIC_LOG_DEBUG
  87. */
  88. /* the above option enables basic recovery debugging:
  89. new allocated file pages are reset */
  90. #if (!defined(UNIV_DEBUG) && !defined(INSIDE_HA_INNOBASE_CC) && !defined(UNIV_MUST_NOT_INLINE))
  91. /* Definition for inline version */
  92. #ifdef __WIN__
  93. #define UNIV_INLINE __inline
  94. #else
  95. /* config.h contains the right def for 'inline' for the current compiler */
  96. #if (__GNUC__ == 2)
  97. #define UNIV_INLINE  extern inline
  98. #else
  99. /* extern inline doesn't work with gcc 3.0.2 */
  100. #define UNIV_INLINE static inline
  101. #endif
  102. #endif
  103. #else
  104. /* If we want to compile a noninlined version we use the following macro
  105. definitions: */
  106. #define UNIV_NONINL
  107. #define UNIV_INLINE
  108. #endif /* UNIV_DEBUG */
  109. #ifdef _WIN32
  110. #define UNIV_WORD_SIZE 4
  111. #elif defined(_WIN64)
  112. #define UNIV_WORD_SIZE 8
  113. #else
  114. /* MySQL config.h generated by GNU autoconf will define SIZEOF_LONG in Posix */
  115. #define UNIV_WORD_SIZE SIZEOF_LONG
  116. #endif
  117. /* The following alignment is used in memory allocations in memory heap
  118. management to ensure correct alignment for doubles etc. */
  119. #define UNIV_MEM_ALIGNMENT      8
  120. /* The following alignment is used in aligning lints etc. */
  121. #define UNIV_WORD_ALIGNMENT UNIV_WORD_SIZE
  122. /*
  123. DATABASE VERSION CONTROL
  124. ========================
  125. */
  126. /* The universal page size of the database */
  127. #define UNIV_PAGE_SIZE          (2 * 8192) /* NOTE! Currently, this has to be a
  128. power of 2 */
  129. /* The 2-logarithm of UNIV_PAGE_SIZE: */
  130. #define UNIV_PAGE_SIZE_SHIFT 14
  131. /* Maximum number of parallel threads in a parallelized operation */
  132. #define UNIV_MAX_PARALLELISM 32
  133. /*
  134. UNIVERSAL TYPE DEFINITIONS
  135. ==========================
  136. */
  137. /* Note that inside MySQL 'byte' is defined as char on Linux! */
  138. #define byte unsigned char
  139. /* Another basic type we use is unsigned long integer which should be equal to
  140. the word size of the machine, that is on a 32-bit platform 32 bits, and on a
  141. 64-bit platform 64 bits. We also give the printf format for the type as a
  142. macro PRULINT. */
  143. #ifdef _WIN64
  144. typedef unsigned __int64 ulint;
  145. #define ULINTPF "%I64u"
  146. typedef __int64 lint;
  147. #else
  148. typedef unsigned long int ulint;
  149. #define ULINTPF "%lu"
  150. typedef long int lint;
  151. #endif
  152. #ifdef __WIN__
  153. typedef __int64 ib_longlong;
  154. #else
  155. typedef longlong ib_longlong;
  156. #endif
  157. #ifndef __WIN__
  158. #if SIZEOF_LONG != SIZEOF_VOIDP
  159. #error "Error: InnoDB's ulint must be of the same size as void*"
  160. #endif
  161. #endif
  162. /* The following type should be at least a 64-bit floating point number */
  163. typedef double utfloat;
  164. /* The 'undefined' value for a ulint */
  165. #define ULINT_UNDEFINED ((ulint)(-1))
  166. /* The undefined 32-bit unsigned integer */
  167. #define ULINT32_UNDEFINED 0xFFFFFFFF
  168. /* Maximum value for a ulint */
  169. #define ULINT_MAX ((ulint)(-2))
  170. /* This 'ibool' type is used within Innobase. Remember that different included
  171. headers may define 'bool' differently. Do not assume that 'bool' is a ulint! */
  172. #define ibool ulint
  173. #ifndef TRUE
  174. #define TRUE    1
  175. #define FALSE   0
  176. #endif
  177. /* The following number as the length of a logical field means that the field
  178. has the SQL NULL as its value. NOTE that because we assume that the length
  179. of a field is a 32-bit integer when we store it, for example, to an undo log
  180. on disk, we must have also this number fit in 32 bits, also in 64-bit
  181. computers! */
  182. #define UNIV_SQL_NULL  ULINT32_UNDEFINED
  183. /* Lengths which are not UNIV_SQL_NULL, but bigger than the following
  184. number indicate that a field contains a reference to an externally
  185. stored part of the field in the tablespace. The length field then
  186. contains the sum of the following flag and the locally stored len. */
  187. #define UNIV_EXTERN_STORAGE_FIELD (UNIV_SQL_NULL - UNIV_PAGE_SIZE)
  188. #include <stdio.h>
  189. #include "ut0dbg.h"
  190. #include "ut0ut.h"
  191. #include "db0err.h"
  192. #endif