Merge from main 5.0 branch -> 5.0-build
Merge conflicts in test "create: - for "create.result", handled correctly by "bzr extmerge" (using "kdiff3"), - for "create.test", not reported as a conflict, but merged wrong (new block at the test end got duplicated), fixed manually. Test on Linux (Debian, PowerPC) was ok.
This commit is contained in:
commit
194d6875c6
@ -1836,7 +1836,13 @@ static uint get_table_structure(char *table, char *db, char *table_type,
|
||||
fprintf(sql_file, ",\n %s %s",
|
||||
quote_name(row[0], name_buff, 0), row[1]);
|
||||
}
|
||||
fprintf(sql_file, "\n) */;\n");
|
||||
/*
|
||||
Stand-in tables are always MyISAM tables as the default
|
||||
engine might have a column-limit that's lower than the
|
||||
number of columns in the view, and MyISAM support is
|
||||
guaranteed to be in the server anyway.
|
||||
*/
|
||||
fprintf(sql_file, "\n) ENGINE=MyISAM */;\n");
|
||||
check_io(sql_file);
|
||||
}
|
||||
}
|
||||
|
34
configure.in
34
configure.in
@ -504,46 +504,50 @@ then
|
||||
fi
|
||||
AC_SUBST(ICHECK)
|
||||
|
||||
# Lock for PS
|
||||
# Look for PS usage. We use double dollar-signs in FIND_PROC because this
|
||||
# value is written to a makefile, which interprets away one level of
|
||||
# dollar-signs. So, interpretation stages are m4 and then shell in autoconf,
|
||||
# then Make, then shell. The autoconf substitution uses single quotes, so
|
||||
# no unprotected single quotes should appear in the expression.
|
||||
AC_PATH_PROG(PS, ps, ps)
|
||||
AC_MSG_CHECKING("how to check if pid exists")
|
||||
PS=$ac_cv_path_PS
|
||||
# Linux style
|
||||
if $PS p $$ 2> /dev/null | grep `echo $0 | sed s/\-//` > /dev/null
|
||||
if $PS wwwp $$ 2> /dev/null | grep -- "$0" > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS wwwp \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
# Solaris
|
||||
elif $PS -fp $$ 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS -fp $$ 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS -p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS -p \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
# BSD style
|
||||
elif $PS -uaxww 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS -uaxww 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS -uaxww | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
# SysV style
|
||||
elif $PS -ef 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS -ef 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS -ef | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -ef | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
# Do anybody use this?
|
||||
elif $PS $$ 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS $$ 2> /dev/null | grep -- $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
else
|
||||
case $SYSTEM_TYPE in
|
||||
*freebsd*|*dragonfly*)
|
||||
FIND_PROC="$PS p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
|
||||
FIND_PROC="$PS p \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
|
||||
;;
|
||||
*darwin*)
|
||||
FIND_PROC="$PS -uaxww | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
;;
|
||||
*cygwin*)
|
||||
FIND_PROC="$PS -e | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
|
||||
FIND_PROC="$PS -e | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
|
||||
;;
|
||||
*netware*)
|
||||
FIND_PROC=
|
||||
;;
|
||||
*)
|
||||
AC_MSG_ERROR([Could not find the right ps switches. Which OS is this ?. See the Installation chapter in the Reference Manual.])
|
||||
AC_MSG_ERROR([Could not find the right ps and/or grep switches. Which OS is this? See the Installation chapter in the Reference Manual.])
|
||||
esac
|
||||
fi
|
||||
AC_SUBST(FIND_PROC)
|
||||
|
@ -1,6 +1,7 @@
|
||||
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 1 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter > $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 2 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter >> $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec sort $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/tmp.dat
|
||||
--let ndb_restore_opts=
|
||||
--let ndb_restore_filter=
|
||||
|
@ -3505,7 +3505,16 @@ sub run_testcase ($) {
|
||||
{
|
||||
mtr_timer_stop_all($glob_timers);
|
||||
mtr_report("\nServers started, exiting");
|
||||
exit(0);
|
||||
if ($glob_win32_perl)
|
||||
{
|
||||
#ActiveState perl hangs when using normal exit, use POSIX::_exit instead
|
||||
use POSIX qw[ _exit ];
|
||||
POSIX::_exit(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -582,4 +582,35 @@ master-bin.000001 4 Format_desc 1 98 Server version, Binlog ver: 4
|
||||
master-bin.000001 98 Query 1 219 use `test`; create table t1 (a bigint unsigned, b bigint(20) unsigned)
|
||||
master-bin.000001 219 Query 1 343 use `test`; insert into t1 values (9999999999999999,14632475938453979136)
|
||||
master-bin.000001 343 Query 1 419 use `test`; drop table t1
|
||||
CREATE DATABASE bug39182 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
USE bug39182;
|
||||
CREATE TABLE t1 (a VARCHAR(255) COLLATE utf8_unicode_ci)
|
||||
DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE s1 VARCHAR(255);
|
||||
SET s1= "test";
|
||||
CREATE TEMPORARY TABLE tmp1
|
||||
SELECT * FROM t1 WHERE a LIKE CONCAT("%", s1, "%");
|
||||
SELECT
|
||||
COLLATION(NAME_CONST('s1', _utf8'test')) c1,
|
||||
COLLATION(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) c2,
|
||||
COLLATION(s1) c3,
|
||||
COERCIBILITY(NAME_CONST('s1', _utf8'test')) d1,
|
||||
COERCIBILITY(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) d2,
|
||||
COERCIBILITY(s1) d3;
|
||||
DROP TEMPORARY TABLE tmp1;
|
||||
END//
|
||||
CALL p1();
|
||||
c1 c2 c3 d1 d2 d3
|
||||
utf8_general_ci utf8_unicode_ci utf8_unicode_ci 2 2 2
|
||||
SHOW BINLOG EVENTS FROM 1285;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 1285 Query 1 1483 use `bug39182`; CREATE TEMPORARY TABLE tmp1
|
||||
SELECT * FROM t1 WHERE a LIKE CONCAT("%", NAME_CONST('s1',_utf8'test' COLLATE 'utf8_unicode_ci'), "%")
|
||||
master-bin.000001 1483 Query 1 1575 use `bug39182`; DROP TEMPORARY TABLE tmp1
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE bug39182;
|
||||
USE test;
|
||||
End of 5.0 tests
|
||||
|
@ -90,4 +90,9 @@ Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1
|
||||
Note 1003 select `test`.`t2`.`a` AS `a`,(select count(0) AS `COUNT(*)` from `test`.`t1` where ((`test`.`t1`.`b` = `test`.`t2`.`a`) and (concat(`test`.`t1`.`b`,`test`.`t1`.`c`) = concat(_latin1'0',`test`.`t2`.`a`,_latin1'01')))) AS `x` from `test`.`t2` order by `test`.`t2`.`a`
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a TIMESTAMP);
|
||||
INSERT INTO t1 VALUES (NOW()),(NOW()),(NOW());
|
||||
SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
|
||||
a
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -1546,6 +1546,8 @@ SHOW INDEX FROM t1;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
|
||||
DROP TABLE t1;
|
||||
create user mysqltest_1@'test@test';
|
||||
ERROR HY000: Malformed hostname (illegal symbol: '@')
|
||||
CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
|
||||
INSERT IGNORE INTO t1 (b) VALUES (5);
|
||||
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||
|
@ -40,6 +40,6 @@ IN ind DECIMAL(10,2))
|
||||
BEGIN
|
||||
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
||||
END
|
||||
master-bin.000001 777 Query 1 988 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 988 Query 1 1077 use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 1077 Query 1 1156 use `test`; DROP TABLE t4
|
||||
master-bin.000001 777 Query 1 1044 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172 COLLATE 'latin1_swedish_ci'), NAME_CONST('ins2',_cp932 0xED40ED41ED42 COLLATE 'cp932_japanese_ci'), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 1044 Query 1 1133 use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 1133 Query 1 1212 use `test`; DROP TABLE t4
|
||||
|
@ -608,6 +608,65 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
SELECT DISTINCT a,a FROM t1 WHERE b < 12 ORDER BY a;
|
||||
a a
|
||||
DROP TABLE t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (id INT NOT NULL, fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
default NULL);
|
||||
INSERT INTO t1 VALUES (1,1,'ORANGE');
|
||||
INSERT INTO t1 VALUES (2,2,'APPLE');
|
||||
INSERT INTO t1 VALUES (3,2,'APPLE');
|
||||
INSERT INTO t1 VALUES (4,3,'PEAR');
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO @v1, @v2 FROM t1 WHERE fruit_name =
|
||||
'APPLE';
|
||||
SELECT @v1, @v2;
|
||||
@v1 @v2
|
||||
2 APPLE
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO @v3, @v4 FROM t1 GROUP BY fruit_id,
|
||||
fruit_name HAVING fruit_name = 'APPLE';
|
||||
SELECT @v3, @v4;
|
||||
@v3 @v4
|
||||
2 APPLE
|
||||
SELECT DISTINCT @v5:= fruit_id, @v6:= fruit_name INTO @v7, @v8 FROM t1 WHERE
|
||||
fruit_name = 'APPLE';
|
||||
SELECT @v5, @v6, @v7, @v8;
|
||||
@v5 @v6 @v7 @v8
|
||||
3 PEAR 3 PEAR
|
||||
SELECT DISTINCT @v5 + fruit_id, CONCAT(@v6, fruit_name) INTO @v9, @v10 FROM t1
|
||||
WHERE fruit_name = 'APPLE';
|
||||
SELECT @v5, @v6, @v7, @v8, @v9, @v10;
|
||||
@v5 @v6 @v7 @v8 @v9 @v10
|
||||
3 PEAR 3 PEAR 5 PEARAPPLE
|
||||
SELECT DISTINCT @v11:= @v5 + fruit_id, @v12:= CONCAT(@v6, fruit_name) INTO
|
||||
@v13, @v14 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
SELECT @v11, @v12, @v13, @v14;
|
||||
@v11 @v12 @v13 @v14
|
||||
6 PEARPEAR 6 PEARPEAR
|
||||
SELECT DISTINCT @v13, @v14 INTO @v15, @v16 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
SELECT @v15, @v16;
|
||||
@v15 @v16
|
||||
6 PEARPEAR
|
||||
SELECT DISTINCT 2 + 2, 'Bob' INTO @v17, @v18 FROM t1 WHERE fruit_name =
|
||||
'APPLE';
|
||||
SELECT @v17, @v18;
|
||||
@v17 @v18
|
||||
4 Bob
|
||||
DROP TABLE IF EXISTS t2;
|
||||
CREATE TABLE t2 (fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
default NULL);
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO OUTFILE
|
||||
'../tmp/data1.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
LOAD DATA INFILE '../tmp/data1.tmp' INTO TABLE t2;
|
||||
SELECT DISTINCT @v19:= fruit_id, @v20:= fruit_name INTO OUTFILE
|
||||
'../tmp/data2.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
LOAD DATA INFILE '../tmp/data2.tmp' INTO TABLE t2;
|
||||
SELECT @v19, @v20;
|
||||
@v19 @v20
|
||||
2 APPLE
|
||||
SELECT * FROM t2;
|
||||
fruit_id fruit_name
|
||||
2 APPLE
|
||||
2 APPLE
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t1 (a CHAR(1));
|
||||
INSERT INTO t1 VALUES('A'), (0);
|
||||
SELECT a FROM t1 WHERE a=0;
|
||||
|
@ -9,6 +9,10 @@ DROP DATABASE IF EXISTS federated;
|
||||
CREATE DATABASE federated;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
CREATE DATABASE federated;
|
||||
SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
@ -83,7 +87,7 @@ t2 CREATE TABLE `t2` (
|
||||
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1'
|
||||
INSERT INTO federated.t2 (id, name) VALUES (1, 'foo');
|
||||
INSERT INTO federated.t2 (id, name) VALUES (2, 'fee');
|
||||
SELECT * FROM federated.t2;
|
||||
SELECT * FROM federated.t2 ORDER BY id, name;
|
||||
id name
|
||||
1 foo
|
||||
2 fee
|
||||
@ -108,7 +112,7 @@ ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1%';
|
||||
INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
|
||||
INSERT INTO federated.t1 (id, name) VALUES (2, 'fee');
|
||||
SELECT * FROM federated.t1;
|
||||
SELECT * FROM federated.t1 ORDER BY id,name;
|
||||
id name
|
||||
1 foo
|
||||
2 fee
|
||||
@ -122,7 +126,7 @@ ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1%';
|
||||
INSERT INTO federated.`t1%` (id, name) VALUES (1, 'foo');
|
||||
INSERT INTO federated.`t1%` (id, name) VALUES (2, 'fee');
|
||||
SELECT * FROM federated.`t1%`;
|
||||
SELECT * FROM federated.`t1%` ORDER BY id, name;
|
||||
id name
|
||||
1 foo
|
||||
2 fee
|
||||
@ -160,6 +164,7 @@ INSERT INTO federated.t1 (name, other) VALUES ('Tenth Name', 101010);
|
||||
SELECT * FROM federated.t1;
|
||||
id name other created
|
||||
1 First Name 11111 2004-04-04 04:04:04
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
2 Second Name 22222 2004-04-04 04:04:04
|
||||
3 Third Name 33333 2004-04-04 04:04:04
|
||||
4 Fourth Name 44444 2004-04-04 04:04:04
|
||||
@ -168,7 +173,6 @@ id name other created
|
||||
7 Seventh Name 77777 2004-04-04 04:04:04
|
||||
8 Eigth Name 88888 2004-04-04 04:04:04
|
||||
9 Ninth Name 99999 2004-04-04 04:04:04
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
SELECT * FROM federated.t1 WHERE id = 5;
|
||||
id name other created
|
||||
5 Fifth Name 55555 2004-04-04 04:04:04
|
||||
@ -182,6 +186,7 @@ SELECT * FROM federated.t1 WHERE name = 'Sixth Name' AND other = 44444;
|
||||
id name other created
|
||||
SELECT * FROM federated.t1 WHERE name like '%th%';
|
||||
id name other created
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
3 Third Name 33333 2004-04-04 04:04:04
|
||||
4 Fourth Name 44444 2004-04-04 04:04:04
|
||||
5 Fifth Name 55555 2004-04-04 04:04:04
|
||||
@ -189,7 +194,6 @@ id name other created
|
||||
7 Seventh Name 77777 2004-04-04 04:04:04
|
||||
8 Eigth Name 88888 2004-04-04 04:04:04
|
||||
9 Ninth Name 99999 2004-04-04 04:04:04
|
||||
10 Tenth Name 101010 2004-04-04 04:04:04
|
||||
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
|
||||
SELECT * FROM federated.t1 WHERE name = '3rd name';
|
||||
id name other created
|
||||
@ -310,6 +314,7 @@ VALUES ('Tenth Name', 101010, '2005-03-12 12:00:01');
|
||||
SELECT * FROM federated.t1;
|
||||
id name other created
|
||||
1 First Name 11111 2004-01-01 01:01:01
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
2 Second Name 22222 2004-01-23 02:43:00
|
||||
3 Third Name 33333 2004-02-14 02:14:00
|
||||
4 Fourth Name 44444 2003-04-05 00:00:00
|
||||
@ -318,7 +323,6 @@ id name other created
|
||||
7 Seventh Name 77777 2003-12-12 18:32:00
|
||||
8 Eigth Name 88888 2005-03-12 11:00:00
|
||||
9 Ninth Name 99999 2005-03-12 11:00:01
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
SELECT * FROM federated.t1 WHERE id = 5;
|
||||
id name other created
|
||||
5 Fifth Name 55555 2001-02-02 02:02:02
|
||||
@ -330,6 +334,7 @@ id name other created
|
||||
4 Fourth Name 44444 2003-04-05 00:00:00
|
||||
SELECT * FROM federated.t1 WHERE name like '%th%';
|
||||
id name other created
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
3 Third Name 33333 2004-02-14 02:14:00
|
||||
4 Fourth Name 44444 2003-04-05 00:00:00
|
||||
5 Fifth Name 55555 2001-02-02 02:02:02
|
||||
@ -337,7 +342,6 @@ id name other created
|
||||
7 Seventh Name 77777 2003-12-12 18:32:00
|
||||
8 Eigth Name 88888 2005-03-12 11:00:00
|
||||
9 Ninth Name 99999 2005-03-12 11:00:01
|
||||
10 Tenth Name 101010 2005-03-12 12:00:01
|
||||
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
|
||||
SELECT * FROM federated.t1 WHERE name = '3rd name';
|
||||
id name other created
|
||||
@ -444,17 +448,17 @@ id name other
|
||||
7 Seventh Name NULL
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL;
|
||||
id name other
|
||||
4 NULL NULL
|
||||
10 NULL fee fie foe fum
|
||||
4 NULL NULL
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL and other IS NULL;
|
||||
id name other
|
||||
4 NULL NULL
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL or other IS NULL;
|
||||
id name other
|
||||
10 NULL fee fie foe fum
|
||||
2 Second Name NULL
|
||||
4 NULL NULL
|
||||
7 Seventh Name NULL
|
||||
10 NULL fee fie foe fum
|
||||
UPDATE federated.t1
|
||||
SET name = 'Fourth Name', other = 'four four four'
|
||||
WHERE name IS NULL AND other IS NULL;
|
||||
@ -466,6 +470,7 @@ id name other
|
||||
SELECT * FROM federated.t1;
|
||||
id name other
|
||||
1 First Name 11111
|
||||
10 Tenth Name fee fie foe fum
|
||||
2 Second Name two two two two
|
||||
3 Third Name 33333
|
||||
4 Fourth Name four four four
|
||||
@ -474,7 +479,6 @@ id name other
|
||||
7 Seventh Name seven seven
|
||||
8 Eigth Name 88888
|
||||
9 Ninth Name 99999
|
||||
10 Tenth Name fee fie foe fum
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL auto_increment,
|
||||
@ -655,8 +659,8 @@ id col1 col2 col3 col4
|
||||
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
|
||||
OR (col2 = 'three Three' AND col3 = 33);
|
||||
id col1 col2 col3 col4
|
||||
5 5 five 5 five five 5 5 55555
|
||||
3 3 three Three 33 33333
|
||||
5 5 five 5 five five 5 5 55555
|
||||
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'Two two')
|
||||
OR (col2 = 444 AND col3 = 4444444);
|
||||
id col1 col2 col3 col4
|
||||
@ -667,25 +671,25 @@ OR col3 = 33
|
||||
OR col4 = 4444444;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id > 5;
|
||||
id col1 col2 col3 col4
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id >= 5;
|
||||
id col1 col2 col3 col4
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
5 5 five 5 five five 5 5 55555
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id < 5;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
@ -702,6 +706,7 @@ id col1 col2 col3 col4
|
||||
SELECT * FROM federated.t1 WHERE id != 5;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
@ -709,7 +714,6 @@ id col1 col2 col3 col4
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE id > 3 AND id < 7;
|
||||
id col1 col2 col3 col4
|
||||
4 4 fourfourfour 444 4444444
|
||||
@ -737,25 +741,25 @@ id col1 col2 col3 col4
|
||||
SELECT * FROM federated.t1 WHERE id < 3 OR id > 7;
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE col2 = 'three Three';
|
||||
id col1 col2 col3 col4
|
||||
3 3 three Three 33 33333
|
||||
SELECT * FROM federated.t1 WHERE col2 > 'one';
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE col2 LIKE 's%';
|
||||
id col1 col2 col3 col4
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
SELECT * FROM federated.t1 WHERE col2 LIKE 'si%';
|
||||
id col1 col2 col3 col4
|
||||
6 6 six six Sixsix 6666 6
|
||||
@ -765,6 +769,7 @@ id col1 col2 col3 col4
|
||||
SELECT * FROM federated.t1 WHERE col2 NOT LIKE 'e%';
|
||||
id col1 col2 col3 col4
|
||||
1 1 one One 11 1111
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
@ -772,18 +777,17 @@ id col1 col2 col3 col4
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
SELECT * FROM federated.t1 WHERE col2 <> 'one One';
|
||||
id col1 col2 col3 col4
|
||||
4 4 fourfourfour 444 4444444
|
||||
5 5 five 5 five five 5 5 55555
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
2 2 Two two 22 2222
|
||||
3 3 three Three 33 33333
|
||||
4 4 fourfourfour 444 4444444
|
||||
5 5 five 5 five five 5 5 55555
|
||||
6 6 six six Sixsix 6666 6
|
||||
7 7 seven Sevenseven 77777 7777
|
||||
10 10 Tenth ten TEN 1010101 1010
|
||||
8 8 eight eight eight 88888 88
|
||||
9 9 nine Nine 999999 999999
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
CREATE TABLE federated.t1 (
|
||||
`col1` varchar(8) NOT NULL DEFAULT '',
|
||||
@ -950,11 +954,11 @@ INSERT INTO federated.t1 (name, floatval, other)
|
||||
VALUES (0, 00.3333, NULL);
|
||||
SELECT * FROM federated.t1;
|
||||
id name floatval other
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
1 NULL NULL NULL
|
||||
NULL foo 33.3333 NULL
|
||||
NULL 0 0.3333 NULL
|
||||
NULL NULL NULL NULL
|
||||
NULL NULL NULL NULL
|
||||
NULL foo 33.3333 NULL
|
||||
SELECT count(*) FROM federated.t1
|
||||
WHERE id IS NULL
|
||||
AND name IS NULL
|
||||
@ -983,13 +987,13 @@ Warning 1101 BLOB/TEXT column 'blurb' can't have a default value
|
||||
INSERT INTO federated.t1 VALUES (1, " MySQL supports a number of column types in several categories: numeric types, date and time types, and string (character) types. This chapter first gives an overview of these column types, and then provides a more detailed description of the properties of the types in each category, and a summary of the column type storage requirements. The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values.");
|
||||
INSERT INTO federated.t1 VALUES (2, "All arithmetic is done using signed BIGINT or DOUBLE values, so you should not use unsigned big integers larger than 9223372036854775807 (63 bits) except with bit functions! If you do that, some of the last digits in the result may be wrong because of rounding errors when converting a BIGINT value to a DOUBLE.");
|
||||
INSERT INTO federated.t1 VALUES (3, " A floating-point number. p represents the precision. It can be from 0 to 24 for a single-precision floating-point number and from 25 to 53 for a double-precision floating-point number. These types are like the FLOAT and DOUBLE types described immediately following. FLOAT(p) has the same range as the corresponding FLOAT and DOUBLE types, but the display size and number of decimals are undefined. ");
|
||||
INSERT INTO federated.t1 VALUES(4, "Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:");
|
||||
INSERT INTO federated.t1 VALUES(4, "Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:");
|
||||
SELECT * FROM federated.t1;
|
||||
blurb_id blurb
|
||||
1 MySQL supports a number of column types in several categories: numeric types, date and time types, and string (character) types. This chapter first gives an overview of these column types, and then provides a more detailed description of the properties of the types in each category, and a summary of the column type storage requirements. The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values.
|
||||
2 All arithmetic is done using signed BIGINT or DOUBLE values, so you should not use unsigned big integers larger than 9223372036854775807 (63 bits) except with bit functions! If you do that, some of the last digits in the result may be wrong because of rounding errors when converting a BIGINT value to a DOUBLE.
|
||||
3 A floating-point number. p represents the precision. It can be from 0 to 24 for a single-precision floating-point number and from 25 to 53 for a double-precision floating-point number. These types are like the FLOAT and DOUBLE types described immediately following. FLOAT(p) has the same range as the corresponding FLOAT and DOUBLE types, but the display size and number of decimals are undefined.
|
||||
4 Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:
|
||||
4 Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
CREATE TABLE federated.t1 (
|
||||
`a` int NOT NULL,
|
||||
@ -1741,20 +1745,20 @@ create trigger federated.t1_bi before insert on federated.t1 for each row set ne
|
||||
create table federated.t2 (a int, b int);
|
||||
insert into federated.t2 values (13, 17), (19, 23);
|
||||
insert into federated.t1 (a, b) values (1, 2), (3, 5), (7, 11);
|
||||
select * from federated.t1;
|
||||
select * from federated.t1 order by a;
|
||||
a b c
|
||||
1 2 2
|
||||
3 5 15
|
||||
7 11 77
|
||||
delete from federated.t1;
|
||||
insert into federated.t1 (a, b) select * from federated.t2;
|
||||
select * from federated.t1;
|
||||
select * from federated.t1 order by a;
|
||||
a b c
|
||||
13 17 221
|
||||
19 23 437
|
||||
delete from federated.t1;
|
||||
load data infile '../std_data_ln/loaddata5.dat' into table federated.t1 fields terminated by '' enclosed by '' ignore 1 lines (a, b);
|
||||
select * from federated.t1;
|
||||
select * from federated.t1 order by a;
|
||||
a b c
|
||||
3 4 12
|
||||
5 6 30
|
||||
@ -2081,8 +2085,10 @@ Table Checksum
|
||||
test.t1 2465757603
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
End of 5.0 tests
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
|
@ -9,6 +9,10 @@ DROP DATABASE IF EXISTS federated;
|
||||
CREATE DATABASE federated;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
CREATE DATABASE federated;
|
||||
SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
DROP TABLE IF EXISTS federated.bug_13118_table;
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int auto_increment primary key,
|
||||
@ -49,7 +53,9 @@ id value
|
||||
7 54
|
||||
8 55
|
||||
DROP TABLE federated.t1;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
|
||||
DROP TABLE federated.t1;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
DROP DATABASE IF EXISTS federated;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
|
@ -518,3 +518,13 @@ a filler b
|
||||
4 zz 4
|
||||
5 qq 4
|
||||
drop table t1, t2;
|
||||
CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'),
|
||||
KEY b(b), KEY a(a));
|
||||
INSERT INTO t1 VALUES ('y',''), ('z','');
|
||||
SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR
|
||||
(a='pure-S') OR (a='DE80337a') OR (a='DE80799');
|
||||
b a
|
||||
y
|
||||
z
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -209,3 +209,24 @@ drop view testdb_1.v1, v2, testdb_1.v3, v4;
|
||||
drop database testdb_1;
|
||||
drop user testdb_1@localhost;
|
||||
drop user testdb_2@localhost;
|
||||
create database testdb_1;
|
||||
create table testdb_1.t1 (a int);
|
||||
create view testdb_1.v1 as select * from testdb_1.t1;
|
||||
grant show view on testdb_1.* to mysqltest_1@localhost;
|
||||
grant select on testdb_1.v1 to mysqltest_1@localhost;
|
||||
select table_schema, table_name, view_definition from information_schema.views
|
||||
where table_name='v1';
|
||||
table_schema table_name view_definition
|
||||
testdb_1 v1 /* ALGORITHM=UNDEFINED */ select `testdb_1`.`t1`.`a` AS `a` from `testdb_1`.`t1`
|
||||
show create view testdb_1.v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testdb_1`.`v1` AS select `testdb_1`.`t1`.`a` AS `a` from `testdb_1`.`t1`
|
||||
revoke select on testdb_1.v1 from mysqltest_1@localhost;
|
||||
select table_schema, table_name, view_definition from information_schema.views
|
||||
where table_name='v1';
|
||||
table_schema table_name view_definition
|
||||
testdb_1 v1
|
||||
show create view testdb_1.v1;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v1'
|
||||
drop user mysqltest_1@localhost;
|
||||
drop database testdb_1;
|
||||
|
@ -747,11 +747,13 @@ select t1.b from v1a;
|
||||
ERROR 42S22: Unknown column 't1.b' in 'field list'
|
||||
select * from v1a join v1b on t1.b = t2.b;
|
||||
ERROR 42S22: Unknown column 't1.b' in 'on clause'
|
||||
select * from information_schema.statistics join information_schema.columns
|
||||
using(table_name,column_name) where table_name='user';
|
||||
TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
|
||||
user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL NULL BTREE NULL mysql 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI #
|
||||
user User NULL mysql 0 mysql PRIMARY 2 A 3 NULL NULL BTREE NULL mysql 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI #
|
||||
select
|
||||
statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT,
|
||||
columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT
|
||||
from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user';
|
||||
TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA COLUMN_COMMENT
|
||||
user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL BTREE NULL mysql NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI
|
||||
user User NULL mysql 0 mysql PRIMARY 2 A NULL NULL BTREE NULL mysql NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
|
@ -328,3 +328,123 @@ DROP VIEW v2;
|
||||
DROP VIEW v3;
|
||||
|
||||
# -- End of Bug#35469.
|
||||
Bug#37114
|
||||
SET SESSION character_set_client=latin1;
|
||||
SET SESSION character_set_server=latin1;
|
||||
SET SESSION character_set_connection=latin1;
|
||||
SET @OLD_SQL_MODE=@@SESSION.SQL_MODE;
|
||||
test LOAD DATA INFILE
|
||||
SET sql_mode = '';
|
||||
SELECT '1 \\aa\n' INTO DUMPFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt';
|
||||
CREATE TABLE t1 (id INT, val1 CHAR(3)) ENGINE=MyISAM;
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' REPLACE INTO TABLE t1 FIELDS TERMINATED BY ' ';
|
||||
SELECT * FROM t1;
|
||||
id val1
|
||||
1 \aa
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114_out.txt' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1;
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114_out.txt' FIELDS TERMINATED BY ' ' FROM t1;
|
||||
INSERT INTO t1 (id, val1) VALUES (1, '\aa');
|
||||
SELECT * FROM t1;
|
||||
id val1
|
||||
1 \aa
|
||||
1 \aa
|
||||
SET sql_mode='';
|
||||
INSERT INTO t1 (id, val1) VALUES (1, '\aa');
|
||||
SELECT * FROM t1;
|
||||
id val1
|
||||
1 \aa
|
||||
1 \aa
|
||||
1 aa
|
||||
DROP TABLE t1;
|
||||
test SELECT INTO OUTFILE
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY, val1 CHAR(4));
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
SET sql_mode = '';
|
||||
INSERT INTO t1 (id, val1) VALUES (5, '\ttab');
|
||||
INSERT INTO t1 (id, val1) VALUES (4, '\\r');
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
INSERT INTO t1 (id, val1) VALUES (3, '\tx');
|
||||
1.1 NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \tx
|
||||
4 \r
|
||||
5 tab
|
||||
|
||||
1.2 NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS ESCAPED BY '\' TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS ESCAPED BY '\' TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \\tx
|
||||
4 \\r
|
||||
5 tab
|
||||
|
||||
SET sql_mode = '';
|
||||
2.1 !NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \\tx
|
||||
4 \\r
|
||||
5 tab
|
||||
|
||||
SET sql_mode = '';
|
||||
2.2 !NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
|
||||
SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1 ORDER BY id;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS ESCAPED BY '' TERMINATED BY ' ';
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
t id val1 hex(val1)
|
||||
before 3 \tx 5C7478
|
||||
after 3 \tx 5C7478
|
||||
before 4 \r 5C72
|
||||
after 4 \r 5C72
|
||||
before 5 tab 09746162
|
||||
after 5 tab 09746162
|
||||
TRUNCATE t2;
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
|
||||
LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
|
||||
3 \tx
|
||||
4 \r
|
||||
5 tab
|
||||
|
||||
set session sql_mode=@OLD_SQL_MODE;
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests
|
||||
|
@ -99,3 +99,37 @@ kill query
|
||||
ERROR 70100: Query execution was interrupted
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
a int(11) unsigned default NULL,
|
||||
b varchar(255) default NULL,
|
||||
UNIQUE KEY a (a),
|
||||
KEY b (b)
|
||||
);
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
CREATE TABLE t3 SELECT * FROM t1;
|
||||
# test altering of columns that multiupdate doesn't use
|
||||
# normal mode
|
||||
# PS mode
|
||||
# test altering of columns that multiupdate uses
|
||||
# normal mode
|
||||
# PS mode
|
||||
DROP TABLE t1, t2, t3;
|
||||
CREATE TABLE t1( a INT, b INT );
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
|
||||
# 1. test regular tables
|
||||
# 1.1. test altering of columns that multiupdate doesn't use
|
||||
# 1.1.1. normal mode
|
||||
# 1.1.2. PS mode
|
||||
# 1.2. test altering of columns that multiupdate uses
|
||||
# 1.2.1. normal mode
|
||||
# 1.2.2. PS mode
|
||||
ALTER TABLE t1 ADD COLUMN a INT;
|
||||
# 2. test UNIONs
|
||||
# 2.1. test altering of columns that multiupdate doesn't use
|
||||
# 2.1.1. normal mode
|
||||
# 2.1.2. PS mode
|
||||
# 2.2. test altering of columns that multiupdate uses
|
||||
# 2.2.1. normal mode
|
||||
# 2.2.2. PS mode
|
||||
DROP TABLE t1;
|
||||
|
@ -1,3 +1,8 @@
|
||||
Bug#37938 - Test "mysqldump" lacks various insert statements
|
||||
Turn off concurrent inserts to avoid random errors
|
||||
NOTE: We reset the variable back to saved value at the end of test
|
||||
SET @OLD_CONCURRENT_INSERT = @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT = 0;
|
||||
DROP TABLE IF EXISTS t1, `"t"1`, t1aa, t2, t2aa, t3;
|
||||
drop database if exists mysqldump_test_db;
|
||||
drop database if exists db1;
|
||||
@ -1996,7 +2001,7 @@ DROP TABLE IF EXISTS `v2`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE TABLE `v2` (
|
||||
`a` varchar(30)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
/*!50001 DROP TABLE `v2`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
@ -2078,7 +2083,7 @@ DROP TABLE IF EXISTS `v1`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE TABLE `v1` (
|
||||
`a` int(11)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
/*!50001 DROP TABLE `v1`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
@ -2140,7 +2145,7 @@ DROP TABLE IF EXISTS `v2`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE TABLE `v2` (
|
||||
`a` varchar(30)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
/*!50001 DROP TABLE `v2`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
@ -2244,19 +2249,19 @@ DROP TABLE IF EXISTS `v1`;
|
||||
`a` int(11),
|
||||
`b` int(11),
|
||||
`c` varchar(30)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
DROP TABLE IF EXISTS `v2`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE TABLE `v2` (
|
||||
`a` int(11)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
DROP TABLE IF EXISTS `v3`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v3`*/;
|
||||
/*!50001 CREATE TABLE `v3` (
|
||||
`a` int(11),
|
||||
`b` int(11),
|
||||
`c` varchar(30)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
/*!50001 DROP TABLE `v1`*/;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE ALGORITHM=UNDEFINED */
|
||||
@ -2860,21 +2865,21 @@ DROP TABLE IF EXISTS `v0`;
|
||||
`a` int(11),
|
||||
`b` varchar(32),
|
||||
`c` varchar(32)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
DROP TABLE IF EXISTS `v1`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE TABLE `v1` (
|
||||
`a` int(11),
|
||||
`b` varchar(32),
|
||||
`c` varchar(32)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
DROP TABLE IF EXISTS `v2`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v2`*/;
|
||||
/*!50001 CREATE TABLE `v2` (
|
||||
`a` int(11),
|
||||
`b` varchar(32),
|
||||
`c` varchar(32)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
|
||||
USE `test`;
|
||||
/*!50001 DROP TABLE `v0`*/;
|
||||
@ -3198,7 +3203,7 @@ DROP TABLE IF EXISTS `v1`;
|
||||
/*!50001 DROP VIEW IF EXISTS `v1`*/;
|
||||
/*!50001 CREATE TABLE `v1` (
|
||||
`id` int(11)
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
|
||||
USE `mysqldump_test_db`;
|
||||
/*!50001 DROP TABLE `v1`*/;
|
||||
@ -3246,7 +3251,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysqldump_views` /*!40100 DEFAULT CHAR
|
||||
USE `mysqldump_views`;
|
||||
/*!50001 CREATE TABLE `nasishnasifu` (
|
||||
`id` bigint(20) unsigned
|
||||
) */;
|
||||
) ENGINE=MyISAM */;
|
||||
|
||||
USE `mysqldump_tables`;
|
||||
|
||||
@ -3565,6 +3570,7 @@ DROP TABLE t1,t2;
|
||||
|
||||
|
||||
-- Dump completed on DATE
|
||||
SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT;
|
||||
#
|
||||
# End of 5.0 tests
|
||||
#
|
||||
|
@ -12,18 +12,18 @@ user host
|
||||
dummy localhost
|
||||
dummy1 localhost
|
||||
dummy2 localhost
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
COUNT(*)
|
||||
6
|
||||
3
|
||||
**** On Slave ****
|
||||
SELECT user,host FROM mysql.user WHERE user != 'root';
|
||||
user host
|
||||
dummy localhost
|
||||
dummy1 localhost
|
||||
dummy2 localhost
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
COUNT(*)
|
||||
6
|
||||
3
|
||||
**** On Master ****
|
||||
DROP USER nonexisting@localhost;
|
||||
ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
|
||||
@ -32,15 +32,15 @@ ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
|
||||
DROP USER dummy1@localhost, dummy2@localhost;
|
||||
SELECT user, host FROM mysql.user WHERE user != 'root';
|
||||
user host
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
COUNT(*)
|
||||
3
|
||||
0
|
||||
**** On Slave ****
|
||||
SELECT user,host FROM mysql.user WHERE user != 'root';
|
||||
user host
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
COUNT(*)
|
||||
3
|
||||
0
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
|
@ -502,7 +502,7 @@ master-bin.000001 # Query 1 # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(col VARCHAR(10))
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
|
||||
INSERT INTO t1 VALUES(arg)
|
||||
master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test'))
|
||||
master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
|
||||
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
|
||||
SET @a = 1
|
||||
@ -841,7 +841,7 @@ CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
|
||||
INSERT INTO t1 VALUES(arg)
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test'))
|
||||
INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
|
||||
/*!*/;
|
||||
SET TIMESTAMP=t/*!*/;
|
||||
DROP PROCEDURE p1
|
||||
|
@ -1513,3 +1513,10 @@ end loop label1;
|
||||
end loop;
|
||||
end|
|
||||
ERROR 42000: End-label label1 without match
|
||||
CREATE TABLE t1 (a INT)|
|
||||
INSERT INTO t1 VALUES (1),(2)|
|
||||
CREATE PROCEDURE p1(a INT) BEGIN END|
|
||||
CALL p1((SELECT * FROM t1))|
|
||||
ERROR 21000: Subquery returns more than 1 row
|
||||
DROP PROCEDURE IF EXISTS p1|
|
||||
DROP TABLE t1|
|
||||
|
@ -6662,6 +6662,16 @@ drop procedure p1;
|
||||
drop function f1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
drop procedure if exists `p2` $
|
||||
create procedure `p2`(in `a` text charset utf8)
|
||||
begin
|
||||
declare `pos` int default 1;
|
||||
declare `str` text charset utf8;
|
||||
set `str` := `a`;
|
||||
select substr(`str`, `pos`+ 1 ) into `str`;
|
||||
end $
|
||||
call `p2`('s s s s s s');
|
||||
drop procedure `p2`;
|
||||
# ------------------------------------------------------------------
|
||||
# -- End of 5.0 tests
|
||||
# ------------------------------------------------------------------
|
||||
|
@ -157,10 +157,16 @@ DROP VIEW IF EXISTS v1;
|
||||
|
||||
--disable_query_log
|
||||
# Storage for the SELECTs to be used for the VIEW definition
|
||||
# Attention: my_select must be no too small because a statement like
|
||||
# SELECT LOAD_FILE(< file in MYSQLTEST_VARDIR >)
|
||||
# AS my_col,
|
||||
# id FROM t1_values';
|
||||
# might be a very long
|
||||
# Bug#38427 "Data too long" ... tests "<ENGINE>_func_view" fail
|
||||
CREATE TABLE t1_selects
|
||||
(
|
||||
id BIGINT AUTO_INCREMENT,
|
||||
my_select VARCHAR(200) NOT NULL,
|
||||
my_select VARCHAR(1000) NOT NULL,
|
||||
disable_result ENUM('Yes','No') NOT NULL default 'No',
|
||||
PRIMARY KEY(id),
|
||||
UNIQUE (my_select)
|
||||
|
@ -123,4 +123,42 @@ drop table t1;
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/
|
||||
show binlog events from 0;
|
||||
|
||||
|
||||
#
|
||||
# Bug #39182: Binary log producing incompatible character set query from
|
||||
# stored procedure.
|
||||
#
|
||||
CREATE DATABASE bug39182 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
|
||||
USE bug39182;
|
||||
CREATE TABLE t1 (a VARCHAR(255) COLLATE utf8_unicode_ci)
|
||||
DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
|
||||
|
||||
DELIMITER //;
|
||||
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
DECLARE s1 VARCHAR(255);
|
||||
SET s1= "test";
|
||||
CREATE TEMPORARY TABLE tmp1
|
||||
SELECT * FROM t1 WHERE a LIKE CONCAT("%", s1, "%");
|
||||
SELECT
|
||||
COLLATION(NAME_CONST('s1', _utf8'test')) c1,
|
||||
COLLATION(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) c2,
|
||||
COLLATION(s1) c3,
|
||||
COERCIBILITY(NAME_CONST('s1', _utf8'test')) d1,
|
||||
COERCIBILITY(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) d2,
|
||||
COERCIBILITY(s1) d3;
|
||||
DROP TEMPORARY TABLE tmp1;
|
||||
END//
|
||||
|
||||
DELIMITER ;//
|
||||
|
||||
CALL p1();
|
||||
SHOW BINLOG EVENTS FROM 1285;
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE bug39182;
|
||||
USE test;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -30,7 +30,7 @@ let $error_code= `select @a like "%#%error_code=0%" /* must return 1 */`;
|
||||
eval select $error_code /* must return 1 as query completed before got killed*/;
|
||||
|
||||
# cleanup for the sub-case
|
||||
system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
|
||||
|
||||
|
||||
#
|
||||
@ -58,7 +58,7 @@ let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`;
|
||||
eval select $error_code /* must return 0 to mean the killed query is in */;
|
||||
|
||||
# cleanup for the sub-case
|
||||
system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
|
||||
|
||||
|
||||
drop table t1,t2;
|
||||
|
@ -21,4 +21,4 @@ select * from t2;
|
||||
|
||||
# clean up
|
||||
drop table t1,t2;
|
||||
#--system rm $MYSQLTEST_VARDIR/tmp/binlog_start_comment.binlog
|
||||
#--remove_file $MYSQLTEST_VARDIR/tmp/binlog_start_comment.binlog
|
||||
|
@ -76,4 +76,13 @@ FROM t2 ORDER BY a;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #39353: Multiple conditions on timestamp column crashes server
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a TIMESTAMP);
|
||||
INSERT INTO t1 VALUES (NOW()),(NOW()),(NOW());
|
||||
SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -1171,6 +1171,11 @@ CREATE TABLE t1(c1 VARCHAR(33), KEY USING HASH (c1) USING BTREE) ENGINE=MEMORY;
|
||||
SHOW INDEX FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#35924 DEFINER should be stored 'quoted' in I_S
|
||||
#
|
||||
--error ER_UNKNOWN_ERROR
|
||||
create user mysqltest_1@'test@test';
|
||||
|
||||
#
|
||||
# Bug#38821: Assert table->auto_increment_field_not_null failed in open_table()
|
||||
|
@ -79,7 +79,8 @@ delete from t1;
|
||||
--eval select hex(load_file('$MYSQLTEST_VARDIR/master-data/test/t1.txt'));
|
||||
load data infile 't1.txt' into table t1;
|
||||
select hex(a) from t1;
|
||||
--exec rm $MYSQLTEST_VARDIR/master-data/test/t1.txt
|
||||
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.txt
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -438,72 +438,71 @@ EXPLAIN SELECT DISTINCT a,a FROM t1 WHERE b < 12 ORDER BY a;
|
||||
SELECT DISTINCT a,a FROM t1 WHERE b < 12 ORDER BY a;
|
||||
|
||||
DROP TABLE t1;
|
||||
# The test case for bug#20836 should be re-enabled when bug#16861 is resolved
|
||||
# The results for the test should be the same as in 4.1.
|
||||
#
|
||||
|
||||
#Bug #20836: Selecting into variables results in wrong results being returned
|
||||
#
|
||||
#--disable_warnings
|
||||
#DROP TABLE IF EXISTS t1;
|
||||
#--enable_warnings
|
||||
#
|
||||
#CREATE TABLE t1 (id INT NOT NULL, fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
#default NULL);
|
||||
#
|
||||
#INSERT INTO t1 VALUES (1,1,'ORANGE');
|
||||
#INSERT INTO t1 VALUES (2,2,'APPLE');
|
||||
#INSERT INTO t1 VALUES (3,2,'APPLE');
|
||||
#INSERT INTO t1 VALUES (4,3,'PEAR');
|
||||
#
|
||||
#SELECT DISTINCT fruit_id, fruit_name INTO @v1, @v2 FROM t1 WHERE fruit_name =
|
||||
#'APPLE';
|
||||
#SELECT @v1, @v2;
|
||||
#
|
||||
#SELECT DISTINCT fruit_id, fruit_name INTO @v3, @v4 FROM t1 GROUP BY fruit_id,
|
||||
#fruit_name HAVING fruit_name = 'APPLE';
|
||||
#SELECT @v3, @v4;
|
||||
#
|
||||
#SELECT DISTINCT @v5:= fruit_id, @v6:= fruit_name INTO @v7, @v8 FROM t1 WHERE
|
||||
#fruit_name = 'APPLE';
|
||||
#SELECT @v5, @v6, @v7, @v8;
|
||||
#
|
||||
#SELECT DISTINCT @v5 + fruit_id, CONCAT(@v6, fruit_name) INTO @v9, @v10 FROM t1
|
||||
#WHERE fruit_name = 'APPLE';
|
||||
#SELECT @v5, @v6, @v7, @v8, @v9, @v10;
|
||||
#
|
||||
#SELECT DISTINCT @v11:= @v5 + fruit_id, @v12:= CONCAT(@v6, fruit_name) INTO
|
||||
#@v13, @v14 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
#SELECT @v11, @v12, @v13, @v14;
|
||||
#
|
||||
#SELECT DISTINCT @v13, @v14 INTO @v15, @v16 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
#SELECT @v15, @v16;
|
||||
#
|
||||
#SELECT DISTINCT 2 + 2, 'Bob' INTO @v17, @v18 FROM t1 WHERE fruit_name =
|
||||
#'APPLE';
|
||||
#SELECT @v17, @v18;
|
||||
#
|
||||
#--disable_warnings
|
||||
#DROP TABLE IF EXISTS t2;
|
||||
#--enable_warnings
|
||||
#
|
||||
#CREATE TABLE t2 (fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
#default NULL);
|
||||
#
|
||||
#SELECT DISTINCT fruit_id, fruit_name INTO OUTFILE
|
||||
#'../tmp/data1.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
#LOAD DATA INFILE '../tmp/data1.tmp' INTO TABLE t2;
|
||||
#--exec rm $MYSQL_TEST_DIR/var/tmp/data1.tmp
|
||||
#
|
||||
#SELECT DISTINCT @v19:= fruit_id, @v20:= fruit_name INTO OUTFILE
|
||||
#'../tmp/data2.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
#LOAD DATA INFILE '../tmp/data2.tmp' INTO TABLE t2;
|
||||
#--exec rm $MYSQL_TEST_DIR/var/tmp/data2.tmp
|
||||
#
|
||||
#SELECT @v19, @v20;
|
||||
#SELECT * FROM t2;
|
||||
#
|
||||
#DROP TABLE t1;
|
||||
#DROP TABLE t2;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (id INT NOT NULL, fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
default NULL);
|
||||
|
||||
INSERT INTO t1 VALUES (1,1,'ORANGE');
|
||||
INSERT INTO t1 VALUES (2,2,'APPLE');
|
||||
INSERT INTO t1 VALUES (3,2,'APPLE');
|
||||
INSERT INTO t1 VALUES (4,3,'PEAR');
|
||||
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO @v1, @v2 FROM t1 WHERE fruit_name =
|
||||
'APPLE';
|
||||
SELECT @v1, @v2;
|
||||
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO @v3, @v4 FROM t1 GROUP BY fruit_id,
|
||||
fruit_name HAVING fruit_name = 'APPLE';
|
||||
SELECT @v3, @v4;
|
||||
|
||||
SELECT DISTINCT @v5:= fruit_id, @v6:= fruit_name INTO @v7, @v8 FROM t1 WHERE
|
||||
fruit_name = 'APPLE';
|
||||
SELECT @v5, @v6, @v7, @v8;
|
||||
|
||||
SELECT DISTINCT @v5 + fruit_id, CONCAT(@v6, fruit_name) INTO @v9, @v10 FROM t1
|
||||
WHERE fruit_name = 'APPLE';
|
||||
SELECT @v5, @v6, @v7, @v8, @v9, @v10;
|
||||
|
||||
SELECT DISTINCT @v11:= @v5 + fruit_id, @v12:= CONCAT(@v6, fruit_name) INTO
|
||||
@v13, @v14 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
SELECT @v11, @v12, @v13, @v14;
|
||||
|
||||
SELECT DISTINCT @v13, @v14 INTO @v15, @v16 FROM t1 WHERE fruit_name = 'APPLE';
|
||||
SELECT @v15, @v16;
|
||||
|
||||
SELECT DISTINCT 2 + 2, 'Bob' INTO @v17, @v18 FROM t1 WHERE fruit_name =
|
||||
'APPLE';
|
||||
SELECT @v17, @v18;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t2 (fruit_id INT NOT NULL, fruit_name varchar(20)
|
||||
default NULL);
|
||||
|
||||
SELECT DISTINCT fruit_id, fruit_name INTO OUTFILE
|
||||
'../tmp/data1.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
LOAD DATA INFILE '../tmp/data1.tmp' INTO TABLE t2;
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/data1.tmp
|
||||
|
||||
SELECT DISTINCT @v19:= fruit_id, @v20:= fruit_name INTO OUTFILE
|
||||
'../tmp/data2.tmp' FROM t1 WHERE fruit_name = 'APPLE';
|
||||
LOAD DATA INFILE '../tmp/data2.tmp' INTO TABLE t2;
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/data2.tmp
|
||||
|
||||
SELECT @v19, @v20;
|
||||
SELECT * FROM t2;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
#
|
||||
# Bug #15881: cast problems
|
||||
|
@ -1,6 +1,22 @@
|
||||
source include/federated.inc;
|
||||
# Note: This test is tricky. It reuses the prerequisites generated for
|
||||
# replication tests (master+slave server and connections) for its
|
||||
# own purposes. But the replication feature itself is stopped.
|
||||
#
|
||||
|
||||
|
||||
--source include/federated.inc
|
||||
|
||||
connection default;
|
||||
|
||||
# Disable concurrent inserts to avoid test failures when reading
|
||||
# data from concurrent connections (insert might return before
|
||||
# the data is actually in the table).
|
||||
SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
|
||||
connection slave;
|
||||
SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL,
|
||||
@ -11,7 +27,7 @@ CREATE TABLE federated.t1 (
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
# test too many items (malformed) in the comment string url
|
||||
--error 1432
|
||||
--error ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL,
|
||||
`name` varchar(32) NOT NULL default ''
|
||||
@ -20,7 +36,7 @@ CREATE TABLE federated.t1 (
|
||||
CONNECTION='mysql://root@127.0.0.1:@/too/many/items/federated/t1';
|
||||
|
||||
# test not enough items (malformed) in the comment string url
|
||||
--error 1432
|
||||
--error ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE
|
||||
CREATE TABLE federated.t1 (
|
||||
`id` int(20) NOT NULL,
|
||||
`name` varchar(32) NOT NULL default ''
|
||||
@ -36,7 +52,7 @@ eval CREATE TABLE federated.t1 (
|
||||
)
|
||||
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||
CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t3';
|
||||
--error 1431
|
||||
--error ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST
|
||||
SELECT * FROM federated.t1;
|
||||
DROP TABLE federated.t1;
|
||||
|
||||
@ -48,7 +64,7 @@ eval CREATE TABLE federated.t1 (
|
||||
)
|
||||
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||
CONNECTION='mysql://user:pass@127.0.0.1:$SLAVE_MYPORT/federated/t1';
|
||||
--error 1429
|
||||
--error ER_CONNECT_TO_FOREIGN_DATA_SOURCE
|
||||
SELECT * FROM federated.t1;
|
||||
DROP TABLE federated.t1;
|
||||
|
||||
@ -64,6 +80,7 @@ eval CREATE TABLE federated.t1 (
|
||||
INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
|
||||
INSERT INTO federated.t1 (id, name) VALUES (2, 'fee');
|
||||
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
DELETE FROM federated.t1;
|
||||
DROP TABLE federated.t1;
|
||||
@ -84,7 +101,7 @@ eval SHOW CREATE TABLE federated.t2;
|
||||
INSERT INTO federated.t2 (id, name) VALUES (1, 'foo');
|
||||
INSERT INTO federated.t2 (id, name) VALUES (2, 'fee');
|
||||
|
||||
SELECT * FROM federated.t2;
|
||||
SELECT * FROM federated.t2 ORDER BY id, name;
|
||||
DROP TABLE federated.t2;
|
||||
|
||||
connection slave;
|
||||
@ -111,7 +128,7 @@ eval CREATE TABLE federated.t1 (
|
||||
INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
|
||||
INSERT INTO federated.t1 (id, name) VALUES (2, 'fee');
|
||||
|
||||
SELECT * FROM federated.t1;
|
||||
SELECT * FROM federated.t1 ORDER BY id,name;
|
||||
DELETE FROM federated.t1;
|
||||
DROP TABLE IF EXISTS federated.t1;
|
||||
|
||||
@ -126,7 +143,7 @@ eval CREATE TABLE federated.`t1%` (
|
||||
INSERT INTO federated.`t1%` (id, name) VALUES (1, 'foo');
|
||||
INSERT INTO federated.`t1%` (id, name) VALUES (2, 'fee');
|
||||
|
||||
SELECT * FROM federated.`t1%`;
|
||||
SELECT * FROM federated.`t1%` ORDER BY id, name;
|
||||
DELETE FROM federated.`t1%`;
|
||||
DROP TABLE IF EXISTS federated.`t1%`;
|
||||
|
||||
@ -166,12 +183,14 @@ INSERT INTO federated.t1 (name, other) VALUES ('Ninth Name', 99999);
|
||||
INSERT INTO federated.t1 (name, other) VALUES ('Tenth Name', 101010);
|
||||
|
||||
# basic select
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
# with PRIMARY KEY index_read_idx
|
||||
SELECT * FROM federated.t1 WHERE id = 5;
|
||||
SELECT * FROM federated.t1 WHERE name = 'Sixth Name';
|
||||
SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
|
||||
SELECT * FROM federated.t1 WHERE name = 'Sixth Name' AND other = 44444;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE name like '%th%';
|
||||
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
|
||||
SELECT * FROM federated.t1 WHERE name = '3rd name';
|
||||
@ -243,6 +262,7 @@ INSERT INTO federated.t1 (name, other, created)
|
||||
VALUES ('Tenth Name', 101010, '2005-03-12 12:00:01');
|
||||
|
||||
# basic select
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
# with PRIMARY KEY index_read_idx
|
||||
SELECT * FROM federated.t1 WHERE id = 5;
|
||||
@ -251,6 +271,7 @@ SELECT * FROM federated.t1 WHERE id = 5;
|
||||
SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
|
||||
# with regular key index_read -> index_read_idx
|
||||
SELECT * FROM federated.t1 WHERE other = 44444;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE name like '%th%';
|
||||
# update - update_row, index_read_idx
|
||||
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
|
||||
@ -303,9 +324,12 @@ INSERT INTO federated.t1 (name, other) VALUES ('Eigth Name', 88888);
|
||||
INSERT INTO federated.t1 (name, other) VALUES ('Ninth Name', 99999);
|
||||
INSERT INTO federated.t1 (other) VALUES ('fee fie foe fum');
|
||||
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE other IS NULL;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL;
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL and other IS NULL;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL or other IS NULL;
|
||||
|
||||
UPDATE federated.t1
|
||||
@ -316,6 +340,7 @@ UPDATE federated.t1 SET other = 'two two two two' WHERE name = 'Second Name';
|
||||
UPDATE federated.t1 SET other = 'seven seven' WHERE name like 'Sev%';
|
||||
UPDATE federated.t1 SET name = 'Tenth Name' WHERE other like 'fee fie%';
|
||||
SELECT * FROM federated.t1 WHERE name IS NULL OR other IS NULL ;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
|
||||
# test multi-keys
|
||||
@ -386,6 +411,7 @@ INSERT INTO federated.t1 (name, bincol, floatval, other)
|
||||
VALUES ('second', 0x66, 22.22, 2222);
|
||||
INSERT INTO federated.t1 (name, bincol, floatval, other)
|
||||
VALUES ('third', 'g', 22.22, 2222);
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
SELECT * FROM federated.t1 WHERE name = 'second';
|
||||
SELECT * FROM federated.t1 WHERE bincol= 'f';
|
||||
@ -394,6 +420,7 @@ SELECT * FROM federated.t1 WHERE bincol= 0x67;
|
||||
SELECT * FROM federated.t1 WHERE bincol= 'g';
|
||||
SELECT * FROM federated.t1 WHERE floatval=11.11;
|
||||
SELECT * FROM federated.t1 WHERE name='third';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE other=2222;
|
||||
SELECT * FROM federated.t1 WHERE name='third' and other=2222;
|
||||
|
||||
@ -467,32 +494,47 @@ SELECT * FROM federated.t1 WHERE id = 5
|
||||
SELECT * FROM federated.t1 WHERE id = 5
|
||||
AND col2 = 'five 5 five five 5' AND col3 = 5
|
||||
AND col4 = 55555;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
|
||||
OR (col2 = 'three Three' AND col3 = 33);
|
||||
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'Two two')
|
||||
OR (col2 = 444 AND col3 = 4444444);
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id = 1
|
||||
OR col1 = 10
|
||||
OR col2 = 'Two two'
|
||||
OR col3 = 33
|
||||
OR col4 = 4444444;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id > 5;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id >= 5;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id < 5;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id <= 5;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id != 5;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id > 3 AND id < 7;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id > 3 AND id <= 7;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id >= 3 AND id <= 7;
|
||||
SELECT * FROM federated.t1 WHERE id < 3 AND id <= 7;
|
||||
SELECT * FROM federated.t1 WHERE id < 3 AND id > 7;
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE id < 3 OR id > 7;
|
||||
SELECT * FROM federated.t1 WHERE col2 = 'three Three';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col2 > 'one';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col2 LIKE 's%';
|
||||
SELECT * FROM federated.t1 WHERE col2 LIKE 'si%';
|
||||
SELECT * FROM federated.t1 WHERE col2 LIKE 'se%';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col2 NOT LIKE 'e%';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col2 <> 'one One';
|
||||
|
||||
# more multi-column indexes, in the primary key
|
||||
@ -546,13 +588,19 @@ SELECT * FROM federated.t1 WHERE col3 = 'bababababa';
|
||||
SELECT * FROM federated.t1 WHERE col1 = 'gggg' AND col2 = 'ggggggggggggggggggg';
|
||||
SELECT * FROM federated.t1 WHERE col1 = 'gggg' AND col3 = 'gagagagaga';
|
||||
SELECT * FROM federated.t1 WHERE col1 = 'ffff' AND col4 = 'fcfcfcfcfcfcfcfc';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col1 > 'bbbb';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col1 >= 'bbbb';
|
||||
SELECT * FROM federated.t1 WHERE col1 < 'bbbb';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col1 <= 'bbbb';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col1 <> 'bbbb';
|
||||
SELECT * FROM federated.t1 WHERE col1 LIKE 'b%';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col4 LIKE '%b%';
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1 WHERE col1 NOT LIKE 'c%';
|
||||
SELECT * FROM federated.t1 WHERE col4 NOT LIKE '%c%';
|
||||
connection slave;
|
||||
@ -583,11 +631,13 @@ INSERT INTO federated.t1 VALUES ('ccd', '112', 'zzzz');
|
||||
|
||||
# let's see what the foreign database says
|
||||
connection slave;
|
||||
--sorted_result
|
||||
SELECT col3 FROM federated.t1 WHERE (
|
||||
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND
|
||||
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111'));
|
||||
|
||||
connection master;
|
||||
--sorted_result
|
||||
SELECT col3 FROM federated.t1 WHERE (
|
||||
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND
|
||||
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111'));
|
||||
@ -622,6 +672,7 @@ INSERT INTO federated.t1 (name, floatval, other)
|
||||
VALUES ('foo', 33.33333332, NULL);
|
||||
INSERT INTO federated.t1 (name, floatval, other)
|
||||
VALUES (0, 00.3333, NULL);
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
SELECT count(*) FROM federated.t1
|
||||
WHERE id IS NULL
|
||||
@ -651,7 +702,8 @@ eval CREATE TABLE federated.t1 (
|
||||
INSERT INTO federated.t1 VALUES (1, " MySQL supports a number of column types in several categories: numeric types, date and time types, and string (character) types. This chapter first gives an overview of these column types, and then provides a more detailed description of the properties of the types in each category, and a summary of the column type storage requirements. The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values.");
|
||||
INSERT INTO federated.t1 VALUES (2, "All arithmetic is done using signed BIGINT or DOUBLE values, so you should not use unsigned big integers larger than 9223372036854775807 (63 bits) except with bit functions! If you do that, some of the last digits in the result may be wrong because of rounding errors when converting a BIGINT value to a DOUBLE.");
|
||||
INSERT INTO federated.t1 VALUES (3, " A floating-point number. p represents the precision. It can be from 0 to 24 for a single-precision floating-point number and from 25 to 53 for a double-precision floating-point number. These types are like the FLOAT and DOUBLE types described immediately following. FLOAT(p) has the same range as the corresponding FLOAT and DOUBLE types, but the display size and number of decimals are undefined. ");
|
||||
INSERT INTO federated.t1 VALUES(4, "Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:");
|
||||
INSERT INTO federated.t1 VALUES(4, "Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:");
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
|
||||
connection slave;
|
||||
@ -1010,6 +1062,7 @@ eval CREATE TABLE federated.t1 (
|
||||
INSERT INTO federated.t1 (code, fileguts, creation_date) VALUES ('ASDFWERQWETWETAWETA', '*()w*09*$()*#)(*09*^90*d)(*s()d8g)(s*ned)(*)(s*d)(*hn(d*)(*sbn)D((#$*(#*%%&#&^$#&#&#&#&^&#*&*#$*&^*(&#(&Q*&&(*!&!(*&*(#&*(%&#<S-F8>*<S-F8><S-F8><S-F8>#<S-F8>#<S-F8>#<S-F8>[[', '2003-03-03 03:03:03');
|
||||
INSERT INTO federated.t1 (code, fileguts, creation_date) VALUES ('DEUEUEUEUEUEUEUEUEU', '*()w*09*$()*#)(*09*^90*d)(*s()d8g)(s*ned)(*)(s*d)(*hn(d*)(*sbn)D((#$*(#*%%&#&^$#&#&#&#&^&#*&*#$*&^*(&#(&Q*&&(*!&!(*&*(#&*(%&#<S-F8>*<S-F8><S-F8><S-F8>#<S-F8>#<S-F8>#<S-F8>[[', '2004-04-04 04:04:04');
|
||||
INSERT INTO federated.t1 (code, fileguts, creation_date) VALUES ('DEUEUEUEUEUEUEUEUEU', 'jimbob', '2004-04-04 04:04:04');
|
||||
--sorted_result
|
||||
SELECT * FROM federated.t1;
|
||||
# test blob indexes
|
||||
SELECT * FROM federated.t1 WHERE fileguts = 'jimbob';
|
||||
@ -1030,6 +1083,7 @@ CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1';
|
||||
INSERT INTO federated.t1 VALUES (0x00);
|
||||
INSERT INTO federated.t1 VALUES (0x0001);
|
||||
INSERT INTO federated.t1 VALUES (0x0100);
|
||||
--sorted_result
|
||||
SELECT HEX(a) FROM federated.t1;
|
||||
|
||||
# # simple tests for cyrillic, given to me by
|
||||
@ -1044,20 +1098,20 @@ SELECT HEX(a) FROM federated.t1;
|
||||
# CREATE TABLE federated.t1 (a char(20)) charset=cp1251;
|
||||
# #
|
||||
# connection master;
|
||||
# INSERT INTO federated.t1 values (_cp1251'À-ÁÂÃ-1');
|
||||
# INSERT INTO federated.t1 values (_cp1251'Á-ÂÃÄ-2');
|
||||
# INSERT INTO federated.t1 values (_cp1251'À-ÁÂÃ-1');
|
||||
# INSERT INTO federated.t1 values (_cp1251'Á-ÂÃÄ-2');
|
||||
# SELECT * FROM federated.t1;
|
||||
# SET names cp1251;
|
||||
# INSERT INTO federated.t1 values ('Â-ÃÄÅ-3');
|
||||
# INSERT INTO federated.t1 values ('Ã-ŨÆ-4');
|
||||
# INSERT INTO federated.t1 values ('Â-ÃÄÅ-3');
|
||||
# INSERT INTO federated.t1 values ('Ã-ŨÆ-4');
|
||||
# SELECT * FROM federated.t1;
|
||||
# SELECT hex(a) from federated.t1;
|
||||
# SELECT hex(a) from federated.t1 ORDER BY a desc;
|
||||
# UPDATE federated.t1 SET a='À-ÁÂÃ-1íîâûé' WHERE a='À-ÁÂÃ-1';
|
||||
# UPDATE federated.t1 SET a='À-ÁÂÃ-1íîâûé' WHERE a='À-ÁÂÃ-1';
|
||||
# SELECT * FROM federated.t1;
|
||||
# DELETE FROM federated.t1 WHERE a='Ã-ŨÆ-4';
|
||||
# DELETE FROM federated.t1 WHERE a='Ã-ŨÆ-4';
|
||||
# SELECT * FROM federated.t1;
|
||||
# DELETE FROM federated.t1 WHERE a>'Â-';
|
||||
# DELETE FROM federated.t1 WHERE a>'Â-';
|
||||
# SELECT * FROM federated.t1;
|
||||
# SET names default;
|
||||
# DROP TABLE IF EXISTS federated.t1;
|
||||
@ -1108,6 +1162,7 @@ INSERT INTO federated.t1 (name, country_id, other) VALUES ('Monty', 4, 33333);
|
||||
INSERT INTO federated.t1 (name, country_id, other) VALUES ('Sanja', 5, 33333);
|
||||
|
||||
#inner join
|
||||
--sorted_result
|
||||
SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
|
||||
federated.t1.other AS other, federated.countries.country AS country
|
||||
FROM federated.t1, federated.countries WHERE
|
||||
@ -1181,7 +1236,7 @@ INSERT INTO federated.alter_me (id, name) VALUES (2, 'David');
|
||||
|
||||
SELECT * FROM federated.alter_me;
|
||||
|
||||
--error 1031
|
||||
--error ER_ILLEGAL_HA
|
||||
ALTER TABLE federated.alter_me MODIFY COLUMN id int(16) NOT NULL;
|
||||
|
||||
SELECT * FROM federated.alter_me;
|
||||
@ -1452,15 +1507,15 @@ insert into federated.t2 values (13, 17), (19, 23);
|
||||
# Each of three statements should correctly set values for all three fields
|
||||
# insert
|
||||
insert into federated.t1 (a, b) values (1, 2), (3, 5), (7, 11);
|
||||
select * from federated.t1;
|
||||
select * from federated.t1 order by a;
|
||||
delete from federated.t1;
|
||||
# insert ... select
|
||||
insert into federated.t1 (a, b) select * from federated.t2;
|
||||
select * from federated.t1;
|
||||
select * from federated.t1 order by a;
|
||||
delete from federated.t1;
|
||||
# load
|
||||
load data infile '../std_data_ln/loaddata5.dat' into table federated.t1 fields terminated by '' enclosed by '' ignore 1 lines (a, b);
|
||||
select * from federated.t1;
|
||||
select * from federated.t1 order by a;
|
||||
drop tables federated.t1, federated.t2;
|
||||
|
||||
connection slave;
|
||||
@ -1769,7 +1824,13 @@ DROP TABLE t1;
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
source include/federated_cleanup.inc;
|
||||
connection default;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
|
||||
connection slave;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
|
||||
|
||||
connection default;
|
||||
source include/federated_cleanup.inc;
|
||||
|
@ -1,8 +1,16 @@
|
||||
--source include/have_bug25714.inc
|
||||
source include/federated.inc;
|
||||
|
||||
connection master;
|
||||
# Disable concurrent inserts to avoid test failures when reading
|
||||
# data from concurrent connections (insert might return before
|
||||
# the data is actually in the table).
|
||||
SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
|
||||
connection slave;
|
||||
SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= 0;
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS federated.bug_13118_table;
|
||||
--enable_warnings
|
||||
@ -39,9 +47,12 @@ SELECT LAST_INSERT_ID();
|
||||
SELECT * from federated.t1;
|
||||
|
||||
DROP TABLE federated.t1;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
|
||||
connection slave;
|
||||
DROP TABLE federated.t1;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
|
||||
|
||||
|
||||
source include/federated_cleanup.inc;
|
||||
|
||||
|
||||
|
@ -463,3 +463,18 @@ select * from t2 where a=4 or b=4;
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug #37943: Reproducible mysqld crash/sigsegv in sel_trees_can_be_ored
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'),
|
||||
KEY b(b), KEY a(a));
|
||||
INSERT INTO t1 VALUES ('y',''), ('z','');
|
||||
|
||||
#should not crash
|
||||
SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR
|
||||
(a='pure-S') OR (a='DE80337a') OR (a='DE80799');
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -82,6 +82,7 @@ drop function func2;
|
||||
drop database `inf%`;
|
||||
drop procedure mbase.p1;
|
||||
drop database mbase;
|
||||
disconnect user1;
|
||||
|
||||
#
|
||||
# Bug#18282 INFORMATION_SCHEMA.TABLES provides inconsistent info about invalid views
|
||||
@ -210,3 +211,32 @@ drop view testdb_1.v1, v2, testdb_1.v3, v4;
|
||||
drop database testdb_1;
|
||||
drop user testdb_1@localhost;
|
||||
drop user testdb_2@localhost;
|
||||
|
||||
#
|
||||
# Bug#22763 Disrepancy between SHOW CREATE VIEW and I_S.VIEWS
|
||||
#
|
||||
create database testdb_1;
|
||||
create table testdb_1.t1 (a int);
|
||||
create view testdb_1.v1 as select * from testdb_1.t1;
|
||||
|
||||
grant show view on testdb_1.* to mysqltest_1@localhost;
|
||||
grant select on testdb_1.v1 to mysqltest_1@localhost;
|
||||
|
||||
connect (user1,localhost,mysqltest_1,,test);
|
||||
connection user1;
|
||||
select table_schema, table_name, view_definition from information_schema.views
|
||||
where table_name='v1';
|
||||
show create view testdb_1.v1;
|
||||
|
||||
connection default;
|
||||
revoke select on testdb_1.v1 from mysqltest_1@localhost;
|
||||
connection user1;
|
||||
select table_schema, table_name, view_definition from information_schema.views
|
||||
where table_name='v1';
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
show create view testdb_1.v1;
|
||||
|
||||
connection default;
|
||||
drop user mysqltest_1@localhost;
|
||||
drop database testdb_1;
|
||||
disconnect user1;
|
||||
|
@ -546,10 +546,12 @@ select * from v1a join v1b on t1.b = t2.b;
|
||||
#
|
||||
# Bug #17523 natural join and information_schema
|
||||
#
|
||||
# We mask out the Privileges column because it differs with embedded server
|
||||
--replace_column 31 #
|
||||
select * from information_schema.statistics join information_schema.columns
|
||||
using(table_name,column_name) where table_name='user';
|
||||
# Omit columns.PRIVILIGES as it may vary with embedded server.
|
||||
# Omit columns.ORDINAL_POSITION and statistics.CARDINALITY as it may vary with hostname='localhost'.
|
||||
select
|
||||
statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT,
|
||||
columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT
|
||||
from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user';
|
||||
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
|
@ -318,4 +318,184 @@ DROP VIEW v3;
|
||||
|
||||
###########################################################################
|
||||
|
||||
# End of 5.0 tests
|
||||
|
||||
#
|
||||
# Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with
|
||||
# LOAD DATA INFILE
|
||||
#
|
||||
|
||||
# - For each plain "SELECT id,...", the 1st pair ("before" SELECT...OUTFILE,
|
||||
# LOAD...INFILE) and the 2nd pair of lines ("after") in the result should
|
||||
# look the same, otherwise we broke the dumpe/restore cycle!
|
||||
#
|
||||
# - the \r is always { '\\', 'r' } in memory, but on-disk format changes
|
||||
#
|
||||
# - the \t is { '\t' } or { '\\', 't' } in memory depending on whether \
|
||||
# is magic (that is, NO_BACKSLASH_ESCAPES is not set) at INSERT-time.
|
||||
# on-disk format varies.
|
||||
#
|
||||
# - while INFILE/OUTFILE behaviour changes according to NO_BACKSLASH_ESCAPES,
|
||||
# we can override these defaults using ESCAPED BY '...'
|
||||
# 1: NO_BACKSLASH_ESCAPES default, \ on-disk: \,t,x,\r
|
||||
# 2: NO_BACKSLASH_ESCAPES override, \\ on-disk: \,\,t,x,\,\,r
|
||||
# 3: !NO_BACKSLASH_ESCAPES default, \\ on-disk: tab,\,\,r
|
||||
# 3: !NO_BACKSLASH_ESCAPES override, \ on-disk: tab,\,r
|
||||
|
||||
--echo Bug#37114
|
||||
|
||||
SET SESSION character_set_client=latin1;
|
||||
SET SESSION character_set_server=latin1;
|
||||
SET SESSION character_set_connection=latin1;
|
||||
SET @OLD_SQL_MODE=@@SESSION.SQL_MODE;
|
||||
|
||||
# 0. test LOAD DATA INFILE first; if that works, all issues in
|
||||
# SELECT INTO OUTFILE / LOAD DATA INFILE cycles below are
|
||||
# arguably in the saving.
|
||||
|
||||
--echo test LOAD DATA INFILE
|
||||
|
||||
--let $file=$MYSQLTEST_VARDIR/tmp/bug37114.txt
|
||||
--let $file2=$MYSQLTEST_VARDIR/tmp/bug37114_out.txt
|
||||
|
||||
SET sql_mode = '';
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT '1 \\\\aa\n' INTO DUMPFILE '$file'
|
||||
|
||||
CREATE TABLE t1 (id INT, val1 CHAR(3)) ENGINE=MyISAM;
|
||||
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval LOAD DATA INFILE '$file' REPLACE INTO TABLE t1 FIELDS TERMINATED BY ' '
|
||||
SELECT * FROM t1;
|
||||
|
||||
# show we can write this with OUTFILE, forcing the parameters for now
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT * INTO OUTFILE '$file2' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1
|
||||
--diff_files $file $file2
|
||||
--remove_file $file2
|
||||
|
||||
# now show the OUTFILE defaults are correct with NO_BACKSLASH_ESCAPES
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT * INTO OUTFILE '$file2' FIELDS TERMINATED BY ' ' FROM t1
|
||||
--diff_files $file $file2
|
||||
--remove_file $file2
|
||||
|
||||
INSERT INTO t1 (id, val1) VALUES (1, '\aa');
|
||||
SELECT * FROM t1;
|
||||
|
||||
SET sql_mode='';
|
||||
INSERT INTO t1 (id, val1) VALUES (1, '\aa');
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--remove_file $file
|
||||
|
||||
|
||||
|
||||
--echo test SELECT INTO OUTFILE
|
||||
|
||||
CREATE TABLE t1 (id INT PRIMARY KEY, val1 CHAR(4));
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
||||
# 1. with NO_BACKSLASH_ESCAPES on
|
||||
|
||||
SET sql_mode = '';
|
||||
INSERT INTO t1 (id, val1) VALUES (5, '\ttab');
|
||||
INSERT INTO t1 (id, val1) VALUES (4, '\\r');
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
INSERT INTO t1 (id, val1) VALUES (3, '\tx');
|
||||
|
||||
--echo 1.1 NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT * INTO OUTFILE '$file' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS TERMINATED BY ' '
|
||||
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
|
||||
TRUNCATE t2;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval SELECT LOAD_FILE("$file");
|
||||
--remove_file $file
|
||||
|
||||
|
||||
|
||||
--echo 1.2 NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT * INTO OUTFILE '$file' FIELDS ESCAPED BY '\' TERMINATED BY ' ' FROM t1 ORDER BY id
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS ESCAPED BY '\' TERMINATED BY ' '
|
||||
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
|
||||
TRUNCATE t2;
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval SELECT LOAD_FILE("$file");
|
||||
--remove_file $file
|
||||
|
||||
|
||||
|
||||
# 2. with NO_BACKSLASH_ESCAPES off
|
||||
|
||||
SET sql_mode = '';
|
||||
|
||||
--echo 2.1 !NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT * INTO OUTFILE '$file' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS TERMINATED BY ' '
|
||||
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
|
||||
TRUNCATE t2;
|
||||
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval SELECT LOAD_FILE("$file");
|
||||
--remove_file $file
|
||||
|
||||
SET sql_mode = '';
|
||||
|
||||
|
||||
|
||||
--echo 2.2 !NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval SELECT * INTO OUTFILE '$file' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1 ORDER BY id
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS ESCAPED BY '' TERMINATED BY ' '
|
||||
|
||||
SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
|
||||
SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
|
||||
|
||||
TRUNCATE t2;
|
||||
|
||||
SET sql_mode = 'NO_BACKSLASH_ESCAPES';
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval SELECT LOAD_FILE("$file");
|
||||
--remove_file $file
|
||||
|
||||
# clean up
|
||||
set session sql_mode=@OLD_SQL_MODE;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -281,4 +281,325 @@ unlock tables;
|
||||
connection default;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #38691: segfault/abort in ``UPDATE ...JOIN'' while
|
||||
# ``FLUSH TABLES WITH READ LOCK''
|
||||
#
|
||||
|
||||
--connection default
|
||||
CREATE TABLE t1 (
|
||||
a int(11) unsigned default NULL,
|
||||
b varchar(255) default NULL,
|
||||
UNIQUE KEY a (a),
|
||||
KEY b (b)
|
||||
);
|
||||
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
|
||||
CREATE TABLE t2 SELECT * FROM t1;
|
||||
CREATE TABLE t3 SELECT * FROM t1;
|
||||
|
||||
--echo # test altering of columns that multiupdate doesn't use
|
||||
|
||||
--echo # normal mode
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
--dec $i
|
||||
|
||||
--connection writer
|
||||
send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
|
||||
SET a = NULL WHERE t1.b <> t2.b;
|
||||
|
||||
--connection locker
|
||||
ALTER TABLE t2 ADD COLUMN (c INT);
|
||||
ALTER TABLE t2 DROP COLUMN c;
|
||||
|
||||
--connection writer
|
||||
--reap
|
||||
}
|
||||
|
||||
--echo # PS mode
|
||||
|
||||
--connection writer
|
||||
PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
|
||||
SET a = NULL WHERE t1.b <> t2.b';
|
||||
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
--dec $i
|
||||
|
||||
--connection writer
|
||||
--send EXECUTE stmt
|
||||
|
||||
--connection locker
|
||||
ALTER TABLE t2 ADD COLUMN (c INT);
|
||||
ALTER TABLE t2 DROP COLUMN c;
|
||||
|
||||
--connection writer
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
|
||||
--echo # test altering of columns that multiupdate uses
|
||||
|
||||
--echo # normal mode
|
||||
|
||||
--connection default
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
dec $i;
|
||||
|
||||
--connection locker
|
||||
--error 0,1060
|
||||
ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
|
||||
UPDATE t2 SET a=b;
|
||||
|
||||
--connection writer
|
||||
--send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b
|
||||
|
||||
--connection locker
|
||||
--error 0,1091
|
||||
ALTER TABLE t2 DROP COLUMN a;
|
||||
|
||||
--connection writer
|
||||
--error 0,1054
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
--echo # PS mode
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
dec $i;
|
||||
|
||||
--connection locker
|
||||
--error 0,1060
|
||||
ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
|
||||
UPDATE t2 SET a=b;
|
||||
|
||||
--connection writer
|
||||
PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b';
|
||||
--send EXECUTE stmt
|
||||
|
||||
--connection locker
|
||||
--error 0,1091
|
||||
ALTER TABLE t2 DROP COLUMN a;
|
||||
|
||||
--connection writer
|
||||
--error 0,1054
|
||||
--reap
|
||||
|
||||
}
|
||||
--enable_query_log
|
||||
--connection default
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
#
|
||||
# Bug#38499: flush tables and multitable table update with derived table cause
|
||||
# crash
|
||||
#
|
||||
|
||||
CREATE TABLE t1( a INT, b INT );
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
|
||||
|
||||
--echo # 1. test regular tables
|
||||
--echo # 1.1. test altering of columns that multiupdate doesn't use
|
||||
--echo # 1.1.1. normal mode
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
--dec $i
|
||||
|
||||
--connection writer
|
||||
send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
|
||||
|
||||
--connection locker
|
||||
ALTER TABLE t1 ADD COLUMN (c INT);
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--connection writer
|
||||
--reap
|
||||
}
|
||||
|
||||
--echo # 1.1.2. PS mode
|
||||
|
||||
--connection writer
|
||||
PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
|
||||
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
--dec $i
|
||||
|
||||
--connection writer
|
||||
--send EXECUTE stmt
|
||||
|
||||
--connection locker
|
||||
ALTER TABLE t1 ADD COLUMN (c INT);
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--connection writer
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
--echo # 1.2. test altering of columns that multiupdate uses
|
||||
--echo # 1.2.1. normal mode
|
||||
|
||||
--connection default
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
dec $i;
|
||||
|
||||
--connection locker
|
||||
--error 0,1060
|
||||
ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
|
||||
UPDATE t1 SET a=b;
|
||||
|
||||
--connection writer
|
||||
--send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
|
||||
|
||||
--connection locker
|
||||
--error 0,1091
|
||||
ALTER TABLE t1 DROP COLUMN a;
|
||||
|
||||
--connection writer
|
||||
--error 0,1054 # unknown column error
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
--echo # 1.2.2. PS mode
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
dec $i;
|
||||
|
||||
--connection locker
|
||||
--error 0,1060
|
||||
ALTER TABLE t1 ADD COLUMN a INT;
|
||||
UPDATE t1 SET a=b;
|
||||
|
||||
--connection writer
|
||||
PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
|
||||
--send EXECUTE stmt
|
||||
|
||||
--connection locker
|
||||
--error 0,1091
|
||||
ALTER TABLE t1 DROP COLUMN a;
|
||||
|
||||
--connection writer
|
||||
--error 0,1054 # Unknown column 'a' in 'field list'
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
--connection default
|
||||
ALTER TABLE t1 ADD COLUMN a INT;
|
||||
|
||||
--echo # 2. test UNIONs
|
||||
--echo # 2.1. test altering of columns that multiupdate doesn't use
|
||||
--echo # 2.1.1. normal mode
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
--dec $i
|
||||
|
||||
--connection writer
|
||||
send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
|
||||
|
||||
--connection locker
|
||||
ALTER TABLE t1 ADD COLUMN (c INT);
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--connection writer
|
||||
--reap
|
||||
}
|
||||
|
||||
--echo # 2.1.2. PS mode
|
||||
|
||||
--connection writer
|
||||
PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
|
||||
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
--dec $i
|
||||
|
||||
--connection writer
|
||||
--send EXECUTE stmt
|
||||
|
||||
--connection locker
|
||||
ALTER TABLE t1 ADD COLUMN (c INT);
|
||||
ALTER TABLE t1 DROP COLUMN c;
|
||||
|
||||
--connection writer
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
--echo # 2.2. test altering of columns that multiupdate uses
|
||||
--echo # 2.2.1. normal mode
|
||||
|
||||
--connection default
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
dec $i;
|
||||
|
||||
--connection locker
|
||||
--error 0,1060
|
||||
ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
|
||||
UPDATE t1 SET a=b;
|
||||
|
||||
--connection writer
|
||||
--send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
|
||||
|
||||
--connection locker
|
||||
--error 0,1091
|
||||
ALTER TABLE t1 DROP COLUMN a;
|
||||
|
||||
--connection writer
|
||||
--error 0,1054 # Unknown column 'a' in 'field list'
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
|
||||
--echo # 2.2.2. PS mode
|
||||
|
||||
--disable_query_log
|
||||
let $i = 100;
|
||||
while ($i) {
|
||||
dec $i;
|
||||
|
||||
--connection locker
|
||||
--error 0,1060
|
||||
ALTER TABLE t1 ADD COLUMN a INT;
|
||||
UPDATE t1 SET a=b;
|
||||
|
||||
--connection writer
|
||||
PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
|
||||
--send EXECUTE stmt
|
||||
|
||||
--connection locker
|
||||
--error 0,1091
|
||||
ALTER TABLE t1 DROP COLUMN a;
|
||||
|
||||
--connection writer
|
||||
--error 0,1054 # Unknown column 'a' in 'field list'
|
||||
--reap
|
||||
}
|
||||
--enable_query_log
|
||||
--connection default
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 5.0 tests
|
||||
|
@ -5,6 +5,14 @@
|
||||
# Binlog is required
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
|
||||
--echo Bug#37938 - Test "mysqldump" lacks various insert statements
|
||||
--echo Turn off concurrent inserts to avoid random errors
|
||||
--echo NOTE: We reset the variable back to saved value at the end of test
|
||||
SET @OLD_CONCURRENT_INSERT = @@GLOBAL.CONCURRENT_INSERT;
|
||||
SET @@GLOBAL.CONCURRENT_INSERT = 0;
|
||||
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, `"t"1`, t1aa, t2, t2aa, t3;
|
||||
drop database if exists mysqldump_test_db;
|
||||
@ -1594,6 +1602,10 @@ DROP TABLE t1,t2;
|
||||
--replace_regex /-- [^D][^u][^m][^p].*// /\/\*!.*// / on [0-9 :-]+/ on DATE/
|
||||
--exec $MYSQL_DUMP test
|
||||
|
||||
# We reset concurrent_inserts value to whatever it was at the start of the test
|
||||
SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.0 tests
|
||||
--echo #
|
||||
|
@ -24,7 +24,7 @@ create table t1(
|
||||
|
||||
insert into t1 values(1, "Autodiscover");
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
select * from t1;
|
||||
show status like 'handler_discover%';
|
||||
|
||||
@ -33,13 +33,13 @@ show status like 'handler_discover%';
|
||||
#
|
||||
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
insert into t1 values (2, "Auto 2");
|
||||
show status like 'handler_discover%';
|
||||
insert into t1 values (3, "Discover 3");
|
||||
show status like 'handler_discover%';
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
select * from t1 order by id;
|
||||
show status like 'handler_discover%';
|
||||
|
||||
@ -48,7 +48,7 @@ show status like 'handler_discover%';
|
||||
#
|
||||
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
update t1 set name="Autodiscover" where id = 2;
|
||||
show status like 'handler_discover%';
|
||||
select * from t1 order by id;
|
||||
@ -59,7 +59,7 @@ show status like 'handler_discover%';
|
||||
#
|
||||
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
|
||||
delete from t1 where id = 3;
|
||||
select * from t1 order by id;
|
||||
show status like 'handler_discover%';
|
||||
@ -111,9 +111,9 @@ show status like 'handler_discover%';
|
||||
flush tables;
|
||||
|
||||
# Remove the frm file from disk
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t3.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t3.frm ;
|
||||
|
||||
--error 1050
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
create table t3(
|
||||
id int not null primary key,
|
||||
name char(20), a int, b float, c char(24)
|
||||
@ -168,14 +168,14 @@ show status like 'handler_discover%';
|
||||
|
||||
# Remove the frm file from disk
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
|
||||
|
||||
show tables from test;
|
||||
show status like 'handler_discover%';
|
||||
|
||||
# Remove the frm file from disk again
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
|
||||
|
||||
--replace_column 7 # 8 # 9 # 12 # 13 # 15 # 18 #
|
||||
show table status;
|
||||
@ -204,13 +204,13 @@ system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t4 >> $NDB_TOOLS
|
||||
|
||||
#
|
||||
# Test that correct error is returned
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t4;
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t4;
|
||||
|
||||
show status like 'handler_discover%';
|
||||
--error 1051
|
||||
--error ER_BAD_TABLE_ERROR
|
||||
drop table t4;
|
||||
|
||||
create table t4(
|
||||
@ -223,14 +223,14 @@ select * from t4;
|
||||
# Remove the table from NDB
|
||||
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t4 >> $NDB_TOOLS_OUTPUT ;
|
||||
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t4;
|
||||
|
||||
drop table if exists t4;
|
||||
|
||||
# Test that dropping a table that does not exists
|
||||
# on disk or in NDB gives same result as above
|
||||
--error 1051
|
||||
--error ER_BAD_TABLE_ERROR
|
||||
drop table t5;
|
||||
drop table if exists t5;
|
||||
|
||||
@ -257,7 +257,7 @@ system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t4 >> $NDB_TOOLS
|
||||
|
||||
SHOW TABLES;
|
||||
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t4;
|
||||
|
||||
#######################################################
|
||||
@ -290,8 +290,8 @@ insert into t9 values (9);
|
||||
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t3 >> $NDB_TOOLS_OUTPUT ;
|
||||
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t5 >> $NDB_TOOLS_OUTPUT ;
|
||||
# Remove t6, t7 from disk
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t6.frm > /dev/null ;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm > /dev/null ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t6.frm;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm;
|
||||
|
||||
SHOW TABLES;
|
||||
|
||||
@ -332,8 +332,8 @@ insert into t9 values (9);
|
||||
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t3 > /dev/null ;
|
||||
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t5 > /dev/null ;
|
||||
# Remove t6, t7 from disk
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t6.frm > /dev/null ;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm > /dev/null ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t6.frm;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm;
|
||||
|
||||
|
||||
SHOW TABLES LIKE 't6';
|
||||
@ -342,9 +342,9 @@ show status like 'handler_discover%';
|
||||
|
||||
# Check that t3 or t5 can't be created
|
||||
# frm files for these tables is stilll on disk
|
||||
--error 1050
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
create table t3(a int);
|
||||
--error 1050
|
||||
--error ER_TABLE_EXISTS_ERROR
|
||||
create table t5(a int);
|
||||
|
||||
SHOW TABLES LIKE 't%';
|
||||
@ -375,9 +375,9 @@ insert into t3 values (3, "ndb table 3");
|
||||
insert into t4 values (4);
|
||||
|
||||
# Remove t1, t2, t3 from disk
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm > /dev/null ;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t2.frm > /dev/null ;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t3.frm > /dev/null ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t2.frm;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t3.frm;
|
||||
flush tables;
|
||||
|
||||
# Select from the table which only exists in NDB.
|
||||
@ -462,7 +462,7 @@ show tables;
|
||||
create database test2;
|
||||
use test2;
|
||||
show tables;
|
||||
--error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t1;
|
||||
create table t2 (b int,c longblob) engine=ndb;
|
||||
use test;
|
||||
@ -487,7 +487,7 @@ create table t1 (a int primary key) engine=ndb;
|
||||
select * from t1;
|
||||
--exec $NDB_MGM --no-defaults -e "all restart -n" > /dev/null
|
||||
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults --not-started > /dev/null
|
||||
--error 1015
|
||||
--error ER_CANT_LOCK
|
||||
select * from t1;
|
||||
--exec $NDB_MGM --no-defaults -e "all start" > /dev/null
|
||||
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults > /dev/null
|
||||
@ -503,17 +503,17 @@ drop database test_only_ndb_tables;
|
||||
# discovered( for example a table created via NDBAPI)
|
||||
|
||||
# Test disabled since it doesn't work on case insensitive systems
|
||||
#--error 1050
|
||||
#--error ER_TABLE_EXISTS_ERROR
|
||||
#CREATE TABLE sys.SYSTAB_0 (a int);
|
||||
#--error 1105
|
||||
#--error ER_UNKNOWN_ERROR
|
||||
#select * from sys.SYSTAB_0;
|
||||
|
||||
#CREATE TABLE IF NOT EXISTS sys.SYSTAB_0 (a int);
|
||||
#show warnings;
|
||||
#--error 1105
|
||||
#--error ER_UNKNOWN_ERROR
|
||||
#select * from sys.SYSTAB_0;
|
||||
|
||||
#--error 1051
|
||||
#--error ER_BAD_TABLE_ERROR
|
||||
#drop table sys.SYSTAB_0;
|
||||
#drop table IF EXISTS sys.SYSTAB_0;
|
||||
|
||||
@ -531,7 +531,7 @@ CREATE TABLE t9 (
|
||||
insert t9 values(1, 2), (2,3), (3, 4), (4, 5);
|
||||
|
||||
#Don't drop the table, instead remove the frm file
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t9.frm ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/test/t9.frm ;
|
||||
|
||||
# Now leave test case, when ndb_autodiscover2 will run, this
|
||||
# MySQL Server will have been restarted because it has a
|
||||
|
@ -25,7 +25,7 @@ create table t1(a int) engine=ndb;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
|
||||
select count(*) from t1;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile ;
|
||||
drop table t1;
|
||||
|
||||
create table t1(a int) engine=myisam;
|
||||
@ -37,7 +37,7 @@ drop table t1;
|
||||
create table t1(a int primary key) engine=ndb;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
|
||||
select * from t1 order by a;
|
||||
drop table t1;
|
||||
|
||||
@ -50,7 +50,7 @@ drop table t1;
|
||||
create table t1(a int primary key) engine=ndb;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
|
||||
select * from t1 order by a;
|
||||
drop table t1;
|
||||
|
||||
@ -63,7 +63,7 @@ drop table t1;
|
||||
create table t1(a int primary key) engine=ndb;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
|
||||
select * from t1 order by a;
|
||||
drop table t1;
|
||||
|
||||
|
@ -134,10 +134,14 @@ insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35);
|
||||
--let ndb_restore_filter=test t1
|
||||
--source include/ndb_backup_print.inc
|
||||
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t1.txt
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t2.txt
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t3.txt
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t4.txt
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t1.txt
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t2.txt
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t3.txt
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t4.txt
|
||||
|
||||
--let ndb_restore_opts=--verbose=0 --print_data --hex --tab $MYSQLTEST_VARDIR/tmp --append
|
||||
--let ndb_restore_filter=test
|
||||
@ -156,10 +160,10 @@ insert into t4 values (1,31),(2,32),(3,33),(4,34),(5,35);
|
||||
--source include/show_msg.inc
|
||||
--exec sort $MYSQLTEST_VARDIR/tmp/t4.txt
|
||||
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t1.txt
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t2.txt
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t3.txt
|
||||
--exec rm -f $MYSQLTEST_VARDIR/tmp/t4.txt
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t1.txt
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t2.txt
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t3.txt
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t4.txt
|
||||
|
||||
# now test some other datatypes
|
||||
drop table t1;
|
||||
|
@ -31,13 +31,13 @@ select load_file(concat(@tmpdir,"/outfile-test.3"));
|
||||
# the following should give errors
|
||||
|
||||
disable_query_log;
|
||||
--error 1086
|
||||
--error ER_FILE_EXISTS_ERROR
|
||||
eval select * into outfile "../tmp/outfile-test.1" from t1;
|
||||
|
||||
--error 1086
|
||||
--error ER_FILE_EXISTS_ERROR
|
||||
eval select * into dumpfile "../tmp/outfile-test.2" from t1;
|
||||
|
||||
--error 1086
|
||||
--error ER_FILE_EXISTS_ERROR
|
||||
eval select * into dumpfile "../tmp/outfile-test.3" from t1;
|
||||
enable_query_log;
|
||||
select load_file(concat(@tmpdir,"/outfile-test.not-exist"));
|
||||
@ -92,7 +92,7 @@ use test;
|
||||
# It should not be possible to write to a file outside of vardir
|
||||
create table t1(a int);
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
--error 1290
|
||||
--error ER_OPTION_PREVENTS_STATEMENT
|
||||
eval select * into outfile "$MYSQL_TEST_DIR/outfile-test1" from t1;
|
||||
drop table t1;
|
||||
|
||||
@ -105,7 +105,7 @@ create user user_1@localhost;
|
||||
grant all on mysqltest.* to user_1@localhost;
|
||||
connect (con28181_1,localhost,user_1,,mysqltest);
|
||||
|
||||
--error 1044
|
||||
--error ER_DBACCESS_DENIED_ERROR
|
||||
eval select schema_name
|
||||
into outfile "../tmp/outfile-test.4"
|
||||
fields terminated by ',' optionally enclosed by '"'
|
||||
@ -125,7 +125,7 @@ from information_schema.schemata
|
||||
where schema_name like 'mysqltest';
|
||||
|
||||
connection default;
|
||||
--exec rm $MYSQLTEST_VARDIR/tmp/outfile-test.4
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.4
|
||||
use test;
|
||||
revoke all privileges on *.* from user_1@localhost;
|
||||
drop user user_1@localhost;
|
||||
|
@ -6,9 +6,11 @@
|
||||
|
||||
source include/master-slave.inc;
|
||||
|
||||
|
||||
create table t1 (a int) engine=myisam;
|
||||
flush tables;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/test/t1.MYI ;
|
||||
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.MYI
|
||||
|
||||
drop table if exists t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
@ -22,7 +24,7 @@ set sql_log_bin=0;
|
||||
insert into t1 values(2);
|
||||
set sql_log_bin=1;
|
||||
save_master_pos;
|
||||
--error 1062
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values(1),(2);
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
|
@ -10,11 +10,11 @@ CREATE USER dummy@localhost;
|
||||
CREATE USER dummy1@localhost, dummy2@localhost;
|
||||
|
||||
SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
sync_slave_with_master;
|
||||
--echo **** On Slave ****
|
||||
SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
@ -31,11 +31,11 @@ DROP USER nonexisting@localhost, dummy@localhost;
|
||||
DROP USER dummy1@localhost, dummy2@localhost;
|
||||
|
||||
SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
sync_slave_with_master;
|
||||
--echo **** On Slave ****
|
||||
SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
|
||||
SELECT COUNT(*) FROM mysql.user;
|
||||
SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
|
||||
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
|
@ -25,7 +25,7 @@ eval select * into outfile '$MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.sele
|
||||
truncate table t1;
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data local infile '$MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile' into table t1;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile ;
|
||||
--remove_file $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
@ -52,7 +52,7 @@ drop table t1;
|
||||
create table t1(a int primary key);
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval load data local infile '$MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile' into table t1;
|
||||
system rm $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile ;
|
||||
remove_file $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile ;
|
||||
select * from t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
|
@ -2173,6 +2173,14 @@ begin
|
||||
end loop;
|
||||
end|
|
||||
|
||||
CREATE TABLE t1 (a INT)|
|
||||
INSERT INTO t1 VALUES (1),(2)|
|
||||
CREATE PROCEDURE p1(a INT) BEGIN END|
|
||||
--error ER_SUBQUERY_NO_1_ROW
|
||||
CALL p1((SELECT * FROM t1))|
|
||||
DROP PROCEDURE IF EXISTS p1|
|
||||
DROP TABLE t1|
|
||||
|
||||
delimiter ;|
|
||||
|
||||
#
|
||||
|
@ -7818,6 +7818,24 @@ drop function f1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#38469 invalid memory read and/or crash with utf8 text field, stored procedure, uservar
|
||||
#
|
||||
delimiter $;
|
||||
--disable_warnings
|
||||
drop procedure if exists `p2` $
|
||||
--enable_warnings
|
||||
create procedure `p2`(in `a` text charset utf8)
|
||||
begin
|
||||
declare `pos` int default 1;
|
||||
declare `str` text charset utf8;
|
||||
set `str` := `a`;
|
||||
select substr(`str`, `pos`+ 1 ) into `str`;
|
||||
end $
|
||||
delimiter ;$
|
||||
call `p2`('s s s s s s');
|
||||
drop procedure `p2`;
|
||||
|
||||
--echo # ------------------------------------------------------------------
|
||||
--echo # -- End of 5.0 tests
|
||||
--echo # ------------------------------------------------------------------
|
||||
|
@ -80,7 +80,7 @@ create database mysqltest;
|
||||
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="/this-dir-does-not-exist";
|
||||
|
||||
# temporarily disabled as it returns different result in the embedded server
|
||||
# --error 1210, 1210
|
||||
# --error ER_WRONG_ARGUMENTS,ER_WRONG_ARGUMENTS
|
||||
# create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="not-hard-path";
|
||||
|
||||
# Should fail becasue the file t9.MYI already exist in 'run'
|
||||
@ -185,7 +185,12 @@ drop table t1;
|
||||
#
|
||||
# Protect ourselves from data left in tmp/ by a previos possibly failed
|
||||
# test
|
||||
--system rm -f $MYSQLTEST_VARDIR/tmp/t1.*
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t1.frm
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t1.MYD
|
||||
--error 0,1
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/t1.MYI
|
||||
--disable_query_log
|
||||
eval prepare stmt from "create table t1 (c char(10)) data directory='$MYSQLTEST_VARDIR/tmp'";
|
||||
--enable_query_log
|
||||
@ -203,19 +208,19 @@ deallocate prepare stmt;
|
||||
# Bug#32167 another privilege bypass with DATA/INDEX DIRECORY
|
||||
#
|
||||
--replace_result $MYSQL_TEST_DIR TEST_DIR
|
||||
--error 1,1210
|
||||
--error 1,ER_WRONG_ARGUMENTS
|
||||
eval CREATE TABLE t1(a INT)
|
||||
DATA DIRECTORY='$MYSQL_TEST_DIR/var/master-data/test';
|
||||
--replace_result $MYSQL_TEST_DIR TEST_DIR
|
||||
--error 1,1210
|
||||
--error 1,ER_WRONG_ARGUMENTS
|
||||
eval CREATE TABLE t1(a INT)
|
||||
DATA DIRECTORY='$MYSQL_TEST_DIR/var/master-data/';
|
||||
--replace_result $MYSQL_TEST_DIR TEST_DIR
|
||||
--error 1,1210
|
||||
--error 1,ER_WRONG_ARGUMENTS
|
||||
eval CREATE TABLE t1(a INT)
|
||||
INDEX DIRECTORY='$MYSQL_TEST_DIR/var/master-data';
|
||||
--replace_result $MYSQL_TEST_DIR TEST_DIR
|
||||
--error 1,1210
|
||||
--error 1,ER_WRONG_ARGUMENTS
|
||||
eval CREATE TABLE t1(a INT)
|
||||
INDEX DIRECTORY='$MYSQL_TEST_DIR/var/master-data_var';
|
||||
|
||||
|
@ -21,9 +21,9 @@ DROP TABLE tmp_db;
|
||||
-- from local machine if "users" table didn't exist before
|
||||
CREATE TEMPORARY TABLE tmp_user LIKE user;
|
||||
INSERT INTO tmp_user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
REPLACE INTO tmp_user VALUES (@current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
REPLACE INTO tmp_user SELECT @current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0 FROM dual WHERE LOWER( @current_hostname) != 'localhost';
|
||||
REPLACE INTO tmp_user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
|
||||
INSERT INTO tmp_user (host,user) VALUES ('localhost','');
|
||||
INSERT INTO tmp_user (host,user) VALUES (@current_hostname,'');
|
||||
INSERT INTO tmp_user (host,user) SELECT @current_hostname,'' FROM dual WHERE LOWER(@current_hostname ) != 'localhost';
|
||||
INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
|
||||
DROP TABLE tmp_user;
|
||||
|
12
sql/field.cc
12
sql/field.cc
@ -6992,8 +6992,18 @@ int Field_blob::store(const char *from,uint length,CHARSET_INFO *cs)
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (from == value.ptr())
|
||||
/*
|
||||
If the 'from' address is in the range of the temporary 'value'-
|
||||
object we need to copy the content to a different location or it will be
|
||||
invalidated when the 'value'-object is reallocated to make room for
|
||||
the new character set.
|
||||
*/
|
||||
if (from >= value.ptr() && from <= value.ptr()+value.length())
|
||||
{
|
||||
/*
|
||||
If content of the 'from'-address is cached in the 'value'-object
|
||||
it is possible that the content needs a character conversion.
|
||||
*/
|
||||
uint32 dummy_offset;
|
||||
if (!String::needs_conversion(length, cs, field_charset, &dummy_offset))
|
||||
{
|
||||
|
10
sql/field.h
10
sql/field.h
@ -1213,8 +1213,16 @@ public:
|
||||
|
||||
class Field_blob :public Field_longstr {
|
||||
protected:
|
||||
/**
|
||||
The number of bytes used to represent the length of the blob.
|
||||
*/
|
||||
uint packlength;
|
||||
String value; // For temporaries
|
||||
|
||||
/**
|
||||
The 'value'-object is a cache fronting the storage engine.
|
||||
*/
|
||||
String value;
|
||||
|
||||
public:
|
||||
Field_blob(char *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg,
|
||||
enum utype unireg_check_arg, const char *field_name_arg,
|
||||
|
25
sql/item.cc
25
sql/item.cc
@ -1217,10 +1217,12 @@ Item_name_const::Item_name_const(Item *name_arg, Item *val):
|
||||
if (!(valid_args= name_item->basic_const_item() &&
|
||||
(value_item->basic_const_item() ||
|
||||
((value_item->type() == FUNC_ITEM) &&
|
||||
(((Item_func *) value_item)->functype() ==
|
||||
Item_func::NEG_FUNC) &&
|
||||
((((Item_func *) value_item)->functype() ==
|
||||
Item_func::COLLATE_FUNC) ||
|
||||
((((Item_func *) value_item)->functype() ==
|
||||
Item_func::NEG_FUNC) &&
|
||||
(((Item_func *) value_item)->key_item()->type() !=
|
||||
FUNC_ITEM)))))
|
||||
FUNC_ITEM)))))))
|
||||
my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST");
|
||||
Item::maybe_null= TRUE;
|
||||
}
|
||||
@ -1756,14 +1758,16 @@ Item_field::Item_field(THD *thd, Name_resolution_context *context_arg,
|
||||
We need to copy db_name, table_name and field_name because they must
|
||||
be allocated in the statement memory, not in table memory (the table
|
||||
structure can go away and pop up again between subsequent executions
|
||||
of a prepared statement).
|
||||
of a prepared statement or after the close_tables_for_reopen() call
|
||||
in mysql_multi_update_prepare()).
|
||||
*/
|
||||
if (thd->stmt_arena->is_stmt_prepare_or_first_sp_execute())
|
||||
{
|
||||
if (db_name)
|
||||
orig_db_name= thd->strdup(db_name);
|
||||
orig_table_name= thd->strdup(table_name);
|
||||
orig_field_name= thd->strdup(field_name);
|
||||
if (table_name)
|
||||
orig_table_name= thd->strdup(table_name);
|
||||
if (field_name)
|
||||
orig_field_name= thd->strdup(field_name);
|
||||
/*
|
||||
We don't restore 'name' in cleanup because it's not changed
|
||||
during execution. Still we need it to point to persistent
|
||||
@ -4220,7 +4224,12 @@ Item *Item_field::equal_fields_propagator(byte *arg)
|
||||
item= this;
|
||||
else if (field && (field->flags & ZEROFILL_FLAG) && IS_NUM(field->type()))
|
||||
{
|
||||
if (item && cmp_context != INT_RESULT)
|
||||
/*
|
||||
We don't need to zero-fill timestamp columns here because they will be
|
||||
first converted to a string (in date/time format) and compared as such if
|
||||
compared with another string.
|
||||
*/
|
||||
if (item && field->type() != FIELD_TYPE_TIMESTAMP && cmp_context != INT_RESULT)
|
||||
convert_zerofill_number_to_string(&item, (Field_num *)field);
|
||||
else
|
||||
item= this;
|
||||
|
@ -614,6 +614,7 @@ LEX_USER *create_definer(THD *thd, LEX_STRING *user_name, LEX_STRING *host_name)
|
||||
LEX_USER *get_current_user(THD *thd, LEX_USER *user);
|
||||
bool check_string_length(LEX_STRING *str,
|
||||
const char *err_msg, uint max_length);
|
||||
bool check_host_name(LEX_STRING *str);
|
||||
|
||||
enum enum_mysql_completiontype {
|
||||
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
|
||||
|
@ -492,6 +492,7 @@ public:
|
||||
keys_map.clear_all();
|
||||
bzero((char*) keys,sizeof(keys));
|
||||
}
|
||||
SEL_TREE(SEL_TREE *arg, struct st_qsel_param *param);
|
||||
SEL_ARG *keys[MAX_KEY];
|
||||
key_map keys_map; /* bitmask of non-NULL elements in keys */
|
||||
|
||||
@ -648,6 +649,7 @@ public:
|
||||
trees_next(trees),
|
||||
trees_end(trees + PREALLOCED_TREES)
|
||||
{}
|
||||
SEL_IMERGE (SEL_IMERGE *arg, PARAM *param);
|
||||
int or_sel_tree(PARAM *param, SEL_TREE *tree);
|
||||
int or_sel_tree_with_checks(PARAM *param, SEL_TREE *new_tree);
|
||||
int or_sel_imerge_with_checks(PARAM *param, SEL_IMERGE* imerge);
|
||||
@ -764,6 +766,61 @@ int SEL_IMERGE::or_sel_imerge_with_checks(PARAM *param, SEL_IMERGE* imerge)
|
||||
}
|
||||
|
||||
|
||||
SEL_TREE::SEL_TREE(SEL_TREE *arg, PARAM *param): Sql_alloc()
|
||||
{
|
||||
keys_map= arg->keys_map;
|
||||
type= arg->type;
|
||||
for (int idx= 0; idx < MAX_KEY; idx++)
|
||||
{
|
||||
if ((keys[idx]= arg->keys[idx]))
|
||||
keys[idx]->increment_use_count(1);
|
||||
}
|
||||
|
||||
List_iterator<SEL_IMERGE> it(arg->merges);
|
||||
for (SEL_IMERGE *el= it++; el; el= it++)
|
||||
{
|
||||
SEL_IMERGE *merge= new SEL_IMERGE(el, param);
|
||||
if (!merge || merge->trees == merge->trees_next)
|
||||
{
|
||||
merges.empty();
|
||||
return;
|
||||
}
|
||||
merges.push_back (merge);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SEL_IMERGE::SEL_IMERGE (SEL_IMERGE *arg, PARAM *param) : Sql_alloc()
|
||||
{
|
||||
uint elements= (arg->trees_end - arg->trees);
|
||||
if (elements > PREALLOCED_TREES)
|
||||
{
|
||||
uint size= elements * sizeof (SEL_TREE **);
|
||||
if (!(trees= (SEL_TREE **)alloc_root(param->mem_root, size)))
|
||||
goto mem_err;
|
||||
}
|
||||
else
|
||||
trees= &trees_prealloced[0];
|
||||
|
||||
trees_next= trees;
|
||||
trees_end= trees + elements;
|
||||
|
||||
for (SEL_TREE **tree = trees, **arg_tree= arg->trees; tree < trees_end;
|
||||
tree++, arg_tree++)
|
||||
{
|
||||
if (!(*tree= new SEL_TREE(*arg_tree, param)))
|
||||
goto mem_err;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
mem_err:
|
||||
trees= &trees_prealloced[0];
|
||||
trees_next= trees;
|
||||
trees_end= trees;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Perform AND operation on two index_merge lists and store result in *im1.
|
||||
*/
|
||||
@ -823,10 +880,23 @@ int imerge_list_or_tree(PARAM *param,
|
||||
{
|
||||
SEL_IMERGE *imerge;
|
||||
List_iterator<SEL_IMERGE> it(*im1);
|
||||
bool tree_used= FALSE;
|
||||
while ((imerge= it++))
|
||||
{
|
||||
if (imerge->or_sel_tree_with_checks(param, tree))
|
||||
SEL_TREE *or_tree;
|
||||
if (tree_used)
|
||||
{
|
||||
or_tree= new SEL_TREE (tree, param);
|
||||
if (!or_tree ||
|
||||
(or_tree->keys_map.is_clear_all() && or_tree->merges.is_empty()))
|
||||
return FALSE;
|
||||
}
|
||||
else
|
||||
or_tree= tree;
|
||||
|
||||
if (imerge->or_sel_tree_with_checks(param, or_tree))
|
||||
it.remove();
|
||||
tree_used= TRUE;
|
||||
}
|
||||
return im1->is_empty();
|
||||
}
|
||||
@ -4238,6 +4308,8 @@ get_mm_parts(PARAM *param, COND *cond_func, Field *field,
|
||||
}
|
||||
}
|
||||
|
||||
if (tree && tree->merges.is_empty() && tree->keys_map.is_clear_all())
|
||||
tree= NULL;
|
||||
DBUG_RETURN(tree);
|
||||
}
|
||||
|
||||
|
@ -21,6 +21,9 @@
|
||||
#include <my_sys.h>
|
||||
#include <my_dir.h>
|
||||
|
||||
/* from sql_db.cc */
|
||||
extern long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
|
||||
|
||||
|
||||
/*
|
||||
write string with escaping
|
||||
@ -265,8 +268,9 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
|
||||
DBUG_RETURN(TRUE);
|
||||
}
|
||||
|
||||
// archive copies management
|
||||
path[path_end]='\0';
|
||||
#ifdef FRM_ARCHIVE
|
||||
// archive copies management: disabled unused feature (see bug #17823).
|
||||
if (!access(path, F_OK))
|
||||
{
|
||||
if (old_version != ULONGLONG_MAX && max_versions != 0)
|
||||
@ -313,6 +317,7 @@ sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif//FRM_ARCHIVE
|
||||
|
||||
{
|
||||
// rename temporary file
|
||||
@ -337,6 +342,7 @@ err_w_file:
|
||||
|
||||
SYNOPSIS
|
||||
rename_in_schema_file
|
||||
thd thread handler
|
||||
schema name of given schema
|
||||
old_name original file name
|
||||
new_name new file name
|
||||
@ -348,7 +354,8 @@ err_w_file:
|
||||
1 - Error (only if renaming of frm failed)
|
||||
|
||||
*/
|
||||
my_bool rename_in_schema_file(const char *schema, const char *old_name,
|
||||
my_bool rename_in_schema_file(THD *thd,
|
||||
const char *schema, const char *old_name,
|
||||
const char *new_name, ulonglong revision,
|
||||
uint num_view_backups)
|
||||
{
|
||||
@ -365,10 +372,11 @@ my_bool rename_in_schema_file(const char *schema, const char *old_name,
|
||||
if (my_rename(old_path, new_path, MYF(MY_WME)))
|
||||
return 1;
|
||||
|
||||
/* check if arc_dir exists */
|
||||
/* check if arc_dir exists: disabled unused feature (see bug #17823). */
|
||||
strxnmov(arc_path, FN_REFLEN, mysql_data_home, "/", schema, "/arc", NullS);
|
||||
(void) unpack_filename(arc_path, arc_path);
|
||||
|
||||
#ifdef FRM_ARCHIVE
|
||||
if (revision > 0 && !access(arc_path, F_OK))
|
||||
{
|
||||
ulonglong limit= ((revision > num_view_backups) ?
|
||||
@ -384,6 +392,16 @@ my_bool rename_in_schema_file(const char *schema, const char *old_name,
|
||||
my_rename(old_path, new_path, MYF(0));
|
||||
}
|
||||
}
|
||||
#else//FRM_ARCHIVE
|
||||
{ // remove obsolete 'arc' directory and files if any
|
||||
MY_DIR *new_dirp;
|
||||
if ((new_dirp = my_dir(arc_path, MYF(MY_DONT_SORT))))
|
||||
{
|
||||
DBUG_PRINT("my",("Archive subdir found: %s", arc_path));
|
||||
(void) mysql_rm_arc_files(thd, new_dirp, arc_path);
|
||||
}
|
||||
}
|
||||
#endif//FRM_ARCHIVE
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -82,8 +82,9 @@ my_bool
|
||||
sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
|
||||
const LEX_STRING *type,
|
||||
gptr base, File_option *parameters, uint versions);
|
||||
my_bool rename_in_schema_file(const char *schema, const char *old_name,
|
||||
const char *new_name, ulonglong revision,
|
||||
my_bool rename_in_schema_file(THD *thd,
|
||||
const char *schema, const char *old_name,
|
||||
const char *new_name, ulonglong revision,
|
||||
uint num_view_backups);
|
||||
|
||||
class File_parser: public Sql_alloc
|
||||
|
@ -123,6 +123,9 @@ sp_get_item_value(THD *thd, Item *item, String *str)
|
||||
if (cs->escape_with_backslash_is_dangerous)
|
||||
buf.append(' ');
|
||||
append_query_string(cs, result, &buf);
|
||||
buf.append(" COLLATE '");
|
||||
buf.append(item->collation.collation->name);
|
||||
buf.append('\'');
|
||||
str->copy(buf);
|
||||
|
||||
return str;
|
||||
@ -1762,7 +1765,11 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
|
||||
we'll leave it here.
|
||||
*/
|
||||
if (!thd->in_sub_stmt)
|
||||
close_thread_tables(thd, 0, 0);
|
||||
{
|
||||
thd->lex->unit.cleanup();
|
||||
close_thread_tables(thd);
|
||||
thd->rollback_item_tree_changes();
|
||||
}
|
||||
|
||||
DBUG_PRINT("info",(" %.*s: eval args done", m_name.length, m_name.str));
|
||||
}
|
||||
|
@ -3617,8 +3617,21 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
|
||||
{
|
||||
/* This is a base table. */
|
||||
DBUG_ASSERT(nj_col->view_field == NULL);
|
||||
DBUG_ASSERT(nj_col->table_ref->table == nj_col->table_field->table);
|
||||
found_field= nj_col->table_field;
|
||||
/*
|
||||
This fix_fields is not necessary (initially this item is fixed by
|
||||
the Item_field constructor; after reopen_tables the Item_func_eq
|
||||
calls fix_fields on that item), it's just a check during table
|
||||
reopening for columns that was dropped by the concurrent connection.
|
||||
*/
|
||||
if (!nj_col->table_field->fixed &&
|
||||
nj_col->table_field->fix_fields(thd, (Item **)&nj_col->table_field))
|
||||
{
|
||||
DBUG_PRINT("info", ("column '%s' was dropped by the concurrent connection",
|
||||
nj_col->table_field->name));
|
||||
DBUG_RETURN(NULL);
|
||||
}
|
||||
DBUG_ASSERT(nj_col->table_ref->table == nj_col->table_field->field->table);
|
||||
found_field= nj_col->table_field->field;
|
||||
update_field_dependencies(thd, found_field, nj_col->table_ref->table);
|
||||
}
|
||||
|
||||
@ -4450,7 +4463,7 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
|
||||
const char *field_name_1;
|
||||
/* true if field_name_1 is a member of using_fields */
|
||||
bool is_using_column_1;
|
||||
if (!(nj_col_1= it_1.get_or_create_column_ref(leaf_1)))
|
||||
if (!(nj_col_1= it_1.get_or_create_column_ref(thd, leaf_1)))
|
||||
goto err;
|
||||
field_name_1= nj_col_1->name();
|
||||
is_using_column_1= using_fields &&
|
||||
@ -4471,7 +4484,7 @@ mark_common_columns(THD *thd, TABLE_LIST *table_ref_1, TABLE_LIST *table_ref_2,
|
||||
{
|
||||
Natural_join_column *cur_nj_col_2;
|
||||
const char *cur_field_name_2;
|
||||
if (!(cur_nj_col_2= it_2.get_or_create_column_ref(leaf_2)))
|
||||
if (!(cur_nj_col_2= it_2.get_or_create_column_ref(thd, leaf_2)))
|
||||
goto err;
|
||||
cur_field_name_2= cur_nj_col_2->name();
|
||||
DBUG_PRINT ("info", ("cur_field_name_2=%s.%s",
|
||||
@ -4957,15 +4970,24 @@ static bool setup_natural_join_row_types(THD *thd,
|
||||
TABLE_LIST *left_neighbor;
|
||||
/* Table reference to the right of the current. */
|
||||
TABLE_LIST *right_neighbor= NULL;
|
||||
bool save_first_natural_join_processing=
|
||||
context->select_lex->first_natural_join_processing;
|
||||
|
||||
context->select_lex->first_natural_join_processing= FALSE;
|
||||
|
||||
/* Note that tables in the list are in reversed order */
|
||||
for (left_neighbor= table_ref_it++; left_neighbor ; )
|
||||
{
|
||||
table_ref= left_neighbor;
|
||||
left_neighbor= table_ref_it++;
|
||||
/* For stored procedures do not redo work if already done. */
|
||||
if (context->select_lex->first_execution)
|
||||
/*
|
||||
Do not redo work if already done:
|
||||
1) for stored procedures,
|
||||
2) for multitable update after lock failure and table reopening.
|
||||
*/
|
||||
if (save_first_natural_join_processing)
|
||||
{
|
||||
context->select_lex->first_natural_join_processing= FALSE;
|
||||
if (store_top_level_join_columns(thd, table_ref,
|
||||
left_neighbor, right_neighbor))
|
||||
return TRUE;
|
||||
|
@ -974,6 +974,12 @@ sql_exchange::sql_exchange(char *name,bool flag)
|
||||
cs= NULL;
|
||||
}
|
||||
|
||||
bool sql_exchange::escaped_given(void)
|
||||
{
|
||||
return escaped != &default_escaped;
|
||||
}
|
||||
|
||||
|
||||
bool select_send::send_fields(List<Item> &list, uint flags)
|
||||
{
|
||||
bool res;
|
||||
@ -1234,8 +1240,11 @@ select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
|
||||
exchange->line_term=exchange->field_term; // Use this if it exists
|
||||
field_sep_char= (exchange->enclosed->length() ?
|
||||
(int) (uchar) (*exchange->enclosed)[0] : field_term_char);
|
||||
escape_char= (exchange->escaped->length() ?
|
||||
(int) (uchar) (*exchange->escaped)[0] : -1);
|
||||
if (exchange->escaped->length() && (exchange->escaped_given() ||
|
||||
!(thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)))
|
||||
escape_char= (int) (uchar) (*exchange->escaped)[0];
|
||||
else
|
||||
escape_char= -1;
|
||||
is_ambiguous_field_sep= test(strchr(ESCAPE_CHARS, field_sep_char));
|
||||
is_unsafe_field_sep= test(strchr(NUMERIC_CHARS, field_sep_char));
|
||||
line_sep_char= (exchange->line_term->length() ?
|
||||
|
@ -1896,6 +1896,7 @@ public:
|
||||
ulong skip_lines;
|
||||
CHARSET_INFO *cs;
|
||||
sql_exchange(char *name,bool dumpfile_flag);
|
||||
bool escaped_given(void);
|
||||
};
|
||||
|
||||
#include "log_event.h"
|
||||
|
@ -35,7 +35,7 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp,
|
||||
const char *db, const char *path, uint level,
|
||||
TABLE_LIST **dropped_tables);
|
||||
|
||||
static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
|
||||
long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
|
||||
static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error);
|
||||
/* Database options hash */
|
||||
static HASH dboptions;
|
||||
@ -906,7 +906,11 @@ static long mysql_rm_known_files(THD *thd, MY_DIR *dirp, const char *db,
|
||||
else if (file->name[0] == 'a' && file->name[1] == 'r' &&
|
||||
file->name[2] == 'c' && file->name[3] == '\0')
|
||||
{
|
||||
/* .frm archive */
|
||||
/* .frm archive:
|
||||
Those archives are obsolete, but following code should
|
||||
exist to remove existent "arc" directories.
|
||||
See #ifdef FRM_ARCHIVE directives for obsolete code.
|
||||
*/
|
||||
char newpath[FN_REFLEN];
|
||||
MY_DIR *new_dirp;
|
||||
strxmov(newpath, org_path, "/", "arc", NullS);
|
||||
@ -1061,9 +1065,13 @@ static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error)
|
||||
RETURN
|
||||
> 0 number of removed files
|
||||
-1 error
|
||||
|
||||
NOTE
|
||||
A support of "arc" directories is obsolete, however this
|
||||
function should exist to remove existent "arc" directories.
|
||||
See #ifdef FRM_ARCHIVE directives for obsolete code.
|
||||
*/
|
||||
static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp,
|
||||
const char *org_path)
|
||||
long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path)
|
||||
{
|
||||
long deleted= 0;
|
||||
ulong found_other_files= 0;
|
||||
@ -1105,6 +1113,7 @@ static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp,
|
||||
{
|
||||
goto err;
|
||||
}
|
||||
deleted++;
|
||||
}
|
||||
if (thd->killed)
|
||||
goto err;
|
||||
|
@ -1205,6 +1205,7 @@ void st_select_lex::init_query()
|
||||
subquery_in_having= explicit_limit= 0;
|
||||
is_item_list_lookup= 0;
|
||||
first_execution= 1;
|
||||
first_natural_join_processing= 1;
|
||||
first_cond_optimization= 1;
|
||||
parsing_place= NO_MATTER;
|
||||
exclude_from_table_unique_test= no_wrap_view_item= FALSE;
|
||||
|
@ -586,6 +586,7 @@ public:
|
||||
case of an error during prepare the PS is not created.
|
||||
*/
|
||||
bool first_execution;
|
||||
bool first_natural_join_processing;
|
||||
bool first_cond_optimization;
|
||||
/* do not wrap view fields with Item_ref */
|
||||
bool no_wrap_view_item;
|
||||
|
@ -325,7 +325,9 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
|
||||
bzero((char*) &info,sizeof(info));
|
||||
info.ignore= ignore;
|
||||
info.handle_duplicates=handle_duplicates;
|
||||
info.escape_char=escaped->length() ? (*escaped)[0] : INT_MAX;
|
||||
info.escape_char= (escaped->length() && (ex->escaped_given() ||
|
||||
!(thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)))
|
||||
? (*escaped)[0] : INT_MAX;
|
||||
|
||||
READ_INFO read_info(file,tot_length,
|
||||
ex->cs ? ex->cs : thd->variables.collation_database,
|
||||
|
@ -7982,3 +7982,35 @@ int test_if_data_home_dir(const char *dir)
|
||||
|
||||
C_MODE_END
|
||||
|
||||
|
||||
/**
|
||||
Check that host name string is valid.
|
||||
|
||||
@param[in] str string to be checked
|
||||
|
||||
@return Operation status
|
||||
@retval FALSE host name is ok
|
||||
@retval TRUE host name string is longer than max_length or
|
||||
has invalid symbols
|
||||
*/
|
||||
|
||||
bool check_host_name(LEX_STRING *str)
|
||||
{
|
||||
const char *name= str->str;
|
||||
const char *end= str->str + str->length;
|
||||
if (check_string_length(str, ER(ER_HOSTNAME), HOSTNAME_LENGTH))
|
||||
return TRUE;
|
||||
|
||||
while (name != end)
|
||||
{
|
||||
if (*name == '@')
|
||||
{
|
||||
my_printf_error(ER_UNKNOWN_ERROR,
|
||||
"Malformed hostname (illegal symbol: '%c')", MYF(0),
|
||||
*name);
|
||||
return TRUE;
|
||||
}
|
||||
name++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -3170,6 +3170,27 @@ static int get_schema_views_record(THD *thd, TABLE_LIST *tables,
|
||||
!my_strcasecmp(system_charset_info, tables->definer.host.str,
|
||||
sctx->priv_host))
|
||||
tables->allowed_show= TRUE;
|
||||
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
||||
else
|
||||
{
|
||||
if ((thd->col_access & (SHOW_VIEW_ACL|SELECT_ACL)) ==
|
||||
(SHOW_VIEW_ACL|SELECT_ACL))
|
||||
tables->allowed_show= TRUE;
|
||||
else
|
||||
{
|
||||
TABLE_LIST table_list;
|
||||
uint view_access;
|
||||
memset(&table_list, 0, sizeof(table_list));
|
||||
table_list.db= tables->view_db.str;
|
||||
table_list.table_name= tables->view_name.str;
|
||||
table_list.grant.privilege= thd->col_access;
|
||||
view_access= get_table_grant(thd, &table_list);
|
||||
if ((view_access & (SHOW_VIEW_ACL|SELECT_ACL)) ==
|
||||
(SHOW_VIEW_ACL|SELECT_ACL))
|
||||
tables->allowed_show= TRUE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
restore_record(table, s->default_values);
|
||||
table->field[1]->store(tables->view_db.str, tables->view_db.length, cs);
|
||||
|
@ -399,7 +399,6 @@ bool st_select_lex_unit::prepare(THD *thd_arg, select_result *sel_result,
|
||||
}
|
||||
else
|
||||
{
|
||||
DBUG_ASSERT(!thd->stmt_arena->is_conventional());
|
||||
/*
|
||||
We're in execution of a prepared statement or stored procedure:
|
||||
reset field items to point at fields from the created temporary table.
|
||||
|
@ -852,11 +852,14 @@ reopen_tables:
|
||||
}
|
||||
|
||||
/* now lock and fill tables */
|
||||
if (lock_tables(thd, table_list, table_count, &need_reopen))
|
||||
if (!thd->stmt_arena->is_stmt_prepare() &&
|
||||
lock_tables(thd, table_list, table_count, &need_reopen))
|
||||
{
|
||||
if (!need_reopen)
|
||||
DBUG_RETURN(TRUE);
|
||||
|
||||
DBUG_PRINT("info", ("lock_tables failed, reopening"));
|
||||
|
||||
/*
|
||||
We have to reopen tables since some of them were altered or dropped
|
||||
during lock_tables() or something was done with their triggers.
|
||||
@ -872,6 +875,34 @@ reopen_tables:
|
||||
for (TABLE_LIST *tbl= table_list; tbl; tbl= tbl->next_global)
|
||||
tbl->cleanup_items();
|
||||
|
||||
/*
|
||||
To not to hog memory (as a result of the
|
||||
unit->reinit_exec_mechanism() call below):
|
||||
*/
|
||||
lex->unit.cleanup();
|
||||
|
||||
for (SELECT_LEX *sl= lex->all_selects_list;
|
||||
sl;
|
||||
sl= sl->next_select_in_list())
|
||||
{
|
||||
SELECT_LEX_UNIT *unit= sl->master_unit();
|
||||
unit->reinit_exec_mechanism(); // reset unit->prepared flags
|
||||
/*
|
||||
Reset 'clean' flag back to force normal execution of
|
||||
unit->cleanup() in Prepared_statement::cleanup_stmt()
|
||||
(call to lex->unit.cleanup() above sets this flag to TRUE).
|
||||
*/
|
||||
unit->unclean();
|
||||
}
|
||||
|
||||
/*
|
||||
Also we need to cleanup Natural_join_column::table_field items.
|
||||
To not to traverse a join tree we will cleanup whole
|
||||
thd->free_list (in PS execution mode that list may not contain
|
||||
items from 'fields' list, so the cleanup above is necessary to.
|
||||
*/
|
||||
cleanup_items(thd->free_list);
|
||||
|
||||
close_tables_for_reopen(thd, &table_list);
|
||||
goto reopen_tables;
|
||||
}
|
||||
|
@ -1858,7 +1858,7 @@ mysql_rename_view(THD *thd,
|
||||
goto err;
|
||||
|
||||
/* rename view and it's backups */
|
||||
if (rename_in_schema_file(view->db, view->table_name, new_name,
|
||||
if (rename_in_schema_file(thd, view->db, view->table_name, new_name,
|
||||
view_def.revision - 1, num_view_backups))
|
||||
goto err;
|
||||
|
||||
@ -1877,7 +1877,7 @@ mysql_rename_view(THD *thd,
|
||||
num_view_backups))
|
||||
{
|
||||
/* restore renamed view in case of error */
|
||||
rename_in_schema_file(view->db, new_name, view->table_name,
|
||||
rename_in_schema_file(thd, view->db, new_name, view->table_name,
|
||||
view_def.revision - 1, num_view_backups);
|
||||
goto err;
|
||||
}
|
||||
|
@ -9269,8 +9269,7 @@ user:
|
||||
|
||||
if (check_string_length(&$$->user,
|
||||
ER(ER_USERNAME), USERNAME_LENGTH) ||
|
||||
check_string_length(&$$->host,
|
||||
ER(ER_HOSTNAME), HOSTNAME_LENGTH))
|
||||
check_host_name(&$$->host))
|
||||
MYSQL_YYABORT;
|
||||
}
|
||||
| CURRENT_USER optional_braces
|
||||
|
@ -261,6 +261,7 @@ void write_core(int sig)
|
||||
#else /* __WIN__*/
|
||||
|
||||
#include <dbghelp.h>
|
||||
#include <tlhelp32.h>
|
||||
|
||||
/*
|
||||
Stack tracing on Windows is implemented using Debug Helper library(dbghelp.dll)
|
||||
@ -349,6 +350,68 @@ void set_exception_pointers(EXCEPTION_POINTERS *ep)
|
||||
exception_ptrs = ep;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Get symbol path - semicolon-separated list of directories to search for debug
|
||||
symbols. We expect PDB in the same directory as corresponding exe or dll,
|
||||
so the path is build from directories of the loaded modules. If environment
|
||||
variable _NT_SYMBOL_PATH is set, it's value appended to the symbol search path
|
||||
*/
|
||||
static void get_symbol_path(char *path, size_t size)
|
||||
{
|
||||
HANDLE hSnap;
|
||||
char *envvar;
|
||||
|
||||
path[0]= '\0';
|
||||
/*
|
||||
Enumerate all modules, and add their directories to the path.
|
||||
Avoid duplicate entries.
|
||||
*/
|
||||
hSnap= CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
|
||||
if (hSnap != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
BOOL ret;
|
||||
MODULEENTRY32 mod;
|
||||
mod.dwSize= sizeof(MODULEENTRY32);
|
||||
for (ret= Module32First(hSnap, &mod); ret; ret= Module32Next(hSnap, &mod))
|
||||
{
|
||||
char *module_dir= mod.szExePath;
|
||||
char *p= strrchr(module_dir,'\\');
|
||||
if (!p)
|
||||
{
|
||||
/*
|
||||
Path separator was not found. Not known to happen, if ever happens,
|
||||
will indicate current directory.
|
||||
*/
|
||||
module_dir[0]= '.';
|
||||
p= module_dir + 1;
|
||||
}
|
||||
*p++= ';';
|
||||
*p= '\0';
|
||||
|
||||
if (!strstr(path, module_dir))
|
||||
{
|
||||
size_t dir_len = strlen(module_dir);
|
||||
if (size > dir_len)
|
||||
{
|
||||
strncat(path, module_dir, size-1);
|
||||
size -= dir_len;
|
||||
}
|
||||
}
|
||||
}
|
||||
CloseHandle(hSnap);
|
||||
}
|
||||
|
||||
/* Add _NT_SYMBOL_PATH, if present. */
|
||||
envvar= getenv("_NT_SYMBOL_PATH");
|
||||
if(envvar && size)
|
||||
{
|
||||
strncat(path, envvar, size-1);
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_SYMBOL_PATH 32768
|
||||
|
||||
/* Platform SDK in VS2003 does not have definition for SYMOPT_NO_PROMPTS*/
|
||||
#ifndef SYMOPT_NO_PROMPTS
|
||||
#define SYMOPT_NO_PROMPTS 0
|
||||
@ -365,6 +428,7 @@ void print_stacktrace(gptr unused1, ulong unused2)
|
||||
int i;
|
||||
CONTEXT context;
|
||||
STACKFRAME64 frame={0};
|
||||
static char symbol_path[MAX_SYMBOL_PATH];
|
||||
|
||||
if(!exception_ptrs || !init_dbghelp_functions())
|
||||
return;
|
||||
@ -373,7 +437,8 @@ void print_stacktrace(gptr unused1, ulong unused2)
|
||||
context = *(exception_ptrs->ContextRecord);
|
||||
/*Initialize symbols.*/
|
||||
pSymSetOptions(SYMOPT_LOAD_LINES|SYMOPT_NO_PROMPTS|SYMOPT_DEFERRED_LOADS|SYMOPT_DEBUG);
|
||||
pSymInitialize(hProcess,NULL,TRUE);
|
||||
get_symbol_path(symbol_path, sizeof(symbol_path));
|
||||
pSymInitialize(hProcess, symbol_path, TRUE);
|
||||
|
||||
/*Prepare stackframe for the first StackWalk64 call*/
|
||||
frame.AddrFrame.Mode= frame.AddrPC.Mode= frame.AddrStack.Mode= AddrModeFlat;
|
||||
|
24
sql/table.cc
24
sql/table.cc
@ -2191,7 +2191,7 @@ TABLE_LIST *TABLE_LIST::find_underlying_table(TABLE *table_to_find)
|
||||
}
|
||||
|
||||
/*
|
||||
cleunup items belonged to view fields translation table
|
||||
cleanup items belonged to view fields translation table
|
||||
|
||||
SYNOPSIS
|
||||
TABLE_LIST::cleanup_items()
|
||||
@ -2637,10 +2637,10 @@ Natural_join_column::Natural_join_column(Field_translator *field_param,
|
||||
}
|
||||
|
||||
|
||||
Natural_join_column::Natural_join_column(Field *field_param,
|
||||
Natural_join_column::Natural_join_column(Item_field *field_param,
|
||||
TABLE_LIST *tab)
|
||||
{
|
||||
DBUG_ASSERT(tab->table == field_param->table);
|
||||
DBUG_ASSERT(tab->table == field_param->field->table);
|
||||
table_field= field_param;
|
||||
view_field= NULL;
|
||||
table_ref= tab;
|
||||
@ -2668,7 +2668,7 @@ Item *Natural_join_column::create_item(THD *thd)
|
||||
return create_view_field(thd, table_ref, &view_field->item,
|
||||
view_field->name);
|
||||
}
|
||||
return new Item_field(thd, &thd->lex->current_select->context, table_field);
|
||||
return table_field;
|
||||
}
|
||||
|
||||
|
||||
@ -2679,7 +2679,7 @@ Field *Natural_join_column::field()
|
||||
DBUG_ASSERT(table_field == NULL);
|
||||
return NULL;
|
||||
}
|
||||
return table_field;
|
||||
return table_field->field;
|
||||
}
|
||||
|
||||
|
||||
@ -2811,7 +2811,7 @@ void Field_iterator_natural_join::next()
|
||||
cur_column_ref= column_ref_it++;
|
||||
DBUG_ASSERT(!cur_column_ref || ! cur_column_ref->table_field ||
|
||||
cur_column_ref->table_ref->table ==
|
||||
cur_column_ref->table_field->table);
|
||||
cur_column_ref->table_field->field->table);
|
||||
}
|
||||
|
||||
|
||||
@ -2975,7 +2975,7 @@ GRANT_INFO *Field_iterator_table_ref::grant()
|
||||
*/
|
||||
|
||||
Natural_join_column *
|
||||
Field_iterator_table_ref::get_or_create_column_ref(TABLE_LIST *parent_table_ref)
|
||||
Field_iterator_table_ref::get_or_create_column_ref(THD *thd, TABLE_LIST *parent_table_ref)
|
||||
{
|
||||
Natural_join_column *nj_col;
|
||||
bool is_created= TRUE;
|
||||
@ -2988,7 +2988,11 @@ Field_iterator_table_ref::get_or_create_column_ref(TABLE_LIST *parent_table_ref)
|
||||
{
|
||||
/* The field belongs to a stored table. */
|
||||
Field *tmp_field= table_field_it.field();
|
||||
nj_col= new Natural_join_column(tmp_field, table_ref);
|
||||
Item_field *tmp_item=
|
||||
new Item_field(thd, &thd->lex->current_select->context, tmp_field);
|
||||
if (!tmp_item)
|
||||
return NULL;
|
||||
nj_col= new Natural_join_column(tmp_item, table_ref);
|
||||
field_count= table_ref->table->s->fields;
|
||||
}
|
||||
else if (field_it == &view_field_it)
|
||||
@ -3012,7 +3016,7 @@ Field_iterator_table_ref::get_or_create_column_ref(TABLE_LIST *parent_table_ref)
|
||||
DBUG_ASSERT(nj_col);
|
||||
}
|
||||
DBUG_ASSERT(!nj_col->table_field ||
|
||||
nj_col->table_ref->table == nj_col->table_field->table);
|
||||
nj_col->table_ref->table == nj_col->table_field->field->table);
|
||||
|
||||
/*
|
||||
If the natural join column was just created add it to the list of
|
||||
@ -3077,7 +3081,7 @@ Field_iterator_table_ref::get_natural_column_ref()
|
||||
nj_col= natural_join_it.column_ref();
|
||||
DBUG_ASSERT(nj_col &&
|
||||
(!nj_col->table_field ||
|
||||
nj_col->table_ref->table == nj_col->table_field->table));
|
||||
nj_col->table_ref->table == nj_col->table_field->field->table));
|
||||
return nj_col;
|
||||
}
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
|
||||
class Item; /* Needed by ORDER */
|
||||
class Item_subselect;
|
||||
class Item_field;
|
||||
class GRANT_TABLE;
|
||||
class st_select_lex_unit;
|
||||
class st_select_lex;
|
||||
@ -469,7 +470,7 @@ class Natural_join_column: public Sql_alloc
|
||||
{
|
||||
public:
|
||||
Field_translator *view_field; /* Column reference of merge view. */
|
||||
Field *table_field; /* Column reference of table or temp view. */
|
||||
Item_field *table_field; /* Column reference of table or temp view. */
|
||||
TABLE_LIST *table_ref; /* Original base table/view reference. */
|
||||
/*
|
||||
True if a common join column of two NATURAL/USING join operands. Notice
|
||||
@ -481,7 +482,7 @@ public:
|
||||
bool is_common;
|
||||
public:
|
||||
Natural_join_column(Field_translator *field_param, TABLE_LIST *tab);
|
||||
Natural_join_column(Field *field_param, TABLE_LIST *tab);
|
||||
Natural_join_column(Item_field *field_param, TABLE_LIST *tab);
|
||||
const char *name();
|
||||
Item *create_item(THD *thd);
|
||||
Field *field();
|
||||
@ -899,7 +900,7 @@ public:
|
||||
GRANT_INFO *grant();
|
||||
Item *create_item(THD *thd) { return field_it->create_item(thd); }
|
||||
Field *field() { return field_it->field(); }
|
||||
Natural_join_column *get_or_create_column_ref(TABLE_LIST *parent_table_ref);
|
||||
Natural_join_column *get_or_create_column_ref(THD *thd, TABLE_LIST *parent_table_ref);
|
||||
Natural_join_column *get_natural_column_ref();
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user