Commit 750af5a8 authored by ingo@mysql.com's avatar ingo@mysql.com

Merge mysql.com:/home/mydev/mysql-4.0

into  mysql.com:/home/mydev/mysql-4.0-bug5390
parents ff01effb 11f59e39
...@@ -63,7 +63,7 @@ Licensee. ...@@ -63,7 +63,7 @@ Licensee.
4. Price and payment. 4. Price and payment.
No later than thirty (30) days after submission of the Order Form, Licensee No later than thirty (30) days after submission of the Order Form, Licensee
shall remit one non-refundable license fee per Licensed Copy as posted on shall remit one non-refundable license fee per Licensed Copy as posted on
http://order.mysql.com on the date Licensee submitted the Order Form (the http://shop.mysql.com on the date Licensee submitted the Order Form (the
"License Fee"). All payments shall be made in Euros or U.S. dollars. Licensee "License Fee"). All payments shall be made in Euros or U.S. dollars. Licensee
shall be responsible for paying all local, state, federal and international shall be responsible for paying all local, state, federal and international
sales, value added, excise and other taxes and duties payable in connection sales, value added, excise and other taxes and duties payable in connection
......
...@@ -8,7 +8,7 @@ License information can be found in these files: ...@@ -8,7 +8,7 @@ License information can be found in these files:
For further information about MySQL or additional documentation, see: For further information about MySQL or additional documentation, see:
- The latest information about MySQL: http://www.mysql.com - The latest information about MySQL: http://www.mysql.com
- The current MySQL documentation: http:/dev.mysql.com/doc - The current MySQL documentation: http://dev.mysql.com/doc
Some manual sections of special interest: Some manual sections of special interest:
......
...@@ -373,7 +373,8 @@ AC_CACHE_VAL(mysql_cv_termcap_lib, ...@@ -373,7 +373,8 @@ AC_CACHE_VAL(mysql_cv_termcap_lib,
[AC_CHECK_LIB(ncurses, tgetent, mysql_cv_termcap_lib=libncurses, [AC_CHECK_LIB(ncurses, tgetent, mysql_cv_termcap_lib=libncurses,
[AC_CHECK_LIB(curses, tgetent, mysql_cv_termcap_lib=libcurses, [AC_CHECK_LIB(curses, tgetent, mysql_cv_termcap_lib=libcurses,
[AC_CHECK_LIB(termcap, tgetent, mysql_cv_termcap_lib=libtermcap, [AC_CHECK_LIB(termcap, tgetent, mysql_cv_termcap_lib=libtermcap,
mysql_cv_termcap_lib=NOT_FOUND)])])]) [AC_CHECK_LIB(tinfo, tgetent, mysql_cv_termcap_lib=libtinfo,
mysql_cv_termcap_lib=NOT_FOUND)])])])])
AC_MSG_CHECKING(for termcap functions library) AC_MSG_CHECKING(for termcap functions library)
if test "$mysql_cv_termcap_lib" = "NOT_FOUND"; then if test "$mysql_cv_termcap_lib" = "NOT_FOUND"; then
AC_MSG_ERROR([No curses/termcap library found]) AC_MSG_ERROR([No curses/termcap library found])
...@@ -381,6 +382,8 @@ elif test "$mysql_cv_termcap_lib" = "libtermcap"; then ...@@ -381,6 +382,8 @@ elif test "$mysql_cv_termcap_lib" = "libtermcap"; then
TERMCAP_LIB=-ltermcap TERMCAP_LIB=-ltermcap
elif test "$mysql_cv_termcap_lib" = "libncurses"; then elif test "$mysql_cv_termcap_lib" = "libncurses"; then
TERMCAP_LIB=-lncurses TERMCAP_LIB=-lncurses
elif test "$mysql_cv_termcap_lib" = "libtinfo"; then
TERMCAP_LIB=-ltinfo
else else
TERMCAP_LIB=-lcurses TERMCAP_LIB=-lcurses
fi fi
......
...@@ -830,6 +830,9 @@ AC_SUBST(WRAPLIBS) ...@@ -830,6 +830,9 @@ AC_SUBST(WRAPLIBS)
if test "$IS_LINUX" = "true"; then if test "$IS_LINUX" = "true"; then
AC_MSG_CHECKING([for atomic operations]) AC_MSG_CHECKING([for atomic operations])
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
atom_ops= atom_ops=
AC_TRY_RUN([ AC_TRY_RUN([
#include <asm/atomic.h> #include <asm/atomic.h>
...@@ -859,6 +862,8 @@ int main() ...@@ -859,6 +862,8 @@ int main()
if test -z "$atom_ops"; then atom_ops="no"; fi if test -z "$atom_ops"; then atom_ops="no"; fi
AC_MSG_RESULT($atom_ops) AC_MSG_RESULT($atom_ops)
AC_LANG_RESTORE
AC_ARG_WITH(pstack, AC_ARG_WITH(pstack,
[ --with-pstack Use the pstack backtrace library], [ --with-pstack Use the pstack backtrace library],
[ USE_PSTACK=$withval ], [ USE_PSTACK=$withval ],
......
This directory contains a test suite for mysql daemon. To run This directory contains a test suite for the MySQL daemon. To run
the currently existing test cases, simply execute ./mysql-test-run in the currently existing test cases, simply execute ./mysql-test-run in
this directory. It will fire up the newly built mysqld and test it. this directory. It will fire up the newly built mysqld and test it.
Note that you do not have to have to do make install, and you could
actually have a co-existing MySQL installation - the tests will not Note that you do not have to have to do "make install", and you could
actually have a co-existing MySQL installation. The tests will not
conflict with it. conflict with it.
All tests must pass. If one or more of them fail on your system, please All tests must pass. If one or more of them fail on your system, please
read the following manual section of how to report the problem: read the following manual section for instructions on how to report the
problem:
http://dev.mysql.com/doc/mysql/en/mysql-test-suite.html
If you want to use an already running MySQL server for specific tests,
use the --extern option to mysql-test-run. Please note that in this mode,
the test suite expects you to provide the names of the tests to run.
For example, here is the command to run the "alias" and "analyze" tests
with an external server:
mysql-test-run --extern alias analyze
To match your setup, you might also need to provide --socket, --user, and
other relevant options.
http://dev.mysql.com/doc/mysql/en/MySQL_test_suite.html With no test cases named on the command line, mysql-test-run falls back
to the normal "non-extern" behavior. The reason for this is that some
tests cannot run with an external server.
You can create your own test cases. To create a test case: You can create your own test cases. To create a test case, create a new
file in the t subdirectory using a text editor. The file should have a .test
extension. For example:
cd t xemacs t/test_case_name.test
vi test_case_name.test
in the file, put a set of SQL commands that will create some tables, In the file, put a set of SQL statements that create some tables,
load test data, run some queries to manipulate it. load test data, and run some queries to manipulate it.
We would appreciate if the test tables were called t1, t2, t3 ... (to not We would appreciate it if you name your test tables t1, t2, t3 ... (to not
conflict too much with existing tables). conflict too much with existing tables).
Your test should begin by dropping the tables you are going to create and Your test should begin by dropping the tables you are going to create and
end by dropping them again. This will ensure that one can run the test end by dropping them again. This ensures that you can run the test over
over and over again. and over again.
If you are using mysqltest commands (like result file names) in your If you are using mysqltest commands (like result file names) in your
test case you should do create the result file as follows: test case, you should create the result file as follows:
mysql-test-run --record test_case_name mysql-test-run --record test_case_name
...@@ -35,8 +53,8 @@ You can create your own test cases. To create a test case: ...@@ -35,8 +53,8 @@ You can create your own test cases. To create a test case:
mysqltest --record < t/test_case_name.test mysqltest --record < t/test_case_name.test
If you only have a simple test cases consistent of SQL commands and comments If you only have a simple test cases consisting of SQL statements and
you can create the test case one of the following ways: comments, you can create the test case in one of the following ways:
mysql-test-run --record test_case_name mysql-test-run --record test_case_name
...@@ -45,7 +63,7 @@ You can create your own test cases. To create a test case: ...@@ -45,7 +63,7 @@ You can create your own test cases. To create a test case:
mysqltest --record --record-file=r/test_case_name.result < t/test_case_name.test mysqltest --record --record-file=r/test_case_name.result < t/test_case_name.test
When this is done, take a look at r/test_case_name.result When this is done, take a look at r/test_case_name.result
- If the result is wrong, you have found a bug; In this case you should - If the result is incorrect, you have found a bug. In this case, you should
edit the test result to the correct results so that we can verify edit the test result to the correct results so that we can verify
that the bug is corrected in future releases. that the bug is corrected in future releases.
......
To be able to see the level of coverage with the current test suite, To be able to see the level of coverage with the current test suite,
do the following: do the following:
- make sure gcov is installed - Make sure gcov is installed
- compile with BUILD/compile-pentium-gcov ( if your machine is not pentium, hack - Compile the MySQL distribution with BUILD/compile-pentium-gcov (if your
this script, or just live with the pentium-specific stuff) machine does not have a pentium CPU, hack this script, or just live with
- ./mysql-test-run -gcov the pentium-specific stuff)
- to see the level of coverage for a given source file: - In the mysql-test directory, run this command: ./mysql-test-run -gcov
- To see the level of coverage for a given source file:
grep source_file_name /tmp/gcov.out grep source_file_name /tmp/gcov.out
- to see which lines are not yet covered, look at source_file_name.gcov in the source tree. Then think hard about a test case that will cover those - To see which lines are not yet covered, look at source_file_name.gcov in
lines, and write one! the source tree. Then think hard about a test case that will cover those
lines, and write one!
...@@ -207,8 +207,13 @@ MYSQL_MANAGER_USER=root ...@@ -207,8 +207,13 @@ MYSQL_MANAGER_USER=root
# an environment variable can be used to control all ports. A small # an environment variable can be used to control all ports. A small
# number is to be used, 0 - 16 or similar. # number is to be used, 0 - 16 or similar.
# #
# Note the MASTER_MYPORT has to be set the same in all 4.x and 5.x
# versions of this script, else a 4.0 test run might conflict with a
# 5.1 test run, even if different MTR_BUILD_THREAD is used. This means
# all port numbers might not be used in this version of the script.
#
if [ -n "$MTR_BUILD_THREAD" ] ; then if [ -n "$MTR_BUILD_THREAD" ] ; then
MASTER_MYPORT=`expr $MTR_BUILD_THREAD '*' 5 + 10000` MASTER_MYPORT=`expr $MTR_BUILD_THREAD '*' 10 + 10000`
MYSQL_MANAGER_PORT=`expr $MASTER_MYPORT + 2` MYSQL_MANAGER_PORT=`expr $MASTER_MYPORT + 2`
SLAVE_MYPORT=`expr $MASTER_MYPORT + 3` SLAVE_MYPORT=`expr $MASTER_MYPORT + 3`
...@@ -225,6 +230,9 @@ FAILED_CASES= ...@@ -225,6 +230,9 @@ FAILED_CASES=
EXTRA_MASTER_OPT="" EXTRA_MASTER_OPT=""
EXTRA_MYSQL_TEST_OPT="" EXTRA_MYSQL_TEST_OPT=""
USE_RUNNING_SERVER=1 USE_RUNNING_SERVER=1
# backport from 5.1, disabled - this substitution is not done in 4.0
# USE_NDBCLUSTER=@USE_NDBCLUSTER@
# USE_NDBCLUSTER_ONLY=0
DO_GCOV="" DO_GCOV=""
DO_GDB="" DO_GDB=""
MANUAL_GDB="" MANUAL_GDB=""
...@@ -242,6 +250,8 @@ START_WAIT_TIMEOUT=10 ...@@ -242,6 +250,8 @@ START_WAIT_TIMEOUT=10
STOP_WAIT_TIMEOUT=10 STOP_WAIT_TIMEOUT=10
MYSQL_TEST_SSL_OPTS="" MYSQL_TEST_SSL_OPTS=""
$ECHO "Logging: $0 $*" # To ensure we see all arguments in the output, for the test analysis tool
while test $# -gt 0; do while test $# -gt 0; do
case "$1" in case "$1" in
--user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;; --user=*) DBUSER=`$ECHO "$1" | $SED -e "s;--user=;;"` ;;
...@@ -254,6 +264,14 @@ while test $# -gt 0; do ...@@ -254,6 +264,14 @@ while test $# -gt 0; do
SLAVE_MYSQLD=`$ECHO "$1" | $SED -e "s;--slave-binary=;;"` ;; SLAVE_MYSQLD=`$ECHO "$1" | $SED -e "s;--slave-binary=;;"` ;;
--local) USE_RUNNING_SERVER="" ;; --local) USE_RUNNING_SERVER="" ;;
--extern) USE_RUNNING_SERVER="1" ;; --extern) USE_RUNNING_SERVER="1" ;;
--with-ndbcluster)
# USE_NDBCLUSTER="--ndbcluster" ;;
$ECHO "Option '--with-ndbcluster' is ignored in this version" ;;
--with-ndbcluster-only)
# USE_NDBCLUSTER="--ndbcluster"
# USE_NDBCLUSTER_SLAVE="--ndbcluster"
# USE_NDBCLUSTER_ONLY=1 ;;
$ECHO "Option '--with-ndbcluster-only' is ignored in this version" ;;
--tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;; --tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
--local-master) --local-master)
MASTER_MYPORT=3306; MASTER_MYPORT=3306;
...@@ -405,6 +423,13 @@ while test $# -gt 0; do ...@@ -405,6 +423,13 @@ while test $# -gt 0; do
--fast) --fast)
FAST_START=1 FAST_START=1
;; ;;
--comment=*)
TMP=`$ECHO "$1" | $SED -e "s;--comment=;;"`
echo
echo '############################################'
echo "# $TMP"
echo '############################################'
;;
-- ) shift; break ;; -- ) shift; break ;;
--* ) $ECHO "Unrecognized option: $1"; exit 1 ;; --* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
* ) break ;; * ) break ;;
......
...@@ -25,3 +25,14 @@ select -1 >> 0, -1 << 0; ...@@ -25,3 +25,14 @@ select -1 >> 0, -1 << 0;
select -1 >> 1, -1 << 1; select -1 >> 1, -1 << 1;
-1 >> 1 -1 << 1 -1 >> 1 -1 << 1
9223372036854775807 18446744073709551614 9223372036854775807 18446744073709551614
drop table if exists t1,t2;
create table t1(a int);
create table t2(a int, b int);
insert into t1 values (1), (2), (3);
insert into t2 values (1, 7), (3, 7);
select t1.a, t2.a, t2.b, bit_count(t2.b) from t1 left join t2 on t1.a=t2.a;
a a b bit_count(t2.b)
1 1 7 3
2 NULL NULL NULL
3 3 7 3
drop table t1, t2;
...@@ -216,3 +216,7 @@ select * from t1; ...@@ -216,3 +216,7 @@ select * from t1;
a b a b
0 2 0 2
drop table t1; drop table t1;
create table t1(f1 int, `*f2` int);
insert into t1 values (1,1);
update t1 set `*f2`=1;
drop table t1;
...@@ -14,3 +14,15 @@ select 1 | -1, 1 ^ -1, 1 & -1; ...@@ -14,3 +14,15 @@ select 1 | -1, 1 ^ -1, 1 & -1;
select 0 | -1, 0 ^ -1, 0 & -1; select 0 | -1, 0 ^ -1, 0 & -1;
select -1 >> 0, -1 << 0; select -1 >> 0, -1 << 0;
select -1 >> 1, -1 << 1; select -1 >> 1, -1 << 1;
#
# Bug 13044: wrong bit_count() results
#
drop table if exists t1,t2;
create table t1(a int);
create table t2(a int, b int);
insert into t1 values (1), (2), (3);
insert into t2 values (1, 7), (3, 7);
select t1.a, t2.a, t2.b, bit_count(t2.b) from t1 left join t2 on t1.a=t2.a;
drop table t1, t2;
...@@ -174,3 +174,11 @@ insert into t1 values (0, '1'); ...@@ -174,3 +174,11 @@ insert into t1 values (0, '1');
update t1 set b = b + 1 where a = 0; update t1 set b = b + 1 where a = 0;
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# Bug #16510 Updating field named like '*name' caused server crash
#
create table t1(f1 int, `*f2` int);
insert into t1 values (1,1);
update t1 set `*f2`=1;
drop table t1;
...@@ -423,7 +423,7 @@ int main(int argc, char **argv) ...@@ -423,7 +423,7 @@ int main(int argc, char **argv)
printf("\nThe latest information about MySQL is available on the web at\n"); printf("\nThe latest information about MySQL is available on the web at\n");
printf("\thttp://www.mysql.com\n"); printf("\thttp://www.mysql.com\n");
printf("\nSupport MySQL by buying support at https://order.mysql.com\n\n"); printf("\nSupport MySQL by buying support at http://shop.mysql.com\n\n");
return 0; return 0;
} }
...@@ -279,7 +279,7 @@ then ...@@ -279,7 +279,7 @@ then
gcclib=`@CC@ --print-libgcc-file` gcclib=`@CC@ --print-libgcc-file`
if test $? -ne 0 if test $? -ne 0
then then
print "Warning: Couldn't find libgcc.a!" echo "Warning: Couldn't find libgcc.a!"
else else
$CP $gcclib libmygcc.a $CP $gcclib libmygcc.a
fi fi
......
#!/bin/sh #!/bin/sh
# Copyright (C) 2002-2004 MySQL AB # Copyright (C) 2002-2004 MySQL AB
# For a more info consult the file COPYRIGHT distributed with this file. # For a more info consult the file COPYRIGHT distributed with this file.
...@@ -397,7 +398,7 @@ then ...@@ -397,7 +398,7 @@ then
echo echo
echo "The latest information about MySQL is available on the web at" echo "The latest information about MySQL is available on the web at"
echo "http://www.mysql.com" echo "http://www.mysql.com"
echo "Support MySQL by buying support/licenses at https://order.mysql.com" echo "Support MySQL by buying support/licenses at http://shop.mysql.com"
echo echo
exit 0 exit 0
else else
......
...@@ -1138,11 +1138,8 @@ longlong Item_func_find_in_set::val_int() ...@@ -1138,11 +1138,8 @@ longlong Item_func_find_in_set::val_int()
longlong Item_func_bit_count::val_int() longlong Item_func_bit_count::val_int()
{ {
ulonglong value= (ulonglong) args[0]->val_int(); ulonglong value= (ulonglong) args[0]->val_int();
if (args[0]->null_value) if ((null_value= args[0]->null_value))
{
null_value=1; /* purecov: inspected */
return 0; /* purecov: inspected */ return 0; /* purecov: inspected */
}
return (longlong) my_count_bits(value); return (longlong) my_count_bits(value);
} }
......
...@@ -1983,6 +1983,7 @@ int setup_fields(THD *thd, TABLE_LIST *tables, List<Item> &fields, ...@@ -1983,6 +1983,7 @@ int setup_fields(THD *thd, TABLE_LIST *tables, List<Item> &fields,
*/ */
if (item->type() == Item::FIELD_ITEM && if (item->type() == Item::FIELD_ITEM &&
((Item_field*) item)->field_name[0] == '*' && ((Item_field*) item)->field_name[0] == '*' &&
((Item_field*) item)->field_name[1] == 0 &&
!((Item_field*) item)->field) !((Item_field*) item)->field)
{ {
uint elem=fields.elements; uint elem=fields.elements;
......
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