summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-05-31 15:22:38 +0300
committerunknown <monty@hundin.mysql.fi>2002-05-31 15:22:38 +0300
commit0ceaf6d2c28f4f639a0ba5c329964e4dbe71cb7f (patch)
tree85c51f351e6086eebde739636a64e7ab09b85277
parent2c058d84784c67bd514ad6c879333d2c9aac8161 (diff)
downloadmariadb-git-0ceaf6d2c28f4f639a0ba5c329964e4dbe71cb7f.tar.gz
Portability fixes for SCO and HPUX
Change TRUNCATE(number) to truncate towards zero for negative numbers Fix NULL handling for DESCRIBE table_name Docs/manual.texi: Update of TRUNCATE() information configure.in: Fix for HPUX extra/resolveip.c: Fix for SCO include/my_net.h: Fix for HPUX libmysql/libmysql.c: Removed warning on HPUX 10.20 mysql-test/r/func_math.result: Test of new TRUNCATE handling mysql-test/t/func_math.test: Test of new TRUNCATE handling mysys/my_gethostbyname.c: Portability fix sql/item_func.cc: Change TRUNCATE(number) to truncate towards zero for negative numbers sql/sql_show.cc: Fix NULL handling for DESCRIBE table_name
-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--libmysql/libmysql.c5
-rw-r--r--mysql-test/r/func_math.result4
-rw-r--r--mysql-test/t/func_math.test2
-rw-r--r--mysys/my_gethostbyname.c2
-rw-r--r--sql/item_func.cc7
-rw-r--r--sql/sql_show.cc4
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));