summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Docs/manual.texi16
-rw-r--r--configure.in8
-rw-r--r--extra/resolveip.c2
-rw-r--r--include/my_net.h2
-rw-r--r--include/my_pthread.h2
-rw-r--r--libmysql/libmysql.c5
-rw-r--r--mysql-test/r/func_math.result6
-rw-r--r--mysql-test/t/func_math.test2
-rw-r--r--mysys/my_gethostbyname.c2
-rw-r--r--sql/ha_innodb.cc1
-rw-r--r--sql/item_func.cc7
-rw-r--r--sql/mysqld.cc2
-rw-r--r--sql/sql_show.cc4
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));