Commit 39d888cc authored by unknown's avatar unknown

Merge bk-internal:/home/bk/mysql-5.0-maint

into  shellback.(none):/home/msvensson/mysql/mysql-5.0-maint

parents 756baf00 38d2f595
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
*.bb *.bb
*.bbg *.bbg
*.bin *.bin
*.cmake
*.core *.core
*.d *.d
*.da *.da
...@@ -17,6 +18,7 @@ ...@@ -17,6 +18,7 @@
*.map *.map
*.o *.o
*.obj *.obj
*.old
*.pch *.pch
*.pdb *.pdb
*.reject *.reject
...@@ -25,11 +27,21 @@ ...@@ -25,11 +27,21 @@
*.so *.so
*.so.* *.so.*
*.spec *.spec
*.user
*.vcproj
*/*.dir/*
*/*_pure_*warnings */*_pure_*warnings
*/.pure */.pure
*/debug/*
*/release/*
*~ *~
.*.swp .*.swp
./CMakeCache.txt
./MySql.ncb
./MySql.sln
./MySql.suo
./README.build-files ./README.build-files
./cmakecache.txt
./config.h ./config.h
./copy_mysql_files.bat ./copy_mysql_files.bat
./fix-project-files ./fix-project-files
...@@ -65,6 +77,7 @@ BitKeeper/post-commit-manual ...@@ -65,6 +77,7 @@ BitKeeper/post-commit-manual
BitKeeper/tmp/* BitKeeper/tmp/*
BitKeeper/tmp/bkr3sAHD BitKeeper/tmp/bkr3sAHD
BitKeeper/tmp/gone BitKeeper/tmp/gone
CMakeFiles/*
COPYING COPYING
COPYING.LIB COPYING.LIB
Docs/#manual.texi# Docs/#manual.texi#
...@@ -1195,6 +1208,7 @@ strings/ctype_autoconf.c ...@@ -1195,6 +1208,7 @@ strings/ctype_autoconf.c
strings/ctype_extra_sources.c strings/ctype_extra_sources.c
strings/str_test strings/str_test
strings/test_decimal strings/test_decimal
support-files/*.ini
support-files/MacOSX/Description.plist support-files/MacOSX/Description.plist
support-files/MacOSX/Info.plist support-files/MacOSX/Info.plist
support-files/MacOSX/ReadMe.txt support-files/MacOSX/ReadMe.txt
...@@ -1297,5 +1311,8 @@ vio/test-sslserver ...@@ -1297,5 +1311,8 @@ vio/test-sslserver
vio/viotest-ssl vio/viotest-ssl
vio/viotest-sslconnect.cpp vio/viotest-sslconnect.cpp
vio/viotest.cpp vio/viotest.cpp
win/configure.data
win/vs71cache.txt
win/vs8cache.txt
zlib/*.ds? zlib/*.ds?
zlib/*.vcproj zlib/*.vcproj
...@@ -6,6 +6,13 @@ COMMITS=commits@lists.mysql.com ...@@ -6,6 +6,13 @@ COMMITS=commits@lists.mysql.com
DOCS=docs-commit@mysql.com DOCS=docs-commit@mysql.com
LIMIT=10000 LIMIT=10000
VERSION="5.0" VERSION="5.0"
BKROOT=`bk root`
if [ -x /usr/sbin/sendmail ]; then
SENDMAIL=/usr/sbin/sendmail
else
SENDMAIL=sendmail
fi
if [ "$REAL_EMAIL" = "" ] if [ "$REAL_EMAIL" = "" ]
then then
...@@ -58,7 +65,9 @@ $BH ...@@ -58,7 +65,9 @@ $BH
EOF EOF
bk changes -v -r+ bk changes -v -r+
bk cset -r+ -d bk cset -r+ -d
) | /usr/sbin/sendmail -t ) > $BKROOT/BitKeeper/tmp/dev_public.txt
$SENDMAIL -t < $BKROOT/BitKeeper/tmp/dev_public.txt
#++ #++
# commits@ mail # commits@ mail
...@@ -82,7 +91,9 @@ see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html ...@@ -82,7 +91,9 @@ see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
EOF EOF
bk changes -v -r+ bk changes -v -r+
bk cset -r+ -d bk cset -r+ -d
) | head -n $LIMIT | /usr/sbin/sendmail -t ) | bk sed -e ${LIMIT}q > $BKROOT/BitKeeper/tmp/commits.txt
$SENDMAIL -t < $BKROOT/BitKeeper/tmp/commits.txt
#++ #++
# docs-commit@ mail # docs-commit@ mail
...@@ -102,7 +113,8 @@ Subject: bk commit - $VERSION tree (Manual) ($CHANGESET)$BS ...@@ -102,7 +113,8 @@ Subject: bk commit - $VERSION tree (Manual) ($CHANGESET)$BS
EOF EOF
bk changes -v -r+ bk changes -v -r+
bk cset -r+ -d bk cset -r+ -d
) | /usr/sbin/sendmail -t ) > $BKROOT/BitKeeper/tmp/docs.txt
$SENDMAIL -t < $BKROOT/BitKeeper/tmp/docs.txt
fi fi
else else
......
...@@ -2321,10 +2321,8 @@ print_table_data(MYSQL_RES *result) ...@@ -2321,10 +2321,8 @@ print_table_data(MYSQL_RES *result)
MYSQL_ROW cur; MYSQL_ROW cur;
MYSQL_FIELD *field; MYSQL_FIELD *field;
bool *num_flag; bool *num_flag;
bool *not_null_flag;
num_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result)); num_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result));
not_null_flag=(bool*) my_alloca(sizeof(bool)*mysql_num_fields(result));
if (info_flag) if (info_flag)
{ {
print_field_types(result); print_field_types(result);
...@@ -2363,7 +2361,6 @@ print_table_data(MYSQL_RES *result) ...@@ -2363,7 +2361,6 @@ print_table_data(MYSQL_RES *result)
MAX_COLUMN_LENGTH), MAX_COLUMN_LENGTH),
field->name); field->name);
num_flag[off]= IS_NUM(field->type); num_flag[off]= IS_NUM(field->type);
not_null_flag[off]= IS_NOT_NULL(field->flags);
} }
(void) tee_fputs("\n", PAGER); (void) tee_fputs("\n", PAGER);
tee_puts((char*) separator.ptr(), PAGER); tee_puts((char*) separator.ptr(), PAGER);
...@@ -2384,7 +2381,7 @@ print_table_data(MYSQL_RES *result) ...@@ -2384,7 +2381,7 @@ print_table_data(MYSQL_RES *result)
uint extra_padding; uint extra_padding;
/* If this column may have a null value, use "NULL" for empty. */ /* If this column may have a null value, use "NULL" for empty. */
if (! not_null_flag[off] && (cur[off] == NULL)) if (cur[off] == NULL)
{ {
buffer= "NULL"; buffer= "NULL";
data_length= 4; data_length= 4;
...@@ -2424,7 +2421,6 @@ print_table_data(MYSQL_RES *result) ...@@ -2424,7 +2421,6 @@ print_table_data(MYSQL_RES *result)
} }
tee_puts((char*) separator.ptr(), PAGER); tee_puts((char*) separator.ptr(), PAGER);
my_afree((gptr) num_flag); my_afree((gptr) num_flag);
my_afree((gptr) not_null_flag);
} }
......
...@@ -200,7 +200,7 @@ retry_open: ...@@ -200,7 +200,7 @@ retry_open:
} }
buffer_end= strnmov(buffer, "\n[client]", sizeof(buffer)); buffer_end= strnmov(buffer, "\n[client]", sizeof(buffer));
if (opt_password) if (opt_password)
buffer_end= strxnmov(buffer, sizeof(buffer), buffer_end= strxnmov(buffer_end, sizeof(buffer),
"\npassword=", opt_password, NullS); "\npassword=", opt_password, NullS);
error= my_write(defaults_file, buffer, (int) (buffer_end - buffer), error= my_write(defaults_file, buffer, (int) (buffer_end - buffer),
MYF(MY_WME | MY_FNABP)); MYF(MY_WME | MY_FNABP));
......
...@@ -85,7 +85,7 @@ static char *alloc_query_str(ulong size); ...@@ -85,7 +85,7 @@ static char *alloc_query_str(ulong size);
static char *field_escape(char *to,const char *from,uint length); static char *field_escape(char *to,const char *from,uint length);
static my_bool verbose= 0, opt_no_create_info= 0, opt_no_data= 0, static my_bool verbose= 0, opt_no_create_info= 0, opt_no_data= 0,
quick= 1, extended_insert= 1, quick= 1, extended_insert= 1,
lock_tables=1,ignore_errors=0,flush_logs=0, lock_tables=1,ignore_errors=0,flush_logs=0,flush_privileges=0,
opt_drop=1,opt_keywords=0,opt_lock=1,opt_compress=0, opt_drop=1,opt_keywords=0,opt_lock=1,opt_compress=0,
opt_delayed=0,create_options=1,opt_quoted=0,opt_databases=0, opt_delayed=0,create_options=1,opt_quoted=0,opt_databases=0,
opt_alldbs=0,opt_create_db=0,opt_lock_all_tables=0, opt_alldbs=0,opt_create_db=0,opt_lock_all_tables=0,
...@@ -256,6 +256,12 @@ static struct my_option my_long_options[] = ...@@ -256,6 +256,12 @@ static struct my_option my_long_options[] =
"--lock-all-tables or --master-data with --flush-logs", "--lock-all-tables or --master-data with --flush-logs",
(gptr*) &flush_logs, (gptr*) &flush_logs, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, (gptr*) &flush_logs, (gptr*) &flush_logs, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0}, 0, 0},
{"flush-privileges", OPT_ESC, "Emit a FLUSH PRIVILEGES statement "
"after dumping the mysql database. This option should be used any "
"time the dump contains the mysql database and any other database "
"that depends on the data in the mysql database for proper restore. ",
(gptr*) &flush_privileges, (gptr*) &flush_privileges, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0},
{"force", 'f', "Continue even if we get an sql-error.", {"force", 'f', "Continue even if we get an sql-error.",
(gptr*) &ignore_errors, (gptr*) &ignore_errors, 0, GET_BOOL, NO_ARG, (gptr*) &ignore_errors, (gptr*) &ignore_errors, 0, GET_BOOL, NO_ARG,
0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0},
...@@ -2767,6 +2773,7 @@ static int dump_all_tables_in_db(char *database) ...@@ -2767,6 +2773,7 @@ static int dump_all_tables_in_db(char *database)
char hash_key[2*NAME_LEN+2]; /* "db.tablename" */ char hash_key[2*NAME_LEN+2]; /* "db.tablename" */
char *afterdot; char *afterdot;
int using_mysql_db= my_strcasecmp(&my_charset_latin1, database, "mysql");
afterdot= strmov(hash_key, database); afterdot= strmov(hash_key, database);
*afterdot++= '.'; *afterdot++= '.';
...@@ -2821,6 +2828,11 @@ static int dump_all_tables_in_db(char *database) ...@@ -2821,6 +2828,11 @@ static int dump_all_tables_in_db(char *database)
} }
if (lock_tables) if (lock_tables)
VOID(mysql_query_with_error_report(mysql, 0, "UNLOCK TABLES")); VOID(mysql_query_with_error_report(mysql, 0, "UNLOCK TABLES"));
if (flush_privileges && using_mysql_db == 0)
{
fprintf(md_result_file,"\n--\n-- Flush Grant Tables \n--\n");
fprintf(md_result_file,"\n/*! FLUSH PRIVILEGES */;\n");
}
return 0; return 0;
} /* dump_all_tables_in_db */ } /* dump_all_tables_in_db */
......
...@@ -85,6 +85,12 @@ c_cp932 ...@@ -85,6 +85,12 @@ c_cp932
| NULL | NULL | Τη γλώσσα | | NULL | NULL | Τη γλώσσα |
| NULL | NULL | ᛖᚴ ᚷᛖᛏ | | NULL | NULL | ᛖᚴ ᚷᛖᛏ |
+------+------+---------------------------+ +------+------+---------------------------+
i j k
NULL 1 NULL
Field Type Null Key Default Extra
i int(11) YES NULL
j int(11) NO
k int(11) YES NULL
+------+---+------+ +------+---+------+
| i | j | k | | i | j | k |
+------+---+------+ +------+---+------+
...@@ -97,6 +103,10 @@ c_cp932 ...@@ -97,6 +103,10 @@ c_cp932
| j | int(11) | NO | | | | | j | int(11) | NO | | | |
| k | int(11) | YES | | NULL | | | k | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+ +-------+---------+------+-----+---------+-------+
i s1
1 x
2 NULL
3
+------+------+ +------+------+
| i | s1 | | i | s1 |
+------+------+ +------+------+
...@@ -104,6 +114,13 @@ c_cp932 ...@@ -104,6 +114,13 @@ c_cp932
| 2 | NULL | | 2 | NULL |
| 3 | | | 3 | |
+------+------+ +------+------+
unhex('zz')
NULL
+-------------+
| unhex('zz') |
+-------------+
| NULL |
+-------------+
create table t1(a int, b varchar(255), c int); create table t1(a int, b varchar(255), c int);
Field Type Null Key Default Extra Field Type Null Key Default Extra
a int(11) YES NULL a int(11) YES NULL
......
...@@ -2927,14 +2927,32 @@ drop user mysqltest_1@localhost; ...@@ -2927,14 +2927,32 @@ drop user mysqltest_1@localhost;
create database mysqldump_myDB; create database mysqldump_myDB;
use mysqldump_myDB; use mysqldump_myDB;
create user myDB_User; create user myDB_User;
grant create view, select on mysqldump_myDB.* to myDB_User@localhost; grant create, create view, select, insert on mysqldump_myDB.* to myDB_User@localhost;
create table t1 (c1 int); create table t1 (c1 int);
insert into t1 values (3); insert into t1 values (3);
use mysqldump_myDB; use mysqldump_myDB;
create table u1 (f1 int);
insert into u1 values (4);
create view v1 (c1) as select * from t1; create view v1 (c1) as select * from t1;
use mysqldump_myDB; use mysqldump_myDB;
drop view v1; drop view v1;
drop table t1; drop table t1;
drop table u1;
revoke all privileges on mysqldump_myDB.* from myDB_User@localhost;
drop user myDB_User;
drop database mysqldump_myDB;
flush privileges;
use mysqldump_myDB;
select * from mysqldump_myDB.v1;
c1
3
select * from mysqldump_myDB.u1;
f1
4
use mysqldump_myDB;
drop view v1;
drop table t1;
drop table u1;
revoke all privileges on mysqldump_myDB.* from myDB_User@localhost; revoke all privileges on mysqldump_myDB.* from myDB_User@localhost;
drop user myDB_User; drop user myDB_User;
drop database mysqldump_myDB; drop database mysqldump_myDB;
......
...@@ -572,4 +572,34 @@ def test t1 t1 a a 16 7 1 Y 0 0 63 ...@@ -572,4 +572,34 @@ def test t1 t1 a a 16 7 1 Y 0 0 63
a a
` `
drop table t1; drop table t1;
create table bug15583(b BIT(8), n INT);
insert into bug15583 values(128, 128);
insert into bug15583 values(null, null);
insert into bug15583 values(0, 0);
insert into bug15583 values(255, 255);
select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583;
hex(b) bin(b) oct(b) hex(n) bin(n) oct(n)
80 10000000 200 80 10000000 200
NULL NULL NULL NULL NULL NULL
0 0 0 0 0 0
FF 11111111 377 FF 11111111 377
select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583;
should_be_onetrue should_be_onetrue should_be_onetrue
1 1 1
NULL NULL NULL
1 1 1
1 1 1
select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583;
hex(b + 0) bin(b + 0) oct(b + 0) hex(n) bin(n) oct(n)
80 10000000 200 80 10000000 200
NULL NULL NULL NULL NULL NULL
0 0 0 0 0 0
FF 11111111 377 FF 11111111 377
select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583;
conv(b, 10, 2) conv(b + 0, 10, 2)
10000000 10000000
NULL NULL
0 0
11111111 11111111
drop table bug15583;
End of 5.0 tests End of 5.0 tests
...@@ -133,8 +133,6 @@ select min(a), min(case when 1=1 then a else NULL end), ...@@ -133,8 +133,6 @@ select min(a), min(case when 1=1 then a else NULL end),
from t1 where b=3 group by b; from t1 where b=3 group by b;
drop table t1; drop table t1;
# End of 4.1 tests
# #
# Tests for bug #9939: conversion of the arguments for COALESCE and IFNULL # Tests for bug #9939: conversion of the arguments for COALESCE and IFNULL
...@@ -154,3 +152,4 @@ SELECT IFNULL(t2.EMPNUM,t1.EMPNUM) AS CEMPNUM, ...@@ -154,3 +152,4 @@ SELECT IFNULL(t2.EMPNUM,t1.EMPNUM) AS CEMPNUM,
FROM t1 LEFT JOIN t2 ON t1.EMPNUM=t2.EMPNUM; FROM t1 LEFT JOIN t2 ON t1.EMPNUM=t2.EMPNUM;
DROP TABLE t1,t2; DROP TABLE t1,t2;
# End of 4.1 tests
...@@ -108,9 +108,6 @@ select 5.1 mod 3, 5.1 mod -3, -5.1 mod 3, -5.1 mod -3; ...@@ -108,9 +108,6 @@ select 5.1 mod 3, 5.1 mod -3, -5.1 mod 3, -5.1 mod -3;
select 5 mod 3, 5 mod -3, -5 mod 3, -5 mod -3; select 5 mod 3, 5 mod -3, -5 mod 3, -5 mod -3;
# End of 4.1 tests
#
# Bug#6726: NOT BETWEEN parse failure # Bug#6726: NOT BETWEEN parse failure
# #
create table t1 (a int, b int); create table t1 (a int, b int);
...@@ -127,3 +124,5 @@ SELECT GREATEST(1,NULL) FROM DUAL; ...@@ -127,3 +124,5 @@ SELECT GREATEST(1,NULL) FROM DUAL;
SELECT LEAST('xxx','aaa',NULL,'yyy') FROM DUAL; SELECT LEAST('xxx','aaa',NULL,'yyy') FROM DUAL;
SELECT LEAST(1.1,1.2,NULL,1.0) FROM DUAL; SELECT LEAST(1.1,1.2,NULL,1.0) FROM DUAL;
SELECT GREATEST(1.5E+2,1.3E+2,NULL) FROM DUAL; SELECT GREATEST(1.5E+2,1.3E+2,NULL) FROM DUAL;
# End of 4.1 tests
...@@ -70,14 +70,21 @@ drop table t1; ...@@ -70,14 +70,21 @@ drop table t1;
# #
# "DESCRIBE" commands may return strange NULLness flags. # "DESCRIBE" commands may return strange NULLness flags.
# #
--exec $MYSQL --default-character-set utf8 test -e "create table t1 (i int, j int not null, k int); insert into t1 values (null, 1, null); select * from t1; describe t1; drop table t1;"
--exec $MYSQL -t --default-character-set utf8 test -e "create table t1 (i int, j int not null, k int); insert into t1 values (null, 1, null); select * from t1; describe t1; drop table t1;" --exec $MYSQL -t --default-character-set utf8 test -e "create table t1 (i int, j int not null, k int); insert into t1 values (null, 1, null); select * from t1; describe t1; drop table t1;"
# #
# Bug#19564: mysql displays NULL instead of space # Bug#19564: mysql displays NULL instead of space
# #
--exec $MYSQL test -e "create table b19564 (i int, s1 char(1)); insert into b19564 values (1, 'x'); insert into b19564 values (2, NULL); insert into b19564 values (3, ' '); select * from b19564 order by i; drop table b19564;"
--exec $MYSQL -t test -e "create table b19564 (i int, s1 char(1)); insert into b19564 values (1, 'x'); insert into b19564 values (2, NULL); insert into b19564 values (3, ' '); select * from b19564 order by i; drop table b19564;" --exec $MYSQL -t test -e "create table b19564 (i int, s1 char(1)); insert into b19564 values (1, 'x'); insert into b19564 values (2, NULL); insert into b19564 values (3, ' '); select * from b19564 order by i; drop table b19564;"
# #
# Bug#21618: NULL shown as empty string in client
#
--exec $MYSQL test -e "select unhex('zz');"
--exec $MYSQL -t test -e "select unhex('zz');"
# Bug#19265 describe command does not work from mysql prompt # Bug#19265 describe command does not work from mysql prompt
# #
......
...@@ -1322,28 +1322,59 @@ drop user mysqltest_1@localhost; ...@@ -1322,28 +1322,59 @@ drop user mysqltest_1@localhost;
# Bug #21527 mysqldump incorrectly tries to LOCK TABLES on the # Bug #21527 mysqldump incorrectly tries to LOCK TABLES on the
# information_schema database. # information_schema database.
# #
# Bug #21424 mysqldump failing to export/import views
#
# Do as root
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK); connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
connection root; connection root;
create database mysqldump_myDB; create database mysqldump_myDB;
use mysqldump_myDB; use mysqldump_myDB;
create user myDB_User; create user myDB_User;
grant create view, select on mysqldump_myDB.* to myDB_User@localhost; grant create, create view, select, insert on mysqldump_myDB.* to myDB_User@localhost;
create table t1 (c1 int); create table t1 (c1 int);
insert into t1 values (3); insert into t1 values (3);
# Do as a user
connect (user1,localhost,myDB_User,,mysqldump_myDB,$MASTER_MYPORT,$MASTER_MYSOCK); connect (user1,localhost,myDB_User,,mysqldump_myDB,$MASTER_MYPORT,$MASTER_MYSOCK);
connection user1; connection user1;
use mysqldump_myDB; use mysqldump_myDB;
create table u1 (f1 int);
insert into u1 values (4);
create view v1 (c1) as select * from t1; create view v1 (c1) as select * from t1;
# Backup should not fail. # Backup should not fail for Bug #21527. Flush priviliges test begins.
--exec $MYSQL_DUMP --all-databases --add-drop-table > $MYSQLTEST_VARDIR/tmp/bug21527.sql --exec $MYSQL_DUMP --skip-comments --add-drop-table --flush-privileges --ignore-table=mysql.general_log --ignore-table=mysql.slow_log --databases mysqldump_myDB mysql > $MYSQLTEST_VARDIR/tmp/bug21527.sql
# Clean up # Clean up
connection root; connection root;
use mysqldump_myDB; use mysqldump_myDB;
drop view v1; drop view v1;
drop table t1; drop table t1;
drop table u1;
revoke all privileges on mysqldump_myDB.* from myDB_User@localhost;
drop user myDB_User;
drop database mysqldump_myDB;
flush privileges;
# Bug #21424 continues from here.
# Restore. Flush Privileges test ends.
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug21527.sql;
# Do as a user
connection user1;
use mysqldump_myDB;
# Ultimate test for correct data.
select * from mysqldump_myDB.v1;
select * from mysqldump_myDB.u1;
#Final cleanup.
connection root;
use mysqldump_myDB;
drop view v1;
drop table t1;
drop table u1;
revoke all privileges on mysqldump_myDB.* from myDB_User@localhost; revoke all privileges on mysqldump_myDB.* from myDB_User@localhost;
drop user myDB_User; drop user myDB_User;
drop database mysqldump_myDB; drop database mysqldump_myDB;
......
...@@ -238,4 +238,19 @@ select * from t1; ...@@ -238,4 +238,19 @@ select * from t1;
--disable_metadata --disable_metadata
drop table t1; drop table t1;
#
# Bug#15583: BIN()/OCT()/CONV() do not work with BIT values
#
create table bug15583(b BIT(8), n INT);
insert into bug15583 values(128, 128);
insert into bug15583 values(null, null);
insert into bug15583 values(0, 0);
insert into bug15583 values(255, 255);
select hex(b), bin(b), oct(b), hex(n), bin(n), oct(n) from bug15583;
select hex(b)=hex(n) as should_be_onetrue, bin(b)=bin(n) as should_be_onetrue, oct(b)=oct(n) as should_be_onetrue from bug15583;
select hex(b + 0), bin(b + 0), oct(b + 0), hex(n), bin(n), oct(n) from bug15583;
select conv(b, 10, 2), conv(b + 0, 10, 2) from bug15583;
drop table bug15583;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -144,9 +144,6 @@ select @@version; ...@@ -144,9 +144,6 @@ select @@version;
--replace_column 1 # --replace_column 1 #
select @@global.version; select @@global.version;
# End of 4.1 tests
#
# Bug #6598: problem with cast(NULL as signed integer); # Bug #6598: problem with cast(NULL as signed integer);
# #
...@@ -212,3 +209,5 @@ insert into t1 values (1,2),(2,3),(3,1); ...@@ -212,3 +209,5 @@ insert into t1 values (1,2),(2,3),(3,1);
select @var:=f2 from t1 group by f1 order by f2 desc limit 1; select @var:=f2 from t1 group by f1 order by f2 desc limit 1;
select @var; select @var;
drop table t1; drop table t1;
# End of 4.1 tests
...@@ -3799,13 +3799,13 @@ Item_func_set_user_var::update() ...@@ -3799,13 +3799,13 @@ Item_func_set_user_var::update()
case REAL_RESULT: case REAL_RESULT:
{ {
res= update_hash((void*) &save_result.vreal,sizeof(save_result.vreal), res= update_hash((void*) &save_result.vreal,sizeof(save_result.vreal),
REAL_RESULT, &my_charset_bin, DERIVATION_IMPLICIT); REAL_RESULT, &my_charset_bin, DERIVATION_IMPLICIT, 0);
break; break;
} }
case INT_RESULT: case INT_RESULT:
{ {
res= update_hash((void*) &save_result.vint, sizeof(save_result.vint), res= update_hash((void*) &save_result.vint, sizeof(save_result.vint),
INT_RESULT, &my_charset_bin, DERIVATION_IMPLICIT, INT_RESULT, &my_charset_bin, DERIVATION_IMPLICIT,
unsigned_flag); unsigned_flag);
break; break;
} }
...@@ -3813,23 +3813,23 @@ Item_func_set_user_var::update() ...@@ -3813,23 +3813,23 @@ Item_func_set_user_var::update()
{ {
if (!save_result.vstr) // Null value if (!save_result.vstr) // Null value
res= update_hash((void*) 0, 0, STRING_RESULT, &my_charset_bin, res= update_hash((void*) 0, 0, STRING_RESULT, &my_charset_bin,
DERIVATION_IMPLICIT); DERIVATION_IMPLICIT, 0);
else else
res= update_hash((void*) save_result.vstr->ptr(), res= update_hash((void*) save_result.vstr->ptr(),
save_result.vstr->length(), STRING_RESULT, save_result.vstr->length(), STRING_RESULT,
save_result.vstr->charset(), save_result.vstr->charset(),
DERIVATION_IMPLICIT); DERIVATION_IMPLICIT, 0);
break; break;
} }
case DECIMAL_RESULT: case DECIMAL_RESULT:
{ {
if (!save_result.vdec) // Null value if (!save_result.vdec) // Null value
res= update_hash((void*) 0, 0, DECIMAL_RESULT, &my_charset_bin, res= update_hash((void*) 0, 0, DECIMAL_RESULT, &my_charset_bin,
DERIVATION_IMPLICIT); DERIVATION_IMPLICIT, 0);
else else
res= update_hash((void*) save_result.vdec, res= update_hash((void*) save_result.vdec,
sizeof(my_decimal), DECIMAL_RESULT, sizeof(my_decimal), DECIMAL_RESULT,
&my_charset_bin, DERIVATION_IMPLICIT); &my_charset_bin, DERIVATION_IMPLICIT, 0);
break; break;
} }
case ROW_RESULT: case ROW_RESULT:
......
...@@ -1173,7 +1173,7 @@ public: ...@@ -1173,7 +1173,7 @@ public:
String *val_str(String *str); String *val_str(String *str);
my_decimal *val_decimal(my_decimal *); my_decimal *val_decimal(my_decimal *);
bool update_hash(void *ptr, uint length, enum Item_result type, bool update_hash(void *ptr, uint length, enum Item_result type,
CHARSET_INFO *cs, Derivation dv, bool unsigned_arg= 0); CHARSET_INFO *cs, Derivation dv, bool unsigned_arg);
bool send(Protocol *protocol, String *str_arg); bool send(Protocol *protocol, String *str_arg);
void make_field(Send_field *tmp_field); void make_field(Send_field *tmp_field);
bool check(bool use_result_field); bool check(bool use_result_field);
......
...@@ -2381,17 +2381,33 @@ String *Item_func_conv::val_str(String *str) ...@@ -2381,17 +2381,33 @@ String *Item_func_conv::val_str(String *str)
abs(to_base) > 36 || abs(to_base) < 2 || abs(to_base) > 36 || abs(to_base) < 2 ||
abs(from_base) > 36 || abs(from_base) < 2 || !(res->length())) abs(from_base) > 36 || abs(from_base) < 2 || !(res->length()))
{ {
null_value=1; null_value= 1;
return 0; return NULL;
} }
null_value=0; null_value= 0;
unsigned_flag= !(from_base < 0); unsigned_flag= !(from_base < 0);
if (from_base < 0)
dec= my_strntoll(res->charset(),res->ptr(),res->length(),-from_base,&endptr,&err); if (args[0]->field_type() == MYSQL_TYPE_BIT)
{
/*
Special case: The string representation of BIT doesn't resemble the
decimal representation, so we shouldn't change it to string and then to
decimal.
*/
dec= args[0]->val_int();
}
else else
dec= (longlong) my_strntoull(res->charset(),res->ptr(),res->length(),from_base,&endptr,&err); {
ptr= longlong2str(dec,ans,to_base); if (from_base < 0)
if (str->copy(ans,(uint32) (ptr-ans), default_charset())) dec= my_strntoll(res->charset(), res->ptr(), res->length(),
-from_base, &endptr, &err);
else
dec= (longlong) my_strntoull(res->charset(), res->ptr(), res->length(),
from_base, &endptr, &err);
}
ptr= longlong2str(dec, ans, to_base);
if (str->copy(ans, (uint32) (ptr-ans), default_charset()))
return &my_empty_string; return &my_empty_string;
return str; return str;
} }
......
...@@ -3846,7 +3846,7 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) ...@@ -3846,7 +3846,7 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli)
a single record and with a single column. Thus, like a single record and with a single column. Thus, like
a column value, it could always have IMPLICIT derivation. a column value, it could always have IMPLICIT derivation.
*/ */
e.update_hash(val, val_len, type, charset, DERIVATION_IMPLICIT); e.update_hash(val, val_len, type, charset, DERIVATION_IMPLICIT, 0);
free_root(thd->mem_root,0); free_root(thd->mem_root,0);
rli->inc_event_relay_log_pos(); rli->inc_event_relay_log_pos();
......
...@@ -559,9 +559,13 @@ int vio_write_shared_memory(Vio * vio, const gptr buf, int size) ...@@ -559,9 +559,13 @@ int vio_write_shared_memory(Vio * vio, const gptr buf, int size)
} }
/**
Close shared memory and DBUG_PRINT any errors that happen on closing.
@return Zero if all closing functions succeed, and nonzero otherwise.
*/
int vio_close_shared_memory(Vio * vio) int vio_close_shared_memory(Vio * vio)
{ {
int r; int error_count= 0;
DBUG_ENTER("vio_close_shared_memory"); DBUG_ENTER("vio_close_shared_memory");
if (vio->type != VIO_CLOSED) if (vio->type != VIO_CLOSED)
{ {
...@@ -575,23 +579,44 @@ int vio_close_shared_memory(Vio * vio) ...@@ -575,23 +579,44 @@ int vio_close_shared_memory(Vio * vio)
result if they are success. result if they are success.
*/ */
if (UnmapViewOfFile(vio->handle_map) == 0) if (UnmapViewOfFile(vio->handle_map) == 0)
{
error_count++;
DBUG_PRINT("vio_error", ("UnmapViewOfFile() failed")); DBUG_PRINT("vio_error", ("UnmapViewOfFile() failed"));
}
if (CloseHandle(vio->event_server_wrote) == 0) if (CloseHandle(vio->event_server_wrote) == 0)
{
error_count++;
DBUG_PRINT("vio_error", ("CloseHandle(vio->esw) failed")); DBUG_PRINT("vio_error", ("CloseHandle(vio->esw) failed"));
}
if (CloseHandle(vio->event_server_read) == 0) if (CloseHandle(vio->event_server_read) == 0)
{
error_count++;
DBUG_PRINT("vio_error", ("CloseHandle(vio->esr) failed")); DBUG_PRINT("vio_error", ("CloseHandle(vio->esr) failed"));
}
if (CloseHandle(vio->event_client_wrote) == 0) if (CloseHandle(vio->event_client_wrote) == 0)
{
error_count++;
DBUG_PRINT("vio_error", ("CloseHandle(vio->ecw) failed")); DBUG_PRINT("vio_error", ("CloseHandle(vio->ecw) failed"));
}
if (CloseHandle(vio->event_client_read) == 0) if (CloseHandle(vio->event_client_read) == 0)
{
error_count++;
DBUG_PRINT("vio_error", ("CloseHandle(vio->ecr) failed")); DBUG_PRINT("vio_error", ("CloseHandle(vio->ecr) failed"));
}
if (CloseHandle(vio->handle_file_map) == 0) if (CloseHandle(vio->handle_file_map) == 0)
{
error_count++;
DBUG_PRINT("vio_error", ("CloseHandle(vio->hfm) failed")); DBUG_PRINT("vio_error", ("CloseHandle(vio->hfm) failed"));
}
if (CloseHandle(vio->event_conn_closed) == 0) if (CloseHandle(vio->event_conn_closed) == 0)
{
error_count++;
DBUG_PRINT("vio_error", ("CloseHandle(vio->ecc) failed")); DBUG_PRINT("vio_error", ("CloseHandle(vio->ecc) failed"));
}
} }
vio->type= VIO_CLOSED; vio->type= VIO_CLOSED;
vio->sd= -1; vio->sd= -1;
DBUG_RETURN(!r); DBUG_RETURN(error_count);
} }
#endif /* HAVE_SMEM */ #endif /* HAVE_SMEM */
#endif /* __WIN__ */ #endif /* __WIN__ */
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