mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.1-comeng-unification
into zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.1-recentcommmerge BitKeeper/deleted/.del-ha_berkeley.cc: Auto merged BitKeeper/deleted/.del-mysqld.vcproj~6aa7b3f9c3e28fcb: Auto merged BitKeeper/triggers/post-commit: Auto merged client/mysqlcheck.c: Auto merged include/config-win.h: Auto merged include/my_dbug.h: Auto merged libmysqld/Makefile.am: Auto merged mysql-test/r/func_in.result: Auto merged mysql-test/r/information_schema.result: Auto merged mysql-test/r/information_schema_db.result: Auto merged mysql-test/t/func_in.test: Auto merged mysql-test/t/information_schema.test: Auto merged sql/Makefile.am: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_func.cc: Auto merged sql/lock.cc: Auto merged sql/log_event.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/set_var.h: Auto merged sql/sp_head.cc: Auto merged sql/sql_base.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_delete.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_repl.cc: Auto merged sql/sql_view.cc: Auto merged sql/structs.h: Auto merged sql/table.h: Auto merged storage/archive/ha_archive.cc: Auto merged storage/myisam/ha_myisam.cc: Auto merged storage/myisam/mi_open.c: Auto merged storage/myisammrg/ha_myisammrg.cc: Auto merged storage/ndb/src/common/util/File.cpp: Auto merged configure.in: Manual merge. sql/CMakeLists.txt: Manual merge. sql/mysql_priv.h: Manual merge. sql/mysqld.cc: Manual merge. sql/set_var.cc: Manual merge. sql/slave.cc: Manual merge. sql/sql_cache.cc: Manual merge. sql/sql_class.cc: Manual merge. sql/sql_lex.h: Manual merge. sql/sql_parse.cc: Manual merge. sql/sql_select.cc: Manual merge. sql/sql_show.cc: Manual merge. sql/sql_table.cc: Manual merge. sql/sql_update.cc: Manual merge. sql/sql_yacc.yy: Manual merge.
This commit is contained in:
48
mysql-test/include/ddl_i18n.check_events.inc
Normal file
48
mysql-test/include/ddl_i18n.check_events.inc
Normal file
@ -0,0 +1,48 @@
|
||||
# - Check SHOW CREATE statement;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SHOW CREATE EVENT ev1|
|
||||
--echo
|
||||
SHOW CREATE EVENT ev2|
|
||||
--echo
|
||||
SHOW CREATE EVENT mysqltest2.ev3|
|
||||
--echo
|
||||
SHOW CREATE EVENT mysqltest2.ev3|
|
||||
|
||||
# - Check SHOW statement;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SHOW EVENTS LIKE 'ev1'|
|
||||
|
||||
--echo
|
||||
SHOW EVENTS LIKE 'ev2'|
|
||||
|
||||
--echo
|
||||
SHOW EVENTS LIKE 'ev3'|
|
||||
|
||||
--echo
|
||||
SHOW EVENTS LIKE 'ev4'|
|
||||
|
||||
# - Check INFORMATION_SCHEMA;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
--replace_column 17 CREATED 18 LAST_ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev1'|
|
||||
|
||||
--echo
|
||||
--replace_column 17 CREATED 18 LAST_ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev2'|
|
||||
|
||||
--echo
|
||||
--replace_column 17 CREATED 18 LAST_ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev3'|
|
||||
|
||||
--echo
|
||||
--replace_column 17 CREATED 18 LAST_ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE event_name = 'ev4'|
|
83
mysql-test/include/ddl_i18n.check_sp.inc
Normal file
83
mysql-test/include/ddl_i18n.check_sp.inc
Normal file
@ -0,0 +1,83 @@
|
||||
# - Check SHOW CREATE statement;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SHOW CREATE PROCEDURE p1|
|
||||
--echo
|
||||
SHOW CREATE PROCEDURE p2|
|
||||
--echo
|
||||
SHOW CREATE PROCEDURE mysqltest2.p3|
|
||||
--echo
|
||||
SHOW CREATE PROCEDURE mysqltest2.p4|
|
||||
|
||||
# - Check SHOW statement;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
--replace_column 5 MODIFIED 6 CREATED
|
||||
SHOW PROCEDURE STATUS LIKE 'p1'|
|
||||
|
||||
--echo
|
||||
--replace_column 5 MODIFIED 6 CREATED
|
||||
SHOW PROCEDURE STATUS LIKE 'p2'|
|
||||
|
||||
--echo
|
||||
--replace_column 5 MODIFIED 6 CREATED
|
||||
SHOW PROCEDURE STATUS LIKE 'p3'|
|
||||
|
||||
--echo
|
||||
--replace_column 5 MODIFIED 6 CREATED
|
||||
SHOW PROCEDURE STATUS LIKE 'p4'|
|
||||
|
||||
# - Check INFORMATION_SCHEMA;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
--replace_column 16 CREATED 17 ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p1'|
|
||||
|
||||
--echo
|
||||
--replace_column 16 CREATED 17 ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p2'|
|
||||
|
||||
--echo
|
||||
--replace_column 16 CREATED 17 ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p3'|
|
||||
|
||||
--echo
|
||||
--replace_column 16 CREATED 17 ALTERED
|
||||
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_name = 'p4'|
|
||||
|
||||
# - Initialize the used variables (actual values don't matter);
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SET @a = '1'|
|
||||
SET @b = '2'|
|
||||
|
||||
# - Execute the routines;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
CALL p1(@a, @b)|
|
||||
SELECT COLLATION(@a) AS ca, COLLATION(@b) cb|
|
||||
|
||||
--echo
|
||||
|
||||
CALL p2(@a, @b)|
|
||||
SELECT COLLATION(@a) AS ca, COLLATION(@b) cb|
|
||||
|
||||
--echo
|
||||
|
||||
CALL mysqltest2.p3(@a, @b)|
|
||||
SELECT COLLATION(@a) AS ca, COLLATION(@b) cb|
|
||||
|
||||
--echo
|
||||
|
||||
CALL mysqltest2.p4(@a, @b)|
|
||||
SELECT COLLATION(@a) AS ca, COLLATION(@b) cb|
|
106
mysql-test/include/ddl_i18n.check_triggers.inc
Normal file
106
mysql-test/include/ddl_i18n.check_triggers.inc
Normal file
@ -0,0 +1,106 @@
|
||||
# - Check SHOW CREATE statement;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SHOW CREATE TRIGGER trg1|
|
||||
--echo
|
||||
SHOW CREATE TRIGGER trg2|
|
||||
--echo
|
||||
SHOW CREATE TRIGGER mysqltest2.trg3|
|
||||
--echo
|
||||
SHOW CREATE TRIGGER mysqltest2.trg4|
|
||||
|
||||
# - Check SHOW statement;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SHOW TRIGGERS|
|
||||
|
||||
--echo
|
||||
|
||||
use mysqltest2|
|
||||
|
||||
--echo
|
||||
|
||||
SHOW TRIGGERS|
|
||||
|
||||
use mysqltest1|
|
||||
|
||||
# - Check INFORMATION_SCHEMA;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
--replace_column 17 CREATED
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg1'|
|
||||
|
||||
--echo
|
||||
--replace_column 17 CREATED
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg2'|
|
||||
|
||||
--echo
|
||||
--replace_column 17 CREATED
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg3'|
|
||||
|
||||
--echo
|
||||
--replace_column 17 CREATED
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_name = 'trg4'|
|
||||
|
||||
# - Initialize the used variables (actual values don't matter);
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SET @a1 = '1'|
|
||||
SET @a2 = '1'|
|
||||
SET @a3 = '1'|
|
||||
|
||||
SET @b1 = '2'|
|
||||
SET @b2 = '2'|
|
||||
SET @b3 = '2'|
|
||||
|
||||
# - Execute the triggers;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
INSERT INTO t1 VALUES(1)|
|
||||
|
||||
--echo
|
||||
--echo ---> Log:
|
||||
SELECT msg FROM log|
|
||||
|
||||
--echo
|
||||
SELECT
|
||||
COLLATION(@a1) AS ca1,
|
||||
COLLATION(@a2) AS ca2,
|
||||
COLLATION(@a3) AS ca3,
|
||||
COLLATION(@b1) AS cb1,
|
||||
COLLATION(@b2) AS cb2,
|
||||
COLLATION(@b3) AS cb3|
|
||||
|
||||
--echo
|
||||
DELETE FROM log|
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
INSERT INTO mysqltest2.t1 VALUES(1)|
|
||||
|
||||
--echo
|
||||
--echo ---> Log:
|
||||
SELECT msg FROM mysqltest2.log|
|
||||
|
||||
--echo
|
||||
SELECT
|
||||
COLLATION(@a1) AS ca1,
|
||||
COLLATION(@a2) AS ca2,
|
||||
COLLATION(@a3) AS ca3,
|
||||
COLLATION(@b1) AS cb1,
|
||||
COLLATION(@b2) AS cb2,
|
||||
COLLATION(@b3) AS cb3|
|
||||
|
||||
--echo
|
||||
DELETE FROM mysqltest2.log|
|
32
mysql-test/include/ddl_i18n.check_views.inc
Normal file
32
mysql-test/include/ddl_i18n.check_views.inc
Normal file
@ -0,0 +1,32 @@
|
||||
# - Check SHOW CREATE statement;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SHOW CREATE VIEW v1|
|
||||
|
||||
--echo
|
||||
|
||||
SHOW CREATE VIEW v2|
|
||||
|
||||
# - Check INFORMATION_SCHEMA;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v1'|
|
||||
|
||||
--echo
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE table_name = 'v2'|
|
||||
|
||||
# - Execute the views;
|
||||
|
||||
--echo
|
||||
--echo
|
||||
|
||||
SELECT COLLATION(c1), COLLATION(c2) FROM v1|
|
||||
|
||||
--echo
|
||||
|
||||
SELECT COLLATION(c1) FROM v2|
|
@ -144,4 +144,29 @@ disconnect con1;
|
||||
disconnect con2;
|
||||
drop table t1, t2;
|
||||
|
||||
# End of 4.1 tests
|
||||
--echo End of 4.1 tests
|
||||
|
||||
#
|
||||
# Bug#25164 create table `a` as select * from `A` hangs
|
||||
#
|
||||
|
||||
set storage_engine=innodb;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists a;
|
||||
drop table if exists A;
|
||||
--enable_warnings
|
||||
|
||||
create table A (c int);
|
||||
insert into A (c) values (0);
|
||||
--error 0,ER_LOCK_DEADLOCK,ER_UPDATE_TABLE_USED
|
||||
create table a as select * from A;
|
||||
drop table A;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists a;
|
||||
--enable_warnings
|
||||
|
||||
set storage_engine=default;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
@ -1,3 +1,4 @@
|
||||
--source include/have_log_bin.inc
|
||||
--source include/not_embedded.inc
|
||||
--source ./include/have_federated_db.inc
|
||||
|
||||
|
203
mysql-test/include/grant_cache.inc
Normal file
203
mysql-test/include/grant_cache.inc
Normal file
@ -0,0 +1,203 @@
|
||||
################### include/grant_cache.inc ####################
|
||||
#
|
||||
# Test grants with query cache
|
||||
#
|
||||
# Last update:
|
||||
# 2007-05-03 ML - Move t/grant_cache.test to include/grant_cache.inc
|
||||
# - Remove the disabling of the ps-protocol
|
||||
# - minor improvements like error names instead of numbers
|
||||
# - Create two toplevel tests sourcing this routine
|
||||
#
|
||||
# Running this test with and without "--ps-protocol" produces different
|
||||
# Qcache_not_cached results because of the following reason:
|
||||
# In normal protocol, a SELECT failing due to insufficient privileges
|
||||
# increments Qcache_not_cached, while in ps-protocol, no.
|
||||
# In detail:
|
||||
# - In normal protocol,
|
||||
# the "access denied" errors on SELECT are issued at (stack trace):
|
||||
# mysql_parse/mysql_execute_command/execute_sqlcom_select/handle_select/
|
||||
# mysql_select/JOIN::prepare/setup_wild/insert_fields/
|
||||
# check_grant_all_columns/my_error/my_message_sql, which then calls
|
||||
# push_warning/query_cache_abort: at this moment,
|
||||
# query_cache_store_query() has been called, so query exists in cache,
|
||||
# so thd->net.query_cache_query!=NULL, so query_cache_abort() removes
|
||||
# the query from cache, which causes a query_cache.refused++ (thus,
|
||||
# a Qcache_not_cached++).
|
||||
# - In ps-protocol,
|
||||
# the error is issued at prepare time;
|
||||
# for this mysql_test_select() is called, not execute_sqlcom_select()
|
||||
# (and that also leads to JOIN::prepare/etc). Thus, as
|
||||
# query_cache_store_query() has not been called,
|
||||
# thd->net.query_cache_query==NULL, so query_cache_abort() does nothing:
|
||||
# Qcache_not_cached is not incremented.
|
||||
#
|
||||
# A run of this tests with sp/cursor/view protocol does not make sense
|
||||
# because these protocols serve totally different purposes than this test.
|
||||
#
|
||||
|
||||
--source include/add_anonymous_users.inc
|
||||
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists test.t1,mysqltest.t1,mysqltest.t2;
|
||||
drop database if exists mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
set GLOBAL query_cache_size=1355776;
|
||||
|
||||
reset query cache;
|
||||
flush status;
|
||||
--echo ----- establish connection root -----
|
||||
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection root;
|
||||
show grants for current_user;
|
||||
show grants;
|
||||
--disable_warnings
|
||||
create database if not exists mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int,b int,c int);
|
||||
create table mysqltest.t2 (a int,b int,c int);
|
||||
insert into mysqltest.t1 values (1,1,1),(2,2,2);
|
||||
insert into mysqltest.t2 values (3,3,3);
|
||||
create table test.t1 (a char (10));
|
||||
insert into test.t1 values ("test.t1");
|
||||
select * from t1;
|
||||
--echo ----- establish connection root2 -----
|
||||
connect (root2,localhost,root,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection root2;
|
||||
# put queries in cache
|
||||
select * from t1;
|
||||
select a from t1;
|
||||
select c from t1;
|
||||
select * from t2;
|
||||
select * from mysqltest.t1,test.t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits%";
|
||||
|
||||
# Create the test users
|
||||
grant SELECT on mysqltest.* to mysqltest_1@localhost;
|
||||
grant SELECT on mysqltest.t1 to mysqltest_2@localhost;
|
||||
grant SELECT on test.t1 to mysqltest_2@localhost;
|
||||
grant SELECT(a) on mysqltest.t1 to mysqltest_3@localhost;
|
||||
|
||||
# The following queries should be fetched from cache
|
||||
--echo ----- establish connection user1 (user=mysqltest_1) -----
|
||||
connect (user1,localhost,mysqltest_1,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection user1;
|
||||
show grants for current_user();
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
select "user1";
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
select * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
# The pre and end space are intentional
|
||||
select a from t1 ;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
select c from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
|
||||
|
||||
--echo ----- establish connection unkuser (user=unkuser) -----
|
||||
# Don't use '' as user because it will pick Unix login
|
||||
connect (unkuser,localhost,unkuser,,,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection unkuser;
|
||||
show grants for current_user();
|
||||
|
||||
# The following queries should be fetched from cache
|
||||
--echo ----- establish connection user2 (user=mysqltest_2) -----
|
||||
connect (user2,localhost,mysqltest_2,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection user2;
|
||||
select "user2";
|
||||
select * from t1;
|
||||
select a from t1;
|
||||
select c from t1;
|
||||
select * from mysqltest.t1,test.t1;
|
||||
--replace_result 127.0.0.1 localhost
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
select * from t2;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
|
||||
# The following queries should not be fetched from cache
|
||||
--echo ----- establish connection user3 (user=mysqltest_3) -----
|
||||
connect (user3,localhost,mysqltest_3,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection user3;
|
||||
select "user3";
|
||||
--replace_result 127.0.0.1 localhost
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
select * from t1;
|
||||
select a from t1;
|
||||
--replace_result 127.0.0.1 localhost
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
select c from t1;
|
||||
--replace_result 127.0.0.1 localhost
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
select * from t2;
|
||||
--replace_result 127.0.0.1 localhost
|
||||
--error ER_COLUMNACCESS_DENIED_ERROR
|
||||
select mysqltest.t1.c from test.t1,mysqltest.t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
|
||||
# Connect without a database
|
||||
--echo ----- establish connection user4 (user=mysqltest_1) -----
|
||||
connect (user4,localhost,mysqltest_1,,*NO-ONE*,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
connection user4;
|
||||
select "user4";
|
||||
show grants;
|
||||
--error ER_NO_DB_ERROR
|
||||
select a from t1;
|
||||
# The following query is not cached before (different database)
|
||||
select * from mysqltest.t1,test.t1;
|
||||
# Cache a query with 'no database'
|
||||
select a from mysqltest.t1;
|
||||
select a from mysqltest.t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_not_cached";
|
||||
|
||||
# Cleanup
|
||||
|
||||
--echo ----- switch to connection default and close connections -----
|
||||
connection default;
|
||||
disconnect root;
|
||||
disconnect root2;
|
||||
disconnect user1;
|
||||
disconnect user2;
|
||||
disconnect user3;
|
||||
disconnect user4;
|
||||
disconnect unkuser;
|
||||
|
||||
#
|
||||
# A temporary 4.1 workaround to make this test pass if
|
||||
# mysql was compiled with other than latin1 --with-charset=XXX.
|
||||
# Without "set names binary" the below queries fail with
|
||||
# "Illegal mix of collations" error.
|
||||
# In 5.0 we will change grant tables to use NCHAR(N) instead
|
||||
# of "CHAR(N) BINARY", and use cast-to-nchar: N'mysqltest_1'.
|
||||
#
|
||||
set names binary;
|
||||
delete from mysql.user where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
|
||||
delete from mysql.db where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
|
||||
delete from mysql.tables_priv where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
|
||||
delete from mysql.columns_priv where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
|
||||
flush privileges;
|
||||
drop table test.t1,mysqltest.t1,mysqltest.t2;
|
||||
drop database mysqltest;
|
||||
|
||||
set GLOBAL query_cache_size=default;
|
||||
|
||||
--source include/delete_anonymous_users.inc
|
@ -465,3 +465,36 @@ select * from t1;
|
||||
# Just to be sure and not confuse the next test case writer.
|
||||
drop table if exists t1;
|
||||
|
||||
#
|
||||
# Bug#25856 - HANDLER table OPEN in one connection lock DROP TABLE in another one
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
eval create table t1 (a int) ENGINE=$other_engine_type;
|
||||
--echo --> client 2
|
||||
connection con2;
|
||||
--error 1031
|
||||
handler t1 open;
|
||||
--echo --> client 1
|
||||
connection default;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#30632 HANDLER read failure causes hang
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
create table t1 (a int);
|
||||
handler t1 open as t1_alias;
|
||||
--error 1176
|
||||
handler t1_alias read a next;
|
||||
--error 1054
|
||||
handler t1_alias READ a next where inexistent > 0;
|
||||
--error 1176
|
||||
handler t1_alias read a next;
|
||||
--error 1054
|
||||
handler t1_alias READ a next where inexistent > 0;
|
||||
handler t1_alias close;
|
||||
drop table t1;
|
||||
|
@ -1,4 +1,4 @@
|
||||
--disable_query_log
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'archive';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'archive';
|
||||
--enable_query_log
|
||||
|
@ -1,3 +1,5 @@
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
-- require r/have_binlog_format_mixed.require
|
||||
disable_query_log;
|
||||
show variables like "binlog_format";
|
||||
|
@ -1,3 +1,5 @@
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
--require r/have_binlog_format_row.require
|
||||
--disable_query_log
|
||||
--replace_result MIXED ROW
|
||||
|
@ -1,3 +1,6 @@
|
||||
source include/have_log_bin.inc;
|
||||
|
||||
|
||||
--require r/have_binlog_format_statement.require
|
||||
--disable_query_log
|
||||
--replace_result MIXED STATEMENT
|
||||
|
@ -1,3 +1,5 @@
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
-- require r/have_binlog_format_row.require
|
||||
disable_query_log;
|
||||
show variables like "binlog_format";
|
||||
|
@ -1,3 +1,5 @@
|
||||
--source include/have_log_bin.inc
|
||||
|
||||
-- require r/have_binlog_format_statement.require
|
||||
disable_query_log;
|
||||
show variables like "binlog_format";
|
||||
|
@ -1,4 +1,4 @@
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'blackhole';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'blackhole';
|
||||
enable_query_log;
|
||||
|
7
mysql-test/include/have_bug25714.inc
Normal file
7
mysql-test/include/have_bug25714.inc
Normal file
@ -0,0 +1,7 @@
|
||||
#
|
||||
# Check if the variable MYSQL_BUG25714 is set
|
||||
#
|
||||
--require r/have_bug25714.require
|
||||
disable_query_log;
|
||||
eval select LENGTH("$MYSQL_BUG25714") > 0 as "have_bug25714_exe";
|
||||
enable_query_log;
|
7
mysql-test/include/have_cp1251.inc
Normal file
7
mysql-test/include/have_cp1251.inc
Normal file
@ -0,0 +1,7 @@
|
||||
--require r/have_cp1251.require
|
||||
|
||||
--disable_query_log
|
||||
|
||||
SHOW COLLATION LIKE 'cp1251_general_ci';
|
||||
|
||||
--enable_query_log
|
7
mysql-test/include/have_cp866.inc
Normal file
7
mysql-test/include/have_cp866.inc
Normal file
@ -0,0 +1,7 @@
|
||||
--require r/have_cp866.require
|
||||
|
||||
--disable_query_log
|
||||
|
||||
SHOW COLLATION LIKE 'cp866_general_ci';
|
||||
|
||||
--enable_query_log
|
@ -1,4 +1,4 @@
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'csv';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'csv';
|
||||
enable_query_log;
|
||||
|
@ -1,4 +1,4 @@
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'example';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'example';
|
||||
enable_query_log;
|
||||
|
@ -1,4 +1,4 @@
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'federated';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'federated';
|
||||
enable_query_log;
|
||||
|
@ -1,4 +1,4 @@
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'innodb';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'innodb';
|
||||
enable_query_log;
|
||||
|
7
mysql-test/include/have_koi8r.inc
Normal file
7
mysql-test/include/have_koi8r.inc
Normal file
@ -0,0 +1,7 @@
|
||||
--require r/have_koi8r.require
|
||||
|
||||
--disable_query_log
|
||||
|
||||
SHOW COLLATION LIKE 'koi8r_general_ci';
|
||||
|
||||
--enable_query_log
|
4
mysql-test/include/have_log_bin.inc
Normal file
4
mysql-test/include/have_log_bin.inc
Normal file
@ -0,0 +1,4 @@
|
||||
-- require r/have_log_bin.require
|
||||
disable_query_log;
|
||||
show variables like "log_bin";
|
||||
enable_query_log;
|
@ -10,7 +10,8 @@ drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
flush tables;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
--source include/ndb_not_readonly.inc
|
||||
enable_query_log;
|
||||
|
||||
# Check that server2 has NDB support
|
||||
@ -21,12 +22,9 @@ drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
flush tables;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
--source include/ndb_not_readonly.inc
|
||||
enable_query_log;
|
||||
|
||||
# Check should be here as well...
|
||||
# # Check that second master mysqld has come out of redonly mode
|
||||
# --source include/ndb_not_readonly.inc
|
||||
|
||||
# Set the default connection to 'server1'
|
||||
connection server1;
|
||||
|
@ -1,9 +1,10 @@
|
||||
# Check that server is compiled and started with support for NDB
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Enabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
enable_query_log;
|
||||
|
||||
|
||||
|
||||
|
||||
#disable_query_log;
|
||||
#--require r/true.require
|
||||
#select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
#--source include/ndb_not_readonly.inc
|
||||
#enable_query_log;
|
||||
# always make sure we have both mysql servers started ok before test starts
|
||||
# there are some initial startup bugs that are avoided by doing this, avoiding sporadic
|
||||
# failures in mysql-test-run
|
||||
--source include/have_multi_ndb.inc
|
||||
|
@ -1,5 +1,5 @@
|
||||
-- require r/have_outfile.require
|
||||
disable_query_log;
|
||||
select load_file(concat(@tmpdir,"/outfile.test"));
|
||||
--exec rm $MYSQLTEST_VARDIR/tmp/outfile.test
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/outfile.test
|
||||
enable_query_log;
|
||||
|
7
mysql-test/include/have_utf8.inc
Normal file
7
mysql-test/include/have_utf8.inc
Normal file
@ -0,0 +1,7 @@
|
||||
--require r/have_utf8.require
|
||||
|
||||
--disable_query_log
|
||||
|
||||
SHOW COLLATION LIKE 'utf8_general_ci';
|
||||
|
||||
--enable_query_log
|
@ -1,26 +0,0 @@
|
||||
# This file is intended to be used in each IM-test. It contains stamements,
|
||||
# that ensure that starting conditions (environment) for the IM-test are as
|
||||
# expected.
|
||||
|
||||
# Check the running instances.
|
||||
|
||||
--connect (mysql1_con,localhost,root,,mysql,$IM_MYSQLD1_PORT,$IM_MYSQLD1_SOCK)
|
||||
|
||||
--connection mysql1_con
|
||||
|
||||
SHOW VARIABLES LIKE 'server_id';
|
||||
|
||||
--source include/not_windows.inc
|
||||
|
||||
--connection default
|
||||
|
||||
# Let IM detect that mysqld1 is online. This delay should be longer than
|
||||
# monitoring interval.
|
||||
|
||||
--sleep 2
|
||||
|
||||
# Check that IM understands that mysqld1 is online, while mysqld2 is
|
||||
# offline.
|
||||
|
||||
--replace_result starting XXXXX online XXXXX
|
||||
SHOW INSTANCES;
|
@ -439,3 +439,51 @@ INSERT INTO t2(a,b) VALUES(1,2);
|
||||
SELECT t2.a FROM t1,t2 WHERE t2.b=2 AND t2.a=1;
|
||||
UNLOCK TABLES;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# BUG#29740: HA_KEY_SCAN_NOT_ROR wasn't set for HEAP engine
|
||||
#
|
||||
CREATE TABLE `t1` (
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`filler` char(200) DEFAULT NULL,
|
||||
`b` int(11) DEFAULT NULL,
|
||||
KEY `a` (`a`),
|
||||
KEY `b` (`b`)
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
||||
|
||||
insert into t1 values
|
||||
(0, 'filler', 0), (1, 'filler', 1), (2, 'filler', 2), (3, 'filler', 3),
|
||||
(4, 'filler', 4), (5, 'filler', 5), (6, 'filler', 6), (7, 'filler', 7),
|
||||
(8, 'filler', 8), (9, 'filler', 9), (0, 'filler', 0), (1, 'filler', 1),
|
||||
(2, 'filler', 2), (3, 'filler', 3), (4, 'filler', 4), (5, 'filler', 5),
|
||||
(6, 'filler', 6), (7, 'filler', 7), (8, 'filler', 8), (9, 'filler', 9),
|
||||
(10, 'filler', 10), (11, 'filler', 11), (12, 'filler', 12), (13, 'filler', 13),
|
||||
(14, 'filler', 14), (15, 'filler', 15), (16, 'filler', 16), (17, 'filler', 17),
|
||||
(18, 'filler', 18), (19, 'filler', 19), (4, '5 ', 0), (5, '4 ', 0),
|
||||
(4, '4 ', 0), (4, 'qq ', 5), (5, 'qq ', 4), (4, 'zz ', 4);
|
||||
|
||||
create table t2(
|
||||
`a` int(11) DEFAULT NULL,
|
||||
`filler` char(200) DEFAULT NULL,
|
||||
`b` int(11) DEFAULT NULL,
|
||||
KEY USING BTREE (`a`),
|
||||
KEY USING BTREE (`b`)
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1;
|
||||
insert into t2 select * from t1;
|
||||
|
||||
--echo must use sort-union rather than union:
|
||||
--replace_column 9 #
|
||||
explain select * from t1 where a=4 or b=4;
|
||||
--sorted_result
|
||||
select * from t1 where a=4 or b=4;
|
||||
--sorted_result
|
||||
select * from t1 ignore index(a,b) where a=4 or b=4;
|
||||
|
||||
--echo must use union, not sort-union:
|
||||
--replace_column 9 #
|
||||
explain select * from t2 where a=4 or b=4;
|
||||
--sorted_result
|
||||
select * from t2 where a=4 or b=4;
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
|
51
mysql-test/include/innodb_trx_weight.inc
Normal file
51
mysql-test/include/innodb_trx_weight.inc
Normal file
@ -0,0 +1,51 @@
|
||||
-- connect (con1,localhost,root,,)
|
||||
-- connect (con2,localhost,root,,)
|
||||
|
||||
-- connection con1
|
||||
SET autocommit=0;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
-- if ($con1_extra_sql_present) {
|
||||
-- eval $con1_extra_sql
|
||||
-- }
|
||||
|
||||
-- connection con2
|
||||
SET autocommit=0;
|
||||
SELECT * FROM t2 FOR UPDATE;
|
||||
-- if ($con2_extra_sql_present) {
|
||||
-- eval $con2_extra_sql
|
||||
-- }
|
||||
|
||||
-- if ($con1_should_be_rolledback) {
|
||||
-- connection con1
|
||||
-- send
|
||||
INSERT INTO t2 VALUES (0);
|
||||
|
||||
-- connection con2
|
||||
INSERT INTO t1 VALUES (0);
|
||||
ROLLBACK;
|
||||
|
||||
-- connection con1
|
||||
-- error ER_LOCK_DEADLOCK
|
||||
-- reap
|
||||
-- }
|
||||
# else
|
||||
-- if (!$con1_should_be_rolledback) {
|
||||
-- connection con2
|
||||
-- send
|
||||
INSERT INTO t1 VALUES (0);
|
||||
|
||||
-- connection con1
|
||||
INSERT INTO t2 VALUES (0);
|
||||
ROLLBACK;
|
||||
|
||||
-- connection con2
|
||||
-- error ER_LOCK_DEADLOCK
|
||||
-- reap
|
||||
-- }
|
||||
|
||||
-- connection default
|
||||
|
||||
DELETE FROM t5_nontrans;
|
||||
|
||||
-- disconnect con1
|
||||
-- disconnect con2
|
@ -1,4 +0,0 @@
|
||||
-- require r/is_debug_build.require
|
||||
--disable_query_log
|
||||
select instr(version(), "debug") > 0;
|
||||
--enable_query_log
|
@ -1,3 +1,6 @@
|
||||
# Replication tests need binlog
|
||||
source include/have_log_bin.inc;
|
||||
|
||||
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||
connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||
connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT,);
|
||||
|
@ -28,7 +28,7 @@
|
||||
eval SET SESSION STORAGE_ENGINE = $engine_type;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2,t1m,t1i,t2m,t2i,t4;
|
||||
drop table if exists t1,t2,t3,t1m,t1i,t2m,t2i,t4;
|
||||
--enable_warnings
|
||||
|
||||
|
||||
@ -197,8 +197,30 @@ INSERT INTO t1 (c1) VALUES ('1b') ON DUPLICATE KEY UPDATE cnt=cnt+1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 4.1 tests
|
||||
#
|
||||
# Bug #28272: EXPLAIN for SELECT from an empty InnoDB table
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a1 decimal(10,0) DEFAULT NULL,
|
||||
a2 blob,
|
||||
a3 time DEFAULT NULL,
|
||||
a4 blob,
|
||||
a5 char(175) DEFAULT NULL,
|
||||
a6 timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
a7 tinyblob,
|
||||
INDEX idx (a6,a7(239),a5)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
EXPLAIN SELECT a4 FROM t1 WHERE
|
||||
a6=NULL AND
|
||||
a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
|
||||
|
||||
EXPLAIN SELECT t1.a4 FROM t1, t1 t WHERE
|
||||
t.a6=t.a6 AND t1.a6=NULL AND
|
||||
t1.a4='UNcT5pIde4I6c2SheTo4gt92OV1jgJCVkXmzyf325R1DwLURkbYHwhydANIZMbKTgdcR5xS';
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #12882 min/max inconsistent on empty table
|
||||
@ -398,24 +420,6 @@ SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug#22781: SQL_BIG_RESULT fails to influence sort plan
|
||||
#
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c FLOAT, KEY b(b)) ENGINE = INNODB;
|
||||
|
||||
INSERT INTO t1 VALUES ( 1 , 1 , 1);
|
||||
INSERT INTO t1 SELECT a + 1 , MOD(a + 1 , 20), 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 2 , MOD(a + 2 , 20), 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 4 , MOD(a + 4 , 20), 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 8 , MOD(a + 8 , 20), 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 16, MOD(a + 16, 20), 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 32, MOD(a + 32, 20), 1 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 64, MOD(a + 64, 20), 1 FROM t1;
|
||||
|
||||
EXPLAIN SELECT b, SUM(c) FROM t1 GROUP BY b;
|
||||
EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#26159: crash for a loose scan of a table that has been emptied
|
||||
#
|
||||
@ -476,40 +480,6 @@ set global query_cache_size=@save_qcache_size;
|
||||
|
||||
--source include/innodb_rollback_on_timeout.inc
|
||||
|
||||
#
|
||||
# Bug #27210: INNODB ON DUPLICATE KEY UPDATE
|
||||
#
|
||||
|
||||
set @save_qcache_size=@@global.query_cache_size;
|
||||
set @save_qcache_type=@@global.query_cache_type;
|
||||
set global query_cache_size=10*1024*1024;
|
||||
set global query_cache_type=1;
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
drop table if exists `test`;
|
||||
CREATE TABLE `test` (`test1` varchar(3) NOT NULL,
|
||||
`test2` varchar(4) NOT NULL,PRIMARY KEY (`test1`))
|
||||
ENGINE=InnoDB DEFAULT CHARSET=latin1;
|
||||
INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '5678');
|
||||
disconnect con1;
|
||||
connect (con2,localhost,root,,);
|
||||
connection con2;
|
||||
select * from test;
|
||||
INSERT INTO `test` (`test1`, `test2`) VALUES ('tes', '1234')
|
||||
ON DUPLICATE KEY UPDATE `test2` = '1234';
|
||||
select * from test;
|
||||
flush tables;
|
||||
select * from test;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
drop table test;
|
||||
set global query_cache_type=@save_qcache_type;
|
||||
set global query_cache_size=@save_qcache_size;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
#
|
||||
# Bug #27650: INSERT fails after multi-row INSERT of the form:
|
||||
# INSERT INTO t (id...) VALUES (NULL...) ON DUPLICATE KEY UPDATE id=VALUES(id)
|
||||
@ -554,7 +524,203 @@ select * from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
#
|
||||
# Bug #28189: optimizer erroniously prefers ref access to range access
|
||||
# for an InnoDB table
|
||||
#
|
||||
|
||||
CREATE TABLE t1(
|
||||
id int AUTO_INCREMENT PRIMARY KEY,
|
||||
stat_id int NOT NULL,
|
||||
acct_id int DEFAULT NULL,
|
||||
INDEX idx1 (stat_id, acct_id),
|
||||
INDEX idx2 (acct_id)
|
||||
) ENGINE=MyISAM;
|
||||
|
||||
CREATE TABLE t2(
|
||||
id int AUTO_INCREMENT PRIMARY KEY,
|
||||
stat_id int NOT NULL,
|
||||
acct_id int DEFAULT NULL,
|
||||
INDEX idx1 (stat_id, acct_id),
|
||||
INDEX idx2 (acct_id)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1(stat_id,acct_id) VALUES
|
||||
(1,759), (2,831), (3,785), (4,854), (1,921),
|
||||
(1,553), (2,589), (3,743), (2,827), (2,545),
|
||||
(4,779), (4,783), (1,597), (1,785), (4,832),
|
||||
(1,741), (1,833), (3,788), (2,973), (1,907);
|
||||
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
INSERT INTO t1(stat_id,acct_id) SELECT stat_id, mod(id+100000, acct_id) FROM t1;
|
||||
UPDATE t1 SET acct_id=785
|
||||
WHERE MOD(stat_id,2)=0 AND MOD(id,stat_id)=MOD(acct_id,stat_id);
|
||||
OPTIMIZE TABLE t1;
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE acct_id=785;
|
||||
|
||||
EXPLAIN SELECT COUNT(*) FROM t1 WHERE stat_id IN (1,3) AND acct_id=785;
|
||||
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
OPTIMIZE TABLE t2;
|
||||
|
||||
EXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #28652: assert when alter innodb table operation
|
||||
#
|
||||
create table t1(a int) engine=innodb;
|
||||
alter table t1 comment '123';
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #25866: Getting "#HY000 Can't find record in..." on and INSERT
|
||||
#
|
||||
CREATE TABLE t1 (a CHAR(2), KEY (a)) ENGINE = InnoDB DEFAULT CHARSET=UTF8;
|
||||
INSERT INTO t1 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
DELETE FROM t1 WHERE a = 'uk';
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
UPDATE t1 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t1 WHERE a = 'uk';
|
||||
|
||||
CREATE TABLE t2 (a CHAR(2), KEY (a)) ENGINE = InnoDB;
|
||||
INSERT INTO t2 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
DELETE FROM t2 WHERE a = 'uk';
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
INSERT INTO t2 VALUES ('uk');
|
||||
UPDATE t2 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t2 WHERE a = 'uk';
|
||||
|
||||
CREATE TABLE t3 (a CHAR(2), KEY (a)) ENGINE = MyISAM;
|
||||
INSERT INTO t3 VALUES ('uk'),('bg');
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
DELETE FROM t3 WHERE a = 'uk';
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
INSERT INTO t3 VALUES ('uk');
|
||||
UPDATE t3 SET a = 'us' WHERE a = 'uk';
|
||||
SELECT * FROM t3 WHERE a = 'uk';
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
#
|
||||
# Test bug when trying to drop data file which no InnoDB directory entry
|
||||
#
|
||||
|
||||
create table t1 (a int) engine=innodb;
|
||||
copy_file $MYSQLTEST_VARDIR/master-data/test/t1.frm $MYSQLTEST_VARDIR/master-data/test/bug29807.frm;
|
||||
--error 1146
|
||||
select * from bug29807;
|
||||
drop table t1;
|
||||
--error 1051
|
||||
drop table bug29807;
|
||||
create table bug29807 (a int);
|
||||
drop table bug29807;
|
||||
|
||||
|
||||
#
|
||||
# Bug #29154: LOCK TABLES is not atomic when >1 InnoDB tables are locked
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
|
||||
CONNECT (c1,localhost,root,,);
|
||||
CONNECT (c2,localhost,root,,);
|
||||
|
||||
--echo switch to connection c1
|
||||
CONNECTION c1;
|
||||
SET AUTOCOMMIT=0;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
|
||||
--echo switch to connection c2
|
||||
CONNECTION c2;
|
||||
SET AUTOCOMMIT=0;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
LOCK TABLES t1 READ, t2 READ;
|
||||
|
||||
--echo switch to connection c1
|
||||
CONNECTION c1;
|
||||
COMMIT;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
--echo switch to connection default
|
||||
CONNECTION default;
|
||||
SET AUTOCOMMIT=default;
|
||||
DISCONNECT c1;
|
||||
DISCONNECT c2;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Bug #25798: a query with forced index merge returns wrong result
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
id int NOT NULL auto_increment PRIMARY KEY,
|
||||
b int NOT NULL,
|
||||
c datetime NOT NULL,
|
||||
INDEX idx_b(b),
|
||||
INDEX idx_c(c)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE t2 (
|
||||
b int NOT NULL auto_increment PRIMARY KEY,
|
||||
c datetime NOT NULL
|
||||
) ENGINE= MyISAM;
|
||||
|
||||
INSERT INTO t2(c) VALUES ('2007-01-01');
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
INSERT INTO t2(c) SELECT c FROM t2;
|
||||
|
||||
INSERT INTO t1(b,c) SELECT b,c FROM t2;
|
||||
UPDATE t2 SET c='2007-01-02';
|
||||
INSERT INTO t1(b,c) SELECT b,c FROM t2;
|
||||
UPDATE t2 SET c='2007-01-03';
|
||||
INSERT INTO t1(b,c) SELECT b,c FROM t2;
|
||||
|
||||
set @@sort_buffer_size=8192;
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
--replace_column 9 #
|
||||
EXPLAIN
|
||||
SELECT COUNT(*) FROM t1
|
||||
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
|
||||
SELECT COUNT(*) FROM t1
|
||||
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
|
||||
|
||||
--replace_column 9 #
|
||||
EXPLAIN
|
||||
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c)
|
||||
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
|
||||
SELECT COUNT(*) FROM t1 FORCE INDEX(idx_b, idx_c)
|
||||
WHERE (c >= '2007-01-02' AND c <= '2007-01-03') OR b >= 1;
|
||||
|
||||
set @@sort_buffer_size=default;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Test of behaviour with CREATE ... SELECT
|
||||
@ -562,24 +728,24 @@ drop table t1;
|
||||
|
||||
CREATE TABLE t1 (a int, b int);
|
||||
insert into t1 values (1,1),(1,2);
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TABLE t2 (primary key (a)) select * from t1;
|
||||
# This should give warning
|
||||
drop table if exists t2;
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE t2 (primary key (a)) select * from t1;
|
||||
# This should give warning
|
||||
drop table if exists t2;
|
||||
CREATE TABLE t2 (a int, b int, primary key (a));
|
||||
BEGIN;
|
||||
INSERT INTO t2 values(100,100);
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
SELECT * from t2;
|
||||
ROLLBACK;
|
||||
SELECT * from t2;
|
||||
TRUNCATE table t2;
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t2 select * from t1;
|
||||
SELECT * from t2;
|
||||
drop table t2;
|
||||
@ -587,19 +753,19 @@ drop table t2;
|
||||
CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a));
|
||||
BEGIN;
|
||||
INSERT INTO t2 values(100,100);
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
SELECT * from t2;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
INSERT INTO t2 values(101,101);
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
SELECT * from t2;
|
||||
ROLLBACK;
|
||||
SELECT * from t2;
|
||||
TRUNCATE table t2;
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t2 select * from t1;
|
||||
SELECT * from t2;
|
||||
drop table t1,t2;
|
||||
@ -633,8 +799,227 @@ DROP TABLE t1;
|
||||
|
||||
--source include/innodb_rollback_on_timeout.inc
|
||||
|
||||
--echo End of 5.0 tests
|
||||
#
|
||||
# Bug#27296 Assertion in ALTER TABLE SET DEFAULT in Linux Debug build
|
||||
# (possible deadlock).
|
||||
#
|
||||
# The bug is applicable only to a transactoinal table.
|
||||
# Cover with tests behavior that no longer causes an
|
||||
# assertion.
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
create table t1 (a int) engine=innodb;
|
||||
alter table t1 alter a set default 1;
|
||||
drop table t1;
|
||||
|
||||
--echo
|
||||
--echo Bug#24918 drop table and lock / inconsistent between
|
||||
--echo perm and temp tables
|
||||
--echo
|
||||
--echo Check transactional tables under LOCK TABLES
|
||||
--echo
|
||||
--disable_warnings
|
||||
drop table if exists t24918, t24918_tmp, t24918_trans, t24918_trans_tmp,
|
||||
t24918_access;
|
||||
--enable_warnings
|
||||
create table t24918_access (id int);
|
||||
create table t24918 (id int) engine=myisam;
|
||||
create temporary table t24918_tmp (id int) engine=myisam;
|
||||
create table t24918_trans (id int) engine=innodb;
|
||||
create temporary table t24918_trans_tmp (id int) engine=innodb;
|
||||
|
||||
lock table t24918 write, t24918_tmp write, t24918_trans write, t24918_trans_tmp write;
|
||||
drop table t24918;
|
||||
--error ER_TABLE_NOT_LOCKED
|
||||
select * from t24918_access;
|
||||
drop table t24918_trans;
|
||||
--error ER_TABLE_NOT_LOCKED
|
||||
select * from t24918_access;
|
||||
drop table t24918_trans_tmp;
|
||||
--error ER_TABLE_NOT_LOCKED
|
||||
select * from t24918_access;
|
||||
drop table t24918_tmp;
|
||||
--error ER_TABLE_NOT_LOCKED
|
||||
select * from t24918_access;
|
||||
unlock tables;
|
||||
|
||||
drop table t24918_access;
|
||||
#
|
||||
# Bug #28591: MySQL need not sort the records in case of ORDER BY
|
||||
# primary_key on InnoDB table
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a int, b int, PRIMARY KEY (a), KEY bkey (b)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,2),(3,2),(2,2),(4,2),(5,2),(6,2),(7,2),(8,2);
|
||||
INSERT INTO t1 SELECT a + 8, 2 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 16, 1 FROM t1;
|
||||
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a;
|
||||
SELECT * FROM t1 WHERE b=2 ORDER BY a;
|
||||
query_vertical EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a;
|
||||
SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY a;
|
||||
query_vertical EXPLAIN SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;
|
||||
SELECT * FROM t1 WHERE b BETWEEN 1 AND 2 ORDER BY b,a;
|
||||
|
||||
CREATE TABLE t2 (a int, b int, c int, PRIMARY KEY (a), KEY bkey (b,c))
|
||||
ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,1,1),(3,1,1),(2,1,1),(4,1,1);
|
||||
INSERT INTO t2 SELECT a + 4, 1, 1 FROM t2;
|
||||
INSERT INTO t2 SELECT a + 8, 1, 1 FROM t2;
|
||||
|
||||
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 ORDER BY a;
|
||||
SELECT * FROM t2 WHERE b=1 ORDER BY a;
|
||||
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a;
|
||||
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY a;
|
||||
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a;
|
||||
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY b,c,a;
|
||||
query_vertical EXPLAIN SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a;
|
||||
SELECT * FROM t2 WHERE b=1 AND c=1 ORDER BY c,a;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
|
||||
#
|
||||
# Bug #29644: alter table hangs if records locked in share mode by long
|
||||
# running transaction
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a INT, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
|
||||
INSERT INTO t1 SELECT a + 8 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 16 FROM t1;
|
||||
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE p1 ()
|
||||
BEGIN
|
||||
DECLARE i INT DEFAULT 50;
|
||||
DECLARE cnt INT;
|
||||
START TRANSACTION;
|
||||
ALTER TABLE t1 ENGINE=InnoDB;
|
||||
COMMIT;
|
||||
START TRANSACTION;
|
||||
WHILE (i > 0) DO
|
||||
SET i = i - 1;
|
||||
SELECT COUNT(*) INTO cnt FROM t1 LOCK IN SHARE MODE;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END;|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
CONNECT (con1,localhost,root,,);
|
||||
CONNECT (con2,localhost,root,,);
|
||||
|
||||
CONNECTION con1;
|
||||
SEND CALL p1();
|
||||
CONNECTION con2;
|
||||
SEND CALL p1();
|
||||
CONNECTION default;
|
||||
CALL p1();
|
||||
|
||||
CONNECTION con1;
|
||||
REAP;
|
||||
CONNECTION con2;
|
||||
REAP;
|
||||
CONNECTION default;
|
||||
DISCONNECT con1;
|
||||
DISCONNECT con2;
|
||||
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #28125: ERROR 2013 when adding index.
|
||||
#
|
||||
create table t1(a text) engine=innodb default charset=utf8;
|
||||
insert into t1 values('aaa');
|
||||
alter table t1 add index(a(1024));
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #28570: handler::index_read() is called with different find_flag when
|
||||
# ORDER BY is used
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a INT,
|
||||
b INT,
|
||||
KEY (b)
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30);
|
||||
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1 WHERE b=20 FOR UPDATE;
|
||||
|
||||
--connect (conn2, localhost, root,,test)
|
||||
|
||||
# This statement gives a "failed: 1205: Lock wait timeout exceeded; try
|
||||
# restarting transaction" message when the bug is present.
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE;
|
||||
ROLLBACK;
|
||||
|
||||
--disconnect conn2
|
||||
--connection default
|
||||
|
||||
ROLLBACK;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#30596: GROUP BY optimization gives wrong result order
|
||||
#
|
||||
CREATE TABLE t1(
|
||||
a INT,
|
||||
b INT NOT NULL,
|
||||
c INT NOT NULL,
|
||||
d INT,
|
||||
UNIQUE KEY (c,b)
|
||||
) engine=innodb;
|
||||
|
||||
INSERT INTO t1 VALUES (1,1,1,50), (1,2,3,40), (2,1,3,4);
|
||||
|
||||
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d;
|
||||
SELECT c,b,d FROM t1 GROUP BY c,b,d;
|
||||
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
|
||||
SELECT c,b,d FROM t1 GROUP BY c,b,d ORDER BY NULL;
|
||||
EXPLAIN SELECT c,b,d FROM t1 ORDER BY c,b,d;
|
||||
SELECT c,b,d FROM t1 ORDER BY c,b,d;
|
||||
|
||||
EXPLAIN SELECT c,b,d FROM t1 GROUP BY c,b;
|
||||
SELECT c,b,d FROM t1 GROUP BY c,b;
|
||||
EXPLAIN SELECT c,b FROM t1 GROUP BY c,b;
|
||||
SELECT c,b FROM t1 GROUP BY c,b;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #31001: ORDER BY DESC in InnoDB not working
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b INT, PRIMARY KEY (a), INDEX b (b)) ENGINE=InnoDB;
|
||||
INSERT INTO t1(a,b) VALUES (1,1), (2,2), (3,2);
|
||||
|
||||
#The two queries below should produce different results, but they don't.
|
||||
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a ASC;
|
||||
SELECT * FROM t1 WHERE b=2 ORDER BY a ASC;
|
||||
query_vertical EXPLAIN SELECT * FROM t1 WHERE b=2 ORDER BY a DESC;
|
||||
SELECT * FROM t1 WHERE b=2 ORDER BY a DESC;
|
||||
|
||||
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a ASC;
|
||||
SELECT * FROM t1 ORDER BY b ASC, a ASC;
|
||||
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a DESC;
|
||||
SELECT * FROM t1 ORDER BY b DESC, a DESC;
|
||||
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b ASC, a DESC;
|
||||
SELECT * FROM t1 ORDER BY b ASC, a DESC;
|
||||
query_vertical EXPLAIN SELECT * FROM t1 ORDER BY b DESC, a ASC;
|
||||
SELECT * FROM t1 ORDER BY b DESC, a ASC;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY
|
||||
# UPDATE": if the row is updated, it's like a regular UPDATE:
|
||||
@ -688,4 +1073,77 @@ select * from t2;
|
||||
|
||||
drop table t2;
|
||||
|
||||
|
||||
#
|
||||
# Tests for bug #28415 "Some ALTER TABLE statements no longer work
|
||||
# under LOCK TABLES" and some aspects of fast ALTER TABLE behaviour
|
||||
# for transactional tables.
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
create table t1 (i int);
|
||||
alter table t1 modify i int default 1;
|
||||
alter table t1 modify i int default 2, rename t2;
|
||||
lock table t2 write;
|
||||
alter table t2 modify i int default 3;
|
||||
unlock tables;
|
||||
lock table t2 write;
|
||||
alter table t2 modify i int default 4, rename t1;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Some more tests for ALTER TABLE and LOCK TABLES for transactional tables.
|
||||
#
|
||||
# Table which is altered under LOCK TABLES should stay in list of locked
|
||||
# tables and be available after alter takes place unless ALTER contains
|
||||
# RENAME clause. We should see the new definition of table, of course.
|
||||
# Before 5.1 this behavior was inconsistent across the platforms and
|
||||
# different engines. See also tests in alter_table.test
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
create table t1 (i int);
|
||||
insert into t1 values ();
|
||||
lock table t1 write;
|
||||
# Example of so-called 'fast' ALTER TABLE
|
||||
alter table t1 modify i int default 1;
|
||||
insert into t1 values ();
|
||||
select * from t1;
|
||||
# And now full-blown ALTER TABLE
|
||||
alter table t1 change i c char(10) default "Two";
|
||||
insert into t1 values ();
|
||||
select * from t1;
|
||||
unlock tables;
|
||||
select * from t1;
|
||||
drop tables t1;
|
||||
|
||||
#
|
||||
# Bug#29310: An InnoDB table was updated when the data wasn't actually changed.
|
||||
#
|
||||
create table t1(f1 varchar(5) unique, f2 timestamp NOT NULL DEFAULT
|
||||
CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
|
||||
insert into t1(f1) values(1);
|
||||
--replace_column 1 #
|
||||
select @a:=f2 from t1;
|
||||
--sleep 5
|
||||
update t1 set f1=1;
|
||||
--replace_column 1 #
|
||||
select @b:=f2 from t1;
|
||||
select if(@a=@b,"ok","wrong");
|
||||
--sleep 5
|
||||
insert into t1(f1) values (1) on duplicate key update f1="1";
|
||||
--replace_column 1 #
|
||||
select @b:=f2 from t1;
|
||||
select if(@a=@b,"ok","wrong");
|
||||
--sleep 5
|
||||
insert into t1(f1) select f1 from t1 on duplicate key update f1="1";
|
||||
--replace_column 1 #
|
||||
select @b:=f2 from t1;
|
||||
select if(@a=@b,"ok","wrong");
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -96,7 +96,7 @@ INSERT INTO t1 VALUES (1,0,0),(3,1,1),(4,1,1),(8,2,2),(9,2,2),(17,3,2),(22,4,2),
|
||||
update t1 set parent_id=parent_id+100;
|
||||
select * from t1 where parent_id=102;
|
||||
update t1 set id=id+1000;
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME,1022
|
||||
-- error ER_DUP_ENTRY,1022
|
||||
update t1 set id=1024 where id=1009;
|
||||
select * from t1;
|
||||
update ignore t1 set id=id+1; # This will change all rows
|
||||
@ -179,13 +179,13 @@ commit;
|
||||
select n, "after commit" from t1;
|
||||
commit;
|
||||
insert into t1 values (5);
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t1 values (4);
|
||||
commit;
|
||||
select n, "after commit" from t1;
|
||||
set autocommit=1;
|
||||
insert into t1 values (6);
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t1 values (4);
|
||||
select n from t1;
|
||||
set autocommit=0;
|
||||
@ -259,7 +259,7 @@ drop table t1;
|
||||
|
||||
eval CREATE TABLE t1 (id char(8) not null primary key, val int not null) engine=$engine_type;
|
||||
insert into t1 values ('pippo', 12);
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t1 values ('pippo', 12); # Gives error
|
||||
delete from t1;
|
||||
delete from t1 where id = 'pippo';
|
||||
@ -390,9 +390,9 @@ eval CREATE TABLE t1 (
|
||||
|
||||
insert into t1 (ggid,passwd) values ('test1','xxx');
|
||||
insert into t1 (ggid,passwd) values ('test2','yyy');
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t1 (ggid,passwd) values ('test2','this will fail');
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t1 (ggid,id) values ('this will fail',1);
|
||||
|
||||
select * from t1 where ggid='test1';
|
||||
@ -401,7 +401,7 @@ select * from t1 where id=2;
|
||||
|
||||
replace into t1 (ggid,id) values ('this will work',1);
|
||||
replace into t1 (ggid,passwd) values ('test2','this will work');
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
update t1 set id=100,ggid='test2' where id=1;
|
||||
select * from t1;
|
||||
select * from t1 where id=1;
|
||||
@ -572,7 +572,7 @@ drop table t1;
|
||||
eval create table t1 (id int NOT NULL,id2 int NOT NULL,id3 int NOT NULL,dummy1 char(30),primary key (id,id2),index index_id3 (id3)) engine=$engine_type;
|
||||
insert into t1 values (0,0,0,'ABCDEFGHIJ'),(2,2,2,'BCDEFGHIJK'),(1,1,1,'CDEFGHIJKL');
|
||||
LOCK TABLES t1 WRITE;
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values (99,1,2,'D'),(1,1,2,'D');
|
||||
select id from t1;
|
||||
select id from t1;
|
||||
@ -583,7 +583,7 @@ eval create table t1 (id int NOT NULL,id2 int NOT NULL,id3 int NOT NULL,dummy1 c
|
||||
insert into t1 values (0,0,0,'ABCDEFGHIJ'),(2,2,2,'BCDEFGHIJK'),(1,1,1,'CDEFGHIJKL');
|
||||
LOCK TABLES t1 WRITE;
|
||||
begin;
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values (99,1,2,'D'),(1,1,2,'D');
|
||||
select id from t1;
|
||||
insert ignore into t1 values (100,1,2,'D'),(1,1,99,'D');
|
||||
@ -1513,7 +1513,7 @@ eval create table t1 (rowid int not null auto_increment, val int not null,primar
|
||||
key (rowid), unique(val)) engine=$engine_type;
|
||||
replace into t1 (val) values ('1'),('2');
|
||||
replace into t1 (val) values ('1'),('2');
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 (val) values ('1'),('2');
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
@ -1528,7 +1528,7 @@ eval create table t1 (a int not null auto_increment primary key, val int) engine
|
||||
insert into t1 (val) values (1);
|
||||
update t1 set a=2 where a=1;
|
||||
# We should get the following error because InnoDB does not update the counter
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 (val) values (1);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
@ -1894,13 +1894,13 @@ eval create table t3 (s1 varchar(2) binary,primary key (s1)) engine=$engine_type
|
||||
eval create table t4 (s1 char(2) binary,primary key (s1)) engine=$engine_type;
|
||||
|
||||
insert into t1 values (0x41),(0x4120),(0x4100);
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t2 values (0x41),(0x4120),(0x4100);
|
||||
insert into t2 values (0x41),(0x4120);
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t3 values (0x41),(0x4120),(0x4100);
|
||||
insert into t3 values (0x41),(0x4100);
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t4 values (0x41),(0x4120),(0x4100);
|
||||
insert into t4 values (0x41),(0x4100);
|
||||
select hex(s1) from t1;
|
||||
|
20
mysql-test/include/ndb_master-slave.inc
Normal file
20
mysql-test/include/ndb_master-slave.inc
Normal file
@ -0,0 +1,20 @@
|
||||
# Replication tests need binlog
|
||||
source include/have_log_bin.inc;
|
||||
|
||||
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||
connect (master1,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
||||
connect (slave,127.0.0.1,root,,test,$SLAVE_MYPORT,);
|
||||
connect (slave1,127.0.0.1,root,,test,$SLAVE_MYPORT,);
|
||||
|
||||
connection slave;
|
||||
# Check that server is compiled and started with support for NDB
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
--source include/ndb_not_readonly.inc
|
||||
enable_query_log;
|
||||
|
||||
-- source include/master-slave-reset.inc
|
||||
|
||||
# Set the default connection to 'master'
|
||||
connection master;
|
@ -1,31 +1,30 @@
|
||||
# Check that server has come out ot readonly mode
|
||||
--disable_query_log
|
||||
let $counter= 100;
|
||||
#
|
||||
# wait for server to connect properly to cluster
|
||||
#
|
||||
set @saved_log = @@sql_log_bin;
|
||||
set sql_log_bin = 0;
|
||||
--error 0,ER_NO_SUCH_TABLE,ER_OPEN_AS_READONLY,ER_GET_ERRMSG,ER_KEY_NOT_FOUND
|
||||
delete from mysql.ndb_apply_status where server_id=0;
|
||||
let $mysql_errno= 1;
|
||||
let $counter= 600;
|
||||
while ($mysql_errno)
|
||||
{
|
||||
--error 0, 1005
|
||||
create table check_read_only(a int) engine=NDB;
|
||||
sleep 0.1;
|
||||
if (!$counter)
|
||||
# Table is readonly until the mysqld has connected properly
|
||||
--error 0,ER_NO_SUCH_TABLE,ER_OPEN_AS_READONLY,ER_GET_ERRMSG
|
||||
replace into mysql.ndb_apply_status values(0,0,"",0,0);
|
||||
if ($mysql_errno)
|
||||
{
|
||||
die("Failed while waiting for mysqld to come out of readonly mode");
|
||||
if (!$counter)
|
||||
{
|
||||
die("Failed while waiting for mysqld to come out of readonly mode");
|
||||
}
|
||||
dec $counter;
|
||||
--sleep 0.1
|
||||
}
|
||||
dec $counter;
|
||||
}
|
||||
|
||||
let $counter= 100;
|
||||
let $mysql_errno= 1;
|
||||
while ($mysql_errno)
|
||||
{
|
||||
--error 0, 1036
|
||||
insert into check_read_only values(1);
|
||||
sleep 0.1;
|
||||
if (!$counter)
|
||||
{
|
||||
die("Failed while waiting for mysqld to come out of readonly mode");
|
||||
}
|
||||
dec $counter;
|
||||
}
|
||||
drop table check_read_only;
|
||||
--enable_query_log
|
||||
delete from mysql.ndb_apply_status where server_id=0;
|
||||
set sql_log_bin = @saved_log;
|
||||
#
|
||||
# connected
|
||||
#
|
||||
|
@ -9,5 +9,6 @@ eval SHOW CREATE TABLE t1;
|
||||
# listing of files belonging to the table t1
|
||||
if ($ls)
|
||||
{
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
--exec ls $MYSQLTEST_VARDIR/master-data/test/t1*
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ prepare stmt1 from 'insert into t1 values(6, ? )';
|
||||
execute stmt1 using @arg00;
|
||||
select a,b from t1 where b = @arg00;
|
||||
# the second insert fails, because the first column is primary key
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
execute stmt1 using @arg00;
|
||||
set @arg00=NULL ;
|
||||
prepare stmt1 from 'insert into t1 values(0, ? )';
|
||||
@ -272,7 +272,7 @@ execute stmt1 using @arg00, @arg01;
|
||||
select * from t1 order by a;
|
||||
set @arg00=81 ;
|
||||
set @arg01=1 ;
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
execute stmt1 using @arg00, @arg01;
|
||||
|
||||
## insert, autoincrement column and ' SELECT LAST_INSERT_ID() '
|
||||
|
@ -90,7 +90,7 @@ delete from t3 where t1_id = 1 and t2_id = 1;
|
||||
select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc;
|
||||
begin;
|
||||
insert into t3 VALUES ( NULL, 1, 1, 2 );
|
||||
-- error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
-- error ER_DUP_ENTRY
|
||||
insert into t3 VALUES ( NULL, 1, 1, 2 );
|
||||
commit;
|
||||
select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc;
|
||||
|
497
mysql-test/include/query_cache_sql_prepare.inc
Normal file
497
mysql-test/include/query_cache_sql_prepare.inc
Normal file
@ -0,0 +1,497 @@
|
||||
############### include/query_cache_sql_prepare.inc ################
|
||||
#
|
||||
# This is to see how statements prepared via the PREPARE SQL command
|
||||
# go into the query cache: if using parameters they cannot; if not
|
||||
# using parameters they can.
|
||||
# Query cache is abbreviated as "QC"
|
||||
#
|
||||
# Last update:
|
||||
# 2007-05-03 ML - Move t/query_cache_sql_prepare.test
|
||||
# to include/query_cache_sql_prepare.inc
|
||||
# - Create two toplevel tests sourcing this routine
|
||||
# - Add tests checking that
|
||||
# - another connection gets the same amount of QC hits
|
||||
# - statements running via ps-protocol do not hit QC results
|
||||
# of preceding sql EXECUTEs
|
||||
#
|
||||
|
||||
--source include/have_query_cache.inc
|
||||
# embedded can't make more than one connection, which this test needs
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--echo ---- establish connection con1 (root) ----
|
||||
connect (con1,localhost,root,,test,$MASTER_MYPORT,);
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
|
||||
set @initial_query_cache_size = @@global.query_cache_size;
|
||||
set @@global.query_cache_size=100000;
|
||||
flush status;
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
create table t1(c1 int);
|
||||
insert into t1 values(1),(10),(100);
|
||||
|
||||
# First, prepared statements with no parameters
|
||||
prepare stmt1 from "select * from t1 where c1=10";
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
# Another prepared statement (same text, same connection), should hit the QC
|
||||
prepare stmt2 from "select * from t1 where c1=10";
|
||||
execute stmt2;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt2;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt2;
|
||||
show status like 'Qcache_hits';
|
||||
# Another prepared statement (same text, other connection), should hit the QC
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
prepare stmt3 from "select * from t1 where c1=10";
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
|
||||
# Mixup tests, where statements without PREPARE.../EXECUTE.... meet statements
|
||||
# with PREPARE.../EXECUTE.... (text protocol). Both statements have the
|
||||
# same text. QC hits occur only when both statements use the same protocol.
|
||||
# The outcome of the test depends on the mysqltest startup options
|
||||
# - with "--ps-protocol"
|
||||
# Statements without PREPARE.../EXECUTE.... run as prepared statements
|
||||
# with binary protocol. Expect to get no QC hits.
|
||||
# - without any "--<whatever>-protocol"
|
||||
# Statements without PREPARE.../EXECUTE run as non prepared statements
|
||||
# with text protocol. Expect to get QC hits.
|
||||
############################################################################
|
||||
#
|
||||
# Statement with PREPARE.../EXECUTE.... first
|
||||
let $my_stmt= SELECT * FROM t1 WHERE c1 = 100;
|
||||
eval prepare stmt10 from "$my_stmt";
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt10;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt10;
|
||||
show status like 'Qcache_hits';
|
||||
eval $my_stmt;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
eval $my_stmt;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
#
|
||||
# Statement without PREPARE.../EXECUTE.... first
|
||||
let $my_stmt= SELECT * FROM t1 WHERE c1 = 1;
|
||||
eval prepare stmt11 from "$my_stmt";
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
eval prepare stmt12 from "$my_stmt";
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
eval $my_stmt;
|
||||
show status like 'Qcache_hits';
|
||||
eval $my_stmt;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt11;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
execute stmt12;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
|
||||
# Query caching also works when statement has parameters
|
||||
# (BUG#29318 Statements prepared with PREPARE and with one parameter don't use
|
||||
# query cache)
|
||||
prepare stmt1 from "select * from t1 where c1=?";
|
||||
show status like 'Qcache_hits';
|
||||
set @a=1;
|
||||
execute stmt1 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
set @a=1;
|
||||
prepare stmt4 from "select * from t1 where c1=?";
|
||||
execute stmt4 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
# verify that presence of user variables forbids caching
|
||||
prepare stmt4 from "select @a from t1 where c1=?";
|
||||
execute stmt4 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt4 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
|
||||
# See if enabling/disabling the query cache between PREPARE and
|
||||
# EXECUTE is an issue; the expected result is that the query cache
|
||||
# will not be used.
|
||||
# Indeed, decision to read/write the query cache is taken at PREPARE
|
||||
# time, so if the query cache was disabled at PREPARE time then no
|
||||
# execution of the statement will read/write the query cache.
|
||||
# If the query cache was enabled at PREPARE time, but disabled at
|
||||
# EXECUTE time, at EXECUTE time the query cache internal functions do
|
||||
# nothing so again the query cache is not read/written. But if the
|
||||
# query cache is re-enabled before another execution then that
|
||||
# execution will read/write the query cache.
|
||||
|
||||
# QC is enabled at PREPARE
|
||||
prepare stmt1 from "select * from t1 where c1=10";
|
||||
# then QC is disabled at EXECUTE
|
||||
# Expect to see no additional Qcache_hits.
|
||||
set global query_cache_size=0;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
# The QC is global = affects also other connections.
|
||||
# Expect to see no additional Qcache_hits.
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
#
|
||||
# then QC is re-enabled for more EXECUTE.
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
set global query_cache_size=100000;
|
||||
# Expect to see additional Qcache_hits.
|
||||
# The fact that the QC was temporary disabled should have no affect
|
||||
# except that the first execute will not hit results from the
|
||||
# beginning of the test (because QC has been emptied meanwhile by
|
||||
# setting its size to 0).
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
# The QC is global = affects also other connections.
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
#
|
||||
# then QC is re-disabled for more EXECUTE.
|
||||
# Expect to see no additional Qcache_hits.
|
||||
# The fact that the QC was temporary enabled should have no affect.
|
||||
set global query_cache_size=0;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
# The QC is global = affects also other connections.
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
#
|
||||
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
# QC is disabled at PREPARE
|
||||
set global query_cache_size=0;
|
||||
prepare stmt1 from "select * from t1 where c1=10";
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
prepare stmt3 from "select * from t1 where c1=10";
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
# then QC is enabled at EXECUTE
|
||||
set global query_cache_size=100000;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt1;
|
||||
show status like 'Qcache_hits';
|
||||
# The QC is global = affects also other connections.
|
||||
--echo ---- switch to connection con1 ----
|
||||
connection con1;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
execute stmt3;
|
||||
show status like 'Qcache_hits';
|
||||
--echo ---- switch to connection default ----
|
||||
connection default;
|
||||
#
|
||||
# QC is disabled at PREPARE
|
||||
set global query_cache_size=0;
|
||||
prepare stmt1 from "select * from t1 where c1=?";
|
||||
# then QC is enabled at EXECUTE
|
||||
set global query_cache_size=100000;
|
||||
show status like 'Qcache_hits';
|
||||
set @a=1;
|
||||
execute stmt1 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
set @a=100;
|
||||
execute stmt1 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
set @a=10;
|
||||
execute stmt1 using @a;
|
||||
show status like 'Qcache_hits';
|
||||
|
||||
|
||||
drop table t1;
|
||||
--echo ---- disconnect connection con1 ----
|
||||
disconnect con1;
|
||||
|
||||
#
|
||||
# Bug #25843 Changing default database between PREPARE and EXECUTE of statement
|
||||
# breaks binlog.
|
||||
#
|
||||
# There were actually two problems discovered by this bug:
|
||||
#
|
||||
# 1. Default (current) database is not fixed at the creation time.
|
||||
# That leads to wrong output of DATABASE() function.
|
||||
#
|
||||
# 2. Database attributes (@@collation_database) are not fixed at the creation
|
||||
# time. That leads to wrong resultset.
|
||||
#
|
||||
# Binlog breakage and Query Cache wrong output happened because of the first
|
||||
# problem.
|
||||
#
|
||||
|
||||
--echo ########################################################################
|
||||
--echo #
|
||||
--echo # BUG#25843: Changing default database between PREPARE and EXECUTE of
|
||||
--echo # statement breaks binlog.
|
||||
--echo #
|
||||
--echo ########################################################################
|
||||
|
||||
###############################################################################
|
||||
|
||||
--echo
|
||||
--echo #
|
||||
--echo # Check that default database and its attributes are fixed at the
|
||||
--echo # creation time.
|
||||
--echo #
|
||||
|
||||
# Prepare data structures.
|
||||
|
||||
--echo
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS mysqltest1;
|
||||
DROP DATABASE IF EXISTS mysqltest2;
|
||||
--enable_warnings
|
||||
|
||||
--echo
|
||||
CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci;
|
||||
CREATE DATABASE mysqltest2 COLLATE utf8_general_ci;
|
||||
|
||||
--echo
|
||||
CREATE TABLE mysqltest1.t1(msg VARCHAR(255));
|
||||
CREATE TABLE mysqltest2.t1(msg VARCHAR(255));
|
||||
|
||||
# - Create a prepared statement with mysqltest1 as default database;
|
||||
|
||||
--echo
|
||||
|
||||
use mysqltest1;
|
||||
|
||||
PREPARE stmt_a_1 FROM 'INSERT INTO t1 VALUES(DATABASE())';
|
||||
PREPARE stmt_a_2 FROM 'INSERT INTO t1 VALUES(@@collation_database)';
|
||||
|
||||
# - Execute on mysqltest1.
|
||||
|
||||
--echo
|
||||
|
||||
EXECUTE stmt_a_1;
|
||||
EXECUTE stmt_a_2;
|
||||
|
||||
# - Execute on mysqltest2.
|
||||
|
||||
--echo
|
||||
|
||||
use mysqltest2;
|
||||
|
||||
EXECUTE stmt_a_1;
|
||||
EXECUTE stmt_a_2;
|
||||
|
||||
# - Check the results;
|
||||
|
||||
--echo
|
||||
SELECT * FROM mysqltest1.t1;
|
||||
|
||||
--echo
|
||||
SELECT * FROM mysqltest2.t1;
|
||||
|
||||
# - Drop prepared statements.
|
||||
|
||||
--echo
|
||||
DROP PREPARE stmt_a_1;
|
||||
DROP PREPARE stmt_a_2;
|
||||
|
||||
###############################################################################
|
||||
|
||||
--echo
|
||||
--echo #
|
||||
--echo # The Query Cache test case.
|
||||
--echo #
|
||||
|
||||
--echo
|
||||
DELETE FROM mysqltest1.t1;
|
||||
DELETE FROM mysqltest2.t1;
|
||||
|
||||
--echo
|
||||
INSERT INTO mysqltest1.t1 VALUES('mysqltest1.t1');
|
||||
INSERT INTO mysqltest2.t1 VALUES('mysqltest2.t1');
|
||||
|
||||
--echo
|
||||
use mysqltest1;
|
||||
PREPARE stmt_b_1 FROM 'SELECT * FROM t1';
|
||||
|
||||
--echo
|
||||
use mysqltest2;
|
||||
PREPARE stmt_b_2 FROM 'SELECT * FROM t1';
|
||||
|
||||
--echo
|
||||
EXECUTE stmt_b_1;
|
||||
|
||||
--echo
|
||||
EXECUTE stmt_b_2;
|
||||
|
||||
--echo
|
||||
use mysqltest1;
|
||||
|
||||
--echo
|
||||
EXECUTE stmt_b_1;
|
||||
|
||||
--echo
|
||||
EXECUTE stmt_b_2;
|
||||
|
||||
--echo
|
||||
DROP PREPARE stmt_b_1;
|
||||
DROP PREPARE stmt_b_2;
|
||||
|
||||
# Cleanup.
|
||||
|
||||
--echo
|
||||
use test;
|
||||
|
||||
--echo
|
||||
DROP DATABASE mysqltest1;
|
||||
DROP DATABASE mysqltest2;
|
||||
|
||||
###############################################################################
|
||||
|
||||
--echo
|
||||
--echo #
|
||||
--echo # Check that prepared statements work properly when there is no current
|
||||
--echo # database.
|
||||
--echo #
|
||||
|
||||
--echo
|
||||
CREATE DATABASE mysqltest1 COLLATE utf8_unicode_ci;
|
||||
CREATE DATABASE mysqltest2 COLLATE utf8_general_ci;
|
||||
|
||||
--echo
|
||||
use mysqltest1;
|
||||
|
||||
--echo
|
||||
PREPARE stmt_c_1 FROM 'SELECT DATABASE(), @@collation_database';
|
||||
|
||||
--echo
|
||||
use mysqltest2;
|
||||
|
||||
--echo
|
||||
PREPARE stmt_c_2 FROM 'SELECT DATABASE(), @@collation_database';
|
||||
|
||||
--echo
|
||||
DROP DATABASE mysqltest2;
|
||||
|
||||
--echo
|
||||
SELECT DATABASE(), @@collation_database;
|
||||
|
||||
# -- Here we have: current db: NULL; stmt db: mysqltest1;
|
||||
--echo
|
||||
EXECUTE stmt_c_1;
|
||||
|
||||
--echo
|
||||
SELECT DATABASE(), @@collation_database;
|
||||
|
||||
# -- Here we have: current db: NULL; stmt db: mysqltest2 (non-existent);
|
||||
--echo
|
||||
EXECUTE stmt_c_2;
|
||||
|
||||
--echo
|
||||
SELECT DATABASE(), @@collation_database;
|
||||
|
||||
# -- Create prepared statement, which has no current database.
|
||||
|
||||
--echo
|
||||
PREPARE stmt_c_3 FROM 'SELECT DATABASE(), @@collation_database';
|
||||
|
||||
# -- Here we have: current db: NULL; stmt db: NULL;
|
||||
--echo
|
||||
EXECUTE stmt_c_3;
|
||||
|
||||
--echo
|
||||
use mysqltest1;
|
||||
|
||||
# -- Here we have: current db: mysqltest1; stmt db: mysqltest2 (non-existent);
|
||||
--echo
|
||||
EXECUTE stmt_c_2;
|
||||
|
||||
--echo
|
||||
SELECT DATABASE(), @@collation_database;
|
||||
|
||||
# -- Here we have: current db: mysqltest1; stmt db: NULL;
|
||||
--echo
|
||||
EXECUTE stmt_c_3;
|
||||
|
||||
--echo
|
||||
SELECT DATABASE(), @@collation_database;
|
||||
|
||||
--echo
|
||||
DROP DATABASE mysqltest1;
|
||||
|
||||
--echo
|
||||
use test;
|
||||
|
||||
--echo
|
||||
--echo ########################################################################
|
||||
|
||||
###############################################################################
|
||||
|
||||
set @@global.query_cache_size=@initial_query_cache_size;
|
||||
flush status; # reset Qcache status variables for next tests
|
@ -59,3 +59,109 @@ INSERT INTO t4 SELECT * FROM t3 ORDER BY CONCAT(a);
|
||||
SELECT SUM(id) FROM t3;
|
||||
|
||||
DROP TABLE t1,t2,t3,t4;
|
||||
|
||||
#
|
||||
# Bug#24989: The DEADLOCK error is improperly handled by InnoDB.
|
||||
#
|
||||
CREATE TABLE t1 (f1 int NOT NULL) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (f2 int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||
DELIMITER |;
|
||||
CREATE TRIGGER t1_bi before INSERT
|
||||
ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @a:= 'deadlock';
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
||||
INSERT INTO t2 (f2) VALUES (1);
|
||||
DELETE FROM t2 WHERE f2 = 1;
|
||||
END;|
|
||||
|
||||
CREATE PROCEDURE proc24989()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @b:= 'deadlock';
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
||||
INSERT INTO t2 (f2) VALUES (1);
|
||||
DELETE FROM t2 WHERE f2 = 1;
|
||||
END;|
|
||||
|
||||
create procedure proc24989_2()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Outer handler' as 'exception';
|
||||
|
||||
insert into t1 values(1);
|
||||
select "continued";
|
||||
end|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
connection con1;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
send insert into t1 values(1);
|
||||
|
||||
connection con1;
|
||||
--sleep 1
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
--error 1213
|
||||
reap;
|
||||
select @a;
|
||||
# check that the whole transaction was rolled back
|
||||
select * from t2;
|
||||
|
||||
connection con1;
|
||||
commit;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
send call proc24989();
|
||||
|
||||
connection con1;
|
||||
--sleep 1
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
reap;
|
||||
select @a,@b;
|
||||
# check that the whole transaction was rolled back
|
||||
select * from t2;
|
||||
|
||||
connection con1;
|
||||
commit;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
send call proc24989_2();
|
||||
|
||||
connection con1;
|
||||
--sleep 1
|
||||
insert into t1 values(1);
|
||||
commit;
|
||||
|
||||
connection con2;
|
||||
reap;
|
||||
# check that the whole transaction was rolled back
|
||||
select * from t2;
|
||||
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
drop procedure proc24989;
|
||||
drop procedure proc24989_2;
|
||||
drop table t1,t2;
|
||||
|
||||
|
@ -13,49 +13,63 @@ drop table if exists t1,t2;
|
||||
# first, we need a table to record something from an event
|
||||
|
||||
eval CREATE TABLE `t1` (
|
||||
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` INT(10) UNSIGNED NOT NULL,
|
||||
`c` VARCHAR(50) NOT NULL,
|
||||
`ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=$engine_type DEFAULT CHARSET=utf8;
|
||||
|
||||
INSERT INTO t1 (c) VALUES ('manually');
|
||||
INSERT INTO t1 (id, c) VALUES (1, 'manually');
|
||||
|
||||
# then, we create the event
|
||||
CREATE EVENT test.justonce ON SCHEDULE AT NOW() + INTERVAL 2 SECOND DO INSERT INTO t1
|
||||
(c) VALUES ('from justonce');
|
||||
# We create the event so that it inserts exactly 1 row in the table
|
||||
# A recuring event is used so that we can be sure the event will
|
||||
# fire regardless of timing delays on the server. Otherwise, it is
|
||||
# possible for the event to timeout before it has inserted a row.
|
||||
--echo "Creating event test.justonce on the master"
|
||||
CREATE EVENT test.justonce ON SCHEDULE EVERY 2 SECOND DO
|
||||
INSERT IGNORE INTO t1 (id, c) VALUES (2, 'from justonce');
|
||||
|
||||
# Show the event is alive and present on master
|
||||
--echo "Checking event is active on master"
|
||||
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'justonce';
|
||||
|
||||
# wait 3 seconds, so the event can trigger
|
||||
--real_sleep 3
|
||||
# Wait until event has fired. We know this because t1 will contain
|
||||
# the row from the event.
|
||||
let $wait_condition=
|
||||
SELECT COUNT(*) = 1 FROM t1 WHERE c = 'from justonce';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# check that table t1 contains something
|
||||
--echo "in the master"
|
||||
--echo "Checking event data on the master"
|
||||
--enable_info
|
||||
--replace_column 3 TIMESTAMP
|
||||
SELECT * FROM t1 WHERE c = 'from justonce' OR c = 'manually' ORDER BY id;
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
--disable_info
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo "in the slave"
|
||||
--echo "Checking event data on the slave"
|
||||
--enable_info
|
||||
--replace_column 3 TIMESTAMP
|
||||
SELECT * FROM t1 WHERE c = 'from justonce' OR c = 'manually' ORDER BY id;
|
||||
SELECT * FROM t1 ORDER BY id;
|
||||
--disable_info
|
||||
|
||||
--echo "Checking event is inactive on slave"
|
||||
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'justonce';
|
||||
|
||||
# Create an event on the slave and check to see what the originator is.
|
||||
--echo "Dropping event test.slave_once on the slave"
|
||||
--disable_warnings
|
||||
DROP EVENT IF EXISTS test.slave_once;
|
||||
--enable_warnings
|
||||
|
||||
CREATE EVENT test.slave_once ON SCHEDULE EVERY 5 MINUTE DO
|
||||
INSERT INTO t1(c) VALUES ('from slave_once');
|
||||
INSERT IGNORE INTO t1(id, c) VALUES (3, 'from slave_once');
|
||||
|
||||
--echo "Checking event status on the slave for originator value = slave's server_id"
|
||||
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'slave_once';
|
||||
|
||||
--echo "Dropping event test.slave_once on the slave"
|
||||
--disable_warnings
|
||||
DROP EVENT IF EXISTS test.slave_once;
|
||||
--enable_warnings
|
||||
@ -63,57 +77,76 @@ DROP EVENT IF EXISTS test.slave_once;
|
||||
connection master;
|
||||
|
||||
# BUG#20384 - disable events on slave
|
||||
--echo "Dropping event test.justonce on the master"
|
||||
--disable_warnings
|
||||
DROP EVENT IF EXISTS test.justonce;
|
||||
--enable_warnings
|
||||
|
||||
--echo "Creating event test.er on the master"
|
||||
CREATE EVENT test.er ON SCHEDULE EVERY 3 SECOND DO
|
||||
INSERT INTO t1(c) VALUES ('from er');
|
||||
INSERT IGNORE INTO t1(id, c) VALUES (4, 'from er');
|
||||
|
||||
--echo "Checking event status on the master"
|
||||
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo "in the slave"
|
||||
--echo "Checking event status on the slave"
|
||||
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
|
||||
|
||||
connection master;
|
||||
--echo "in the master"
|
||||
ALTER EVENT test.er ON SCHEDULE EVERY 5 SECOND DO INSERT into t1(c) VALUES ('from alter er');
|
||||
--echo "Altering event test.er on the master"
|
||||
ALTER EVENT test.er ON SCHEDULE EVERY 5 SECOND DO
|
||||
INSERT IGNORE INTO t1(id, c) VALUES (5, 'from alter er');
|
||||
|
||||
--echo "Checking event status on the master"
|
||||
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo "in the slave"
|
||||
--echo "Checking event status on the slave"
|
||||
SELECT db, name, status, originator, body FROM mysql.event WHERE db = 'test' AND name = 'er';
|
||||
|
||||
connection master;
|
||||
--echo "in the master"
|
||||
--echo "Dropping event test.er on the master"
|
||||
DROP EVENT test.er;
|
||||
|
||||
--echo "Checking event status on the master"
|
||||
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test';
|
||||
|
||||
--disable_info
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo "in the slave"
|
||||
--echo "Checking event status on the slave"
|
||||
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test';
|
||||
|
||||
# test the DISABLE ON SLAVE for setting event SLAVESIDE_DISABLED as status
|
||||
# on CREATE EVENT
|
||||
|
||||
CREATE EVENT test.slave_terminate ON SCHEDULE EVERY 3 SECOND
|
||||
DO INSERT INTO t1(c) VALUES ('from slave_terminate');
|
||||
--echo "Creating event test.slave_terminate on the slave"
|
||||
CREATE EVENT test.slave_terminate ON SCHEDULE EVERY 3 SECOND DO
|
||||
INSERT IGNORE INTO t1(id, c) VALUES (6, 'from slave_terminate');
|
||||
|
||||
--echo "Checking event status on the slave"
|
||||
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'slave_terminate';
|
||||
|
||||
--echo "Dropping event test.slave_terminate on the slave"
|
||||
DROP EVENT test.slave_terminate;
|
||||
|
||||
CREATE EVENT test.slave_terminate ON SCHEDULE EVERY 3 SECOND
|
||||
DISABLE ON SLAVE DO INSERT INTO t1(c) VALUES ('from slave_terminate');
|
||||
--echo "Creating event test.slave_terminate with DISABLE ON SLAVE on the slave"
|
||||
CREATE EVENT test.slave_terminate ON SCHEDULE EVERY 3 SECOND DISABLE ON SLAVE DO
|
||||
INSERT IGNORE INTO t1(c) VALUES (7, 'from slave_terminate');
|
||||
|
||||
--echo "Checking event status on the slave"
|
||||
SELECT db, name, status, originator FROM mysql.event WHERE db = 'test' AND name = 'slave_terminate';
|
||||
|
||||
--echo "Dropping event test.slave_terminate on the slave"
|
||||
DROP EVENT test.slave_terminate;
|
||||
|
||||
--echo "in the master"
|
||||
--echo "Cleanup"
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
|
||||
|
91
mysql-test/include/rpl_multi_engine2.inc
Normal file
91
mysql-test/include/rpl_multi_engine2.inc
Normal file
@ -0,0 +1,91 @@
|
||||
#############################################################
|
||||
# Author: Rafal
|
||||
# Date: 2007-08-20
|
||||
# based on rpl_multi_engine3.inc
|
||||
#############################################################
|
||||
|
||||
connection slave;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
|
||||
--echo --- Populate t1 with data ---
|
||||
connection master;
|
||||
--disable_query_log
|
||||
INSERT INTO t1 VALUES(42,1,'Testing MySQL databases is a cool ',
|
||||
'Must make it bug free for the customer',
|
||||
654321.4321,15.21,0,1965,"1905-11-14");
|
||||
INSERT INTO t1 VALUES(2,1,'Testing MySQL databases is a cool ',
|
||||
'Must make it bug free for the customer',
|
||||
654321.4321,15.21,0,1965,"1965-11-14");
|
||||
INSERT INTO t1 VALUES(4,1,'Testing MySQL databases is a cool ',
|
||||
'Must make it bug free for the customer',
|
||||
654321.4321,15.21,0,1965,"1985-11-14");
|
||||
INSERT INTO t1 VALUES(142,1,'Testing MySQL databases is a cool ',
|
||||
'Must make it bug free for the customer',
|
||||
654321.4321,15.21,0,1965,"1995-11-14");
|
||||
INSERT INTO t1 VALUES(412,1,'Testing MySQL databases is a cool ',
|
||||
'Must make it bug free for the customer',
|
||||
654321.4321,15.21,0,1965,"2005-11-14");
|
||||
--enable_query_log
|
||||
|
||||
--echo --- Select from t1 on master ---
|
||||
select *
|
||||
from t1
|
||||
order by id;
|
||||
|
||||
sync_slave_with_master;
|
||||
--echo --- Select from t1 on slave ---
|
||||
select *
|
||||
from t1
|
||||
order by id;
|
||||
|
||||
--echo --- Perform basic operation on master ---
|
||||
--echo --- and ensure replicated correctly ---
|
||||
connection master;
|
||||
|
||||
--echo --- Update t1 on master --
|
||||
UPDATE t1 SET b1 = 0, bc='updated', t="2006-02-22"
|
||||
WHERE id < 100
|
||||
ORDER BY id;
|
||||
|
||||
--echo --- Check the update on master ---
|
||||
SELECT *
|
||||
FROM t1
|
||||
WHERE id < 100
|
||||
ORDER BY id;
|
||||
|
||||
# Must give injector thread a little time to get update
|
||||
# into the binlog other wise we will miss the update.
|
||||
|
||||
sync_slave_with_master;
|
||||
--echo --- Check Update on slave ---
|
||||
SELECT *
|
||||
FROM t1
|
||||
WHERE id < 100
|
||||
ORDER BY id;
|
||||
|
||||
connection master;
|
||||
--echo --- Remove a record from t1 on master ---
|
||||
# Note: there is an error in replication of Delete_row
|
||||
# from NDB to MyISAM (BUG#28538). However, if there is
|
||||
# only one row in Delete_row event then it works fine,
|
||||
# as this test demonstrates.
|
||||
DELETE FROM t1 WHERE id = 412;
|
||||
|
||||
--echo --- Show current count on master for t1 ---
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
--echo --- Show current count on slave for t1 ---
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
connection master;
|
||||
TRUNCATE TABLE t1;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
@ -35,7 +35,7 @@ eval CREATE FUNCTION myfunc_int RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB";
|
||||
--error ER_CANT_FIND_DL_ENTRY
|
||||
eval CREATE FUNCTION myfunc_nonexist RETURNS INTEGER SONAME "$UDF_EXAMPLE_LIB";
|
||||
--replace_column 3 UDF_LIB
|
||||
SELECT * FROM mysql.func;
|
||||
SELECT * FROM mysql.func ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
save_master_pos;
|
||||
@ -46,7 +46,7 @@ sync_with_master;
|
||||
--echo "Running on the slave"
|
||||
--enable_info
|
||||
--replace_column 3 UDF_LIB
|
||||
SELECT * FROM mysql.func;
|
||||
SELECT * FROM mysql.func ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
connection master;
|
||||
@ -81,7 +81,7 @@ connection master;
|
||||
--enable_info
|
||||
DROP FUNCTION myfunc_double;
|
||||
DROP FUNCTION myfunc_int;
|
||||
SELECT * FROM mysql.func;
|
||||
SELECT * FROM mysql.func ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
sync_slave_with_master;
|
||||
@ -89,7 +89,7 @@ sync_slave_with_master;
|
||||
# Check to see if the UDFs were dropped on the slave
|
||||
--echo "Running on the slave"
|
||||
--enable_info
|
||||
SELECT * FROM mysql.func;
|
||||
SELECT * FROM mysql.func ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
connection master;
|
||||
@ -108,7 +108,7 @@ DROP TABLE t1;
|
||||
--enable_info
|
||||
CREATE FUNCTION myfuncsql_int(i INT) RETURNS INTEGER DETERMINISTIC RETURN i;
|
||||
CREATE FUNCTION myfuncsql_double(d DOUBLE) RETURNS INTEGER DETERMINISTIC RETURN d * 2.00;
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
sync_slave_with_master;
|
||||
@ -116,7 +116,7 @@ sync_slave_with_master;
|
||||
# Check to see that UDF CREATE statements were replicated
|
||||
--echo "Running on the slave"
|
||||
--enable_info
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
connection master;
|
||||
@ -147,7 +147,7 @@ connection master;
|
||||
--enable_info
|
||||
ALTER FUNCTION myfuncsql_int COMMENT "This was altered.";
|
||||
ALTER FUNCTION myfuncsql_double COMMENT "This was altered.";
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
sync_slave_with_master;
|
||||
@ -155,7 +155,7 @@ sync_slave_with_master;
|
||||
# Check to see if data was replicated
|
||||
--echo "Running on the slave"
|
||||
--enable_info
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name;
|
||||
|
||||
# Check to see that the functions are available for execution on the slave
|
||||
SELECT myfuncsql_int(25);
|
||||
@ -169,7 +169,7 @@ connection master;
|
||||
--enable_info
|
||||
DROP FUNCTION myfuncsql_double;
|
||||
DROP FUNCTION myfuncsql_int;
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
sync_slave_with_master;
|
||||
@ -177,7 +177,7 @@ sync_slave_with_master;
|
||||
# Check to see if the UDFs were dropped on the slave
|
||||
--echo "Running on the slave"
|
||||
--enable_info
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%';
|
||||
SELECT db, name, type, param_list, body, comment FROM mysql.proc WHERE db = 'test' AND name LIKE 'myfuncsql%' ORDER BY name;
|
||||
--disable_info
|
||||
|
||||
connection master;
|
||||
|
13
mysql-test/include/select_ndb_apply_status.inc
Normal file
13
mysql-test/include/select_ndb_apply_status.inc
Normal file
@ -0,0 +1,13 @@
|
||||
##################################################
|
||||
# Author: Jeb
|
||||
# Date: 2007/04
|
||||
# Purpose: To select out log name, start and end
|
||||
# positions from ndb_apply_status table
|
||||
##################################################
|
||||
--replace_column 1 <log_name> 2 <start_pos> 3 <end_pos>
|
||||
select @log_name:=log_name, @start_pos:=start_pos, @end_pos:=end_pos
|
||||
from mysql.ndb_apply_status;
|
||||
--let $start_pos = `select @start_pos`
|
||||
--let $end_pos = `select @end_pos`
|
||||
--let $log_name = `select @log_name`
|
||||
|
13
mysql-test/include/show_binlog_using_logname.inc
Normal file
13
mysql-test/include/show_binlog_using_logname.inc
Normal file
@ -0,0 +1,13 @@
|
||||
########################################################
|
||||
# Author: Jeb
|
||||
# Date: 2007/04
|
||||
# Purpose: To select out 1 row from offset 1
|
||||
# from the start position in the binlog whose
|
||||
# name is = log_name
|
||||
########################################################
|
||||
|
||||
--replace_result $start_pos <start_pos> $end_pos <end_pos>
|
||||
--replace_column 2 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
--eval show binlog events in '$log_name' from $start_pos limit $off_set,1
|
||||
|
6
mysql-test/include/show_slave_status.inc
Normal file
6
mysql-test/include/show_slave_status.inc
Normal file
@ -0,0 +1,6 @@
|
||||
# Include file to show the slave status, masking out some information
|
||||
# that varies depending on where the test is executed.
|
||||
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 # 35 # 36 #
|
||||
query_vertical SHOW SLAVE STATUS;
|
40
mysql-test/include/test_fieldsize.inc
Normal file
40
mysql-test/include/test_fieldsize.inc
Normal file
@ -0,0 +1,40 @@
|
||||
#
|
||||
# include/test_fieldsize.inc
|
||||
#
|
||||
# This include file is designed to create a table with one column
|
||||
# whose size on the master is greater than that on the slave. The
|
||||
# test should fail with an error on the slave.
|
||||
#
|
||||
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
eval $test_table_slave;
|
||||
|
||||
connection master;
|
||||
eval $test_table_master;
|
||||
RESET MASTER;
|
||||
|
||||
eval $test_insert;
|
||||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
|
||||
# The following should be 0
|
||||
SELECT COUNT(*) FROM t1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
|
155
mysql-test/include/tpcb.inc
Normal file
155
mysql-test/include/tpcb.inc
Normal file
@ -0,0 +1,155 @@
|
||||
##################################################
|
||||
# Author: Jeb
|
||||
# Date: 2007/04
|
||||
# Purpose: To create a tpcb database, tables and
|
||||
# stored procedures to load the database
|
||||
# and run transactions against the DB
|
||||
##################################################
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS tpcb;
|
||||
--enable_warnings
|
||||
CREATE DATABASE tpcb;
|
||||
|
||||
--echo
|
||||
CREATE TABLE tpcb.account (id INT, bid INT, balance DECIMAL(10,2),
|
||||
filler CHAR(255), PRIMARY KEY(id));
|
||||
--echo
|
||||
CREATE TABLE tpcb.branch (bid INT, balance DECIMAL(10,2), filler VARCHAR(255),
|
||||
PRIMARY KEY(bid));
|
||||
--echo
|
||||
CREATE TABLE tpcb.teller (tid INT, balance DECIMAL(10,2), filler VARCHAR(255),
|
||||
PRIMARY KEY(tid));
|
||||
--echo
|
||||
CREATE TABLE tpcb.history (id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT,
|
||||
tid INT, bid INT, amount DECIMAL(10,2),
|
||||
tdate DATETIME, teller CHAR(20), uuidf LONGBLOB,
|
||||
filler CHAR(80),PRIMARY KEY (id));
|
||||
|
||||
--echo
|
||||
--echo --- Create stored procedures & functions ---
|
||||
--echo
|
||||
|
||||
--disable_query_log
|
||||
delimiter |;
|
||||
CREATE PROCEDURE tpcb.load()
|
||||
BEGIN
|
||||
DECLARE acct INT DEFAULT 100;
|
||||
DECLARE brch INT DEFAULT 10;
|
||||
DECLARE tell INT DEFAULT 100;
|
||||
DECLARE tmp INT DEFAULT 10;
|
||||
WHILE brch > 0 DO
|
||||
SET tmp = 100;
|
||||
WHILE tmp > 0 DO
|
||||
INSERT INTO tpcb.account VALUES (acct, brch, 0.0, "FRESH ACCOUNT");
|
||||
SET acct = acct - 1;
|
||||
SET tmp = tmp -1;
|
||||
END WHILE;
|
||||
INSERT INTO tpcb.branch VALUES (brch, 0.0, "FRESH BRANCH");
|
||||
SET brch = brch - 1;
|
||||
END WHILE;
|
||||
WHILE tell > 0 DO
|
||||
INSERT INTO tpcb.teller VALUES (tell, 0.0, "FRESH TELLER");
|
||||
SET tell = tell - 1;
|
||||
END WHILE;
|
||||
END|
|
||||
|
||||
CREATE FUNCTION tpcb.account_id () RETURNS INT
|
||||
BEGIN
|
||||
DECLARE num INT;
|
||||
DECLARE ran INT;
|
||||
SELECT RAND() * 10 INTO ran;
|
||||
IF (ran < 5)
|
||||
THEN
|
||||
SELECT RAND() * 10 INTO num;
|
||||
ELSE
|
||||
SELECT RAND() * 100 INTO num;
|
||||
END IF;
|
||||
IF (num < 1)
|
||||
THEN
|
||||
RETURN 1;
|
||||
END IF;
|
||||
RETURN num;
|
||||
END|
|
||||
|
||||
CREATE FUNCTION tpcb.teller_id () RETURNS INT
|
||||
BEGIN
|
||||
DECLARE num INT;
|
||||
DECLARE ran INT;
|
||||
SELECT RAND() * 10 INTO ran;
|
||||
IF (ran < 5)
|
||||
THEN
|
||||
SELECT RAND() * 10 INTO num;
|
||||
ELSE
|
||||
SELECT RAND() * 100 INTO num;
|
||||
END IF;
|
||||
IF (num < 1)
|
||||
THEN
|
||||
RETURN 1;
|
||||
END IF;
|
||||
RETURN num;
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE tpcb.trans(in format varchar(3))
|
||||
BEGIN
|
||||
DECLARE acct INT DEFAULT 0;
|
||||
DECLARE brch INT DEFAULT 0;
|
||||
DECLARE tell INT DEFAULT 0;
|
||||
DECLARE bal DECIMAL(10,2) DEFAULT 0.0;
|
||||
DECLARE amount DECIMAL(10,2) DEFAULT 1.00;
|
||||
DECLARE test INT DEFAULT 0;
|
||||
DECLARE bbal DECIMAL(10,2) DEFAULT 0.0;
|
||||
DECLARE tbal DECIMAL(10,2) DEFAULT 0.0;
|
||||
DECLARE local_uuid VARCHAR(255);
|
||||
DECLARE local_user VARCHAR(255);
|
||||
DECLARE local_time TIMESTAMP;
|
||||
|
||||
SELECT RAND() * 10 INTO test;
|
||||
SELECT tpcb.account_id() INTO acct;
|
||||
SELECT tpcb.teller_id() INTO tell;
|
||||
|
||||
SELECT account.balance INTO bal FROM tpcb.account WHERE id = acct;
|
||||
SELECT account.bid INTO brch FROM tpcb.account WHERE id = acct;
|
||||
SELECT teller.balance INTO tbal FROM tpcb.teller WHERE tid = tell;
|
||||
SELECT branch.balance INTO bbal FROM tpcb.branch WHERE bid = brch;
|
||||
|
||||
IF (test < 5)
|
||||
THEN
|
||||
SET bal = bal + amount;
|
||||
SET bbal = bbal + amount;
|
||||
SET tbal = tbal + amount;
|
||||
UPDATE tpcb.account SET balance = bal, filler = 'account updated'
|
||||
WHERE id = acct;
|
||||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated'
|
||||
WHERE bid = brch;
|
||||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated'
|
||||
WHERE tid = tell;
|
||||
ELSE
|
||||
SET bal = bal - amount;
|
||||
SET bbal = bbal - amount;
|
||||
SET tbal = tbal - amount;
|
||||
UPDATE tpcb.account SET balance = bal, filler = 'account updated'
|
||||
WHERE id = acct;
|
||||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated'
|
||||
WHERE bid = brch;
|
||||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated'
|
||||
WHERE tid = tell;
|
||||
END IF;
|
||||
|
||||
IF (format = 'SBR')
|
||||
THEN
|
||||
SET local_uuid=UUID();
|
||||
SET local_user=USER();
|
||||
SET local_time= NOW();
|
||||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, local_time,local_user,
|
||||
local_uuid,'completed trans');
|
||||
ELSE
|
||||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, NOW(), USER(),
|
||||
UUID(),'completed trans');
|
||||
END IF;
|
||||
END|
|
||||
delimiter ;|
|
||||
--enable_query_log
|
||||
--echo
|
||||
--echo *** Stored Procedures Created ***
|
||||
--echo
|
||||
|
166
mysql-test/include/tpcb_disk_data.inc
Normal file
166
mysql-test/include/tpcb_disk_data.inc
Normal file
@ -0,0 +1,166 @@
|
||||
##################################################
|
||||
# Author: Jeb
|
||||
# Date: 2007/05
|
||||
# Purpose: To create a tpcb database using Disk Data,
|
||||
# tables and stored procedures to load the database
|
||||
# and run transactions against the DB
|
||||
##################################################
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS tpcb;
|
||||
--enable_warnings
|
||||
CREATE DATABASE tpcb;
|
||||
|
||||
--echo
|
||||
eval CREATE TABLE tpcb.account
|
||||
(id INT, bid INT, balance DECIMAL(10,2),
|
||||
filler CHAR(255), PRIMARY KEY(id))
|
||||
TABLESPACE $table_space STORAGE DISK
|
||||
ENGINE=$engine_type;
|
||||
--echo
|
||||
eval CREATE TABLE tpcb.branch
|
||||
(bid INT, balance DECIMAL(10,2), filler VARCHAR(255),
|
||||
PRIMARY KEY(bid))TABLESPACE $table_space STORAGE DISK
|
||||
ENGINE=$engine_type;
|
||||
--echo
|
||||
eval CREATE TABLE tpcb.teller
|
||||
(tid INT, balance DECIMAL(10,2), filler VARCHAR(255),
|
||||
PRIMARY KEY(tid)) TABLESPACE $table_space STORAGE DISK
|
||||
ENGINE=$engine_type;
|
||||
|
||||
--echo
|
||||
eval CREATE TABLE tpcb.history
|
||||
(id MEDIUMINT NOT NULL AUTO_INCREMENT,aid INT,
|
||||
tid INT, bid INT, amount DECIMAL(10,2),
|
||||
tdate DATETIME, teller CHAR(20), uuidf LONGBLOB,
|
||||
filler CHAR(80),PRIMARY KEY (id))
|
||||
TABLESPACE $table_space STORAGE DISK
|
||||
ENGINE=$engine_type;
|
||||
|
||||
--echo
|
||||
--echo --- Create stored procedures & functions ---
|
||||
--echo
|
||||
|
||||
--disable_query_log
|
||||
delimiter |;
|
||||
CREATE PROCEDURE tpcb.load()
|
||||
BEGIN
|
||||
DECLARE acct INT DEFAULT 100;
|
||||
DECLARE brch INT DEFAULT 10;
|
||||
DECLARE tell INT DEFAULT 100;
|
||||
DECLARE tmp INT DEFAULT 10;
|
||||
WHILE brch > 0 DO
|
||||
SET tmp = 100;
|
||||
WHILE tmp > 0 DO
|
||||
INSERT INTO tpcb.account VALUES (acct, brch, 0.0, "FRESH ACCOUNT");
|
||||
SET acct = acct - 1;
|
||||
SET tmp = tmp -1;
|
||||
END WHILE;
|
||||
INSERT INTO tpcb.branch VALUES (brch, 0.0, "FRESH BRANCH");
|
||||
SET brch = brch - 1;
|
||||
END WHILE;
|
||||
WHILE tell > 0 DO
|
||||
INSERT INTO tpcb.teller VALUES (tell, 0.0, "FRESH TELLER");
|
||||
SET tell = tell - 1;
|
||||
END WHILE;
|
||||
END|
|
||||
|
||||
CREATE FUNCTION tpcb.account_id () RETURNS INT
|
||||
BEGIN
|
||||
DECLARE num INT;
|
||||
DECLARE ran INT;
|
||||
SELECT RAND() * 10 INTO ran;
|
||||
IF (ran < 5)
|
||||
THEN
|
||||
SELECT RAND() * 10 INTO num;
|
||||
ELSE
|
||||
SELECT RAND() * 100 INTO num;
|
||||
END IF;
|
||||
IF (num < 1)
|
||||
THEN
|
||||
RETURN 1;
|
||||
END IF;
|
||||
RETURN num;
|
||||
END|
|
||||
|
||||
CREATE FUNCTION tpcb.teller_id () RETURNS INT
|
||||
BEGIN
|
||||
DECLARE num INT;
|
||||
DECLARE ran INT;
|
||||
SELECT RAND() * 10 INTO ran;
|
||||
IF (ran < 5)
|
||||
THEN
|
||||
SELECT RAND() * 10 INTO num;
|
||||
ELSE
|
||||
SELECT RAND() * 100 INTO num;
|
||||
END IF;
|
||||
IF (num < 1)
|
||||
THEN
|
||||
RETURN 1;
|
||||
END IF;
|
||||
RETURN num;
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE tpcb.trans(in format varchar(3))
|
||||
BEGIN
|
||||
DECLARE acct INT DEFAULT 0;
|
||||
DECLARE brch INT DEFAULT 0;
|
||||
DECLARE tell INT DEFAULT 0;
|
||||
DECLARE bal DECIMAL(10,2) DEFAULT 0.0;
|
||||
DECLARE amount DECIMAL(10,2) DEFAULT 1.00;
|
||||
DECLARE test INT DEFAULT 0;
|
||||
DECLARE bbal DECIMAL(10,2) DEFAULT 0.0;
|
||||
DECLARE tbal DECIMAL(10,2) DEFAULT 0.0;
|
||||
DECLARE local_uuid VARCHAR(255);
|
||||
DECLARE local_user VARCHAR(255);
|
||||
DECLARE local_time TIMESTAMP;
|
||||
|
||||
SELECT RAND() * 10 INTO test;
|
||||
SELECT tpcb.account_id() INTO acct;
|
||||
SELECT tpcb.teller_id() INTO tell;
|
||||
|
||||
SELECT account.balance INTO bal FROM tpcb.account WHERE id = acct;
|
||||
SELECT account.bid INTO brch FROM tpcb.account WHERE id = acct;
|
||||
SELECT teller.balance INTO tbal FROM tpcb.teller WHERE tid = tell;
|
||||
SELECT branch.balance INTO bbal FROM tpcb.branch WHERE bid = brch;
|
||||
|
||||
IF (test < 5)
|
||||
THEN
|
||||
SET bal = bal + amount;
|
||||
SET bbal = bbal + amount;
|
||||
SET tbal = tbal + amount;
|
||||
UPDATE tpcb.account SET balance = bal, filler = 'account updated'
|
||||
WHERE id = acct;
|
||||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated'
|
||||
WHERE bid = brch;
|
||||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated'
|
||||
WHERE tid = tell;
|
||||
ELSE
|
||||
SET bal = bal - amount;
|
||||
SET bbal = bbal - amount;
|
||||
SET tbal = tbal - amount;
|
||||
UPDATE tpcb.account SET balance = bal, filler = 'account updated'
|
||||
WHERE id = acct;
|
||||
UPDATE tpcb.branch SET balance = bbal, filler = 'branch updated'
|
||||
WHERE bid = brch;
|
||||
UPDATE tpcb.teller SET balance = tbal, filler = 'teller updated'
|
||||
WHERE tid = tell;
|
||||
END IF;
|
||||
|
||||
IF (format = 'SBR')
|
||||
THEN
|
||||
SET local_uuid=UUID();
|
||||
SET local_user=USER();
|
||||
SET local_time= NOW();
|
||||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, local_time,local_user,
|
||||
local_uuid,'completed trans');
|
||||
ELSE
|
||||
INSERT INTO tpcb.history VALUES(NULL,acct,tell,brch,amount, NOW(), USER(),
|
||||
UUID(),'completed trans');
|
||||
END IF;
|
||||
END|
|
||||
delimiter ;|
|
||||
--enable_query_log
|
||||
--echo
|
||||
--echo *** Stored Procedures Created ***
|
||||
--echo
|
||||
|
@ -23,7 +23,7 @@
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
|
||||
--enable_warnings
|
||||
eval create table t1 (id int not null, f_id int not null, f int not null,
|
||||
primary key(f_id, id)) engine = $engine_type;
|
||||
@ -59,7 +59,7 @@ set autocommit = 0;
|
||||
#
|
||||
# S-lock to records (2,2),(4,2), and (6,2) should not be released in a update
|
||||
#
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
select * from t1 where a = 2 and b = 2 for update;
|
||||
connection a;
|
||||
commit;
|
||||
@ -213,39 +213,39 @@ set autocommit = 0;
|
||||
create table t10(a int not null, b int, primary key(a)) select * from t2 for update;
|
||||
|
||||
connection b;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection c;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection d;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection e;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection f;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection g;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection h;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection i;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection j;
|
||||
--error 1205
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
reap;
|
||||
|
||||
connection a;
|
||||
|
14
mysql-test/include/uses_vardir.inc
Normal file
14
mysql-test/include/uses_vardir.inc
Normal file
@ -0,0 +1,14 @@
|
||||
#
|
||||
# Some tests uses LOAD DATA with a relative path
|
||||
# and need to see for example ../std_data
|
||||
#
|
||||
# Also if an absolute path was used, the server might be started
|
||||
# with --secure-file-priv and wouldn't be allowed to LOAD a file
|
||||
# outside of it's vardir anyway
|
||||
#
|
||||
|
||||
|
||||
if (`select LOCATE('$MYSQLTEST_VARDIR', REPLACE(@@datadir, '\\\\', '/')) != 1`)
|
||||
{
|
||||
skip Need mysqld in MYSQLTEST_VARDIR;
|
||||
}
|
@ -81,7 +81,7 @@ explain select count(*) from t1 where v between 'a' and 'a ';
|
||||
--replace_column 9 #
|
||||
explain select count(*) from t1 where v between 'a' and 'a ' and v between 'a ' and 'b\n';
|
||||
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
alter table t1 add unique(v);
|
||||
alter table t1 add key(v);
|
||||
select concat('*',v,'*',c,'*',t,'*') as qq from t1 where v='a';
|
||||
@ -179,17 +179,17 @@ drop table t1;
|
||||
|
||||
create table t1 (a char(10), unique (a));
|
||||
insert into t1 values ('a ');
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values ('a ');
|
||||
|
||||
alter table t1 modify a varchar(10);
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values ('a '),('a '),('a '),('a ');
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values ('a ');
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values ('a ');
|
||||
--error ER_DUP_ENTRY_WITH_KEY_NAME
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t1 values ('a ');
|
||||
update t1 set a='a ' where a like 'a%';
|
||||
select concat(a,'.') from t1;
|
||||
|
@ -17,6 +17,7 @@
|
||||
# let $wait_condition=
|
||||
# SELECT c = 3 FROM t;
|
||||
# --source include/wait_condition.inc
|
||||
# --echo Executed the test condition $wait_condition_reps times
|
||||
#
|
||||
# EXAMPLE
|
||||
# events_bugs.test, events_time_zone.test
|
||||
@ -33,9 +34,13 @@ if ($wait_timeout)
|
||||
# calls, and default will be used instead.
|
||||
let $wait_timeout= 0;
|
||||
|
||||
# Keep track of how many times the wait condition is tested
|
||||
# This is used by some tests (e.g., main.status)
|
||||
let $wait_condition_reps= 0;
|
||||
while ($wait_counter)
|
||||
{
|
||||
let $success= `$wait_condition`;
|
||||
inc $wait_condition_reps;
|
||||
if ($success)
|
||||
{
|
||||
let $wait_counter= 0;
|
||||
|
33
mysql-test/include/wait_for_slave_io_to_stop.inc
Normal file
33
mysql-test/include/wait_for_slave_io_to_stop.inc
Normal file
@ -0,0 +1,33 @@
|
||||
###################################################
|
||||
#Author: Jeb
|
||||
#Date: 2007-06-11
|
||||
#Purpose: used for io errors on the slave. If Slave gets an io
|
||||
# error, the io trhead should stop
|
||||
#Details:
|
||||
# 1) Fill in and setup variables
|
||||
# 2) loop through looking for
|
||||
# sql threads to stop
|
||||
# 3) If loops too long die.
|
||||
####################################################
|
||||
connection slave;
|
||||
let $my_show= SHOW SLAVE STATUS;
|
||||
let $sql_running= Slave_IO_Running;
|
||||
let $row_number= 1;
|
||||
let $run= 1;
|
||||
let $counter= 300;
|
||||
|
||||
while ($run)
|
||||
{
|
||||
let $io_result= query_get_value("SHOW SLAVE STATUS", Slave_IO_Running, $row_number);
|
||||
if (`SELECT '$io_result' = 'No'`){
|
||||
let $run= 0;
|
||||
}
|
||||
sleep 0.1;
|
||||
if (!$counter){
|
||||
--echo "Failed while waiting for slave IO thread to stop"
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
exit;
|
||||
}
|
||||
dec $counter;
|
||||
}
|
||||
|
26
mysql-test/include/wait_for_slave_param.inc
Normal file
26
mysql-test/include/wait_for_slave_param.inc
Normal file
@ -0,0 +1,26 @@
|
||||
# include/wait_for_slave_param.inc
|
||||
#
|
||||
# SUMMARY
|
||||
#
|
||||
# Waits until SHOW SLAVE STATUS has returned a spicified value.
|
||||
#
|
||||
# USAGE
|
||||
#
|
||||
# let $slave_param= Slave_SQL_Running;
|
||||
# let $slave_param_value= No;
|
||||
# --source include/slave_wait_param.inc
|
||||
|
||||
let $slave_wait_param_counter= 300;
|
||||
let $slave_value= query_get_value("SHOW SLAVE STATUS", $slave_param, 1);
|
||||
while (`select "$slave_value" != "$slave_param_value"`)
|
||||
{
|
||||
dec $slave_wait_param_counter;
|
||||
if (!$slave_wait_param_counter)
|
||||
{
|
||||
--echo ERROR: failed while waiting for slave parameter $slave_param: $slave_param_value
|
||||
query_vertical show slave status;
|
||||
exit;
|
||||
}
|
||||
sleep 0.1;
|
||||
let $slave_value= query_get_value("SHOW SLAVE STATUS", $slave_param, 1);
|
||||
}
|
30
mysql-test/include/wait_for_slave_sql_to_stop.inc
Normal file
30
mysql-test/include/wait_for_slave_sql_to_stop.inc
Normal file
@ -0,0 +1,30 @@
|
||||
###################################################
|
||||
#Author: Jeb
|
||||
#Date: 2007-06-11
|
||||
#Purpose: used for SQL errors on the slave. If Slave gets a sql
|
||||
# error, the SQL trhead should stop
|
||||
#Details:
|
||||
# 1) Fill in and setup variables
|
||||
# 2) loop through looking for
|
||||
# sql threads to stop
|
||||
# 3) If loops too long die.
|
||||
####################################################
|
||||
connection slave;
|
||||
let $row_number= 1;
|
||||
let $run= 1;
|
||||
let $counter= 300;
|
||||
|
||||
while ($run)
|
||||
{
|
||||
let $sql_result= query_get_value("SHOW SLAVE STATUS", Slave_SQL_Running, $row_number);
|
||||
if (`SELECT '$sql_result' = 'No'`){
|
||||
let $run= 0;
|
||||
}
|
||||
sleep 0.1;
|
||||
if (!$counter){
|
||||
--echo "Failed while waiting for slave SQL thread to stop"
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
exit;
|
||||
}
|
||||
dec $counter;
|
||||
}
|
35
mysql-test/include/wait_for_slave_to_start.inc
Normal file
35
mysql-test/include/wait_for_slave_to_start.inc
Normal file
@ -0,0 +1,35 @@
|
||||
###################################################
|
||||
#Author: Jeb
|
||||
#Date: 2007-06-11
|
||||
#Purpose: To wait a brief time for slave to start
|
||||
#Details:
|
||||
# 1) Fill in and setup variables
|
||||
# 2) loop through looking for both
|
||||
# io and sql threads to start
|
||||
# 3) If loops too long die.
|
||||
####################################################
|
||||
connection slave;
|
||||
let $row_number= 1;
|
||||
let $run= 1;
|
||||
let $counter= 300;
|
||||
|
||||
while ($run)
|
||||
{
|
||||
let $io_result= query_get_value("SHOW SLAVE STATUS", Slave_IO_Running, $row_number);
|
||||
if (`SELECT '$io_result' = 'Yes'`){
|
||||
|
||||
let $sql_result= query_get_value("SHOW SLAVE STATUS", Slave_SQL_Running, $row_number);
|
||||
if (`SELECT '$sql_result' = 'Yes'`){
|
||||
let $run= 0;
|
||||
}
|
||||
}
|
||||
sleep 0.1;
|
||||
if (!$counter){
|
||||
--echo "Failed while waiting for slave to start"
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
exit;
|
||||
}
|
||||
dec $counter;
|
||||
}
|
||||
|
||||
|
39
mysql-test/include/wait_for_slave_to_stop.inc
Normal file
39
mysql-test/include/wait_for_slave_to_stop.inc
Normal file
@ -0,0 +1,39 @@
|
||||
###################################################
|
||||
#Author: Jeb
|
||||
#Date: 2007-06-11
|
||||
#Purpose: To replace the mysqltest.c executable
|
||||
# wait_for_slave_to_stop function and
|
||||
# return this to the test language.
|
||||
#Details:
|
||||
# 1) Fill in and setup variables
|
||||
# 2) loop through looking for both
|
||||
# io and sql threads to stop
|
||||
# 3) If loops too long die.
|
||||
####################################################
|
||||
connection slave;
|
||||
let $row_number= 1;
|
||||
let $run= 1;
|
||||
let $counter= 300;
|
||||
|
||||
while ($run)
|
||||
{
|
||||
let $io_result= query_get_value("SHOW SLAVE STATUS", Slave_IO_Running, $row_number);
|
||||
if (`SELECT '$io_result' = 'No'`){
|
||||
|
||||
let $sql_result= query_get_value("SHOW SLAVE STATUS", Slave_SQL_Running, $row_number);
|
||||
if (`SELECT '$sql_result' = 'No'`){
|
||||
let $run= 0;
|
||||
}
|
||||
}
|
||||
sleep 0.1;
|
||||
if (!$counter){
|
||||
--echo "Failed while waiting for slave to stop"
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
exit;
|
||||
}
|
||||
dec $counter;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user