diff options
-rw-r--r-- | Docs/manual.texi | 16 | ||||
-rw-r--r-- | configure.in | 8 | ||||
-rw-r--r-- | extra/resolveip.c | 2 | ||||
-rw-r--r-- | include/my_net.h | 2 | ||||
-rw-r--r-- | libmysql/libmysql.c | 5 | ||||
-rw-r--r-- | mysql-test/r/func_math.result | 4 | ||||
-rw-r--r-- | mysql-test/t/func_math.test | 2 | ||||
-rw-r--r-- | mysys/my_gethostbyname.c | 2 | ||||
-rw-r--r-- | sql/item_func.cc | 7 | ||||
-rw-r--r-- | sql/sql_show.cc | 4 |
10 files changed, 40 insertions, 12 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 431b6911393..d8b63c71726 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -31150,6 +31150,17 @@ mysql> select TRUNCATE(1.999,1); -> 1.9 mysql> select TRUNCATE(1.999,0); -> 1 +mysql> select TRUNCATE(-1,999,1); + -> -1.9 +@end example + +Starting from MySQL 3.23.51 all numbers are rounded towards zero. + +If @code{D} is negative, then the whole part of the number is zeroed out: + +@example +mysql> select truncate(122,-2); + -> 100 @end example Note that as decimal numbers are normally not stored as exact numbers in @@ -46916,6 +46927,11 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.51 @itemize @bullet @item +Cleaned up @code{NULL} handling for default values in @code{DESCRIBE +table_name}. +@item +Fixed @code{truncate()} to round up negative values to the nearest integer. +@item Remove end space from @code{enum} values. (This fixed a problem with @code{SHOW CREATE TABLE}). @item diff --git a/configure.in b/configure.in index 183de44fdf2..00c986c4006 100644 --- a/configure.in +++ b/configure.in @@ -1552,7 +1552,7 @@ then fi AC_TRY_COMPILE( [#undef inline -#if !defined(SCO) && !defined(__osf__) +#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) #define _REENTRANT #endif #include <pthread.h> @@ -1585,7 +1585,7 @@ then fi AC_TRY_COMPILE( [#undef inline -#if !defined(SCO) && !defined(__osf__) +#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) #define _REENTRANT #endif #include <pthread.h> @@ -1617,7 +1617,7 @@ then fi AC_TRY_COMPILE( [#undef inline -#if !defined(SCO) && !defined(__osf__) +#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) #define _REENTRANT #endif #include <pthread.h> @@ -1643,7 +1643,7 @@ then # Check definition of pthread_getspecific AC_CACHE_CHECK("args to pthread_getspecific", mysql_cv_getspecific_args, AC_TRY_COMPILE( -[#if !defined(SCO) && !defined(__osf__) +[#if !defined(SCO) && !defined(__osf__) && !defined(_REENTRANT) #define _REENTRANT #endif #define _POSIX_PTHREAD_SEMANTICS diff --git a/extra/resolveip.c b/extra/resolveip.c index 9bab5846c03..ba2db0a4d65 100644 --- a/extra/resolveip.c +++ b/extra/resolveip.c @@ -20,7 +20,6 @@ #include <my_global.h> #include <m_ctype.h> -#include <my_net.h> #include <my_sys.h> #include <m_string.h> #include <sys/types.h> @@ -30,6 +29,7 @@ #endif #include <arpa/inet.h> #include <netdb.h> +#include <my_net.h> #include <getopt.h> #if !defined(_AIX) && !defined(HAVE_UNIXWARE7_THREADS) && !defined(HAVE_UNIXWARE7_POSIX) && !defined(h_errno) diff --git a/include/my_net.h b/include/my_net.h index 6a6e2aecc27..a4910d8af1d 100644 --- a/include/my_net.h +++ b/include/my_net.h @@ -53,7 +53,7 @@ struct hostent *my_gethostbyname_r(const char *name, struct hostent *result, char *buffer, int buflen, int *h_errnop); #define my_gethostbyname_r_free() -#if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) +#if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) && !defined(HPUX) #define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) #endif /* !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */ diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 4190a4c37f4..bab6d304094 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -180,8 +180,13 @@ static int connect2(my_socket s, const struct sockaddr *name, uint namelen, { tv.tv_sec = (long) timeout; tv.tv_usec = 0; +#if defined(HPUX) && defined(THREAD) + if ((res = select(s+1, NULL, (int*) &sfds, NULL, &tv)) >= 0) + break; +#else if ((res = select(s+1, NULL, &sfds, NULL, &tv)) >= 0) break; +#endif now_time=time(NULL); timeout-= (uint) (now_time - start_time); if (errno != EINTR || (int) timeout <= 0) diff --git a/mysql-test/r/func_math.result b/mysql-test/r/func_math.result index cee67a3e25c..e2723311682 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -2,8 +2,8 @@ floor(5.5) floor(-5.5) 5 -6 ceiling(5.5) ceiling(-5.5) 6 -5 -truncate(52.64,1) truncate(52.64,2) truncate(52.64,-1) truncate(52.64,-2) -52.6 52.64 50 0 +truncate(52.64,1) truncate(52.64,2) truncate(52.64,-1) truncate(52.64,-2) truncate(-52.64,1) truncate(-52.64,-1) +52.6 52.64 50 0 -52.6 -50 round(5.5) round(-5.5) 6 -6 round(5.64,1) round(5.64,2) round(5.64,-1) round(5.64,-2) diff --git a/mysql-test/t/func_math.test b/mysql-test/t/func_math.test index ab7990eea79..5299897d0f0 100644 --- a/mysql-test/t/func_math.test +++ b/mysql-test/t/func_math.test @@ -4,7 +4,7 @@ select floor(5.5),floor(-5.5); select ceiling(5.5),ceiling(-5.5); -select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2); +select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2), truncate(-52.64,1),truncate(-52.64,-1); select round(5.5),round(-5.5); select round(5.64,1),round(5.64,2),round(5.64,-1),round(5.64,-2); select abs(-10), sign(-5), sign(5), sign(0); diff --git a/mysys/my_gethostbyname.c b/mysys/my_gethostbyname.c index 19381734e83..f30591d9fe3 100644 --- a/mysys/my_gethostbyname.c +++ b/mysys/my_gethostbyname.c @@ -20,10 +20,10 @@ #include "mysys_priv.h" #include "my_pthread.h" #include <assert.h> -#include <my_net.h> #if !defined(MSDOS) && !defined(__WIN__) #include <netdb.h> #endif +#include <my_net.h> /* This file is not needed if my_gethostbyname_r is a macro */ #if !defined(my_gethostbyname_r) diff --git a/sql/item_func.cc b/sql/item_func.cc index 9180cccabcf..b73436afbcf 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -601,7 +601,12 @@ double Item_func_round::val() log_10[abs_dec] : pow(10.0,(double) abs_dec)); if (truncate) - return dec < 0 ? floor(value/tmp)*tmp : floor(value*tmp)/tmp; + { + if (value >= 0) + return dec < 0 ? floor(value/tmp)*tmp : floor(value*tmp)/tmp; + else + return dec < 0 ? ceil(value/tmp)*tmp : ceil(value*tmp)/tmp; + } return dec < 0 ? rint(value/tmp)*tmp : rint(value*tmp)/tmp; } diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 8cfac1675b0..5db2df85fbf 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -431,6 +431,7 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild, TABLE *table; handler *file; char tmp[MAX_FIELD_WIDTH]; + Item *item; DBUG_ENTER("mysqld_show_fields"); DBUG_PRINT("enter",("db: %s table: %s",table_list->db, table_list->real_name)); @@ -449,7 +450,8 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild, field_list.push_back(new Item_empty_string("Type",40)); field_list.push_back(new Item_empty_string("Null",1)); field_list.push_back(new Item_empty_string("Key",3)); - field_list.push_back(new Item_empty_string("Default",NAME_LEN)); + field_list.push_back(item=new Item_empty_string("Default",NAME_LEN)); + item->maybe_null=1; field_list.push_back(new Item_empty_string("Extra",20)); if (verbose) field_list.push_back(new Item_empty_string("Privileges",80)); |