Commit a3e4f390 authored by unknown's avatar unknown

Merge paul@bk-internal.mysql.com:/home/bk/mysql-5.0

into  frost.snake.net:/Users/paul/bk/mysql-5.0

parents 9cee62af 49a49207
...@@ -97,36 +97,35 @@ tags: ...@@ -97,36 +97,35 @@ tags:
support-files/build-tags support-files/build-tags
.PHONY: init-db bin-dist .PHONY: init-db bin-dist
# Test installation. Ports are configurable from the environment. # Target 'test' will run the regression test suite using the built server.
#
MYSQL_TEST_MANAGER_PORT = 9305 # If you are running in a shared environment, users can avoid clashing
MYSQL_TEST_MASTER_PORT = 9306 # port numbers by setting individual small numbers 1-100 to the
MYSQL_TEST_SLAVE_PORT = 9308 # environment variable MTR_BUILD_THREAD. The script "mysql-test-run"
MYSQL_TEST_NDB_PORT = 9350 # will then calculate the various port numbers it needs from this,
MYSQL_TEST_RUN_ARGS = --manager-port=$(MYSQL_TEST_MANAGER_PORT) \ # making sure each user use different ports.
--master_port=$(MYSQL_TEST_MASTER_PORT) \
--slave_port=$(MYSQL_TEST_SLAVE_PORT) \
--ndbcluster_port=$(MYSQL_TEST_NDB_PORT)
test: test:
cd mysql-test ; \ cd mysql-test ; \
./mysql-test-run $(MYSQL_TEST_RUN_ARGS) && \ ./mysql-test-run && \
./mysql-test-run $(MYSQL_TEST_RUN_ARGS) --ps-protocol ./mysql-test-run --ps-protocol
test-force: test-force:
cd mysql-test ; \ cd mysql-test; \
./mysql-test-run $(MYSQL_TEST_RUN_ARGS) --force ; \ ./mysql-test-run --force ; \
./mysql-test-run $(MYSQL_TEST_RUN_ARGS) --ps-protocol --force ./mysql-test-run --ps-protocol --force
# We are testing a new Perl version of the test script
test-pl: test-pl:
cd mysql-test ; \ cd mysql-test; \
./mysql-test-run.pl $(MYSQL_TEST_RUN_ARGS) && \ ./mysql-test-run.pl && \
./mysql-test-run.pl $(MYSQL_TEST_RUN_ARGS) --ps-protocol ./mysql-test-run.pl --ps-protocol
test-force-pl: test-force-pl:
cd mysql-test ; \ cd mysql-test; \
./mysql-test-run.pl $(MYSQL_TEST_RUN_ARGS) --force ; \ ./mysql-test-run.pl --force ; \
./mysql-test-run.pl $(MYSQL_TEST_RUN_ARGS) --ps-protocol --force ./mysql-test-run.pl --ps-protocol --force
# Don't update the files from bitkeeper # Don't update the files from bitkeeper
%::SCCS/s.% %::SCCS/s.%
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
#endif #endif
#ifdef __cplusplus #ifdef __cplusplus
#define EXTERN_C extern "C" #define EXTERNC extern "C"
extern "C" { extern "C" {
#else #else
#define EXTERN_C #define EXTERNC
#endif /* __cplusplus */ #endif /* __cplusplus */
#if defined(__WIN__) || defined(OS2) #if defined(__WIN__) || defined(OS2)
...@@ -80,10 +80,10 @@ struct timespec { /* For pthread_cond_timedwait() */ ...@@ -80,10 +80,10 @@ struct timespec { /* For pthread_cond_timedwait() */
typedef int pthread_mutexattr_t; typedef int pthread_mutexattr_t;
#define win_pthread_self my_thread_var->pthread_self #define win_pthread_self my_thread_var->pthread_self
#ifdef OS2 #ifdef OS2
#define pthread_handler_t EXTERN_C void * _Optlink #define pthread_handler_t EXTERNC void * _Optlink
typedef void * (_Optlink *pthread_handler)(void *); typedef void * (_Optlink *pthread_handler)(void *);
#else #else
#define pthread_handler_t EXTERN_C void * __cdecl #define pthread_handler_t EXTERNC void * __cdecl
typedef void * (__cdecl *pthread_handler)(void *); typedef void * (__cdecl *pthread_handler)(void *);
#endif #endif
...@@ -187,7 +187,7 @@ typedef int pthread_attr_t; /* Needed by Unixware 7.0.0 */ ...@@ -187,7 +187,7 @@ typedef int pthread_attr_t; /* Needed by Unixware 7.0.0 */
#define pthread_key_create(A,B) thr_keycreate((A),(B)) #define pthread_key_create(A,B) thr_keycreate((A),(B))
#define pthread_key_delete(A) thr_keydelete(A) #define pthread_key_delete(A) thr_keydelete(A)
#define pthread_handler_t EXTERN_C void * #define pthread_handler_t EXTERNC void *
#define pthread_key(T,V) pthread_key_t V #define pthread_key(T,V) pthread_key_t V
void * my_pthread_getspecific_imp(pthread_key_t key); void * my_pthread_getspecific_imp(pthread_key_t key);
...@@ -265,7 +265,7 @@ extern int my_pthread_getprio(pthread_t thread_id); ...@@ -265,7 +265,7 @@ extern int my_pthread_getprio(pthread_t thread_id);
#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) #define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V))
#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) #define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V))
#define pthread_detach_this_thread() #define pthread_detach_this_thread()
#define pthread_handler_t EXTERN_C void * #define pthread_handler_t EXTERNC void *
typedef void *(* pthread_handler)(void *); typedef void *(* pthread_handler)(void *);
/* Test first for RTS or FSU threads */ /* Test first for RTS or FSU threads */
......
...@@ -216,6 +216,25 @@ NDBCLUSTER_PORT=9350 ...@@ -216,6 +216,25 @@ NDBCLUSTER_PORT=9350
MYSQL_MANAGER_PW_FILE=$MYSQL_TEST_DIR/var/tmp/manager.pwd MYSQL_MANAGER_PW_FILE=$MYSQL_TEST_DIR/var/tmp/manager.pwd
MYSQL_MANAGER_LOG=$MYSQL_TEST_DIR/var/log/manager.log MYSQL_MANAGER_LOG=$MYSQL_TEST_DIR/var/log/manager.log
MYSQL_MANAGER_USER=root MYSQL_MANAGER_USER=root
#
# To make it easier for different devs to work on the same host,
# an environment variable can be used to control all ports. A small
# number is to be used, 0 - 16 or similar.
#
if [ -n "$MTR_BUILD_THREAD" ] ; then
MASTER_MYPORT=`expr $MTR_BUILD_THREAD '*' 40 + 8120`
MYSQL_MANAGER_PORT=`expr $MASTER_MYPORT + 2`
SLAVE_MYPORT=`expr $MASTER_MYPORT + 16`
NDBCLUSTER_PORT=`expr $MASTER_MYPORT + 24`
echo "Using MTR_BUILD_THREAD = $MTR_BUILD_THREAD"
echo "Using MASTER_MYPORT = $MASTER_MYPORT"
echo "Using MYSQL_MANAGER_PORT = $MYSQL_MANAGER_PORT"
echo "Using SLAVE_MYPORT = $SLAVE_MYPORT"
echo "Using NDBCLUSTER_PORT = $NDBCLUSTER_PORT"
fi
NO_SLAVE=0 NO_SLAVE=0
USER_TEST= USER_TEST=
FAILED_CASES= FAILED_CASES=
......
...@@ -760,3 +760,54 @@ call t_sysdate(); ...@@ -760,3 +760,54 @@ call t_sysdate();
@a != @b @a != @b
1 1
drop procedure t_sysdate; drop procedure t_sysdate;
select timestampdiff(month,'2004-09-11','2004-09-11');
timestampdiff(month,'2004-09-11','2004-09-11')
0
select timestampdiff(month,'2004-09-11','2005-09-11');
timestampdiff(month,'2004-09-11','2005-09-11')
12
select timestampdiff(month,'2004-09-11','2006-09-11');
timestampdiff(month,'2004-09-11','2006-09-11')
24
select timestampdiff(month,'2004-09-11','2007-09-11');
timestampdiff(month,'2004-09-11','2007-09-11')
36
select timestampdiff(month,'2005-09-11','2004-09-11');
timestampdiff(month,'2005-09-11','2004-09-11')
-12
select timestampdiff(month,'2005-09-11','2003-09-11');
timestampdiff(month,'2005-09-11','2003-09-11')
-24
select timestampdiff(month,'2004-02-28','2005-02-28');
timestampdiff(month,'2004-02-28','2005-02-28')
12
select timestampdiff(month,'2004-02-29','2005-02-28');
timestampdiff(month,'2004-02-29','2005-02-28')
11
select timestampdiff(month,'2004-02-28','2005-02-28');
timestampdiff(month,'2004-02-28','2005-02-28')
12
select timestampdiff(month,'2004-03-29','2005-03-28');
timestampdiff(month,'2004-03-29','2005-03-28')
11
select timestampdiff(month,'2003-02-28','2004-02-29');
timestampdiff(month,'2003-02-28','2004-02-29')
12
select timestampdiff(month,'2003-02-28','2005-02-28');
timestampdiff(month,'2003-02-28','2005-02-28')
24
select timestampdiff(month,'1999-09-11','2001-10-10');
timestampdiff(month,'1999-09-11','2001-10-10')
24
select timestampdiff(month,'1999-09-11','2001-9-11');
timestampdiff(month,'1999-09-11','2001-9-11')
24
select timestampdiff(year,'1999-09-11','2001-9-11');
timestampdiff(year,'1999-09-11','2001-9-11')
2
select timestampdiff(year,'2004-02-28','2005-02-28');
timestampdiff(year,'2004-02-28','2005-02-28')
1
select timestampdiff(year,'2004-02-29','2005-02-28');
timestampdiff(year,'2004-02-29','2005-02-28')
0
...@@ -404,4 +404,28 @@ delimiter ;// ...@@ -404,4 +404,28 @@ delimiter ;//
call t_sysdate(); call t_sysdate();
drop procedure t_sysdate; drop procedure t_sysdate;
#
# Bug #13534: timestampdiff() returned incorrect results across leap years
#
select timestampdiff(month,'2004-09-11','2004-09-11');
select timestampdiff(month,'2004-09-11','2005-09-11');
select timestampdiff(month,'2004-09-11','2006-09-11');
select timestampdiff(month,'2004-09-11','2007-09-11');
select timestampdiff(month,'2005-09-11','2004-09-11');
select timestampdiff(month,'2005-09-11','2003-09-11');
select timestampdiff(month,'2004-02-28','2005-02-28');
select timestampdiff(month,'2004-02-29','2005-02-28');
select timestampdiff(month,'2004-02-28','2005-02-28');
select timestampdiff(month,'2004-03-29','2005-03-28');
select timestampdiff(month,'2003-02-28','2004-02-29');
select timestampdiff(month,'2003-02-28','2005-02-28');
select timestampdiff(month,'1999-09-11','2001-10-10');
select timestampdiff(month,'1999-09-11','2001-9-11');
select timestampdiff(year,'1999-09-11','2001-9-11');
select timestampdiff(year,'2004-02-28','2005-02-28');
select timestampdiff(year,'2004-02-29','2005-02-28');
# End of 5.0 tests # End of 5.0 tests
...@@ -2723,16 +2723,16 @@ longlong Item_func_timestamp_diff::val_int() ...@@ -2723,16 +2723,16 @@ longlong Item_func_timestamp_diff::val_int()
int_type == INTERVAL_QUARTER || int_type == INTERVAL_QUARTER ||
int_type == INTERVAL_MONTH) int_type == INTERVAL_MONTH)
{ {
uint year; uint year_beg, year_end, month_beg, month_end, day_beg, day_end;
uint year_beg, year_end, month_beg, month_end; uint years= 0;
uint diff_days= (uint) (seconds/86400L);
uint diff_years= 0;
if (neg == -1) if (neg == -1)
{ {
year_beg= ltime2.year; year_beg= ltime2.year;
year_end= ltime1.year; year_end= ltime1.year;
month_beg= ltime2.month; month_beg= ltime2.month;
month_end= ltime1.month; month_end= ltime1.month;
day_beg= ltime2.day;
day_end= ltime1.day;
} }
else else
{ {
...@@ -2740,53 +2740,32 @@ longlong Item_func_timestamp_diff::val_int() ...@@ -2740,53 +2740,32 @@ longlong Item_func_timestamp_diff::val_int()
year_end= ltime2.year; year_end= ltime2.year;
month_beg= ltime1.month; month_beg= ltime1.month;
month_end= ltime2.month; month_end= ltime2.month;
} day_beg= ltime1.day;
/* calc years*/ day_end= ltime2.day;
for (year= year_beg;year < year_end; year++)
{
uint days=calc_days_in_year(year);
if (days > diff_days)
break;
diff_days-= days;
diff_years++;
} }
/* calc months; Current year is in the 'year' variable */ /* calc years */
month_beg--; /* Change months to be 0-11 for easier calculation */ years= year_end - year_beg;
month_end--; if (month_end < month_beg || (month_end == month_beg && day_end < day_beg))
years-= 1;
months= 12*diff_years; /* calc months */
while (month_beg != month_end) months= 12*years;
{ if (month_end < month_beg || (month_end == month_beg && day_end < day_beg))
uint m_days= (uint) days_in_month[month_beg]; months+= 12 - (month_beg - month_end);
if (month_beg == 1) else
{ months+= (month_end - month_beg);
/* This is only calculated once so there is no reason to cache it*/ if (day_end < day_beg)
uint leap= (uint) ((year & 3) == 0 && (year%100 || months-= 1;
(year%400 == 0 && year)));
m_days+= leap;
}
if (m_days > diff_days)
break;
diff_days-= m_days;
months++;
if (month_beg++ == 11) /* if we wrap to next year */
{
month_beg= 0;
year++;
}
}
if (neg == -1)
months= -months;
} }
switch (int_type) { switch (int_type) {
case INTERVAL_YEAR: case INTERVAL_YEAR:
return months/12; return months/12*neg;
case INTERVAL_QUARTER: case INTERVAL_QUARTER:
return months/3; return months/3*neg;
case INTERVAL_MONTH: case INTERVAL_MONTH:
return months; return months*neg;
case INTERVAL_WEEK: case INTERVAL_WEEK:
return seconds/86400L/7L*neg; return seconds/86400L/7L*neg;
case INTERVAL_DAY: case INTERVAL_DAY:
......
...@@ -7155,6 +7155,7 @@ static void fix_paths(void) ...@@ -7155,6 +7155,7 @@ static void fix_paths(void)
CHARSET_DIR, NullS); CHARSET_DIR, NullS);
} }
(void) my_load_path(mysql_charsets_dir, mysql_charsets_dir, buff); (void) my_load_path(mysql_charsets_dir, mysql_charsets_dir, buff);
convert_dirname(mysql_charsets_dir, mysql_charsets_dir, NullS);
charsets_dir=mysql_charsets_dir; charsets_dir=mysql_charsets_dir;
if (init_tmpdir(&mysql_tmpdir_list, opt_mysql_tmpdir)) if (init_tmpdir(&mysql_tmpdir_list, opt_mysql_tmpdir))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment