summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/m_ctype.h4
-rw-r--r--include/my_global.h28
-rw-r--r--include/my_time.h16
-rw-r--r--include/myisampack.h357
-rw-r--r--include/mysql_com.h43
-rw-r--r--include/mysql_time.h9
-rw-r--r--include/mysqld_error.h3
7 files changed, 253 insertions, 207 deletions
diff --git a/include/m_ctype.h b/include/m_ctype.h
index 785fa431385..1b6e7bf6739 100644
--- a/include/m_ctype.h
+++ b/include/m_ctype.h
@@ -391,8 +391,10 @@ extern my_bool my_parse_charset_xml(const char *bug, uint len,
#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0))
#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \
((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j)))
-#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m)))
+#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m)))
#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b)))
+#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num))
+
#define use_mb(s) ((s)->cset->ismbchar != NULL)
#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b)))
diff --git a/include/my_global.h b/include/my_global.h
index f7e77abfd26..a9ca5416c88 100644
--- a/include/my_global.h
+++ b/include/my_global.h
@@ -645,21 +645,27 @@ typedef SOCKET_SIZE_TYPE size_socket;
#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/
#if SIZEOF_LONG == 4
-#define INT_MIN32 (long) 0x80000000L
-#define INT_MAX32 (long) 0x7FFFFFFFL
-#define INT_MIN24 ((long) 0xff800000L)
-#define INT_MAX24 0x007fffffL
-#define INT_MIN16 ((short int) 0x8000)
-#define INT_MAX16 0x7FFF
-#define INT_MIN8 ((char) 0x80)
-#define INT_MAX8 ((char) 0x7F)
+#define INT_MIN32 ((long) 0x80000000L)
+#define INT_MAX32 ((long) 0x7FFFFFFFL)
+#define UINT_MAX32 ((long) 0xFFFFFFFFL)
+#define INT_MIN24 ((long) 0xFF800000L)
+#define INT_MAX24 0x007FFFFFL
+#define UINT_MAX24 0x00FFFFFFL
+#define INT_MIN16 ((short int) 0x8000)
+#define INT_MAX16 0x7FFF
+#define UINT_MAX16 0xFFFF
+#define INT_MIN8 ((char) 0x80)
+#define INT_MAX8 ((char) 0x7F)
#else /* Probably Alpha */
#define INT_MIN32 ((long) (int) 0x80000000)
#define INT_MAX32 ((long) (int) 0x7FFFFFFF)
-#define INT_MIN24 ((long) (int) 0xff800000)
-#define INT_MAX24 ((long) (int) 0x007fffff)
-#define INT_MIN16 ((short int) 0xffff8000)
+#define UINT_MAX32 ((long) (int) 0xFFFFFFFF)
+#define INT_MIN24 ((long) (int) 0xFF800000)
+#define INT_MAX24 ((long) (int) 0x007FFFFF)
+#define UINT_MAX24 ((long) (int) 0x00FFFFFF)
+#define INT_MIN16 ((short int) 0xFFFF8000)
#define INT_MAX16 ((short int) 0x00007FFF)
+#define UINT_MAX16 ((short int) 0x0000FFFF)
#endif
/* From limits.h instead */
diff --git a/include/my_time.h b/include/my_time.h
index e42f7e9e402..1c549ced6b0 100644
--- a/include/my_time.h
+++ b/include/my_time.h
@@ -28,6 +28,15 @@ C_MODE_START
extern ulonglong log_10_int[20];
+/*
+ Portable time_t replacement.
+ Should be signed and hold seconds for 1902-2038 range.
+*/
+typedef long my_time_t;
+
+#define MY_TIME_T_MAX LONG_MAX
+#define MY_TIME_T_MIN LONG_MIN
+
#define YY_PART_YEAR 70
/* Flags to str_to_datetime */
@@ -41,6 +50,13 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
bool str_to_time(const char *str,uint length, MYSQL_TIME *l_time,
int *was_cut);
+long calc_daynr(uint year,uint month,uint day);
+
+void init_time(void);
+
+my_time_t
+my_system_gmt_sec(const MYSQL_TIME *t, long *my_timezone, bool *in_dst_time_gap);
+
C_MODE_END
#endif /* _my_time_h_ */
diff --git a/include/myisampack.h b/include/myisampack.h
index 06c94fea75f..c92429e4c01 100644
--- a/include/myisampack.h
+++ b/include/myisampack.h
@@ -22,215 +22,218 @@
*/
/* these two are for uniformity */
-#define mi_sint1korr(A) (int8)(*A)
-#define mi_uint1korr(A) (uint8)(*A)
-
-#define mi_sint2korr(A) (int16) (((int16) ((uchar) (A)[1])) +\
- ((int16) ((int16) (A)[0]) << 8))
-#define mi_sint3korr(A) ((int32) ((((uchar) (A)[0]) & 128) ? \
- (((uint32) 255L << 24) | \
- (((uint32) (uchar) (A)[0]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[2])) : \
- (((uint32) (uchar) (A)[0]) << 16) |\
- (((uint32) (uchar) (A)[1]) << 8) | \
- ((uint32) (uchar) (A)[2])))
-#define mi_sint4korr(A) (int32) (((int32) ((uchar) (A)[3])) +\
- (((int32) ((uchar) (A)[2]) << 8)) +\
- (((int32) ((uchar) (A)[1]) << 16)) +\
- (((int32) ((int16) (A)[0]) << 24)))
-#define mi_sint8korr(A) (longlong) mi_uint8korr(A)
-#define mi_uint2korr(A) (uint16) (((uint16) ((uchar) (A)[1])) +\
- ((uint16) ((uchar) (A)[0]) << 8))
-#define mi_uint3korr(A) (uint32) (((uint32) ((uchar) (A)[2])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[0])) << 16))
-#define mi_uint4korr(A) (uint32) (((uint32) ((uchar) (A)[3])) +\
- (((uint32) ((uchar) (A)[2])) << 8) +\
- (((uint32) ((uchar) (A)[1])) << 16) +\
- (((uint32) ((uchar) (A)[0])) << 24))
-#define mi_uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[4])) +\
- (((uint32) ((uchar) (A)[3])) << 8) +\
- (((uint32) ((uchar) (A)[2])) << 16) +\
- (((uint32) ((uchar) (A)[1])) << 24)) +\
- (((ulonglong) ((uchar) (A)[0])) << 32))
-#define mi_uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[5])) +\
- (((uint32) ((uchar) (A)[4])) << 8) +\
- (((uint32) ((uchar) (A)[3])) << 16) +\
- (((uint32) ((uchar) (A)[2])) << 24)) +\
- (((ulonglong) (((uint32) ((uchar) (A)[1])) +\
- (((uint32) ((uchar) (A)[0]) << 8)))) <<\
- 32))
-#define mi_uint7korr(A) ((ulonglong)(((uint32) ((uchar) (A)[6])) +\
- (((uint32) ((uchar) (A)[5])) << 8) +\
- (((uint32) ((uchar) (A)[4])) << 16) +\
- (((uint32) ((uchar) (A)[3])) << 24)) +\
- (((ulonglong) (((uint32) ((uchar) (A)[2])) +\
- (((uint32) ((uchar) (A)[1])) << 8) +\
- (((uint32) ((uchar) (A)[0])) << 16))) <<\
- 32))
-#define mi_uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[7])) +\
- (((uint32) ((uchar) (A)[6])) << 8) +\
- (((uint32) ((uchar) (A)[5])) << 16) +\
- (((uint32) ((uchar) (A)[4])) << 24)) +\
- (((ulonglong) (((uint32) ((uchar) (A)[3])) +\
- (((uint32) ((uchar) (A)[2])) << 8) +\
- (((uint32) ((uchar) (A)[1])) << 16) +\
- (((uint32) ((uchar) (A)[0])) << 24))) <<\
- 32))
+#define mi_sint1korr(A) ((int8)(*A))
+#define mi_uint1korr(A) ((uint8)(*A))
+
+#define mi_sint2korr(A) ((int16) (((int16) (((uchar*) (A))[1])) +\
+ ((int16) ((int16) ((char*) (A))[0]) << 8)))
+#define mi_sint3korr(A) ((int32) (((((uchar*) (A))[0]) & 128) ? \
+ (((uint32) 255L << 24) | \
+ (((uint32) ((uchar*) (A))[0]) << 16) |\
+ (((uint32) ((uchar*) (A))[1]) << 8) | \
+ ((uint32) ((uchar*) (A))[2])) : \
+ (((uint32) ((uchar*) (A))[0]) << 16) |\
+ (((uint32) ((uchar*) (A))[1]) << 8) | \
+ ((uint32) ((uchar*) (A))[2])))
+#define mi_sint4korr(A) ((int32) (((int32) (((uchar*) (A))[3])) +\
+ ((int32) (((uchar*) (A))[2]) << 8) +\
+ ((int32) (((uchar*) (A))[1]) << 16) +\
+ ((int32) ((int16) ((char*) (A))[0]) << 24)))
+#define mi_sint8korr(A) ((longlong) mi_uint8korr(A))
+#define mi_uint2korr(A) ((uint16) (((uint16) (((uchar*) (A))[1])) +\
+ ((uint16) (((uchar*) (A))[0]) << 8)))
+#define mi_uint3korr(A) ((uint32) (((uint32) (((uchar*) (A))[2])) +\
+ (((uint32) (((uchar*) (A))[1])) << 8) +\
+ (((uint32) (((uchar*) (A))[0])) << 16)))
+#define mi_uint4korr(A) ((uint32) (((uint32) (((uchar*) (A))[3])) +\
+ (((uint32) (((uchar*) (A))[2])) << 8) +\
+ (((uint32) (((uchar*) (A))[1])) << 16) +\
+ (((uint32) (((uchar*) (A))[0])) << 24)))
+#define mi_uint5korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[4])) +\
+ (((uint32) (((uchar*) (A))[3])) << 8) +\
+ (((uint32) (((uchar*) (A))[2])) << 16) +\
+ (((uint32) (((uchar*) (A))[1])) << 24)) +\
+ (((ulonglong) (((uchar*) (A))[0])) << 32))
+#define mi_uint6korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[5])) +\
+ (((uint32) (((uchar*) (A))[4])) << 8) +\
+ (((uint32) (((uchar*) (A))[3])) << 16) +\
+ (((uint32) (((uchar*) (A))[2])) << 24)) +\
+ (((ulonglong) (((uint32) (((uchar*) (A))[1])) +\
+ (((uint32) (((uchar*) (A))[0]) << 8)))) <<\
+ 32))
+#define mi_uint7korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[6])) +\
+ (((uint32) (((uchar*) (A))[5])) << 8) +\
+ (((uint32) (((uchar*) (A))[4])) << 16) +\
+ (((uint32) (((uchar*) (A))[3])) << 24)) +\
+ (((ulonglong) (((uint32) (((uchar*) (A))[2])) +\
+ (((uint32) (((uchar*) (A))[1])) << 8) +\
+ (((uint32) (((uchar*) (A))[0])) << 16))) <<\
+ 32))
+#define mi_uint8korr(A) ((ulonglong)(((uint32) (((uchar*) (A))[7])) +\
+ (((uint32) (((uchar*) (A))[6])) << 8) +\
+ (((uint32) (((uchar*) (A))[5])) << 16) +\
+ (((uint32) (((uchar*) (A))[4])) << 24)) +\
+ (((ulonglong) (((uint32) (((uchar*) (A))[3])) +\
+ (((uint32) (((uchar*) (A))[2])) << 8) +\
+ (((uint32) (((uchar*) (A))[1])) << 16) +\
+ (((uint32) (((uchar*) (A))[0])) << 24))) <<\
+ 32))
/* This one is for uniformity */
#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A)
-#define mi_int2store(T,A) { uint def_temp= (uint) (A) ;\
- *((uchar*) ((T)+1))= (uchar)(def_temp); \
- *((uchar*) ((T)+0))= (uchar)(def_temp >> 8); }
-#define mi_int3store(T,A) { /*lint -save -e734 */\
- ulong def_temp= (ulong) (A);\
- *(((T)+2))=(char) (def_temp);\
- *((T)+1)= (char) (def_temp >> 8);\
- *((T)+0)= (char) (def_temp >> 16);\
- /*lint -restore */}
-#define mi_int4store(T,A) { ulong def_temp= (ulong) (A);\
- *((T)+3)=(char) (def_temp);\
- *((T)+2)=(char) (def_temp >> 8);\
- *((T)+1)=(char) (def_temp >> 16);\
- *((T)+0)=(char) (def_temp >> 24); }
-#define mi_int5store(T,A) { ulong def_temp= (ulong) (A),\
- def_temp2= (ulong) ((A) >> 32);\
- *((T)+4)=(char) (def_temp);\
- *((T)+3)=(char) (def_temp >> 8);\
- *((T)+2)=(char) (def_temp >> 16);\
- *((T)+1)=(char) (def_temp >> 24);\
- *((T)+0)=(char) (def_temp2); }
-#define mi_int6store(T,A) { ulong def_temp= (ulong) (A),\
- def_temp2= (ulong) ((A) >> 32);\
- *((T)+5)=(char) (def_temp);\
- *((T)+4)=(char) (def_temp >> 8);\
- *((T)+3)=(char) (def_temp >> 16);\
- *((T)+2)=(char) (def_temp >> 24);\
- *((T)+1)=(char) (def_temp2);\
- *((T)+0)=(char) (def_temp2 >> 8); }
-#define mi_int7store(T,A) { ulong def_temp= (ulong) (A),\
- def_temp2= (ulong) ((A) >> 32);\
- *((T)+6)=(char) (def_temp);\
- *((T)+5)=(char) (def_temp >> 8);\
- *((T)+4)=(char) (def_temp >> 16);\
- *((T)+3)=(char) (def_temp >> 24);\
- *((T)+2)=(char) (def_temp2);\
- *((T)+1)=(char) (def_temp2 >> 8);\
- *((T)+0)=(char) (def_temp2 >> 16); }
-#define mi_int8store(T,A) { ulong def_temp3= (ulong) (A), \
- def_temp4= (ulong) ((A) >> 32); \
- mi_int4store((T),def_temp4); \
- mi_int4store((T+4),def_temp3); \
- }
+#define mi_int2store(T,A) { uint def_temp= (uint) (A) ;\
+ ((uchar*) (T))[1]= (uchar) (def_temp);\
+ ((uchar*) (T))[0]= (uchar) (def_temp >> 8); }
+#define mi_int3store(T,A) { /*lint -save -e734 */\
+ ulong def_temp= (ulong) (A);\
+ ((uchar*) (T))[2]= (uchar) (def_temp);\
+ ((uchar*) (T))[1]= (uchar) (def_temp >> 8);\
+ ((uchar*) (T))[0]= (uchar) (def_temp >> 16);\
+ /*lint -restore */}
+#define mi_int4store(T,A) { ulong def_temp= (ulong) (A);\
+ ((uchar*) (T))[3]= (uchar) (def_temp);\
+ ((uchar*) (T))[2]= (uchar) (def_temp >> 8);\
+ ((uchar*) (T))[1]= (uchar) (def_temp >> 16);\
+ ((uchar*) (T))[0]= (uchar) (def_temp >> 24); }
+#define mi_int5store(T,A) { ulong def_temp= (ulong) (A),\
+ def_temp2= (ulong) ((A) >> 32);\
+ ((uchar*) (T))[4]= (uchar) (def_temp);\
+ ((uchar*) (T))[3]= (uchar) (def_temp >> 8);\
+ ((uchar*) (T))[2]= (uchar) (def_temp >> 16);\
+ ((uchar*) (T))[1]= (uchar) (def_temp >> 24);\
+ ((uchar*) (T))[0]= (uchar) (def_temp2); }
+#define mi_int6store(T,A) { ulong def_temp= (ulong) (A),\
+ def_temp2= (ulong) ((A) >> 32);\
+ ((uchar*) (T))[5]= (uchar) (def_temp);\
+ ((uchar*) (T))[4]= (uchar) (def_temp >> 8);\
+ ((uchar*) (T))[3]= (uchar) (def_temp >> 16);\
+ ((uchar*) (T))[2]= (uchar) (def_temp >> 24);\
+ ((uchar*) (T))[1]= (uchar) (def_temp2);\
+ ((uchar*) (T))[0]= (uchar) (def_temp2 >> 8); }
+#define mi_int7store(T,A) { ulong def_temp= (ulong) (A),\
+ def_temp2= (ulong) ((A) >> 32);\
+ ((uchar*) (T))[6]= (uchar) (def_temp);\
+ ((uchar*) (T))[5]= (uchar) (def_temp >> 8);\
+ ((uchar*) (T))[4]= (uchar) (def_temp >> 16);\
+ ((uchar*) (T))[3]= (uchar) (def_temp >> 24);\
+ ((uchar*) (T))[2]= (uchar) (def_temp2);\
+ ((uchar*) (T))[1]= (uchar) (def_temp2 >> 8);\
+ ((uchar*) (T))[0]= (uchar) (def_temp2 >> 16); }
+#define mi_int8store(T,A) { ulong def_temp3= (ulong) (A),\
+ def_temp4= (ulong) ((A) >> 32);\
+ mi_int4store((uchar*) (T) + 0, def_temp4);\
+ mi_int4store((uchar*) (T) + 4, def_temp3); }
#ifdef WORDS_BIGENDIAN
-#define mi_float4store(T,A) { *(T)= ((byte *) &A)[0];\
- *((T)+1)=(char) ((byte *) &A)[1];\
- *((T)+2)=(char) ((byte *) &A)[2];\
- *((T)+3)=(char) ((byte *) &A)[3]; }
+#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[0];\
+ ((uchar*) (T))[1]= ((uchar*) &A)[1];\
+ ((uchar*) (T))[2]= ((uchar*) &A)[2];\
+ ((uchar*) (T))[3]= ((uchar*) &A)[3]; }
#define mi_float4get(V,M) { float def_temp;\
- ((byte*) &def_temp)[0]=(M)[0];\
- ((byte*) &def_temp)[1]=(M)[1];\
- ((byte*) &def_temp)[2]=(M)[2];\
- ((byte*) &def_temp)[3]=(M)[3];\
- (V)=def_temp; }
-
-#define mi_float8store(T,V) { *(T)= ((byte *) &V)[0];\
- *((T)+1)=(char) ((byte *) &V)[1];\
- *((T)+2)=(char) ((byte *) &V)[2];\
- *((T)+3)=(char) ((byte *) &V)[3];\
- *((T)+4)=(char) ((byte *) &V)[4];\
- *((T)+5)=(char) ((byte *) &V)[5];\
- *((T)+6)=(char) ((byte *) &V)[6];\
- *((T)+7)=(char) ((byte *) &V)[7]; }
+ ((uchar*) &def_temp)[0]= ((uchar*) (M))[0];\
+ ((uchar*) &def_temp)[1]= ((uchar*) (M))[1];\
+ ((uchar*) &def_temp)[2]= ((uchar*) (M))[2];\
+ ((uchar*) &def_temp)[3]= ((uchar*) (M))[3];\
+ (V)= def_temp; }
+
+#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[0];\
+ ((uchar*) (T))[1]= ((uchar*) &V)[1];\
+ ((uchar*) (T))[2]= ((uchar*) &V)[2];\
+ ((uchar*) (T))[3]= ((uchar*) &V)[3];\
+ ((uchar*) (T))[4]= ((uchar*) &V)[4];\
+ ((uchar*) (T))[5]= ((uchar*) &V)[5];\
+ ((uchar*) (T))[6]= ((uchar*) &V)[6];\
+ ((uchar*) (T))[7]= ((uchar*) &V)[7]; }
#define mi_float8get(V,M) { double def_temp;\
- ((byte*) &def_temp)[0]=(M)[0];\
- ((byte*) &def_temp)[1]=(M)[1];\
- ((byte*) &def_temp)[2]=(M)[2];\
- ((byte*) &def_temp)[3]=(M)[3];\
- ((byte*) &def_temp)[4]=(M)[4];\
- ((byte*) &def_temp)[5]=(M)[5];\
- ((byte*) &def_temp)[6]=(M)[6];\
- ((byte*) &def_temp)[7]=(M)[7]; \
- (V)=def_temp; }
+ ((uchar*) &def_temp)[0]= ((uchar*) (M))[0];\
+ ((uchar*) &def_temp)[1]= ((uchar*) (M))[1];\
+ ((uchar*) &def_temp)[2]= ((uchar*) (M))[2];\
+ ((uchar*) &def_temp)[3]= ((uchar*) (M))[3];\
+ ((uchar*) &def_temp)[4]= ((uchar*) (M))[4];\
+ ((uchar*) &def_temp)[5]= ((uchar*) (M))[5];\
+ ((uchar*) &def_temp)[6]= ((uchar*) (M))[6];\
+ ((uchar*) &def_temp)[7]= ((uchar*) (M))[7]; \
+ (V)= def_temp; }
#else
-#define mi_float4store(T,A) { *(T)= ((byte *) &A)[3];\
- *((T)+1)=(char) ((byte *) &A)[2];\
- *((T)+2)=(char) ((byte *) &A)[1];\
- *((T)+3)=(char) ((byte *) &A)[0]; }
+#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[3];\
+ ((uchar*) (T))[1]= ((uchar*) &A)[2];\
+ ((uchar*) (T))[2]= ((uchar*) &A)[1];\
+ ((uchar*) (T))[3]= ((uchar*) &A)[0]; }
#define mi_float4get(V,M) { float def_temp;\
- ((byte*) &def_temp)[0]=(M)[3];\
- ((byte*) &def_temp)[1]=(M)[2];\
- ((byte*) &def_temp)[2]=(M)[1];\
- ((byte*) &def_temp)[3]=(M)[0];\
- (V)=def_temp; }
+ ((uchar*) &def_temp)[0]= ((uchar*) (M))[3];\
+ ((uchar*) &def_temp)[1]= ((uchar*) (M))[2];\
+ ((uchar*) &def_temp)[2]= ((uchar*) (M))[1];\
+ ((uchar*) &def_temp)[3]= ((uchar*) (M))[0];\
+ (V)= def_temp; }
#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN)
-#define mi_float8store(T,V) { *(T)= ((byte *) &V)[3];\
- *((T)+1)=(char) ((byte *) &V)[2];\
- *((T)+2)=(char) ((byte *) &V)[1];\
- *((T)+3)=(char) ((byte *) &V)[0];\
- *((T)+4)=(char) ((byte *) &V)[7];\
- *((T)+5)=(char) ((byte *) &V)[6];\
- *((T)+6)=(char) ((byte *) &V)[5];\
- *((T)+7)=(char) ((byte *) &V)[4];}
+#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[3];\
+ ((uchar*) (T))[1]= ((uchar*) &V)[2];\
+ ((uchar*) (T))[2]= ((uchar*) &V)[1];\
+ ((uchar*) (T))[3]= ((uchar*) &V)[0];\
+ ((uchar*) (T))[4]= ((uchar*) &V)[7];\
+ ((uchar*) (T))[5]= ((uchar*) &V)[6];\
+ ((uchar*) (T))[6]= ((uchar*) &V)[5];\
+ ((uchar*) (T))[7]= ((uchar*) &V)[4];}
#define mi_float8get(V,M) { double def_temp;\
- ((byte*) &def_temp)[0]=(M)[3];\
- ((byte*) &def_temp)[1]=(M)[2];\
- ((byte*) &def_temp)[2]=(M)[1];\
- ((byte*) &def_temp)[3]=(M)[0];\
- ((byte*) &def_temp)[4]=(M)[7];\
- ((byte*) &def_temp)[5]=(M)[6];\
- ((byte*) &def_temp)[6]=(M)[5];\
- ((byte*) &def_temp)[7]=(M)[4];\
- (V)=def_temp; }
+ ((uchar*) &def_temp)[0]= ((uchar*) (M))[3];\
+ ((uchar*) &def_temp)[1]= ((uchar*) (M))[2];\
+ ((uchar*) &def_temp)[2]= ((uchar*) (M))[1];\
+ ((uchar*) &def_temp)[3]= ((uchar*) (M))[0];\
+ ((uchar*) &def_temp)[4]= ((uchar*) (M))[7];\
+ ((uchar*) &def_temp)[5]= ((uchar*) (M))[6];\
+ ((uchar*) &def_temp)[6]= ((uchar*) (M))[5];\
+ ((uchar*) &def_temp)[7]= ((uchar*) (M))[4];\
+ (V)= def_temp; }
#else
-#define mi_float8store(T,V) { *(T)= ((byte *) &V)[7];\
- *((T)+1)=(char) ((byte *) &V)[6];\
- *((T)+2)=(char) ((byte *) &V)[5];\
- *((T)+3)=(char) ((byte *) &V)[4];\
- *((T)+4)=(char) ((byte *) &V)[3];\
- *((T)+5)=(char) ((byte *) &V)[2];\
- *((T)+6)=(char) ((byte *) &V)[1];\
- *((T)+7)=(char) ((byte *) &V)[0];}
+#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((uchar*) &V)[7];\
+ ((uchar*) (T))[1]= ((uchar*) &V)[6];\
+ ((uchar*) (T))[2]= ((uchar*) &V)[5];\
+ ((uchar*) (T))[3]= ((uchar*) &V)[4];\
+ ((uchar*) (T))[4]= ((uchar*) &V)[3];\
+ ((uchar*) (T))[5]= ((uchar*) &V)[2];\
+ ((uchar*) (T))[6]= ((uchar*) &V)[1];\
+ ((uchar*) (T))[7]= ((uchar*) &V)[0];}
#define mi_float8get(V,M) { double def_temp;\
- ((byte*) &def_temp)[0]=(M)[7];\
- ((byte*) &def_temp)[1]=(M)[6];\
- ((byte*) &def_temp)[2]=(M)[5];\
- ((byte*) &def_temp)[3]=(M)[4];\
- ((byte*) &def_temp)[4]=(M)[3];\
- ((byte*) &def_temp)[5]=(M)[2];\
- ((byte*) &def_temp)[6]=(M)[1];\
- ((byte*) &def_temp)[7]=(M)[0];\
- (V)=def_temp; }
+ ((uchar*) &def_temp)[0]= ((uchar*) (M))[7];\
+ ((uchar*) &def_temp)[1]= ((uchar*) (M))[6];\
+ ((uchar*) &def_temp)[2]= ((uchar*) (M))[5];\
+ ((uchar*) &def_temp)[3]= ((uchar*) (M))[4];\
+ ((uchar*) &def_temp)[4]= ((uchar*) (M))[3];\
+ ((uchar*) &def_temp)[5]= ((uchar*) (M))[2];\
+ ((uchar*) &def_temp)[6]= ((uchar*) (M))[1];\
+ ((uchar*) &def_temp)[7]= ((uchar*) (M))[0];\
+ (V)= def_temp; }
#endif /* __FLOAT_WORD_ORDER */
#endif /* WORDS_BIGENDIAN */
/* Fix to avoid warnings when sizeof(ha_rows) == sizeof(long) */
#ifdef BIG_TABLES
-#define mi_rowstore(T,A) mi_int8store(T,A)
-#define mi_rowkorr(T) mi_uint8korr(T)
+#define mi_rowstore(T,A) mi_int8store(T, A)
+#define mi_rowkorr(T) mi_uint8korr(T)
#else
-#define mi_rowstore(T,A) { mi_int4store(T,0); mi_int4store(((T)+4),A); }
-#define mi_rowkorr(T) mi_uint4korr((T)+4)
+#define mi_rowstore(T,A) { mi_int4store(T, 0);\
+ mi_int4store(((uchar*) (T) + 4), A); }
+#define mi_rowkorr(T) mi_uint4korr((uchar*) (T) + 4)
#endif
#if SIZEOF_OFF_T > 4
-#define mi_sizestore(T,A) mi_int8store(T,A)
-#define mi_sizekorr(T) mi_uint8korr(T)
+#define mi_sizestore(T,A) mi_int8store(T, A)
+#define mi_sizekorr(T) mi_uint8korr(T)
#else
-#define mi_sizestore(T,A) { if ((A) == HA_OFFSET_ERROR) bfill((char*) (T),8,255); else { mi_int4store((T),0); mi_int4store(((T)+4),A); }}
-#define mi_sizekorr(T) mi_uint4korr((T)+4)
+#define mi_sizestore(T,A) { if ((A) == HA_OFFSET_ERROR)\
+ bfill((char*) (T), 8, 255);\
+ else { mi_int4store((T), 0);\
+ mi_int4store(((T) + 4), A); }}
+#define mi_sizekorr(T) mi_uint4korr((uchar*) (T) + 4)
#endif
diff --git a/include/mysql_com.h b/include/mysql_com.h
index 47231ef31c6..fa25db5f11a 100644
--- a/include/mysql_com.h
+++ b/include/mysql_com.h
@@ -223,25 +223,32 @@ enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM
#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY
+
+/* Shutdown/kill enums and constants */
+
+/* Bits for THD::killable. */
+#define KILLABLE_CONNECT (unsigned char)(1 << 0)
+#define KILLABLE_TRANS (unsigned char)(1 << 1)
+#define KILLABLE_LOCK_TABLE (unsigned char)(1 << 2)
+#define KILLABLE_UPDATE (unsigned char)(1 << 3)
+
enum enum_shutdown_level {
/*
- We want levels to be in growing order of hardness. So we leave room
- for future intermediate levels. For now, escalating one level is += 10;
- later if we insert new levels in between we will need a function
- next_shutdown_level(level). Note that DEFAULT does not respect the
- growing property.
+ We want levels to be in growing order of hardness (because we use number
+ comparisons). Note that DEFAULT does not respect the growing property, but
+ it's ok.
*/
- SHUTDOWN_DEFAULT= 0, /* mapped to WAIT_ALL_BUFFERS for now */
- /*
- Here is the list in growing order (the next does the previous plus
- something). WAIT_ALL_BUFFERS is what we have now. Others are "this MySQL
- server does not support this shutdown level yet".
- */
- SHUTDOWN_WAIT_CONNECTIONS= 10, /* wait for existing connections to finish */
- SHUTDOWN_WAIT_TRANSACTIONS= 20, /* wait for existing trans to finish */
- SHUTDOWN_WAIT_STATEMENTS= 30, /* wait for existing updating stmts to finish */
- SHUTDOWN_WAIT_ALL_BUFFERS= 40, /* flush InnoDB buffers */
- SHUTDOWN_WAIT_CRITICAL_BUFFERS= 50, /* flush MyISAM buffs (no corruption) */
+ SHUTDOWN_DEFAULT= 0,
+ /* wait for existing connections to finish */
+ SHUTDOWN_WAIT_CONNECTIONS= KILLABLE_CONNECT,
+ /* wait for existing trans to finish */
+ SHUTDOWN_WAIT_TRANSACTIONS= KILLABLE_TRANS,
+ /* wait for existing updates to finish (=> no partial MyISAM update) */
+ SHUTDOWN_WAIT_UPDATES= KILLABLE_UPDATE,
+ /* flush InnoDB buffers and other storage engines' buffers*/
+ SHUTDOWN_WAIT_ALL_BUFFERS= (KILLABLE_UPDATE << 1),
+ /* don't flush InnoDB buffers, flush other storage engines' buffers*/
+ SHUTDOWN_WAIT_CRITICAL_BUFFERS= (KILLABLE_UPDATE << 1) + 1,
/* Now the 2 levels of the KILL command */
#if MYSQL_VERSION_ID >= 50000
KILL_QUERY= 254,
@@ -249,6 +256,10 @@ enum enum_shutdown_level {
KILL_CONNECTION= 255
};
+/* Same value and type (0, enum_shutdown_level) but not same meaning */
+#define NOT_KILLED SHUTDOWN_DEFAULT
+
+
/* options for mysql_set_option */
enum enum_mysql_set_option
{
diff --git a/include/mysql_time.h b/include/mysql_time.h
index 943d018fc14..ec67d60dea5 100644
--- a/include/mysql_time.h
+++ b/include/mysql_time.h
@@ -17,7 +17,14 @@
#ifndef _mysql_time_h_
#define _mysql_time_h_
-/* Time declarations shared between server and client library */
+/*
+ Time declarations shared between the server and client API:
+ you should not add anything to this header unless it's used
+ (and hence should be visible) in mysql.h.
+ If you're looking for a place to add new time-related declaration,
+ it's most likely my_time.h. See also "C API Handling of Date
+ and Time Values" chapter in documentation.
+*/
enum enum_mysql_timestamp_type
{
diff --git a/include/mysqld_error.h b/include/mysqld_error.h
index 0d752b0daf1..4d65515d6ce 100644
--- a/include/mysqld_error.h
+++ b/include/mysqld_error.h
@@ -317,4 +317,5 @@
#define ER_UNKNOWN_TIME_ZONE 1298
#define ER_WARN_INVALID_TIMESTAMP 1299
#define ER_INVALID_CHARACTER_STRING 1300
-#define ER_ERROR_MESSAGES 301
+#define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301
+#define ER_ERROR_MESSAGES 302