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-- | include/my_pthread.h | 2 | ||||
-rw-r--r-- | libmysql/libmysql.c | 5 | ||||
-rw-r--r-- | mysql-test/r/func_math.result | 6 | ||||
-rw-r--r-- | mysql-test/t/func_math.test | 2 | ||||
-rw-r--r-- | mysys/my_gethostbyname.c | 2 | ||||
-rw-r--r-- | sql/ha_innodb.cc | 1 | ||||
-rw-r--r-- | sql/item_func.cc | 7 | ||||
-rw-r--r-- | sql/mysqld.cc | 2 | ||||
-rw-r--r-- | sql/sql_show.cc | 4 |
13 files changed, 43 insertions, 16 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 305ed69fce0..4362aaa3569 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -31379,6 +31379,17 @@ mysql> SELECT 'David!' LIKE 'David_'; -> 1 mysql> SELECT 'David!' LIKE '%D%v%'; -> 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 To test for literal instances of a wildcard character, precede the character @@ -47075,6 +47086,11 @@ the following things: @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 Take down the @code{mysqld} daemon with @code{mysqladmin shutdown}, run @code{myisamchk --silent --force */*.MYI} on all tables, and restart the @code{mysqld} daemon. This will ensure that you are running from a clean diff --git a/configure.in b/configure.in index c199da5ee7c..90d534e9e18 100644 --- a/configure.in +++ b/configure.in @@ -1601,7 +1601,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> @@ -1634,7 +1634,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> @@ -1666,7 +1666,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> @@ -1692,7 +1692,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 6665ceebf1d..e380d920e9f 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 <my_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 77d5f3ac01f..2f5743923cf 100644 --- a/include/my_net.h +++ b/include/my_net.h @@ -84,7 +84,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/include/my_pthread.h b/include/my_pthread.h index 62088fc56cb..fda31b9d4f2 100644 --- a/include/my_pthread.h +++ b/include/my_pthread.h @@ -349,7 +349,7 @@ extern void my_pthread_attr_setprio(pthread_attr_t *attr, int priority); #undef HAVE_GETHOSTBYADDR_R /* No definition */ #endif -#if defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) +#if defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) && !defined(SAFE_MUTEX) extern int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, struct timespec *abstime); diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 88e003bc2c7..73fc1feb472 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -217,8 +217,13 @@ int my_connect(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 fce98a58682..b961c839510 100644 --- a/mysql-test/r/func_math.result +++ b/mysql-test/r/func_math.result @@ -4,10 +4,8 @@ floor(5.5) floor(-5.5) select ceiling(5.5),ceiling(-5.5); ceiling(5.5) ceiling(-5.5) 6 -5 -select truncate(52.64,1),truncate(52.64,2),truncate(52.64,-1),truncate(52.64,-2); -truncate(52.64,1) truncate(52.64,2) truncate(52.64,-1) truncate(52.64,-2) -52.6 52.64 50 0 -select round(5.5),round(-5.5); +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 select 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 76a0a780dd3..898ca694121 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/ha_innodb.cc b/sql/ha_innodb.cc index c85d74ce432..48a4513cd2a 100644 --- a/sql/ha_innodb.cc +++ b/sql/ha_innodb.cc @@ -655,6 +655,7 @@ innobase_close_connection( (thd->transaction.all.innobase_tid)); trx_free_for_mysql((trx_t*) (thd->transaction.all.innobase_tid)); + thd->transaction.all.innobase_tid = NULL; } return(0); diff --git a/sql/item_func.cc b/sql/item_func.cc index cffa92919ba..4a8c301e894 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -627,7 +627,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/mysqld.cc b/sql/mysqld.cc index 9c0d6bffe6c..627888075c6 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -2407,7 +2407,7 @@ static void create_new_thread(THD *thd) inline void kill_broken_server() { /* hack to get around signals ignored in syscalls for problem OS's */ - if (unix_sock == INVALID_SOCKET || ip_sock ==INVALID_SOCKET) + if (unix_sock == INVALID_SOCKET || (!opt_disable_networking && ip_sock ==INVALID_SOCKET)) { select_thread_in_use = 0; kill_server((void*)MYSQL_KILL_SIGNAL); /* never returns */ diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 9fb1e88aeea..e0ce0f0f793 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -432,6 +432,7 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild, TABLE *table; handler *file; char tmp[MAX_FIELD_WIDTH]; + Item *item; CONVERT *convert=thd->convert_set; DBUG_ENTER("mysqld_show_fields"); DBUG_PRINT("enter",("db: %s table: %s",table_list->db, @@ -451,7 +452,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)); |