mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge neptunus.(none):/home/msvensson/mysql/mysql-5.0
into neptunus.(none):/home/msvensson/mysql/mysql-5.0-maint BitKeeper/etc/ignore: auto-union Docs/Makefile.am: Auto merged Makefile.am: Auto merged client/mysql.cc: Auto merged client/mysqltest.c: Auto merged include/Makefile.am: Auto merged myisam/myisampack.c: Auto merged mysql-test/lib/mtr_io.pl: Auto merged mysql-test/lib/mtr_process.pl: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/view_grant.result: Auto merged mysql-test/t/view_grant.test: Auto merged sql/handler.cc: Auto merged sql/item.cc: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/item_timefunc.cc: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/sp.cc: Auto merged sql/sql_base.cc: Auto merged sql-common/my_time.c: Auto merged sql/sql_handler.cc: Auto merged extra/yassl/taocrypt/include/algebra.hpp: Manual merge with import of upstream yaSSL
This commit is contained in:
@ -582,7 +582,7 @@ sub mtr_im_start($$) {
|
||||
mtr_add_arg($args, $opt);
|
||||
}
|
||||
|
||||
$im->{'pid'} =
|
||||
$im->{'spawner_pid'} =
|
||||
mtr_spawn(
|
||||
$::exe_im, # path to the executable
|
||||
$args, # cmd-line args
|
||||
@ -593,7 +593,7 @@ sub mtr_im_start($$) {
|
||||
{ append_log_file => 1 } # append log files
|
||||
);
|
||||
|
||||
unless ( $im->{'pid'} )
|
||||
unless ( $im->{'spawner_pid'} )
|
||||
{
|
||||
mtr_error('Could not start Instance Manager.')
|
||||
}
|
||||
|
@ -41,6 +41,7 @@ sub mtr_get_pid_from_file ($) {
|
||||
|
||||
# Read pid number from file
|
||||
my $pid= <FILE>;
|
||||
chomp $pid;
|
||||
close FILE;
|
||||
|
||||
return $pid if $pid=~ /^(\d+)/;
|
||||
|
@ -936,6 +936,12 @@ sub check_expected_crash_and_restart($)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($::instance_manager->{'spawner_pid'} eq $ret_pid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mtr_warning("check_expected_crash_and_restart couldn't find an entry for pid: $ret_pid");
|
||||
|
||||
}
|
||||
@ -1052,7 +1058,7 @@ sub sleep_until_file_created ($$$) {
|
||||
|
||||
# Print extra message every 60 seconds
|
||||
my $seconds= ($loop * $sleeptime) / 1000;
|
||||
if ( $seconds > 1 and int($seconds) % 60 == 0 )
|
||||
if ( $seconds > 1 and int($seconds * 10) % 600 == 0 )
|
||||
{
|
||||
my $left= $timeout - $seconds;
|
||||
mtr_warning("Waited $seconds seconds for $pidfile to be created, " .
|
||||
|
@ -63,7 +63,6 @@ use Getopt::Long;
|
||||
use Sys::Hostname;
|
||||
use IO::Socket;
|
||||
use IO::Socket::INET;
|
||||
use Data::Dumper;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
@ -1227,6 +1226,12 @@ sub command_line_setup () {
|
||||
sub set_mtr_build_thread_ports($) {
|
||||
my $mtr_build_thread= shift;
|
||||
|
||||
if ( lc($mtr_build_thread) eq 'auto' ) {
|
||||
print "Requesting build thread... ";
|
||||
$ENV{'MTR_BUILD_THREAD'} = $mtr_build_thread = mtr_require_unique_id_and_wait("/tmp/mysql-test-ports", 200, 299);
|
||||
print "got ".$mtr_build_thread."\n";
|
||||
}
|
||||
|
||||
# Up to two masters, up to three slaves
|
||||
$opt_master_myport= $mtr_build_thread * 10 + 10000; # and 1
|
||||
$opt_slave_myport= $opt_master_myport + 2; # and 3 4
|
||||
|
@ -46,6 +46,10 @@ create table t1 (a tinyint(1),b binary(1));
|
||||
insert into t1 values (0x01,0x01);
|
||||
select * from t1 where a=b;
|
||||
a b
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DOUBLE value: ''
|
||||
select * from t1 where a=b and b=0x01;
|
||||
a b
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DOUBLE value: ''
|
||||
drop table if exists t1;
|
||||
|
@ -202,6 +202,14 @@ select count(*) from t1 where id not in (1,2);
|
||||
count(*)
|
||||
1
|
||||
drop table t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 SELECT 1 IN (2, NULL);
|
||||
SELECT should return NULL.
|
||||
SELECT * FROM t1;
|
||||
1 IN (2, NULL)
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
End of 4.1 tests
|
||||
CREATE TABLE t1 (a int PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES (44), (45), (46);
|
||||
SELECT * FROM t1 WHERE a IN (45);
|
||||
@ -343,3 +351,4 @@ some_id
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@ -1903,4 +1903,17 @@ Warnings:
|
||||
Error 1292 Truncated incorrect DECIMAL value: ''
|
||||
Error 1292 Truncated incorrect DECIMAL value: ''
|
||||
Warning 1301 Result of lpad() was larger than max_allowed_packet (1048576) - truncated
|
||||
SET @orig_sql_mode = @@SQL_MODE;
|
||||
SET SQL_MODE=traditional;
|
||||
SELECT CHAR(0xff,0x8f USING utf8);
|
||||
CHAR(0xff,0x8f USING utf8)
|
||||
NULL
|
||||
Warnings:
|
||||
Error 1300 Invalid utf8 character string: 'FF8F'
|
||||
SELECT CHAR(0xff,0x8f USING utf8) IS NULL;
|
||||
CHAR(0xff,0x8f USING utf8) IS NULL
|
||||
1
|
||||
Warnings:
|
||||
Error 1300 Invalid utf8 character string: 'FF8F'
|
||||
SET SQL_MODE=@orig_sql_mode;
|
||||
End of 5.0 tests
|
||||
|
@ -2162,3 +2162,127 @@ SELECT MIN(c) FROM t2 WHERE b = 2 and a = 1 and c > 1 GROUP BY a;
|
||||
MIN(c)
|
||||
2
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT, b INT, INDEX (a,b));
|
||||
INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3), (1,4), (1,5),
|
||||
(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
|
||||
EXPLAIN SELECT max(b), a FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
FLUSH STATUS;
|
||||
SELECT max(b), a FROM t1 GROUP BY a;
|
||||
max(b) a
|
||||
5 1
|
||||
3 2
|
||||
1 3
|
||||
6 4
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 8
|
||||
Handler_read_next 0
|
||||
EXPLAIN SELECT max(b), a FROM t1 GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
FLUSH STATUS;
|
||||
CREATE TABLE t2 SELECT max(b), a FROM t1 GROUP BY a;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 8
|
||||
Handler_read_next 0
|
||||
FLUSH STATUS;
|
||||
SELECT * FROM (SELECT max(b), a FROM t1 GROUP BY a) b;
|
||||
max(b) a
|
||||
5 1
|
||||
3 2
|
||||
1 3
|
||||
6 4
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 8
|
||||
Handler_read_next 0
|
||||
FLUSH STATUS;
|
||||
(SELECT max(b), a FROM t1 GROUP BY a) UNION
|
||||
(SELECT max(b), a FROM t1 GROUP BY a);
|
||||
max(b) a
|
||||
5 1
|
||||
3 2
|
||||
1 3
|
||||
6 4
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 16
|
||||
Handler_read_next 0
|
||||
EXPLAIN (SELECT max(b), a FROM t1 GROUP BY a) UNION
|
||||
(SELECT max(b), a FROM t1 GROUP BY a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
2 UNION t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
NULL UNION RESULT <union1,2> ALL NULL NULL NULL NULL NULL
|
||||
EXPLAIN SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
|
||||
FROM t1 AS t1_outer;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer index NULL a 10 NULL 15 Using index
|
||||
2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE EXISTS
|
||||
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer index NULL a 10 NULL 15 Using index
|
||||
2 SUBQUERY t1 index NULL a 10 NULL 8 Using index
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||||
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||
2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||||
a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer index NULL a 10 NULL 15 Using where; Using index
|
||||
2 DEPENDENT SUBQUERY t1 index NULL a 10 NULL 8 Using index
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer GROUP BY a HAVING
|
||||
a > (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer range NULL a 5 NULL 8 Using index for group-by
|
||||
2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer1 JOIN t1 AS t1_outer2
|
||||
ON t1_outer1.a = (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2)
|
||||
AND t1_outer1.b = t1_outer2.b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer1 ref a a 5 const 1 Using where; Using index
|
||||
1 PRIMARY t1_outer2 index NULL a 10 NULL 15 Using where; Using index
|
||||
2 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
EXPLAIN SELECT (SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
|
||||
FROM t1 AS t1_outer) x2 FROM t1 AS t1_outer2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1_outer2 index NULL a 10 NULL 15 Using index
|
||||
2 SUBQUERY t1_outer index NULL a 10 NULL 15 Using index
|
||||
3 SUBQUERY t1 range NULL a 5 NULL 8 Using index for group-by
|
||||
CREATE TABLE t3 LIKE t1;
|
||||
FLUSH STATUS;
|
||||
INSERT INTO t3 SELECT a,MAX(b) FROM t1 GROUP BY a;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 8
|
||||
Handler_read_next 0
|
||||
DELETE FROM t3;
|
||||
FLUSH STATUS;
|
||||
INSERT INTO t3 SELECT 1, (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2)
|
||||
FROM t1 LIMIT 1;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 8
|
||||
Handler_read_next 0
|
||||
FLUSH STATUS;
|
||||
DELETE FROM t3 WHERE (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) > 10000;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 8
|
||||
Handler_read_next 0
|
||||
FLUSH STATUS;
|
||||
DELETE FROM t3 WHERE (SELECT (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) x
|
||||
FROM t1) > 10000;
|
||||
Warnings:
|
||||
Error 1242 Subquery returns more than 1 row
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
Variable_name Value
|
||||
Handler_read_key 8
|
||||
Handler_read_next 1
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -6,7 +6,7 @@ instance_name status
|
||||
mysqld1 online
|
||||
mysqld2 offline
|
||||
Killing the process...
|
||||
Sleeping...
|
||||
Waiting...
|
||||
Success: the process was restarted.
|
||||
Success: server is ready to accept connection on socket.
|
||||
|
||||
@ -16,7 +16,7 @@ Success: server is ready to accept connection on socket.
|
||||
START INSTANCE mysqld2;
|
||||
Success: the process has been started.
|
||||
Killing the process...
|
||||
Sleeping...
|
||||
Waiting...
|
||||
Success: the process was restarted.
|
||||
Success: server is ready to accept connection on socket.
|
||||
SHOW INSTANCE STATUS mysqld1;
|
||||
|
@ -39,7 +39,7 @@ ERROR HY000: Bad instance name. Check that the instance with such a name exists
|
||||
-- 1.1.6.
|
||||
--------------------------------------------------------------------
|
||||
Killing the process...
|
||||
Sleeping...
|
||||
Waiting...
|
||||
Success: the process was restarted.
|
||||
SHOW INSTANCES;
|
||||
instance_name status
|
||||
@ -52,7 +52,7 @@ mysqld2 offline
|
||||
START INSTANCE mysqld2;
|
||||
Success: the process has been started.
|
||||
Killing the process...
|
||||
Sleeping...
|
||||
Waiting...
|
||||
Success: the process was killed.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
@ -795,12 +795,12 @@ set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;
|
||||
show variables like 'max_prepared_stmt_count';
|
||||
Variable_name Value
|
||||
max_prepared_stmt_count 16382
|
||||
show variables like 'prepared_stmt_count';
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
prepared_stmt_count 0
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
16382 0
|
||||
Prepared_stmt_count 0
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
16382
|
||||
set global max_prepared_stmt_count=-1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
@ -819,67 +819,70 @@ set max_prepared_stmt_count=1;
|
||||
ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
set local max_prepared_stmt_count=1;
|
||||
ERROR HY000: Variable 'max_prepared_stmt_count' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
set local prepared_stmt_count=0;
|
||||
ERROR HY000: Variable 'prepared_stmt_count' is a read only variable
|
||||
set @@prepared_stmt_count=0;
|
||||
ERROR HY000: Variable 'prepared_stmt_count' is a read only variable
|
||||
set global prepared_stmt_count=1;
|
||||
ERROR HY000: Variable 'prepared_stmt_count' is a read only variable
|
||||
set global max_prepared_stmt_count=1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
1
|
||||
set global max_prepared_stmt_count=0;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
0 0
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
set global max_prepared_stmt_count=1;
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
prepare stmt1 from "select 1";
|
||||
ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 1)
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
deallocate prepare stmt;
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
prepare stmt from "select 2";
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 1
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
1
|
||||
select @@prepared_stmt_count, @@max_prepared_stmt_count;
|
||||
@@prepared_stmt_count @@max_prepared_stmt_count
|
||||
1 1
|
||||
set global max_prepared_stmt_count=0;
|
||||
prepare stmt from "select 1";
|
||||
ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)
|
||||
execute stmt;
|
||||
ERROR HY000: Unknown prepared statement handler (stmt) given to EXECUTE
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 0)
|
||||
select @@prepared_stmt_count;
|
||||
@@prepared_stmt_count
|
||||
0
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
set global max_prepared_stmt_count=3;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
3 0
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
3
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 0
|
||||
prepare stmt from "select 1";
|
||||
prepare stmt from "select 2";
|
||||
prepare stmt1 from "select 3";
|
||||
@ -887,13 +890,13 @@ prepare stmt2 from "select 4";
|
||||
ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3)
|
||||
prepare stmt2 from "select 4";
|
||||
ERROR 42000: Can't create more than max_prepared_stmt_count statements (current value: 3)
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
3 3
|
||||
select @@max_prepared_stmt_count;
|
||||
@@max_prepared_stmt_count
|
||||
3
|
||||
show status like 'prepared_stmt_count';
|
||||
Variable_name Value
|
||||
Prepared_stmt_count 3
|
||||
deallocate prepare stmt;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
@@max_prepared_stmt_count @@prepared_stmt_count
|
||||
3 0
|
||||
set global max_prepared_stmt_count= @old_max_prepared_stmt_count;
|
||||
drop table if exists t1;
|
||||
create temporary table if not exists t1 (a1 int);
|
||||
@ -1475,6 +1478,24 @@ i
|
||||
1
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (i INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i
|
||||
WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1);
|
||||
i
|
||||
1
|
||||
PREPARE stmt FROM "SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i
|
||||
WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1)";
|
||||
EXECUTE stmt;
|
||||
i
|
||||
1
|
||||
EXECUTE stmt;
|
||||
i
|
||||
1
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
flush status;
|
||||
prepare sq from 'show status like "slow_queries"';
|
||||
|
@ -941,3 +941,30 @@ c
|
||||
---> Cleaning up...
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
drop table if exists t1;
|
||||
create table t1(a int, b varchar(50));
|
||||
drop trigger not_a_trigger;
|
||||
ERROR HY000: Trigger does not exist
|
||||
drop trigger if exists not_a_trigger;
|
||||
Warnings:
|
||||
Note 1360 Trigger does not exist
|
||||
create trigger t1_bi before insert on t1
|
||||
for each row set NEW.b := "In trigger t1_bi";
|
||||
insert into t1 values (1, "a");
|
||||
drop trigger if exists t1_bi;
|
||||
insert into t1 values (2, "b");
|
||||
drop trigger if exists t1_bi;
|
||||
Warnings:
|
||||
Note 1360 Trigger does not exist
|
||||
insert into t1 values (3, "c");
|
||||
select * from t1;
|
||||
a b
|
||||
1 In trigger t1_bi
|
||||
2 b
|
||||
3 c
|
||||
select * from t1;
|
||||
a b
|
||||
1 In trigger t1_bi
|
||||
2 b
|
||||
3 c
|
||||
drop table t1;
|
||||
|
@ -296,7 +296,7 @@ SET sql_quote_show_create= @old_sql_quote_show_create;
|
||||
SET sql_mode= @old_sql_mode;
|
||||
select @@max_heap_table_size;
|
||||
@@max_heap_table_size
|
||||
1047552
|
||||
1048576
|
||||
CREATE TABLE t1 (
|
||||
a int(11) default NULL,
|
||||
KEY a USING BTREE (a)
|
||||
|
@ -1241,4 +1241,41 @@ i j
|
||||
2 2
|
||||
13 13
|
||||
drop table t1;
|
||||
drop table if exists t1;
|
||||
drop function if exists f1;
|
||||
create table t1 (i int);
|
||||
create function f1() returns int return 10;
|
||||
create trigger t1_bi before insert on t1 for each row set @a:= f1() + 10;
|
||||
insert into t1 values ();
|
||||
select @a;
|
||||
@a
|
||||
20
|
||||
insert into t1 values ();
|
||||
select @a;
|
||||
@a
|
||||
20
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
drop table if exists t1;
|
||||
create table t1(a int, b varchar(50));
|
||||
drop trigger not_a_trigger;
|
||||
ERROR HY000: Trigger does not exist
|
||||
drop trigger if exists not_a_trigger;
|
||||
Warnings:
|
||||
Note 1360 Trigger does not exist
|
||||
create trigger t1_bi before insert on t1
|
||||
for each row set NEW.b := "In trigger t1_bi";
|
||||
insert into t1 values (1, "a");
|
||||
drop trigger if exists t1_bi;
|
||||
insert into t1 values (2, "b");
|
||||
drop trigger if exists t1_bi;
|
||||
Warnings:
|
||||
Note 1360 Trigger does not exist
|
||||
insert into t1 values (3, "c");
|
||||
select * from t1;
|
||||
a b
|
||||
1 In trigger t1_bi
|
||||
2 b
|
||||
3 c
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@ -610,4 +610,12 @@ select hex(a), b from t1;
|
||||
hex(a) b
|
||||
1 2
|
||||
drop table t1;
|
||||
create table t1(bit_field bit(2), int_field int, key a(bit_field));
|
||||
insert into t1 values (1,2);
|
||||
handler t1 open as t1;
|
||||
handler t1 read a=(1);
|
||||
bit_field int_field
|
||||
2
|
||||
handler t1 close;
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@ -453,3 +453,39 @@ id name_id id en cz
|
||||
2 3 2 en string 2 cz string 2
|
||||
3 3 3 en string 3 cz string 3
|
||||
drop table t1, t2, t3;
|
||||
CREATE TABLE t1 (a CHAR(2));
|
||||
INSERT INTO t1 VALUES (10), (50), (30), ('1a'), (60), ('t');
|
||||
SELECT a,(a + 0) FROM t1 ORDER BY a;
|
||||
a (a + 0)
|
||||
10 10
|
||||
1a 1
|
||||
30 30
|
||||
50 50
|
||||
60 60
|
||||
t 0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DOUBLE value: '1a'
|
||||
Warning 1292 Truncated incorrect DOUBLE value: 't '
|
||||
SELECT a,(a DIV 2) FROM t1 ORDER BY a;
|
||||
a (a DIV 2)
|
||||
10 5
|
||||
1a 0
|
||||
30 15
|
||||
50 25
|
||||
60 30
|
||||
t 0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: '1a'
|
||||
Warning 1292 Truncated incorrect INTEGER value: 't '
|
||||
SELECT a,CAST(a AS SIGNED) FROM t1 ORDER BY a;
|
||||
a CAST(a AS SIGNED)
|
||||
10 10
|
||||
1a 1
|
||||
30 30
|
||||
50 50
|
||||
60 60
|
||||
t 0
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: '1a'
|
||||
Warning 1292 Truncated incorrect INTEGER value: 't'
|
||||
DROP TABLE t1;
|
||||
|
@ -712,3 +712,22 @@ DROP FUNCTION f1;
|
||||
DROP VIEW v2;
|
||||
DROP VIEW v1;
|
||||
DROP USER mysqltest_u1@localhost;
|
||||
CREATE DATABASE db17254;
|
||||
USE db17254;
|
||||
CREATE TABLE t1 (f1 INT);
|
||||
INSERT INTO t1 VALUES (10),(20);
|
||||
CREATE USER def_17254@localhost;
|
||||
GRANT SELECT ON db17254.* TO def_17254@localhost;
|
||||
CREATE USER inv_17254@localhost;
|
||||
GRANT SELECT ON db17254.t1 TO inv_17254@localhost;
|
||||
GRANT CREATE VIEW ON db17254.* TO def_17254@localhost;
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
DROP USER def_17254@localhost;
|
||||
for a user
|
||||
SELECT * FROM v1;
|
||||
ERROR 42000: SELECT command denied to user 'inv_17254'@'localhost' for table 'v1'
|
||||
for a superuser
|
||||
SELECT * FROM v1;
|
||||
ERROR HY000: There is no 'def_17254'@'localhost' registered
|
||||
DROP USER inv_17254@localhost;
|
||||
DROP DATABASE db17254;
|
||||
|
@ -29,8 +29,10 @@ select grp,group_concat(c order by c) from t1 group by grp;
|
||||
select grp,group_concat(c order by c desc) from t1 group by grp;
|
||||
select grp,group_concat(d order by a) from t1 group by grp;
|
||||
select grp,group_concat(d order by a desc) from t1 group by grp;
|
||||
--disable_warnings
|
||||
select grp,group_concat(a order by a,d+c-ascii(c)-a) from t1 group by grp;
|
||||
select grp,group_concat(a order by d+c-ascii(c),a) from t1 group by grp;
|
||||
--enable_warnings
|
||||
select grp,group_concat(c order by 1) from t1 group by grp;
|
||||
select grp,group_concat(distinct c order by c) from t1 group by grp;
|
||||
select grp,group_concat(distinct c order by c desc) from t1 group by grp;
|
||||
|
@ -29,7 +29,9 @@ select count(distinct a),count(distinct grp) from t1;
|
||||
|
||||
select sum(all a),count(all a),avg(all a),std(all a),variance(all a),bit_or(all a),bit_and(all a),min(all a),max(all a),min(all c),max(all c) from t1;
|
||||
select grp, sum(a),count(a),avg(a),std(a),variance(a),bit_or(a),bit_and(a),min(a),max(a),min(c),max(c) from t1 group by grp;
|
||||
--disable_warnings
|
||||
select grp, sum(a)+count(a)+avg(a)+std(a)+variance(a)+bit_or(a)+bit_and(a)+min(a)+max(a)+min(c)+max(c) as sum from t1 group by grp;
|
||||
--enable_warnings
|
||||
|
||||
create table t2 (grp int, a bigint unsigned, c char(10));
|
||||
insert into t2 select grp,max(a)+max(grp),max(c) from t1 group by grp;
|
||||
|
@ -109,7 +109,28 @@ select count(*) from t1 where id not in (1);
|
||||
select count(*) from t1 where id not in (1,2);
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# BUG#17047: CHAR() and IN() can return NULL without signaling NULL
|
||||
# result
|
||||
#
|
||||
# The problem was in the IN() function that ignored maybe_null flags
|
||||
# of all arguments except the first (the one _before_ the IN
|
||||
# keyword, '1' in the test case below).
|
||||
#
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 SELECT 1 IN (2, NULL);
|
||||
--echo SELECT should return NULL.
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo End of 4.1 tests
|
||||
|
||||
|
||||
#
|
||||
# Bug #11885: WHERE condition with NOT IN (one element)
|
||||
@ -232,3 +253,6 @@ select some_id from t1 where some_id not in(2,-1);
|
||||
select some_id from t1 where some_id not in(-4,-1,-4);
|
||||
select some_id from t1 where some_id not in(-4,-1,3423534,2342342);
|
||||
drop table t1;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -788,6 +788,7 @@ SELECT * FROM t1 INNER JOIN t2 ON code=id
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
#
|
||||
# Bug #10963
|
||||
# 4294967296 18446744073709551616
|
||||
@ -977,4 +978,18 @@ select lpad('hello', 18446744073709551616, '1');
|
||||
select lpad('hello', -18446744073709551617, '1');
|
||||
select lpad('hello', 18446744073709551617, '1');
|
||||
|
||||
|
||||
#
|
||||
# BUG#17047: CHAR() and IN() can return NULL without signaling NULL
|
||||
# result
|
||||
#
|
||||
SET @orig_sql_mode = @@SQL_MODE;
|
||||
SET SQL_MODE=traditional;
|
||||
|
||||
SELECT CHAR(0xff,0x8f USING utf8);
|
||||
SELECT CHAR(0xff,0x8f USING utf8) IS NULL;
|
||||
|
||||
SET SQL_MODE=@orig_sql_mode;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -810,3 +810,63 @@ explain SELECT MIN(c) FROM t2 WHERE b = 2 and a = 1 and c > 1 GROUP BY a;
|
||||
SELECT MIN(c) FROM t2 WHERE b = 2 and a = 1 and c > 1 GROUP BY a;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug#24156: Loose index scan not used with CREATE TABLE ...SELECT and similar statements
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a INT, b INT, INDEX (a,b));
|
||||
INSERT INTO t1 (a, b) VALUES (1,1), (1,2), (1,3), (1,4), (1,5),
|
||||
(2,2), (2,3), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6);
|
||||
EXPLAIN SELECT max(b), a FROM t1 GROUP BY a;
|
||||
FLUSH STATUS;
|
||||
SELECT max(b), a FROM t1 GROUP BY a;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
EXPLAIN SELECT max(b), a FROM t1 GROUP BY a;
|
||||
FLUSH STATUS;
|
||||
CREATE TABLE t2 SELECT max(b), a FROM t1 GROUP BY a;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
FLUSH STATUS;
|
||||
SELECT * FROM (SELECT max(b), a FROM t1 GROUP BY a) b;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
FLUSH STATUS;
|
||||
(SELECT max(b), a FROM t1 GROUP BY a) UNION
|
||||
(SELECT max(b), a FROM t1 GROUP BY a);
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
EXPLAIN (SELECT max(b), a FROM t1 GROUP BY a) UNION
|
||||
(SELECT max(b), a FROM t1 GROUP BY a);
|
||||
|
||||
EXPLAIN SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
|
||||
FROM t1 AS t1_outer;
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE EXISTS
|
||||
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||||
(SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) > 12;
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer WHERE
|
||||
a IN (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer GROUP BY a HAVING
|
||||
a > (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2);
|
||||
EXPLAIN SELECT 1 FROM t1 AS t1_outer1 JOIN t1 AS t1_outer2
|
||||
ON t1_outer1.a = (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2)
|
||||
AND t1_outer1.b = t1_outer2.b;
|
||||
EXPLAIN SELECT (SELECT (SELECT max(b) FROM t1 GROUP BY a HAVING a < 2) x
|
||||
FROM t1 AS t1_outer) x2 FROM t1 AS t1_outer2;
|
||||
|
||||
CREATE TABLE t3 LIKE t1;
|
||||
FLUSH STATUS;
|
||||
INSERT INTO t3 SELECT a,MAX(b) FROM t1 GROUP BY a;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
DELETE FROM t3;
|
||||
FLUSH STATUS;
|
||||
INSERT INTO t3 SELECT 1, (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2)
|
||||
FROM t1 LIMIT 1;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
FLUSH STATUS;
|
||||
DELETE FROM t3 WHERE (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) > 10000;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
FLUSH STATUS;
|
||||
DELETE FROM t3 WHERE (SELECT (SELECT MAX(b) FROM t1 GROUP BY a HAVING a < 2) x
|
||||
FROM t1) > 10000;
|
||||
SHOW STATUS LIKE 'handler_read__e%';
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
@ -6,59 +6,73 @@
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle im_daemon_life_cycle.imtest started.
|
||||
|
||||
###########################################################################
|
||||
|
||||
--source include/im_check_env.inc
|
||||
|
||||
# Turn on reconnect, not on by default anymore
|
||||
# Turn on reconnect, not on by default anymore.
|
||||
--enable_reconnect
|
||||
|
||||
###########################################################################
|
||||
|
||||
# Kill the IM main process and check that the IM Angel will restart the main
|
||||
# process.
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30
|
||||
|
||||
#
|
||||
# The main daemon-life-cycle test case -- check that IM-angel will restart
|
||||
# IM-main if it got killed:
|
||||
# - kill IM-main and check that IM-angel will restart it;
|
||||
# - wait for IM-main to start accepting connections before continue test
|
||||
# case;
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
# Wait for IM to start accepting connections.
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Main-test: starting...
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 30
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Killing IM-main...
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30 im_daemon_life_cycle
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Waiting for IM-main to start accepting connections...
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 30 im_daemon_life_cycle
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Main-test: done.
|
||||
|
||||
###########################################################################
|
||||
|
||||
#
|
||||
# BUG#12751: Instance Manager: client hangs
|
||||
# - start nonguarded instance (mysqld2);
|
||||
# - kill IM-main and get it restarted by IM-angel;
|
||||
# - check that guarded instance (mysqld1) is accepting connections.
|
||||
# - check that non-guarded instance (mysqld2) were not stopped.
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
--echo
|
||||
--echo --------------------------------------------------------------------
|
||||
--echo -- Test for BUG#12751
|
||||
--echo --------------------------------------------------------------------
|
||||
|
||||
# Give some time to begin accepting connections after restart.
|
||||
# FIXME: race condition here.
|
||||
|
||||
--sleep 3
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle BUG12751: starting...
|
||||
|
||||
# 1. Start mysqld;
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: starting...
|
||||
START INSTANCE mysqld2;
|
||||
# FIXME: START INSTANCE should be synchronous.
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started
|
||||
|
||||
# 2. Restart IM-main: kill it and IM-angel will restart it; wait for IM to
|
||||
# start accepting connections again.
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: waiting to start...
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_daemon_life_cycle
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: started.
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 30
|
||||
# 2. Restart IM-main;
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Killing IM-main...
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_PATH_PID restarted 30 im_daemon_life_cycle
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Waiting for IM-main to start accepting connections...
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_socket.sh $EXE_MYSQL $IM_PATH_SOCK $IM_USERNAME $IM_PASSWORD '' 30 im_daemon_life_cycle
|
||||
|
||||
# 3. Issue some statement -- connection should be re-established.
|
||||
|
||||
# Give some time to begin accepting connections after restart.
|
||||
# FIXME: race condition here.
|
||||
|
||||
--sleep 3
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle Checking that IM-main processing commands...
|
||||
|
||||
--replace_column 3 VERSION
|
||||
SHOW INSTANCE STATUS mysqld1;
|
||||
@ -67,6 +81,13 @@ SHOW INSTANCE STATUS mysqld1;
|
||||
# So, if it we do not stop it, it will be stopped by mysql-test-run.pl with
|
||||
# warning.
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: stopping...
|
||||
STOP INSTANCE mysqld2;
|
||||
# FIXME: STOP INSTANCE should be synchronous.
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: waiting to stop...
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped im_daemon_life_cycle
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle mysqld2: stopped.
|
||||
|
||||
###########################################################################
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/log.sh im_daemon_life_cycle BUG12751: done.
|
||||
|
@ -25,7 +25,7 @@
|
||||
|
||||
START INSTANCE mysqld2;
|
||||
# FIXME: START INSTANCE should be synchronous.
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_life_cycle
|
||||
|
||||
# FIXME: Result of SHOW INSTANCES here is not deterministic unless START
|
||||
# INSTANCE is synchronous. Even waiting for mysqld to start by looking at
|
||||
@ -58,7 +58,7 @@ SHOW VARIABLES LIKE 'port';
|
||||
|
||||
STOP INSTANCE mysqld2;
|
||||
# FIXME: STOP INSTANCE should be synchronous.
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped im_life_cycle
|
||||
|
||||
# FIXME: Result of SHOW INSTANCES here is not deterministic unless START
|
||||
# INSTANCE is synchronous. Even waiting for mysqld to start by looking at
|
||||
@ -121,7 +121,7 @@ STOP INSTANCE mysqld3;
|
||||
--echo -- 1.1.6.
|
||||
--echo --------------------------------------------------------------------
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_MYSQLD1_PATH_PID restarted 30
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_MYSQLD1_PATH_PID restarted 30 im_life_cycle
|
||||
|
||||
# Give some time to IM to detect that mysqld was restarted. It should be
|
||||
# longer than monitoring interval.
|
||||
@ -143,7 +143,7 @@ SHOW INSTANCES;
|
||||
|
||||
START INSTANCE mysqld2;
|
||||
# FIXME: START INSTANCE should be synchronous.
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_life_cycle
|
||||
|
||||
# FIXME: Result of SHOW INSTANCES here is not deterministic unless START
|
||||
# INSTANCE is synchronous. Even waiting for mysqld to start by looking at
|
||||
@ -151,7 +151,7 @@ START INSTANCE mysqld2;
|
||||
# mysqld has started.
|
||||
# SHOW INSTANCES;
|
||||
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_MYSQLD2_PATH_PID killed 10
|
||||
--exec $MYSQL_TEST_DIR/t/kill_n_check.sh $IM_MYSQLD2_PATH_PID killed 10 im_life_cycle
|
||||
|
||||
# FIXME: Result of SHOW INSTANCES here is not deterministic unless START
|
||||
# INSTANCE is synchronous. Even waiting for mysqld to start by looking at
|
||||
|
@ -31,10 +31,10 @@ SHOW INSTANCE OPTIONS mysqld2;
|
||||
#
|
||||
|
||||
START INSTANCE mysqld2;
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 started im_utils
|
||||
|
||||
STOP INSTANCE mysqld2;
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped
|
||||
--exec $MYSQL_TEST_DIR/t/wait_for_process.sh $IM_MYSQLD2_PATH_PID 30 stopped im_utils
|
||||
|
||||
#
|
||||
# Check 'SHOW LOG FILES' command:
|
||||
|
@ -2,74 +2,101 @@
|
||||
|
||||
###########################################################################
|
||||
|
||||
# NOTE: this script returns 0 (success) even in case of failure. This is
|
||||
# because this script is executed under mysql-test-run[.pl] and it's better to
|
||||
# examine particular problem in log file, than just having said that the test
|
||||
# case has failed.
|
||||
# NOTE: this script returns 0 (success) even in case of failure (except for
|
||||
# usage-error). This is because this script is executed under
|
||||
# mysql-test-run[.pl] and it's better to examine particular problem in log
|
||||
# file, than just having said that the test case has failed.
|
||||
|
||||
###########################################################################
|
||||
|
||||
basename=`basename "$0"`
|
||||
dirname=`dirname "$0"`
|
||||
|
||||
###########################################################################
|
||||
|
||||
. "$dirname/utils.sh"
|
||||
|
||||
###########################################################################
|
||||
|
||||
check_restart()
|
||||
{
|
||||
if [ ! -r "$pid_path" ]; then
|
||||
log_debug "No '$pid_path' found."
|
||||
user_msg='the process was killed'
|
||||
return 1
|
||||
fi
|
||||
|
||||
new_pid=`cat "$pid_path" 2>/dev/null`
|
||||
err_code=$?
|
||||
|
||||
if [ $? -eq 0 -a "$original_pid" = "$new_pid" ]; then
|
||||
log_debug "err_code: $err_code; original_pid: $original_pid; new_pid: $new_pid."
|
||||
|
||||
if [ $err_code -eq 0 -a "$original_pid" = "$new_pid" ]; then
|
||||
log_debug "The process was not restarted."
|
||||
user_msg='the process was not restarted'
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_debug "The process was restarted."
|
||||
user_msg='the process was restarted'
|
||||
return 0
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ $# -ne 3 ]; then
|
||||
echo "Usage: kill_n_check.sh <pid file path> killed|restarted <timeout>"
|
||||
exit 0
|
||||
if [ $# -ne 4 ]; then
|
||||
echo "Usage: $basename <pid file path> killed|restarted <timeout> <test id>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pid_path="$1"
|
||||
expected_result="$2"
|
||||
total_timeout="$3"
|
||||
test_id="$4"
|
||||
log_file="$MYSQLTEST_VARDIR/log/$test_id.log"
|
||||
|
||||
log_debug "-- $basename: starting --"
|
||||
log_debug "pid_path: '$pid_path'"
|
||||
log_debug "expected_result: '$expected_result'"
|
||||
log_debug "total_timeout: '$total_timeout'"
|
||||
log_debug "test_id: '$test_id'"
|
||||
log_debug "log_file: '$log_file'"
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ "$expected_result" != 'killed' -a \
|
||||
"$expected_result" != 'restarted' ]; then
|
||||
echo "Error: invalid second argument ('killed' or 'restarted' expected)."
|
||||
exit 0
|
||||
log_error "Invalid second argument ($expected_result): 'killed' or 'restarted' expected."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
if [ -z "$pid_path" ]; then
|
||||
echo "Error: invalid PID path ($pid_path)."
|
||||
exit 0
|
||||
log_error "Invalid PID path ($pid_path)."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
if [ ! -r "$pid_path" ]; then
|
||||
echo "Error: PID file ($pid_path) does not exist."
|
||||
exit 0
|
||||
log_error "PID file ($pid_path) does not exist."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
if [ -z "$total_timeout" ]; then
|
||||
echo "Error: timeout is not specified."
|
||||
exit 0
|
||||
log_error "Timeout is not specified."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
###########################################################################
|
||||
|
||||
original_pid=`cat "$pid_path"`
|
||||
log_debug "original_pid: $original_pid."
|
||||
|
||||
echo "Killing the process..."
|
||||
log_info "Killing the process..."
|
||||
|
||||
kill -9 $original_pid
|
||||
|
||||
###########################################################################
|
||||
|
||||
echo "Sleeping..."
|
||||
log_info "Waiting..."
|
||||
|
||||
if [ "$expected_result" = "restarted" ]; then
|
||||
|
||||
@ -79,37 +106,42 @@ if [ "$expected_result" = "restarted" ]; then
|
||||
|
||||
while true; do
|
||||
|
||||
log_debug "cur_attempt: $cur_attempt."
|
||||
|
||||
if check_restart; then
|
||||
echo "Success: $user_msg."
|
||||
exit 0
|
||||
log_info "Success: $user_msg."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
[ $cur_attempt -ge $total_timeout ] && break
|
||||
|
||||
log_debug "Sleeping for 1 second..."
|
||||
sleep 1
|
||||
|
||||
cur_attempt=`expr $cur_attempt + 1`
|
||||
|
||||
done
|
||||
|
||||
echo "Error: $user_msg."
|
||||
exit 0
|
||||
log_error "$user_msg."
|
||||
quit 0
|
||||
|
||||
else # $expected_result == killed
|
||||
|
||||
# Here we have to sleep for some long time to ensure that the process will
|
||||
# not be restarted.
|
||||
|
||||
log_debug "Sleeping for $total_timeout seconds..."
|
||||
sleep $total_timeout
|
||||
|
||||
new_pid=`cat "$pid_path" 2>/dev/null`
|
||||
log_debug "new_pid: $new_pid."
|
||||
|
||||
if [ "$new_pid" -a "$new_pid" -ne "$original_pid" ]; then
|
||||
echo "Error: the process was restarted."
|
||||
log_error "The process was restarted."
|
||||
else
|
||||
echo "Success: the process was killed."
|
||||
log_info "Success: the process was killed."
|
||||
fi
|
||||
|
||||
exit 0
|
||||
quit 0
|
||||
|
||||
fi
|
||||
|
24
mysql-test/t/log.sh
Executable file
24
mysql-test/t/log.sh
Executable file
@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
|
||||
###########################################################################
|
||||
|
||||
basename=`basename "$0"`
|
||||
dirname=`dirname "$0"`
|
||||
|
||||
###########################################################################
|
||||
|
||||
. "$dirname/utils.sh"
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
echo "Usage: $basename <test id> log message ..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
test_id="$1"
|
||||
log_file="$MYSQLTEST_VARDIR/log/$test_id.log"
|
||||
|
||||
shift
|
||||
|
||||
log_debug "$*"
|
@ -848,6 +848,9 @@ drop table t1;
|
||||
# Bug#16365 Prepared Statements: DoS with too many open statements
|
||||
# Check that the limit @@max_prpeared_stmt_count works.
|
||||
#
|
||||
# This is also the test for bug#23159 prepared_stmt_count should be
|
||||
# status variable.
|
||||
#
|
||||
# Save the old value
|
||||
set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;
|
||||
#
|
||||
@ -857,17 +860,17 @@ set @old_max_prepared_stmt_count= @@max_prepared_stmt_count;
|
||||
#
|
||||
--disable_ps_protocol
|
||||
#
|
||||
# A. Check that the new variables are present in SHOW VARIABLES list.
|
||||
# A. Check that the new variables are present in SHOW VARIABLES and
|
||||
# SHOW STATUS lists.
|
||||
#
|
||||
show variables like 'max_prepared_stmt_count';
|
||||
show variables like 'prepared_stmt_count';
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# B. Check that the new variables are selectable.
|
||||
# B. Check that the new system variable is selectable.
|
||||
#
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
#
|
||||
# C. Check that max_prepared_stmt_count is settable (global only),
|
||||
# whereas prepared_stmt_count is readonly.
|
||||
# C. Check that max_prepared_stmt_count is settable (global only).
|
||||
#
|
||||
set global max_prepared_stmt_count=-1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@ -881,12 +884,6 @@ set @@max_prepared_stmt_count=1;
|
||||
set max_prepared_stmt_count=1;
|
||||
--error ER_GLOBAL_VARIABLE
|
||||
set local max_prepared_stmt_count=1;
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
set local prepared_stmt_count=0;
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
set @@prepared_stmt_count=0;
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
set global prepared_stmt_count=1;
|
||||
# set to a reasonable limit works
|
||||
set global max_prepared_stmt_count=1;
|
||||
select @@max_prepared_stmt_count;
|
||||
@ -894,47 +891,50 @@ select @@max_prepared_stmt_count;
|
||||
# D. Check that the variables actually work.
|
||||
#
|
||||
set global max_prepared_stmt_count=0;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
--error ER_MAX_PREPARED_STMT_COUNT_REACHED
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
set global max_prepared_stmt_count=1;
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
--error ER_MAX_PREPARED_STMT_COUNT_REACHED
|
||||
prepare stmt1 from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
deallocate prepare stmt;
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# E. Check that we can prepare a statement with the same name
|
||||
# successfully, without hitting the limit.
|
||||
#
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
prepare stmt from "select 2";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# F. We can set the max below the current count. In this case no new
|
||||
# statements should be allowed to prepare.
|
||||
#
|
||||
select @@prepared_stmt_count, @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
select @@max_prepared_stmt_count;
|
||||
set global max_prepared_stmt_count=0;
|
||||
--error ER_MAX_PREPARED_STMT_COUNT_REACHED
|
||||
prepare stmt from "select 1";
|
||||
# Result: the old statement is deallocated, the new is not created.
|
||||
--error 1243 # ER_UNKNOWN_STMT_HANDLER
|
||||
--error ER_UNKNOWN_STMT_HANDLER
|
||||
execute stmt;
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
--error ER_MAX_PREPARED_STMT_COUNT_REACHED
|
||||
prepare stmt from "select 1";
|
||||
select @@prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
#
|
||||
# G. Show that the variables are up to date even after a connection with all
|
||||
# statements in it was terminated.
|
||||
#
|
||||
set global max_prepared_stmt_count=3;
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
prepare stmt from "select 1";
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
@ -943,26 +943,20 @@ prepare stmt1 from "select 3";
|
||||
--error ER_MAX_PREPARED_STMT_COUNT_REACHED
|
||||
prepare stmt2 from "select 4";
|
||||
connection default;
|
||||
--error ER_MAX_PREPARED_STMT_COUNT_REACHED
|
||||
--error ER_MAX_PREPARED_STMT_COUNT_REACHED
|
||||
prepare stmt2 from "select 4";
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
select @@max_prepared_stmt_count;
|
||||
show status like 'prepared_stmt_count';
|
||||
disconnect con1;
|
||||
connection default;
|
||||
# Wait for the connection to die: deal with a possible race
|
||||
deallocate prepare stmt;
|
||||
let $count= `select @@prepared_stmt_count`;
|
||||
if ($count)
|
||||
{
|
||||
--sleep 2
|
||||
let $count= `select @@prepared_stmt_count`;
|
||||
}
|
||||
select @@max_prepared_stmt_count, @@prepared_stmt_count;
|
||||
#
|
||||
# Restore the old value.
|
||||
#
|
||||
set global max_prepared_stmt_count= @old_max_prepared_stmt_count;
|
||||
--enable_ps_protocol
|
||||
|
||||
|
||||
#
|
||||
# Bug#19399 "Stored Procedures 'Lost Connection' when dropping/creating
|
||||
# tables"
|
||||
@ -1513,6 +1507,29 @@ DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
||||
#
|
||||
# BUG#20327: Marking of a wrong field leads to a wrong result on select with
|
||||
# view, prepared statement and subquery.
|
||||
#
|
||||
CREATE TABLE t1 (i INT);
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
|
||||
let $query = SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i
|
||||
WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1);
|
||||
eval $query;
|
||||
eval PREPARE stmt FROM "$query";
|
||||
# Statement execution should return '1'.
|
||||
EXECUTE stmt;
|
||||
# Check re-execution.
|
||||
EXECUTE stmt;
|
||||
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# BUG#21856: Prepared Statments: crash if bad create
|
||||
#
|
||||
|
@ -423,6 +423,43 @@ DROP TABLE t2;
|
||||
--sync_with_master
|
||||
--connection master
|
||||
|
||||
#
|
||||
# BUG#23703: DROP TRIGGER needs an IF EXISTS
|
||||
#
|
||||
|
||||
connection master;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
create table t1(a int, b varchar(50));
|
||||
|
||||
-- error ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger not_a_trigger;
|
||||
|
||||
drop trigger if exists not_a_trigger;
|
||||
|
||||
create trigger t1_bi before insert on t1
|
||||
for each row set NEW.b := "In trigger t1_bi";
|
||||
|
||||
insert into t1 values (1, "a");
|
||||
drop trigger if exists t1_bi;
|
||||
insert into t1 values (2, "b");
|
||||
drop trigger if exists t1_bi;
|
||||
insert into t1 values (3, "c");
|
||||
|
||||
select * from t1;
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
select * from t1;
|
||||
|
||||
connection master;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# End of tests
|
||||
|
@ -1499,4 +1499,52 @@ select * from t1;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug #23651 "Server crashes when trigger which uses stored function
|
||||
# invoked from different connections".
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop function if exists f1;
|
||||
--enable_warnings
|
||||
create table t1 (i int);
|
||||
create function f1() returns int return 10;
|
||||
create trigger t1_bi before insert on t1 for each row set @a:= f1() + 10;
|
||||
insert into t1 values ();
|
||||
select @a;
|
||||
connection addconroot1;
|
||||
insert into t1 values ();
|
||||
select @a;
|
||||
connection default;
|
||||
drop table t1;
|
||||
drop function f1;
|
||||
|
||||
#
|
||||
# Bug#23703: DROP TRIGGER needs an IF EXISTS
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
create table t1(a int, b varchar(50));
|
||||
|
||||
-- error ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger not_a_trigger;
|
||||
|
||||
drop trigger if exists not_a_trigger;
|
||||
|
||||
create trigger t1_bi before insert on t1
|
||||
for each row set NEW.b := "In trigger t1_bi";
|
||||
|
||||
insert into t1 values (1, "a");
|
||||
drop trigger if exists t1_bi;
|
||||
insert into t1 values (2, "b");
|
||||
drop trigger if exists t1_bi;
|
||||
insert into t1 values (3, "c");
|
||||
|
||||
select * from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -261,4 +261,15 @@ insert into t1 (b, a) values ('2', '1');
|
||||
select hex(a), b from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# type was not properly initalized, which caused key_copy to fail
|
||||
#
|
||||
|
||||
create table t1(bit_field bit(2), int_field int, key a(bit_field));
|
||||
insert into t1 values (1,2);
|
||||
handler t1 open as t1;
|
||||
handler t1 read a=(1);
|
||||
handler t1 close;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@ -187,3 +187,13 @@ left join t3 on t1.id=t3.id order by t3.id;
|
||||
--disable_metadata
|
||||
--enable_ps_protocol
|
||||
drop table t1, t2, t3;
|
||||
|
||||
#
|
||||
# Bug #11927: Warnings shown for CAST( chr as signed) but not (chr + 0)
|
||||
#
|
||||
CREATE TABLE t1 (a CHAR(2));
|
||||
INSERT INTO t1 VALUES (10), (50), (30), ('1a'), (60), ('t');
|
||||
SELECT a,(a + 0) FROM t1 ORDER BY a;
|
||||
SELECT a,(a DIV 2) FROM t1 ORDER BY a;
|
||||
SELECT a,CAST(a AS SIGNED) FROM t1 ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
|
55
mysql-test/t/utils.sh
Normal file
55
mysql-test/t/utils.sh
Normal file
@ -0,0 +1,55 @@
|
||||
###########################################################################
|
||||
#
|
||||
# This file provides utility functions and is included by other scripts.
|
||||
#
|
||||
# The following global variables must be set before calling functions from this
|
||||
# file:
|
||||
# - basename -- base name of the calling script (main application);
|
||||
# - log_file -- where to store log records;
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
log()
|
||||
{
|
||||
[ -z "$log_file" ] && return;
|
||||
|
||||
log_level="$1"
|
||||
log_msg="$2"
|
||||
ts=`date`
|
||||
|
||||
echo "[$ts] [$basename] [$log_level] $log_msg" >> "$log_file";
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
log_debug()
|
||||
{
|
||||
log 'DEBUG' "$1"
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
log_info()
|
||||
{
|
||||
log 'INFO' "$1"
|
||||
echo "$1"
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
log_error()
|
||||
{
|
||||
log 'ERROR' "$1"
|
||||
echo "Error: $1"
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
quit()
|
||||
{
|
||||
exit_status="$1"
|
||||
|
||||
log_debug "-- $basename: finished (exit_status: $exit_status) --"
|
||||
|
||||
exit $exit_status
|
||||
}
|
@ -927,4 +927,41 @@ DROP VIEW v2;
|
||||
DROP VIEW v1;
|
||||
DROP USER mysqltest_u1@localhost;
|
||||
|
||||
#
|
||||
# Bug#17254: Error for DEFINER security on VIEW provides too much info
|
||||
#
|
||||
connect (root,localhost,root,,);
|
||||
connection root;
|
||||
CREATE DATABASE db17254;
|
||||
USE db17254;
|
||||
CREATE TABLE t1 (f1 INT);
|
||||
INSERT INTO t1 VALUES (10),(20);
|
||||
CREATE USER def_17254@localhost;
|
||||
GRANT SELECT ON db17254.* TO def_17254@localhost;
|
||||
CREATE USER inv_17254@localhost;
|
||||
GRANT SELECT ON db17254.t1 TO inv_17254@localhost;
|
||||
GRANT CREATE VIEW ON db17254.* TO def_17254@localhost;
|
||||
|
||||
connect (def,localhost,def_17254,,db17254);
|
||||
connection def;
|
||||
CREATE VIEW v1 AS SELECT * FROM t1;
|
||||
|
||||
connection root;
|
||||
DROP USER def_17254@localhost;
|
||||
|
||||
connect (inv,localhost,inv_17254,,db17254);
|
||||
connection inv;
|
||||
--echo for a user
|
||||
--error 1142
|
||||
SELECT * FROM v1;
|
||||
|
||||
connection root;
|
||||
--echo for a superuser
|
||||
--error 1449
|
||||
SELECT * FROM v1;
|
||||
DROP USER inv_17254@localhost;
|
||||
DROP DATABASE db17254;
|
||||
disconnect def;
|
||||
disconnect inv;
|
||||
|
||||
# End of 5.0 tests.
|
||||
|
@ -2,11 +2,79 @@
|
||||
|
||||
###########################################################################
|
||||
|
||||
# NOTE: this script returns 0 (success) even in case of failure (except for
|
||||
# usage-error). This is because this script is executed under
|
||||
# mysql-test-run[.pl] and it's better to examine particular problem in log
|
||||
# file, than just having said that the test case has failed.
|
||||
|
||||
###########################################################################
|
||||
|
||||
basename=`basename "$0"`
|
||||
dirname=`dirname "$0"`
|
||||
|
||||
###########################################################################
|
||||
|
||||
. "$dirname/utils.sh"
|
||||
|
||||
###########################################################################
|
||||
|
||||
check_started()
|
||||
{
|
||||
if [ ! -r "$pid_path" ]; then
|
||||
log_debug "No PID-file ($pid_path) found -- not started."
|
||||
return 1
|
||||
fi
|
||||
|
||||
new_pid=`cat "$pid_path" 2>/dev/null`
|
||||
err_code=$?
|
||||
|
||||
log_debug "err_code: $err_code; new_pid: $new_pid."
|
||||
|
||||
if [ $? -ne 0 -o -z "$new_pid" ]; then
|
||||
log_debug "The process was not started."
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_debug "The process was started."
|
||||
return 0
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
check_stopped()
|
||||
{
|
||||
if [ -r "$pid_path" ]; then
|
||||
log_debug "PID-file '$pid_path' exists -- not stopped."
|
||||
return 1
|
||||
fi
|
||||
|
||||
log_debug "No PID-file ($pid_path) found -- stopped."
|
||||
return 0
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ $# -ne 4 ]; then
|
||||
echo "Usage: $basename <pid file path> <total attempts> started|stopped <test id>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pid_path="$1"
|
||||
total_attempts="$2"
|
||||
event="$3"
|
||||
test_id="$4"
|
||||
log_file="$MYSQLTEST_VARDIR/log/$test_id.log"
|
||||
|
||||
case "$3" in
|
||||
log_debug "-- $basename: starting --"
|
||||
log_debug "pid_path: '$pid_path'"
|
||||
log_debug "total_attempts: '$total_attempts'"
|
||||
log_debug "event: '$event'"
|
||||
log_debug "test_id: '$test_id'"
|
||||
log_debug "log_file: '$log_file'"
|
||||
|
||||
###########################################################################
|
||||
|
||||
case "$event" in
|
||||
started)
|
||||
check_fn='check_started';
|
||||
;;
|
||||
@ -16,51 +84,31 @@ case "$3" in
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Error: invalid third argument ('started' or 'stopped' expected)."
|
||||
exit 0
|
||||
log_error "Invalid third argument ('started' or 'stopped' expected)."
|
||||
quit 0
|
||||
esac
|
||||
|
||||
###########################################################################
|
||||
|
||||
check_started()
|
||||
{
|
||||
[ ! -r "$pid_path" ] && return 1
|
||||
|
||||
new_pid=`cat "$pid_path" 2>/dev/null`
|
||||
|
||||
[ $? -eq 0 -a "$original_pid" = "$new_pid" ] && return 1
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
check_stopped()
|
||||
{
|
||||
[ -r "$pid_path" ] && return 1
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
cur_attempt=1
|
||||
|
||||
while true; do
|
||||
|
||||
log_debug "cur_attempt: $cur_attempt."
|
||||
|
||||
if ( eval $check_fn ); then
|
||||
echo "Success: the process has been $event."
|
||||
exit 0
|
||||
log_info "Success: the process has been $event."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
[ $cur_attempt -ge $total_attempts ] && break
|
||||
|
||||
log_debug "Sleeping for 1 second..."
|
||||
sleep 1
|
||||
|
||||
cur_attempt=`expr $cur_attempt + 1`
|
||||
|
||||
done
|
||||
|
||||
echo "Error: the process has not been $event in $total_attempts secs."
|
||||
exit 0
|
||||
|
||||
log_error "The process has not been $event in $total_attempts secs."
|
||||
quit 0
|
||||
|
@ -2,9 +2,25 @@
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ $# -ne 6 ]; then
|
||||
echo "Usage: wait_for_socket.sh <executable path> <socket path> <username> <password> <db> <timeout>"
|
||||
exit 0
|
||||
# NOTE: this script returns 0 (success) even in case of failure (except for
|
||||
# usage-error). This is because this script is executed under
|
||||
# mysql-test-run[.pl] and it's better to examine particular problem in log
|
||||
# file, than just having said that the test case has failed.
|
||||
|
||||
###########################################################################
|
||||
|
||||
basename=`basename "$0"`
|
||||
dirname=`dirname "$0"`
|
||||
|
||||
###########################################################################
|
||||
|
||||
. "$dirname/utils.sh"
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ $# -ne 7 ]; then
|
||||
echo "Usage: wait_for_socket.sh <executable path> <socket path> <username> <password> <db> <timeout> <test id>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
client_exe="$1"
|
||||
@ -13,22 +29,34 @@ username="$3"
|
||||
password="$4"
|
||||
db="$5"
|
||||
total_timeout="$6"
|
||||
test_id="$7"
|
||||
log_file="$MYSQLTEST_VARDIR/log/$test_id.log"
|
||||
|
||||
log_debug "-- $basename: starting --"
|
||||
log_debug "client_exe: '$client_exe'"
|
||||
log_debug "socket_path: '$socket_path'"
|
||||
log_debug "username: '$username'"
|
||||
log_debug "password: '$password'"
|
||||
log_debug "db: '$db'"
|
||||
log_debug "total_timeout: '$total_timeout'"
|
||||
log_debug "test_id: '$test_id'"
|
||||
log_debug "log_file: '$log_file'"
|
||||
|
||||
###########################################################################
|
||||
|
||||
if [ -z "$client_exe" ]; then
|
||||
echo "Error: invalid path to client executable ($client_exe)."
|
||||
exit 0;
|
||||
log_error "Invalid path to client executable ($client_exe)."
|
||||
quit 0;
|
||||
fi
|
||||
|
||||
if [ ! -x "$client_exe" ]; then
|
||||
echo "Error: client by path '$client_exe' is not available."
|
||||
exit 0;
|
||||
log_error "Client by path '$client_exe' is not available."
|
||||
quit 0;
|
||||
fi
|
||||
|
||||
if [ -z "$socket_path" ]; then
|
||||
echo "Error: invalid socket patch."
|
||||
exit 0
|
||||
log_error "Invalid socket patch ($socket_path)."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
###########################################################################
|
||||
@ -39,15 +67,19 @@ client_args="--silent --socket=$socket_path --connect_timeout=1 "
|
||||
[ -n "$password" ] && client_args="$client_args --password=$password "
|
||||
[ -n "$db" ] && client_args="$client_args $db"
|
||||
|
||||
log_debug "client_args: '$client_args'"
|
||||
|
||||
###########################################################################
|
||||
|
||||
cur_attempt=1
|
||||
|
||||
while true; do
|
||||
|
||||
log_debug "cur_attempt: $cur_attempt."
|
||||
|
||||
if ( echo 'quit' | "$client_exe" $client_args >/dev/null 2>&1 ); then
|
||||
echo "Success: server is ready to accept connection on socket."
|
||||
exit 0
|
||||
log_info "Success: server is ready to accept connection on socket."
|
||||
quit 0
|
||||
fi
|
||||
|
||||
[ $cur_attempt -ge $total_timeout ] && break
|
||||
@ -58,5 +90,5 @@ while true; do
|
||||
|
||||
done
|
||||
|
||||
echo "Error: server does not accept connections after $total_timeout seconds."
|
||||
exit 0
|
||||
log_error "Server does not accept connections after $total_timeout seconds."
|
||||
quit 0
|
||||
|
Reference in New Issue
Block a user