mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
merge: 5.1 -> 5.1-rpl
conflicts: Text conflict in client/mysqltest.cc Text conflict in mysql-test/include/wait_until_connected_again.inc Text conflict in mysql-test/lib/mtr_report.pm Text conflict in mysql-test/mysql-test-run.pl Text conflict in mysql-test/r/events_bugs.result Text conflict in mysql-test/r/log_state.result Text conflict in mysql-test/r/myisam_data_pointer_size_func.result Text conflict in mysql-test/r/mysqlcheck.result Text conflict in mysql-test/r/query_cache.result Text conflict in mysql-test/r/status.result Text conflict in mysql-test/suite/binlog/r/binlog_index.result Text conflict in mysql-test/suite/binlog/r/binlog_innodb.result Text conflict in mysql-test/suite/rpl/r/rpl_packet.result Text conflict in mysql-test/suite/rpl/t/rpl_packet.test Text conflict in mysql-test/t/disabled.def Text conflict in mysql-test/t/events_bugs.test Text conflict in mysql-test/t/log_state.test Text conflict in mysql-test/t/myisam_data_pointer_size_func.test Text conflict in mysql-test/t/mysqlcheck.test Text conflict in mysql-test/t/query_cache.test Text conflict in mysql-test/t/rpl_init_slave_func.test Text conflict in mysql-test/t/status.test
This commit is contained in:
@@ -751,6 +751,19 @@ ALTER TABLE t1 MODIFY COLUMN v VARCHAR(4);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug#31291 ALTER TABLE CONVERT TO CHARACTER SET does not change some data types
|
||||
#
|
||||
create table t1 (a tinytext character set latin1);
|
||||
alter table t1 convert to character set utf8;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
create table t1 (a mediumtext character set latin1);
|
||||
alter table t1 convert to character set utf8;
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
@@ -1533,5 +1533,11 @@ DROP TABLE t1;
|
||||
|
||||
###########################################################################
|
||||
|
||||
#
|
||||
# Bug#40104 regression with table names?
|
||||
#
|
||||
create table `me:i`(id int);
|
||||
drop table `me:i`;
|
||||
|
||||
--echo
|
||||
--echo End of 5.1 tests
|
||||
|
@@ -1805,4 +1805,17 @@ unlock tables;
|
||||
drop table t1;
|
||||
--disconnect con1
|
||||
|
||||
#
|
||||
# Bug#41441 repair csv table crashes debug server
|
||||
#
|
||||
# Note: The test should be removed after Bug#33717 is fixed
|
||||
|
||||
create table t1(a enum ('a') not null) engine=csv;
|
||||
insert into t1 values (2);
|
||||
--error ER_CRASHED_ON_USAGE
|
||||
select * from t1 limit 1;
|
||||
repair table t1;
|
||||
select * from t1 limit 1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@@ -697,4 +697,29 @@ set names latin1;
|
||||
#
|
||||
select hex(char(0x41 using ucs2));
|
||||
|
||||
#
|
||||
# Bug#37575: UCASE fails on monthname
|
||||
#
|
||||
SET character_set_connection=ucs2;
|
||||
SELECT CHARSET(DAYNAME(19700101));
|
||||
SELECT CHARSET(MONTHNAME(19700101));
|
||||
SELECT LOWER(DAYNAME(19700101));
|
||||
SELECT LOWER(MONTHNAME(19700101));
|
||||
SELECT UPPER(DAYNAME(19700101));
|
||||
SELECT UPPER(MONTHNAME(19700101));
|
||||
SELECT HEX(MONTHNAME(19700101));
|
||||
SELECT HEX(DAYNAME(19700101));
|
||||
SET LC_TIME_NAMES=ru_RU;
|
||||
SET NAMES utf8;
|
||||
SET character_set_connection=ucs2;
|
||||
SELECT CHARSET(DAYNAME(19700101));
|
||||
SELECT CHARSET(MONTHNAME(19700101));
|
||||
SELECT LOWER(DAYNAME(19700101));
|
||||
SELECT LOWER(MONTHNAME(19700101));
|
||||
SELECT UPPER(DAYNAME(19700101));
|
||||
SELECT UPPER(MONTHNAME(19700101));
|
||||
SELECT HEX(MONTHNAME(19700101));
|
||||
SELECT HEX(DAYNAME(19700101));
|
||||
SET character_set_connection=latin1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@@ -340,3 +340,15 @@ select str_to_date('04/30 /2004', '%m /%d /%Y');
|
||||
select str_to_date('04/30/2004 ', '%m/%d/%Y ');
|
||||
|
||||
--echo "End of 4.1 tests"
|
||||
|
||||
#
|
||||
# Bug #41470: DATE_FORMAT() crashes the complete server with a valid date
|
||||
#
|
||||
|
||||
# show that these two do not crash the server:
|
||||
SELECT DATE_FORMAT("0000-01-01",'%W %d %M %Y') as valid_date;
|
||||
SELECT DATE_FORMAT("0000-02-28",'%W %d %M %Y') as valid_date;
|
||||
# show that date within the Gregorian range render correct results: (THU)
|
||||
SELECT DATE_FORMAT("2009-01-01",'%W %d %M %Y') as valid_date;
|
||||
|
||||
--echo "End of 5.0 tests"
|
||||
|
@@ -18,6 +18,9 @@ rpl_max_binlog_size_func : BUG#37962 2008-07-08 sven *_func tests c
|
||||
slow_query_log_func : BUG#37962 2008-07-08 sven *_func tests containing sleeps/race conditions
|
||||
sql_low_priority_updates_func : BUG#37962 2008-07-08 sven *_func tests containing sleeps/race conditions
|
||||
timestamp_func : BUG#37962 2008-07-08 sven *_func tests containing sleeps/race conditions
|
||||
slow_query_log_func.test : Bug #37962: *_func tests containing sleeps/race conditions
|
||||
log_bin_trust_function_creators_func : Bug#41003 Dec-12-2008 andrei todo:re-enable after merging the bug fixes from the main trees.
|
||||
innodb_max_dirty_pages_pct_func : BUG#41018 BUG#39382 2008-12-02 sven test fails often. some failures fill up the disk, causing subsequent failures in many other tests
|
||||
federated_transactions : Bug#29523 Transactions do not work
|
||||
wait_timeout_func : Bug #41225 joro wait_timeout_func fails
|
||||
kill : Bug#37780 2008-12-03 HHunger need some changes to be robust enough for pushbuild.
|
||||
query_cache_28249 : Bug#41098 Query Cache returns wrong result with concurrent insert
|
||||
|
@@ -1,40 +1,133 @@
|
||||
#### t/events_bugs.test
|
||||
#
|
||||
# Last change:
|
||||
# 2008-10-16 mleich
|
||||
# 2009-01-08 mleich
|
||||
# - Fix for
|
||||
# Bug#39848 events_bugs fails sporadically on pushbuild
|
||||
# (missing rows in table event_log)
|
||||
# Bug#39863 events_bugs fails sporadically on pushbuild (extra processes
|
||||
# in I_S.PROCESSLIST)
|
||||
# Bug#39978 main.events_bugs does not clean up
|
||||
# Bug#39569 events_bugs fails sporadically on pushbuild (should have
|
||||
# failed with errno 1539)
|
||||
# - Minor improvements of formatting
|
||||
# Bug#41111 events_bugs fails sporadically on pushbuild
|
||||
# - Avoid effects of
|
||||
# Bug#41925 Warning 1366 Incorrect string value: ... for column processlist.info
|
||||
#
|
||||
# Please set $
|
||||
let $fixed_bug41925= 0;
|
||||
#
|
||||
# Dear maintainer of this test. Please do NOT remove the next big comment.
|
||||
# The tests for events were quite unstable over a significant time because the
|
||||
# effects of events in general and their representation within the processlist
|
||||
# were partially not known. Therefore I had to make excessive experiments.
|
||||
# The comment with the outcome of these experiments will be moved into a README
|
||||
# file as soon as the tests for events get their own testsuite.
|
||||
#
|
||||
# Outcome of some experiments (mleich, mysql-5.1 2008-12):
|
||||
# --------------------------------------------------------
|
||||
# 0. Most time used setup:
|
||||
# High parallel I/O load
|
||||
# set global event_scheduler= off;
|
||||
# sleep 3;
|
||||
# use events_test;
|
||||
# create event e_16407 on schedule every 2 second do
|
||||
# begin
|
||||
# select 'FIRST COMMAND', sleep(0.5);
|
||||
# select 'SECOND COMMAND';
|
||||
# end|
|
||||
# set global event_scheduler= on;
|
||||
# Start observation of the processlist
|
||||
#
|
||||
#
|
||||
# 1. SET GLOBAL event_scheduler = 'ON' and immediate observation of the processlist.
|
||||
# 1.1 Effects around event scheduler:
|
||||
# 1.1.1 First phase (very short)
|
||||
# No user 'event_scheduler' within information_schema.processlist.
|
||||
# 1.1.2 Second phase observed (independend of probably existing events and very short) was
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# event_scheduler localhost NULL Daemon 0 Initialized NULL
|
||||
# 1.1.3 Third phase observed:
|
||||
# 1.1.3.1 Case we do not have existing events (rather long)
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# event_scheduler localhost NULL Daemon 0 Waiting on empty queue NULL
|
||||
# 1.1.3.2 Case there exists already an event
|
||||
# 1.1.3.2.1 Event executor is not visible in processlist but comes up soon
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# event_scheduler localhost NULL Daemon 0 NULL
|
||||
# or
|
||||
# event_scheduler localhost NULL Daemon 0 NULL NULL
|
||||
# 1.1.3.2.2 A bit later, at least one event executor is or was visible in processlist
|
||||
# The states mentioned in 3.2.1 or a bit later
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# event_scheduler localhost NULL Daemon 0 Waiting for next activation NULL
|
||||
# 1.2 Effects around event executor:
|
||||
# Typical processlist content:
|
||||
# USER evtest1 -- Definer of event
|
||||
# DB events_test -- DB during time of event creation (use DB is not allowed in events)
|
||||
# COMMAND Connect
|
||||
# STATE NULL
|
||||
# INFO SET @evname = 'ev_sched_1823' -- Part of the event code
|
||||
#
|
||||
# State before "User sleep select 'FIRST COMMAND', sleep(0.5);"
|
||||
# ID USER HOST DB COMMAND TIME STATE INFO
|
||||
# 7 event_scheduler localhost NULL Connect 0 NULL NULL
|
||||
# !! The user is not the event creator and the DB is different. !!
|
||||
# !! This means that we must get later a change of the identity. !!
|
||||
# or
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 checking permissions
|
||||
# or
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 checking permissions CREATE PROCEDURE ....
|
||||
# or
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 NULL select 'FIRST COMMAND', sleep(0.5)
|
||||
# or
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 checking permissions select 'FIRST COMMAND'...
|
||||
# or
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 Opening table select 'FIRST COMMAND', sleep(0.5)
|
||||
# or
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 Locked select 'FIRST COMMAND', sleep(0.5)
|
||||
# or
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 executing select 'FIRST COMMAND', sleep(0.5)
|
||||
#
|
||||
# State "User sleep select 'FIRST COMMAND', sleep(0.5);" reached
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 User sleep select 'FIRST COMMAND', sleep(0.5)
|
||||
#
|
||||
# State at end (! It looks like a slow CREATE PROC !) of event code execution was sometimes
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 logging slow query CREATE PROCEDURE `e_16407`...
|
||||
#
|
||||
# State after running some event code was sometimes
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# root localhost events_test Connect 0 logging slow query select 'SECOND COMMAND'
|
||||
#
|
||||
# State somewhere (I guess just before the event executor disappears)
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# Event thread fin <empty> events_test Connect 0 Clearing NULL
|
||||
#
|
||||
#
|
||||
# Outcome of some experiments (mleich):
|
||||
# 1. SET GLOBAL event_scheduler = 'ON';
|
||||
# Immediate observation of the processlist.
|
||||
# Effects:
|
||||
# 1. There is no guarantee to find immediate the user 'event_scheduler'
|
||||
# within information_schema.processlist.
|
||||
# 2. Some states of the user 'event_scheduler' found in PROCESSLIST:
|
||||
# USER HOST DB COMMAND TIME STATE INFO
|
||||
# event_scheduler localhost NULL Daemon 0 Waiting on empty queue NULL
|
||||
# event_scheduler localhost NULL Daemon 0 Initialized NULL
|
||||
# 2. SET GLOBAL event_scheduler = 'OFF';
|
||||
# Immediate observation of the processlist.
|
||||
# Effects:
|
||||
# 1. I never found the user 'event_scheduler' within the processlist.
|
||||
# 2. Events just during execution could be found within the processlist
|
||||
# = It does not look like "SET GLOBAL event_scheduler = 'OFF'" stops them.
|
||||
# 3. An event gets executed
|
||||
# USER evtest1 (Definer of event)
|
||||
# DB events_test (DB during time of event creation)
|
||||
# COMMAND Connect
|
||||
# STATE NULL
|
||||
# INFO SET @evname = 'ev_sched_1823' (Part of the event code)
|
||||
# ==> Everything mentioned in 1.2 above could be observed.
|
||||
#
|
||||
# Several subtests were weak because they showed random result set differences after issuing
|
||||
# "SET GLOBAL EVENT_SCHEDULER= off;".
|
||||
# 1. Reason one: There were already event executors
|
||||
# Fix: Wait till there is no event executor active ==> no session WHERE
|
||||
# - command IN ('Connect')
|
||||
# There must be no parallel session being just in "Connect" phase!
|
||||
# or
|
||||
# - user = <who created the maybe current running events>
|
||||
# There must be no parallel session of this person.
|
||||
# or user = 'event_scheduler' with command = 'Connect'
|
||||
# The session which will soon change its identity to event creator.
|
||||
#
|
||||
# 2. Reason two: If an event modifies a MyISAM table than a delayed visibilty of changes
|
||||
# might occur (concurrent_inserts=on or delayed inserts ...).
|
||||
#
|
||||
|
||||
# Can't test with embedded server that doesn't support grants
|
||||
@@ -47,6 +140,10 @@ drop database if exists mysqltest_db2;
|
||||
--enable_warnings
|
||||
create database events_test;
|
||||
use events_test;
|
||||
# We use MyISAM tables and must avoid effects (visibility of changes might be
|
||||
# delayed) caused by concurrent_insert on (default).
|
||||
set @concurrent_insert= @@global.concurrent_insert;
|
||||
set @@global.concurrent_insert = 0;
|
||||
|
||||
#
|
||||
# START: Bug #31332 --event-scheduler option misbehaving
|
||||
@@ -56,8 +153,11 @@ use events_test;
|
||||
# option with no argument in events_bugs-master.opt turns the scheduler on.
|
||||
|
||||
select * from information_schema.global_variables where variable_name like 'event_scheduler';
|
||||
# Check that the event_scheduler is really running
|
||||
--source include/running_event_scheduler.inc
|
||||
|
||||
SET GLOBAL event_scheduler = 'OFF';
|
||||
--source include/check_events_off.inc
|
||||
|
||||
#
|
||||
# END: Bug #31332
|
||||
@@ -132,8 +232,10 @@ create event e_55 on schedule every 10 hour starts 10000101000000 do drop table
|
||||
# Start - 16407: Events: Changes in sql_mode won't be taken into account
|
||||
#
|
||||
set global event_scheduler=off;
|
||||
--source include/check_events_off.inc
|
||||
delete from mysql.event;
|
||||
set global event_scheduler= on;
|
||||
--source include/running_event_scheduler.inc
|
||||
set @old_sql_mode:=@@sql_mode;
|
||||
set sql_mode=ansi;
|
||||
select get_lock('test_bug16407', 60);
|
||||
@@ -148,13 +250,13 @@ delimiter ;|
|
||||
# We wait till one event runs and hangs when trying to get the user lock.
|
||||
let $wait_condition=
|
||||
select count(*) > 0 from information_schema.processlist
|
||||
where info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Now if everything is fine the event has compiled and is locked"
|
||||
# Expect to see one session in events_test waiting for the user lock.
|
||||
select /*1*/ user, host, db, info from information_schema.processlist
|
||||
where info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
select release_lock('test_bug16407');
|
||||
# Try to avoid
|
||||
# Bug#39863 events_bugs fails sporadically on pushbuild (extra processes in I_S.PROCESSLIST)
|
||||
@@ -162,23 +264,27 @@ select release_lock('test_bug16407');
|
||||
# Bug#32782 User lock hash fails to find lock
|
||||
# "various issues related to missing or incorrect return results
|
||||
# from release_lock()."
|
||||
# Therefore we check here if the event executing session disappeared or
|
||||
# Therefore we check here if the event executor is no more locked or
|
||||
# we waited >= 5 seconds for this to happen.
|
||||
let $wait_timeout= 5;
|
||||
let $wait_condition=
|
||||
select count(*) = 0 from information_schema.processlist
|
||||
where info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'test_bug16407\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
if (!`$wait_condition`)
|
||||
{
|
||||
--echo ERROR: There must be no session with info = 'select get_lock('test_bug16407', 60) within the processlist.
|
||||
--echo ERROR: There must be no session with
|
||||
--echo state = 'User lock' and info = 'select get_lock('test_bug16407', 60)
|
||||
--echo within the processlist.
|
||||
--echo We probably hit Bug#32782 User lock hash fails to find lock
|
||||
eval select * from information_schema.processlist;
|
||||
SELECT * FROM information_schema.processlist;
|
||||
--echo Abort
|
||||
exit;
|
||||
}
|
||||
|
||||
set global event_scheduler= off;
|
||||
# Wait till the event scheduler and all event executors have finished their work.
|
||||
--source include/check_events_off.inc
|
||||
|
||||
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
|
||||
--echo "Let's check whether we change the sql_mode on ALTER EVENT"
|
||||
@@ -191,9 +297,10 @@ set sql_mode="ansi";
|
||||
select get_lock('ee_16407_2', 60);
|
||||
|
||||
set global event_scheduler= 1;
|
||||
--source include/running_event_scheduler.inc
|
||||
--echo "Another sql_mode test"
|
||||
set sql_mode="traditional";
|
||||
create table events_smode_test(ev_name char(10), a date) engine=myisam;
|
||||
create table events_smode_test(ev_name char(10), a date);
|
||||
--echo "This should never insert something"
|
||||
delimiter |;
|
||||
create event ee_16407_2 on schedule every 60 second do
|
||||
@@ -203,7 +310,7 @@ begin
|
||||
insert into events_test.events_smode_test values('ee_16407_2','1980-19-02');
|
||||
end|
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
insert into events_smode_test values ('test','1980-19-02')|
|
||||
insert into events_test.events_smode_test values ('test','1980-19-02')|
|
||||
--echo "This is ok"
|
||||
create event ee_16407_3 on schedule every 60 second do
|
||||
begin
|
||||
@@ -223,13 +330,20 @@ end|
|
||||
delimiter ;|
|
||||
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
|
||||
|
||||
# We wait till we have three event executors waiting for the removal of the lock.
|
||||
let $wait_condition=
|
||||
select count(*) = 3 from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
# There is an extreme low risk that an additional event execution is just coming
|
||||
# up because
|
||||
# - the events have to be started every 60 seconds.
|
||||
# - we are just after event creation + waiting for seeing 3 locked
|
||||
# We expect to see three event executors in state 'User lock'.
|
||||
select /*2*/ user, host, db, info from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
|
||||
select release_lock('ee_16407_2');
|
||||
|
||||
# Try to avoid
|
||||
@@ -244,13 +358,37 @@ let $wait_timeout= 5;
|
||||
let $wait_condition=
|
||||
select count(*) = 0
|
||||
from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
if (!`$wait_condition`)
|
||||
{
|
||||
--echo ERROR: There must be no session with
|
||||
--echo state = 'User lock' and info = 'select get_lock('test_bug16407_2', 60)
|
||||
--echo within the processlist.
|
||||
--echo We probably hit Bug#32782 User lock hash fails to find lock
|
||||
SELECT * FROM information_schema.processlist;
|
||||
--echo Abort
|
||||
exit;
|
||||
}
|
||||
|
||||
# We expect to see no event executors in state 'User lock'.
|
||||
if(!$fixed_bug41925)
|
||||
{
|
||||
--disable_warnings
|
||||
}
|
||||
select /*3*/ user, host, db, info from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_2\', 60)';
|
||||
if(!$fixed_bug41925)
|
||||
{
|
||||
--enable_warnings
|
||||
}
|
||||
|
||||
set global event_scheduler= off;
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
# Wait till the event scheduler and all event executors have finished their work.
|
||||
# Without this the next queries will give unstable results.
|
||||
--source include/check_events_off.inc
|
||||
|
||||
select * from events_test.events_smode_test order by ev_name, a;
|
||||
--echo "OK, last check before we drop them"
|
||||
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
|
||||
drop event ee_16407_2;
|
||||
@@ -259,11 +397,12 @@ drop event ee_16407_4;
|
||||
|
||||
|
||||
--echo "And now one last test regarding sql_mode and call of SP from an event"
|
||||
delete from events_smode_test;
|
||||
delete from events_test.events_smode_test;
|
||||
set sql_mode='ansi';
|
||||
select get_lock('ee_16407_5', 60);
|
||||
|
||||
set global event_scheduler= on;
|
||||
--source include/running_event_scheduler.inc
|
||||
|
||||
set sql_mode='traditional';
|
||||
delimiter |;
|
||||
@@ -286,34 +425,46 @@ delimiter ;|
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 2 from information_schema.processlist
|
||||
where info = 'select get_lock(\'ee_16407_5\', 60)';
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_5\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Should have 2 locked processes"
|
||||
select /*4*/ user, host, db, info from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%')
|
||||
order by info;
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_5\', 60)';
|
||||
|
||||
select release_lock('ee_16407_5');
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 1 and user = 'event_scheduler' and info is null
|
||||
from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler')
|
||||
and (info is null or info not like '%processlist%');
|
||||
select count(*) = 0 from information_schema.processlist
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_5\', 60)';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo "Should have 0 processes locked"
|
||||
if(!$fixed_bug41925)
|
||||
{
|
||||
--disable_warnings
|
||||
}
|
||||
select /*5*/ user, host, db, info from information_schema.processlist
|
||||
where (command!='Daemon' || user='event_scheduler') and (info is null or info not like '%processlist%')
|
||||
order by info;
|
||||
select * from events_smode_test order by ev_name, a;
|
||||
where state = 'User lock' and info = 'select get_lock(\'ee_16407_5\', 60)';
|
||||
if(!$fixed_bug41925)
|
||||
{
|
||||
--enable_warnings
|
||||
}
|
||||
|
||||
# Wait till all event executors have finished their work, so that we can be sure
|
||||
# that their changes to events_smode_test are done.
|
||||
--source include/no_running_events.inc
|
||||
|
||||
select * from events_test.events_smode_test order by ev_name, a;
|
||||
--echo "And here we check one more time before we drop the events"
|
||||
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
|
||||
|
||||
drop event ee_16407_5;
|
||||
drop event ee_16407_6;
|
||||
drop procedure ee_16407_5_pendant;
|
||||
drop procedure ee_16407_6_pendant;
|
||||
set global event_scheduler= off;
|
||||
--source include/check_events_off.inc
|
||||
drop table events_smode_test;
|
||||
set sql_mode=@old_sql_mode;
|
||||
#
|
||||
@@ -324,6 +475,7 @@ set sql_mode=@old_sql_mode;
|
||||
# START - 18897: Events: unauthorized action possible with alter event rename
|
||||
#
|
||||
set global event_scheduler=off;
|
||||
--source include/check_events_off.inc
|
||||
--disable_warnings
|
||||
delete from mysql.user where User like 'mysqltest_%';
|
||||
delete from mysql.db where User like 'mysqltest_%';
|
||||
@@ -409,6 +561,7 @@ create function f22830 () returns int return 5;
|
||||
|
||||
select get_lock('ee_22830', 60);
|
||||
set global event_scheduler=on;
|
||||
--source include/running_event_scheduler.inc
|
||||
|
||||
delimiter |;
|
||||
create procedure p22830_wait()
|
||||
@@ -456,6 +609,7 @@ let $wait_condition=
|
||||
--source include/wait_condition.inc
|
||||
|
||||
set global event_scheduler=off;
|
||||
--source include/check_events_off.inc
|
||||
select event_name, event_definition, interval_value, interval_field from information_schema.events order by event_name;
|
||||
drop procedure p22830_wait;
|
||||
drop function f22830;
|
||||
@@ -537,6 +691,7 @@ DROP USER mysqltest_u1@localhost;
|
||||
# For the actual tests of time zones please see events_time_zone.test
|
||||
#
|
||||
SET GLOBAL EVENT_SCHEDULER= OFF;
|
||||
--source include/check_events_off.inc
|
||||
SET @save_time_zone= @@TIME_ZONE;
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
@@ -749,6 +904,7 @@ let $engine=MyISAM;
|
||||
USE test;
|
||||
SHOW GRANTS FOR CURRENT_USER;
|
||||
SET GLOBAL event_scheduler = ON;
|
||||
--source include/running_event_scheduler.inc
|
||||
eval
|
||||
CREATE TABLE events_test.event_log
|
||||
(id int KEY AUTO_INCREMENT, ev_nm char(40), ev_cnt int, ev_tm timestamp)
|
||||
@@ -817,12 +973,14 @@ disconnect e1;
|
||||
DROP EVENT events_test.ev_sched_1823;
|
||||
DROP TABLE events_test.event_log;
|
||||
SET GLOBAL event_scheduler = OFF;
|
||||
--source include/check_events_off.inc
|
||||
|
||||
|
||||
#
|
||||
# Bug#28641 CREATE EVENT with '2038.01.18 03:00:00' let server crash.
|
||||
#
|
||||
SET GLOBAL event_scheduler= ON;
|
||||
--source include/running_event_scheduler.inc
|
||||
DELIMITER |;
|
||||
CREATE EVENT bug28641 ON SCHEDULE AT '2038.01.18 03:00:00'
|
||||
DO BEGIN
|
||||
@@ -831,6 +989,7 @@ END;|
|
||||
|
||||
DELIMITER ;|
|
||||
SET GLOBAL event_scheduler= OFF;
|
||||
--source include/check_events_off.inc
|
||||
DROP EVENT bug28641;
|
||||
|
||||
###########################################################################
|
||||
@@ -955,6 +1114,7 @@ SET GLOBAL READ_ONLY = 1;
|
||||
--echo
|
||||
|
||||
SET GLOBAL EVENT_SCHEDULER = ON;
|
||||
--source include/running_event_scheduler.inc
|
||||
|
||||
--echo
|
||||
|
||||
@@ -980,6 +1140,7 @@ let $wait_condition =
|
||||
--echo
|
||||
|
||||
SET GLOBAL EVENT_SCHEDULER = OFF;
|
||||
--source include/check_events_off.inc
|
||||
|
||||
--echo
|
||||
|
||||
@@ -1056,15 +1217,15 @@ drop event e1;
|
||||
#
|
||||
###########################################################################
|
||||
|
||||
let $wait_condition=
|
||||
select count(*) = 0 from information_schema.processlist
|
||||
where db='events_test' and command = 'Connect' and user=current_user();
|
||||
--source include/wait_condition.inc
|
||||
# Ensure that all event executors have finished their work and cannot harm
|
||||
# the next test.
|
||||
--source include/no_running_events.inc
|
||||
|
||||
DROP DATABASE events_test;
|
||||
# Restore the original state i.e to how it was when test started
|
||||
# (option with no argument in events_bugs-master.opt turns the scheduler on).
|
||||
|
||||
SET GLOBAL event_scheduler= 'ON';
|
||||
--source include/running_event_scheduler.inc
|
||||
SET @@global.concurrent_insert= @concurrent_insert;
|
||||
|
||||
# THIS MUST BE THE LAST LINE in this file.
|
||||
|
@@ -58,8 +58,6 @@ ON COMPLETION PRESERVE
|
||||
DO
|
||||
INSERT INTO table_4 VALUES (1);
|
||||
|
||||
# Wait for the events to fire and check the data afterwards
|
||||
|
||||
# Let event_1 insert at least 4 records into the table
|
||||
let $wait_condition=select count(*) >= 4 from table_1;
|
||||
--source include/wait_condition.inc
|
||||
@@ -85,25 +83,13 @@ let $wait_condition=select count(*) = 0 from information_schema.events
|
||||
where event_name='event_4' and status='enabled';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
let $wait_condition=SELECT SUM(a) >= 4 FROM table_1;
|
||||
source include/wait_condition.inc;
|
||||
SELECT IF(SUM(a) >= 4, 'OK', 'ERROR') FROM table_1;
|
||||
|
||||
# In case of a testing box under heavy load it cannot be guaranteed that
|
||||
# it is really often enough checked if event_2 has to be executed.
|
||||
# -> Bug#39854 events_scheduling fails sporadically on pushbuild
|
||||
# Therefore we lowered here the original expectation of 5 to 4.
|
||||
let $wait_condition=SELECT SUM(a) >= 4 FROM table_2;
|
||||
source include/wait_condition.inc;
|
||||
SELECT IF(SUM(a) >= 4, 'OK', 'ERROR') FROM table_2;
|
||||
|
||||
let $wait_condition=SELECT SUM(a) >= 1 FROM table_3;
|
||||
source include/wait_condition.inc;
|
||||
SELECT IF(SUM(a) >= 1, 'OK', 'ERROR') FROM table_3;
|
||||
|
||||
let $wait_condition=SELECT SUM(a) >= 1 FROM table_4;
|
||||
source include/wait_condition.inc;
|
||||
SELECT IF(SUM(a) >= 1, 'OK', 'ERROR') FROM table_4;
|
||||
#
|
||||
# On a busy system the scheduler may skip execution of events,
|
||||
# we can't reliably expect that the data in a table to be modified
|
||||
# by an event will be exact. Thus we do not SELECT from the tables
|
||||
# in this test. See also
|
||||
# Bug#39854 events_scheduling fails sporadically on pushbuild
|
||||
#
|
||||
|
||||
SELECT IF(TIME_TO_SEC(TIMEDIFF(ENDS,STARTS))=6, 'OK', 'ERROR')
|
||||
FROM INFORMATION_SCHEMA.EVENTS
|
||||
|
@@ -445,3 +445,12 @@ EXPLAIN SELECT * FROM t1 FORCE INDEX(b)
|
||||
WHERE MATCH(a) AGAINST('test' IN BOOLEAN MODE) AND b=1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# BUG#37245 - Full text search problem
|
||||
#
|
||||
CREATE TABLE t1(a CHAR(10));
|
||||
INSERT INTO t1 VALUES('aaa15');
|
||||
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa16' IN BOOLEAN MODE) FROM t1;
|
||||
SELECT MATCH(a) AGAINST('aaa1* aaa14 aaa15 aaa16' IN BOOLEAN MODE) FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
1
mysql-test/t/fulltext_plugin-master.opt
Normal file
1
mysql-test/t/fulltext_plugin-master.opt
Normal file
@@ -0,0 +1 @@
|
||||
$SIMPLE_PARSER_OPT
|
10
mysql-test/t/fulltext_plugin.test
Normal file
10
mysql-test/t/fulltext_plugin.test
Normal file
@@ -0,0 +1,10 @@
|
||||
--source include/have_simple_parser.inc
|
||||
|
||||
#
|
||||
# BUG#39746 - Debug flag breaks struct definition (server crash)
|
||||
#
|
||||
INSTALL PLUGIN simple_parser SONAME 'mypluglib.so';
|
||||
CREATE TABLE t1(a TEXT, b TEXT, FULLTEXT(a) WITH PARSER simple_parser);
|
||||
ALTER TABLE t1 ADD FULLTEXT(b) WITH PARSER simple_parser;
|
||||
DROP TABLE t1;
|
||||
UNINSTALL PLUGIN simple_parser;
|
@@ -150,4 +150,18 @@ FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #40761: Assert on sum func on IF(..., CAST(longtext AS UNSIGNED), signed)
|
||||
# (was: LEFT JOIN on inline view crashes server)
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (c LONGTEXT);
|
||||
INSERT INTO t1 VALUES(1), (2), (3), (4), ('12345678901234567890');
|
||||
|
||||
SELECT * FROM (SELECT MAX(IF(1, CAST(c AS UNSIGNED), 0)) FROM t1) AS te;
|
||||
SELECT * FROM (SELECT MAX(IFNULL(CAST(c AS UNSIGNED), 0)) FROM t1) AS te;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@@ -426,4 +426,17 @@ select * from t1 where NOT id in (select null union all select 1);
|
||||
select * from t1 where NOT id in (null, 1);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #41363: crash of mysqld on windows with aggregate in case
|
||||
#
|
||||
|
||||
CREATE TABLE t1(c0 INTEGER, c1 INTEGER, c2 INTEGER);
|
||||
INSERT INTO t1 VALUES(1, 1, 1), (1, 1, 1);
|
||||
|
||||
SELECT CASE AVG (c0) WHEN c1 * c2 THEN 1 END FROM t1;
|
||||
SELECT CASE c1 * c2 WHEN SUM(c0) THEN 1 WHEN AVG(c0) THEN 2 END FROM t1;
|
||||
SELECT CASE c1 WHEN c1 + 1 THEN 1 END, ABS(AVG(c0)) FROM t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@@ -1263,4 +1263,14 @@ CREATE VIEW v1 AS SELECT CHAR(0x414243) as c1;
|
||||
SELECT HEX(c1) from v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
#
|
||||
# Bug #35558 Wrong server metadata blows up the client
|
||||
#
|
||||
create table t1(a float);
|
||||
insert into t1 values (1.33);
|
||||
--enable_metadata
|
||||
select format(a, 2) from t1;
|
||||
--disable_metadata
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@@ -304,6 +304,15 @@ select unix_timestamp('1970-01-01 03:00:01');
|
||||
# check bad date, close to the boundary (we cut them off in the very end)
|
||||
select unix_timestamp('2038-01-19 07:14:07');
|
||||
|
||||
#
|
||||
# Bug #28759: DAYNAME() and MONTHNAME() return binary string
|
||||
#
|
||||
|
||||
SELECT CHARSET(DAYNAME(19700101));
|
||||
SELECT CHARSET(MONTHNAME(19700101));
|
||||
SELECT LOWER(DAYNAME(19700101));
|
||||
SELECT LOWER(MONTHNAME(19700101));
|
||||
SELECT COERCIBILITY(MONTHNAME('1970-01-01')),COERCIBILITY(DAYNAME('1970-01-01'));
|
||||
|
||||
#
|
||||
# Test types from + INTERVAL
|
||||
|
@@ -1295,6 +1295,13 @@ drop view v1;
|
||||
drop table test;
|
||||
drop function test_function;
|
||||
|
||||
#
|
||||
# Bug#41456 SET PASSWORD hates CURRENT_USER()
|
||||
#
|
||||
SELECT CURRENT_USER();
|
||||
SET PASSWORD FOR CURRENT_USER() = PASSWORD("admin");
|
||||
SET PASSWORD FOR CURRENT_USER() = PASSWORD("");
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
@@ -1387,4 +1387,11 @@ select a.VARIABLE_VALUE - b.VARIABLE_VALUE from t0 b, information_schema.global_
|
||||
where a.VARIABLE_NAME = b.VARIABLE_NAME;
|
||||
drop table t0;
|
||||
|
||||
#
|
||||
# Bug#35275 INFORMATION_SCHEMA.TABLES.CREATE_OPTIONS omits KEY_BLOCK_SIZE
|
||||
#
|
||||
CREATE TABLE t1(a INT) KEY_BLOCK_SIZE=1;
|
||||
SELECT CREATE_OPTIONS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1';
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests.
|
||||
|
@@ -131,3 +131,262 @@ SELECT c1 FROM t1;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug 38839
|
||||
# Reset the last value generated at end of statement
|
||||
#
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (NULL, 1);
|
||||
DELETE FROM t1 WHERE c1 = 1;
|
||||
INSERT INTO t1 VALUES (2,1);
|
||||
INSERT INTO t1 VALUES (NULL,8);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
# Bug 38839 -- same as above but for multi value insert
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, c2 INT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (NULL, 1);
|
||||
DELETE FROM t1 WHERE c1 = 1;
|
||||
INSERT INTO t1 VALUES (2,1), (NULL, 8);
|
||||
INSERT INTO t1 VALUES (NULL,9);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Test changes to AUTOINC next value calculation
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (NULL),(5),(NULL);
|
||||
INSERT INTO t1 VALUES (250),(NULL);
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 VALUES (1000);
|
||||
SET @@INSERT_ID=400;
|
||||
INSERT INTO t1 VALUES(NULL),(NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test with SIGNED INT column, by inserting a 0 for the first column value
|
||||
# 0 is treated in the same was NULL.
|
||||
# Reset the AUTOINC session variables
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES(0);
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
||||
INSERT INTO t1 VALUES (-1), (NULL),(2),(NULL);
|
||||
INSERT INTO t1 VALUES (250),(NULL);
|
||||
SELECT * FROM t1;
|
||||
SET @@INSERT_ID=400;
|
||||
# Duplicate error expected here for autoinc_lock_mode != TRADITIONAL
|
||||
-- error ER_DUP_ENTRY,1062
|
||||
INSERT INTO t1 VALUES(NULL),(NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test with SIGNED INT column
|
||||
# Reset the AUTOINC session variables
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 INT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES(-1);
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
INSERT INTO t1 VALUES (-2), (NULL),(2),(NULL);
|
||||
INSERT INTO t1 VALUES (250),(NULL);
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 VALUES (1000);
|
||||
SET @@INSERT_ID=400;
|
||||
INSERT INTO t1 VALUES(NULL),(NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test with UNSIGNED INT column, single insert
|
||||
# The sign in the value is ignored and a new column value is generated
|
||||
# Reset the AUTOINC session variables
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES(-1);
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
INSERT INTO t1 VALUES (-2);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
INSERT INTO t1 VALUES (250);
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 VALUES (1000);
|
||||
SET @@INSERT_ID=400;
|
||||
INSERT INTO t1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES(NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# Test with UNSIGNED INT column, multi-value inserts
|
||||
# The sign in the value is ignored and a new column value is generated
|
||||
# Reset the AUTOINC session variables
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 INT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES(-1);
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=100, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
INSERT INTO t1 VALUES (-2),(NULL),(2),(NULL);
|
||||
INSERT INTO t1 VALUES (250),(NULL);
|
||||
SELECT * FROM t1;
|
||||
INSERT INTO t1 VALUES (1000);
|
||||
SET @@INSERT_ID=400;
|
||||
# Duplicate error expected here for autoinc_lock_mode != TRADITIONAL
|
||||
-- error ER_DUP_ENTRY,1062
|
||||
INSERT INTO t1 VALUES(NULL),(NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Check for overflow handling when increment is > 1
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 BIGINT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
# TODO: Fix the autoinc init code
|
||||
# We have to do this because of a bug in the AUTOINC init code.
|
||||
INSERT INTO t1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES (9223372036854775794); #-- 2^63 - 14
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=2, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
# This should just fit
|
||||
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Check for overflow handling when increment and offser are > 1
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
# TODO: Fix the autoinc init code
|
||||
# We have to do this because of a bug in the AUTOINC init code.
|
||||
INSERT INTO t1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES (18446744073709551603); #-- 2^64 - 13
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=2, @@SESSION.AUTO_INCREMENT_OFFSET=10;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
# This should fail because of overflow but it doesn't, it seems to be
|
||||
# a MySQL server bug. It wraps around to 0 for the last value.
|
||||
# See MySQL Bug# 39828
|
||||
#
|
||||
# Instead of wrapping around, it asserts when MySQL is compiled --with-debug
|
||||
# (see sql/handler.cc:handler::update_auto_increment()). Don't test for
|
||||
# overflow until Bug #39828 is fixed.
|
||||
#
|
||||
# Since this asserts when compiled --with-debug, we can't properly test this
|
||||
# until Bug #39828 is fixed. For now, this test is meaningless.
|
||||
#if Bug #39828 is fixed
|
||||
#INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||
#else
|
||||
INSERT INTO t1 VALUES (NULL),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||
#endif
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Check for overflow handling when increment and offset are odd numbers
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
# TODO: Fix the autoinc init code
|
||||
# We have to do this because of a bug in the AUTOINC init code.
|
||||
INSERT INTO t1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES (18446744073709551603); #-- 2^64 - 13
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=5, @@SESSION.AUTO_INCREMENT_OFFSET=7;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
# This should fail because of overflow but it doesn't. It fails with
|
||||
# a duplicate entry message because of a MySQL server bug, it wraps
|
||||
# around. See MySQL Bug# 39828, once MySQL fix the bug we can replace
|
||||
# the ER_DUP_ENTRY, 1062 below with the appropriate error message
|
||||
#
|
||||
# Since this asserts when compiled --with-debug, we can't properly test this
|
||||
# until Bug #39828 is fixed. For now, this test is meaningless.
|
||||
#if Bug #39828 is fixed
|
||||
# Still need to fix this error code, error should mention overflow
|
||||
#-- error ER_DUP_ENTRY,1062
|
||||
#INSERT INTO t1 VALUES (NULL),(NULL), (NULL);
|
||||
#else
|
||||
INSERT INTO t1 VALUES (NULL),(NULL);
|
||||
#endif
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
# Check for overflow handling when increment and offset are odd numbers
|
||||
# and check for large -ve numbers
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 BIGINT AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
# TODO: Fix the autoinc init code
|
||||
# We have to do this because of a bug in the AUTOINC init code.
|
||||
INSERT INTO t1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES(-9223372036854775806); #-- -2^63 + 2
|
||||
INSERT INTO t1 VALUES(-9223372036854775807); #-- -2^63 + 1
|
||||
INSERT INTO t1 VALUES(-9223372036854775808); #-- -2^63
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=3, @@SESSION.AUTO_INCREMENT_OFFSET=3;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
INSERT INTO t1 VALUES (NULL),(NULL), (NULL);
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Check for overflow handling when increment and offset are very
|
||||
# large numbers 2^60
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1, @@SESSION.AUTO_INCREMENT_OFFSET=1;
|
||||
SET @@INSERT_ID=1;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (c1 BIGINT UNSIGNED AUTO_INCREMENT, PRIMARY KEY(c1)) ENGINE=InnoDB;
|
||||
# TODO: Fix the autoinc init code
|
||||
# We have to do this because of a bug in the AUTOINC init code.
|
||||
INSERT INTO t1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES (18446744073709551610); #-- 2^64 - 2
|
||||
SELECT * FROM t1;
|
||||
SET @@SESSION.AUTO_INCREMENT_INCREMENT=1152921504606846976, @@SESSION.AUTO_INCREMENT_OFFSET=1152921504606846976;
|
||||
SHOW VARIABLES LIKE "%auto_inc%";
|
||||
# This should fail because of overflow but it doesn't. It wraps around
|
||||
# and the autoinc values look bogus too.
|
||||
# See MySQL Bug# 39828, once MySQL fix the bug we can enable the error
|
||||
# code expected test.
|
||||
# -- error ER_AUTOINC_READ_FAILED,1467
|
||||
#
|
||||
# Since this asserts when compiled --with-debug, we can't properly test this
|
||||
# until Bug #39828 is fixed. For now, this test is meaningless.
|
||||
#if Bug #39828 is fixed
|
||||
#-- error ER_AUTOINC_READ_FAILED,1467
|
||||
#INSERT INTO t1 VALUES (NULL),(NULL);
|
||||
#else
|
||||
INSERT INTO t1 VALUES (NULL);
|
||||
#endif
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
@@ -2477,6 +2477,7 @@ SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 't2';
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
# End 34920 test
|
||||
#
|
||||
# Bug #29507 TRUNCATE shows to many rows effected
|
||||
#
|
||||
CONNECTION default;
|
||||
@@ -2493,6 +2494,36 @@ TRUNCATE TABLE t1;
|
||||
--disable_info
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#35537 Innodb doesn't increment handler_update and handler_delete.
|
||||
#
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
|
||||
CONNECT (c1,localhost,root,,);
|
||||
|
||||
DROP TABLE IF EXISTS bug35537;
|
||||
CREATE TABLE bug35537 (
|
||||
c1 int
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
INSERT INTO bug35537 VALUES (1);
|
||||
|
||||
-- enable_result_log
|
||||
|
||||
SHOW SESSION STATUS LIKE 'Handler_update%';
|
||||
SHOW SESSION STATUS LIKE 'Handler_delete%';
|
||||
|
||||
UPDATE bug35537 SET c1 = 2 WHERE c1 = 1;
|
||||
DELETE FROM bug35537 WHERE c1 = 2;
|
||||
|
||||
SHOW SESSION STATUS LIKE 'Handler_update%';
|
||||
SHOW SESSION STATUS LIKE 'Handler_delete%';
|
||||
|
||||
DROP TABLE bug35537;
|
||||
|
||||
DISCONNECT c1;
|
||||
CONNECTION default;
|
||||
|
||||
#######################################################################
|
||||
# #
|
||||
# Please, DO NOT TOUCH this file as well as the innodb.result file. #
|
||||
|
75
mysql-test/t/innodb_bug38231.test
Normal file
75
mysql-test/t/innodb_bug38231.test
Normal file
@@ -0,0 +1,75 @@
|
||||
#
|
||||
# Bug#38231 Innodb crash in lock_reset_all_on_table() on TRUNCATE + LOCK / UNLOCK
|
||||
# http://bugs.mysql.com/38231
|
||||
#
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
SET storage_engine=InnoDB;
|
||||
|
||||
# we care only that the following SQL commands do not crash the server
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
|
||||
DROP TABLE IF EXISTS bug38231;
|
||||
CREATE TABLE bug38231 (a INT);
|
||||
|
||||
-- connect (con1,localhost,root,,)
|
||||
-- connect (con2,localhost,root,,)
|
||||
|
||||
-- connection con1
|
||||
SET autocommit=0;
|
||||
LOCK TABLE bug38231 WRITE;
|
||||
|
||||
-- connection con2
|
||||
SET autocommit=0;
|
||||
-- send
|
||||
LOCK TABLE bug38231 WRITE;
|
||||
|
||||
-- connection default
|
||||
-- send
|
||||
TRUNCATE TABLE bug38231;
|
||||
|
||||
-- connection con1
|
||||
# give time to TRUNCATE and others to be executed; without sleep, sometimes
|
||||
# UNLOCK executes before TRUNCATE
|
||||
# TODO: Replace with wait_condition once possible under embedded server.
|
||||
-- sleep 0.2
|
||||
# this crashes the server if the bug is present
|
||||
UNLOCK TABLES;
|
||||
|
||||
# clean up
|
||||
|
||||
-- connection con2
|
||||
-- reap
|
||||
UNLOCK TABLES;
|
||||
|
||||
-- connection default
|
||||
-- reap
|
||||
-- disconnect con1
|
||||
-- disconnect con2
|
||||
|
||||
# test that TRUNCATE works with with row-level locks
|
||||
|
||||
-- enable_query_log
|
||||
-- enable_result_log
|
||||
|
||||
INSERT INTO bug38231 VALUES (1), (10), (300);
|
||||
|
||||
-- connect (con4,localhost,root,,)
|
||||
|
||||
-- connection con4
|
||||
SET autocommit=0;
|
||||
SELECT * FROM bug38231 FOR UPDATE;
|
||||
|
||||
-- connection default
|
||||
TRUNCATE TABLE bug38231;
|
||||
|
||||
-- connection con4
|
||||
COMMIT;
|
||||
|
||||
-- connection default
|
||||
|
||||
-- disconnect con4
|
||||
|
||||
DROP TABLE bug38231;
|
1
mysql-test/t/innodb_bug39438-master.opt
Normal file
1
mysql-test/t/innodb_bug39438-master.opt
Normal file
@@ -0,0 +1 @@
|
||||
--innodb-file-per-table=1
|
27
mysql-test/t/innodb_bug39438.test
Normal file
27
mysql-test/t/innodb_bug39438.test
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# Bug#39438 Testcase for Bug#39436 crashes on 5.1 in fil_space_get_latch
|
||||
# http://bugs.mysql.com/39438
|
||||
#
|
||||
# This test must be run with innodb_file_per_table=1 because the crash
|
||||
# only occurs if that option is turned on and DISCARD TABLESPACE only
|
||||
# works with innodb_file_per_table.
|
||||
#
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
SET storage_engine=InnoDB;
|
||||
|
||||
# we care only that the following SQL commands do not crash the server
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
|
||||
DROP TABLE IF EXISTS bug39438;
|
||||
|
||||
CREATE TABLE bug39438 (id INT) ENGINE=INNODB;
|
||||
|
||||
ALTER TABLE bug39438 DISCARD TABLESPACE;
|
||||
|
||||
# this crashes the server if the bug is present
|
||||
SHOW TABLE STATUS;
|
||||
|
||||
DROP TABLE bug39438;
|
@@ -53,3 +53,135 @@ CREATE TABLE t1 (a char(50)) ENGINE=InnoDB;
|
||||
CREATE INDEX i1 on t1 (a(3));
|
||||
SELECT * FROM t1 WHERE a = 'abcde';
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #37742: HA_EXTRA_KEYREAD flag is set when key contains only prefix of
|
||||
# requested column
|
||||
#
|
||||
|
||||
CREATE TABLE foo (a int, b int, c char(10),
|
||||
PRIMARY KEY (c(3)),
|
||||
KEY b (b)
|
||||
) engine=innodb;
|
||||
|
||||
CREATE TABLE foo2 (a int, b int, c char(10),
|
||||
PRIMARY KEY (c),
|
||||
KEY b (b)
|
||||
) engine=innodb;
|
||||
|
||||
CREATE TABLE bar (a int, b int, c char(10),
|
||||
PRIMARY KEY (c(3)),
|
||||
KEY b (b)
|
||||
) engine=myisam;
|
||||
|
||||
INSERT INTO foo VALUES
|
||||
(1,2,'abcdefghij'), (2,3,''), (3,4,'klmnopqrst'),
|
||||
(4,5,'uvwxyz'), (5,6,'meotnsyglt'), (4,5,'asfdewe');
|
||||
|
||||
INSERT INTO bar SELECT * FROM foo;
|
||||
INSERT INTO foo2 SELECT * FROM foo;
|
||||
|
||||
--query_vertical EXPLAIN SELECT c FROM bar WHERE b>2;
|
||||
--query_vertical EXPLAIN SELECT c FROM foo WHERE b>2;
|
||||
--query_vertical EXPLAIN SELECT c FROM foo2 WHERE b>2;
|
||||
|
||||
--query_vertical EXPLAIN SELECT c FROM bar WHERE c>2;
|
||||
--query_vertical EXPLAIN SELECT c FROM foo WHERE c>2;
|
||||
--query_vertical EXPLAIN SELECT c FROM foo2 WHERE c>2;
|
||||
|
||||
DROP TABLE foo, bar, foo2;
|
||||
|
||||
#
|
||||
# Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,t3,t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
--enable_warnings
|
||||
|
||||
DELIMITER |;
|
||||
CREATE FUNCTION f1() RETURNS VARCHAR(250)
|
||||
BEGIN
|
||||
return 'hhhhhhh' ;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
CREATE TABLE t1 (a VARCHAR(20), b VARCHAR(20), c VARCHAR(20)) ENGINE=INNODB;
|
||||
|
||||
BEGIN WORK;
|
||||
|
||||
CREATE TEMPORARY TABLE t2 (a VARCHAR(20), b VARCHAR(20), c varchar(20)) ENGINE=INNODB;
|
||||
CREATE TEMPORARY TABLE t3 LIKE t2;
|
||||
|
||||
INSERT INTO t1 VALUES ('a','b',NULL),('c','d',NULL),('e','f',NULL);
|
||||
|
||||
SET @stmt := CONCAT('INSERT INTO t2 SELECT tbl.a, tbl.b, f1()',' FROM t1 tbl');
|
||||
PREPARE stmt1 FROM @stmt;
|
||||
|
||||
SET @stmt := CONCAT('INSERT INTO t3', ' SELECT * FROM t2');
|
||||
PREPARE stmt3 FROM @stmt;
|
||||
|
||||
EXECUTE stmt1;
|
||||
|
||||
COMMIT;
|
||||
|
||||
DEALLOCATE PREPARE stmt1;
|
||||
DEALLOCATE PREPARE stmt3;
|
||||
|
||||
DROP TABLE t1,t3,t2;
|
||||
DROP FUNCTION f1;
|
||||
|
||||
#
|
||||
# Bug#37016: TRUNCATE TABLE removes some rows but not all
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
||||
CREATE TABLE t2 (id INT PRIMARY KEY,
|
||||
t1_id INT, INDEX par_ind (t1_id),
|
||||
FOREIGN KEY (t1_id) REFERENCES t1(id)) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
INSERT INTO t2 VALUES (3,2);
|
||||
|
||||
SET AUTOCOMMIT = 0;
|
||||
|
||||
START TRANSACTION;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
TRUNCATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
COMMIT;
|
||||
SELECT * FROM t1;
|
||||
|
||||
START TRANSACTION;
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
TRUNCATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
ROLLBACK;
|
||||
SELECT * FROM t1;
|
||||
|
||||
SET AUTOCOMMIT = 1;
|
||||
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1;
|
||||
COMMIT;
|
||||
|
||||
--error ER_ROW_IS_REFERENCED_2
|
||||
TRUNCATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
DELETE FROM t2 WHERE id = 3;
|
||||
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1;
|
||||
TRUNCATE TABLE t1;
|
||||
ROLLBACK;
|
||||
SELECT * FROM t1;
|
||||
TRUNCATE TABLE t2;
|
||||
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
1
mysql-test/t/innodb_mysql_rbk-master.opt
Normal file
1
mysql-test/t/innodb_mysql_rbk-master.opt
Normal file
@@ -0,0 +1 @@
|
||||
--innodb_lock_wait_timeout=1 --innodb_rollback_on_timeout=1
|
35
mysql-test/t/innodb_mysql_rbk.test
Normal file
35
mysql-test/t/innodb_mysql_rbk.test
Normal file
@@ -0,0 +1,35 @@
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
#
|
||||
# Bug #41453: Assertion `m_status == DA_ERROR' failed in
|
||||
# Diagnostics_area::sql_errno
|
||||
#
|
||||
|
||||
CREATE TABLE t1(a INT, b INT NOT NULL, PRIMARY KEY (a)) ENGINE=innodb
|
||||
DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7);
|
||||
CONNECT (con1,localhost,root,,);
|
||||
CONNECT (con2,localhost,root,,);
|
||||
|
||||
CONNECTION con1;
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1 WHERE b=3 LIMIT 1 FOR UPDATE;
|
||||
CONNECTION con2;
|
||||
START TRANSACTION;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
UPDATE t1 SET b=b+12 WHERE a > 2 ORDER BY a;
|
||||
ROLLBACK;
|
||||
|
||||
CONNECTION con1;
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1 WHERE b=3 LIMIT 1 FOR UPDATE;
|
||||
CONNECTION con2;
|
||||
START TRANSACTION;
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
UPDATE t1 SET b=10 WHERE a > 1 ORDER BY a;
|
||||
SELECT * FROM t1 WHERE b = 10;
|
||||
|
||||
CONNECTION default;
|
||||
DISCONNECT con1;
|
||||
DISCONNECT con2;
|
||||
DROP TABLE t1;
|
@@ -1 +0,0 @@
|
||||
--log-bin=test.log
|
@@ -20,6 +20,8 @@
|
||||
# #
|
||||
###############################################################################
|
||||
|
||||
source include/have_log_bin.inc;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
@@ -46,10 +48,10 @@ connect (test_con1,localhost,tt,,);
|
||||
connection test_con1;
|
||||
|
||||
SELECT @@log_bin_trust_function_creators;
|
||||
SELECT @@sql_log_bin;
|
||||
|
||||
--echo ## Creating new function f1 ##
|
||||
--echo ## Creating new function f1 fails because no DETERMINISTIC ###
|
||||
delimiter |;
|
||||
--error ER_BINLOG_UNSAFE_ROUTINE
|
||||
CREATE FUNCTION f1(a INT) RETURNS INT
|
||||
BEGIN
|
||||
IF (a < 3) THEN
|
||||
@@ -59,8 +61,30 @@ BEGIN
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
--echo 'Bug: Create Function should give error here because non-super user';
|
||||
--echo 'is creating function here';
|
||||
--echo ## Creating new function f1 fails because non-super user ##
|
||||
delimiter |;
|
||||
--error ER_BINLOG_CREATE_ROUTINE_NEED_SUPER
|
||||
CREATE FUNCTION f1(a INT) RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
IF (a < 3) THEN
|
||||
INSERT INTO t2 VALUES (a);
|
||||
END IF;
|
||||
RETURN 1;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
connection default;
|
||||
|
||||
--echo ## Creating new function f1 succeeds ##
|
||||
delimiter |;
|
||||
CREATE FUNCTION f1(a INT) RETURNS INT DETERMINISTIC
|
||||
BEGIN
|
||||
IF (a < 3) THEN
|
||||
INSERT INTO t2 VALUES (a);
|
||||
END IF;
|
||||
RETURN 1;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
--echo ## Creating new table t1 ##
|
||||
CREATE TABLE t1 (a INT);
|
||||
|
@@ -1,14 +1,29 @@
|
||||
# hhunger 08.22.2008: with check-testcases differences due to bug#38889 using
|
||||
# slow_query_log_file or general_log_file
|
||||
### t/log_state.test ###
|
||||
#
|
||||
# This test suffers from server
|
||||
# Bug#38124 "general_log_file" variable silently unset when using expression
|
||||
# In short:
|
||||
# SET GLOBAL general_log_file = @<whatever>
|
||||
# SET GLOBAL slow_query_log = @<whatever>
|
||||
# cause that the value of these server system variables is set to default
|
||||
# instead of the assigned values. There comes no error message or warning.
|
||||
# If this bug is fixed please
|
||||
# 1. try this test with "let $fixed_bug38124 = 0;"
|
||||
# 2. remove all workarounds if 1. was successful.
|
||||
let $fixed_bug38124 = 0;
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_csv.inc
|
||||
|
||||
# Several subtests modify global variables. Save the initial values only here,
|
||||
# but reset to the initial values per subtest.
|
||||
SET @old_general_log= @@global.general_log;
|
||||
SET @old_general_log_file= @@global.general_log_file;
|
||||
SET @old_slow_query_log= @@global.slow_query_log;
|
||||
SET @old_slow_query_log_file= @@global.slow_query_log_file;
|
||||
|
||||
|
||||
--disable_ps_protocol
|
||||
# save default value to set them back at the end of the test
|
||||
set @start_general_log= @@global.general_log;
|
||||
set @start_slow_query_log= @@global.slow_query_log;
|
||||
set @start_general_log_file= @@global.general_log_file;
|
||||
|
||||
set global general_log= OFF;
|
||||
truncate table mysql.general_log;
|
||||
@@ -31,20 +46,32 @@ show global variables
|
||||
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
|
||||
Variable_name = 'general_log' or Variable_name = 'slow_query_log';
|
||||
|
||||
--echo # Establish connection con1 (user=root)
|
||||
connect (con1,localhost,root,,);
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
set session long_query_time=1;
|
||||
select sleep(2);
|
||||
# Please increase @long_query_time if the corresponding selects show an
|
||||
# additional unexpected entry like
|
||||
# start_time ... sql_text
|
||||
# TIMESTAMP ... set session long_query_time=...
|
||||
# (Bug#40377 sporadic pushbuild failure in log_state: result mismatch)
|
||||
--replace_result 2 <long_query_time>
|
||||
set @long_query_time = 2;
|
||||
set session long_query_time = @long_query_time;
|
||||
select sleep(@long_query_time + 1);
|
||||
--replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME
|
||||
select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%';
|
||||
--echo # Switch to connection default
|
||||
connection default;
|
||||
|
||||
set global slow_query_log= ON;
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
set session long_query_time=1;
|
||||
select sleep(2);
|
||||
set session long_query_time = @long_query_time;
|
||||
select sleep(@long_query_time + 1);
|
||||
--replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME
|
||||
select * from mysql.slow_log where sql_text NOT LIKE '%slow_log%';
|
||||
--echo # Switch to connection default
|
||||
connection default;
|
||||
show global variables
|
||||
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
|
||||
@@ -80,7 +107,7 @@ show variables like 'log_output';
|
||||
|
||||
# Can't set general_log_file to a non existing file
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
set global general_log_file='/not exiting path/log.master';
|
||||
set global general_log_file='/not existing path/log.master';
|
||||
|
||||
# Can't set general_log_file to a directory
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
@@ -134,17 +161,30 @@ drop table t1;
|
||||
--replace_column 1 TIMESTAMP 2 USER_HOST 3 #
|
||||
select * from mysql.general_log;
|
||||
|
||||
# Reset to initial values
|
||||
SET @@global.general_log = @old_general_log;
|
||||
SET @@global.general_log_file = @old_general_log_file;
|
||||
SET @@global.slow_query_log = @old_slow_query_log;
|
||||
SET @@global.slow_query_log_file = @old_slow_query_log_file;
|
||||
if(!$fixed_bug38124)
|
||||
{
|
||||
--disable_query_log
|
||||
let $my_var = `SELECT @old_general_log_file`;
|
||||
eval SET @@global.general_log_file = '$my_var';
|
||||
let $my_var = `SELECT @old_slow_query_log_file`;
|
||||
eval SET @@global.slow_query_log_file = '$my_var';
|
||||
--enable_query_log
|
||||
}
|
||||
|
||||
|
||||
###########################################################################
|
||||
|
||||
#
|
||||
# Bug#29129 (Resetting general_log while the GLOBAL READ LOCK is set causes
|
||||
# a deadlock)
|
||||
|
||||
# save state
|
||||
|
||||
SET @old_general_log_state = @@global.general_log;
|
||||
SET @old_slow_log_state = @@global.slow_query_log;
|
||||
# a deadlock)
|
||||
#
|
||||
|
||||
# Test ON->OFF transition under a GLOBAL READ LOCK
|
||||
|
||||
SET GLOBAL general_log = ON;
|
||||
SET GLOBAL slow_query_log = ON;
|
||||
|
||||
@@ -156,7 +196,6 @@ SET GLOBAL slow_query_log = OFF;
|
||||
UNLOCK TABLES;
|
||||
|
||||
# Test OFF->ON transition under a GLOBAL READ LOCK
|
||||
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
|
||||
SET GLOBAL general_log = ON;
|
||||
@@ -165,7 +204,6 @@ SET GLOBAL slow_query_log = ON;
|
||||
UNLOCK TABLES;
|
||||
|
||||
# Test ON->OFF transition under a GLOBAL READ_ONLY
|
||||
|
||||
SET GLOBAL READ_ONLY = ON;
|
||||
|
||||
SET GLOBAL general_log = OFF;
|
||||
@@ -174,7 +212,6 @@ SET GLOBAL slow_query_log = OFF;
|
||||
SET GLOBAL READ_ONLY = OFF;
|
||||
|
||||
# Test OFF->ON transition under a GLOBAL READ_ONLY
|
||||
|
||||
SET GLOBAL READ_ONLY = ON;
|
||||
|
||||
SET GLOBAL general_log = ON;
|
||||
@@ -182,17 +219,18 @@ SET GLOBAL slow_query_log = ON;
|
||||
|
||||
SET GLOBAL READ_ONLY = OFF;
|
||||
|
||||
# Restore state
|
||||
# Reset to initial values
|
||||
SET GLOBAL general_log = @old_general_log;
|
||||
SET GLOBAL slow_query_log = @old_slow_query_log;
|
||||
|
||||
SET GLOBAL general_log = @old_general_log_state;
|
||||
SET GLOBAL slow_query_log = @old_slow_log_state;
|
||||
|
||||
###########################################################################
|
||||
|
||||
#
|
||||
# Bug #29131: SHOW VARIABLES reports variable 'log' but SET doesn't recognize it
|
||||
# Bug#29131: SHOW VARIABLES reports variable 'log' but SET doesn't recognize it
|
||||
#
|
||||
|
||||
SET @old_general_log_state = @@global.general_log;
|
||||
SET @old_slow_log_state = @@global.slow_query_log;
|
||||
SET GLOBAL general_log = ON;
|
||||
|
||||
SHOW VARIABLES LIKE 'general_log';
|
||||
SHOW VARIABLES LIKE 'log';
|
||||
@@ -218,39 +256,46 @@ SHOW VARIABLES LIKE 'slow_query_log';
|
||||
SHOW VARIABLES LIKE 'log_slow_queries';
|
||||
SELECT @@slow_query_log, @@log_slow_queries;
|
||||
|
||||
SET GLOBAL general_log = @old_general_log_state;
|
||||
SET GLOBAL slow_query_log = @old_slow_log_state;
|
||||
SET GLOBAL general_log = @old_general_log;
|
||||
SET GLOBAL slow_query_log = @old_slow_query_log;
|
||||
|
||||
|
||||
###########################################################################
|
||||
|
||||
#
|
||||
# Bug #31604: server crash when setting slow_query_log_file/general_log_file
|
||||
# Bug#31604: server crash when setting slow_query_log_file/general_log_file
|
||||
#
|
||||
set @old_general_log_file= @@global.general_log_file;
|
||||
set @old_slow_query_log_file= @@global.slow_query_log_file;
|
||||
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
set global general_log_file= concat('/not exiting path/log.maste', 'r');
|
||||
SET GLOBAL general_log_file= CONCAT('/not existing path/log.maste', 'r');
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
set global general_log_file= NULL;
|
||||
SET GLOBAL general_log_file= NULL;
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
set global slow_query_log_file= concat('/not exiting path/log.maste', 'r');
|
||||
SET GLOBAL slow_query_log_file= CONCAT('/not existing path/log.maste', 'r');
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
set global slow_query_log_file= NULL;
|
||||
SET GLOBAL slow_query_log_file= NULL;
|
||||
|
||||
set global general_log_file= @old_general_log_file;
|
||||
set global slow_query_log_file= @old_slow_query_log_file;
|
||||
# Reset to initial values in case a setting above was successful.
|
||||
SET GLOBAL general_log_file= @old_general_log_file;
|
||||
SET GLOBAL slow_query_log_file= @old_slow_query_log_file;
|
||||
if(!$fixed_bug38124)
|
||||
{
|
||||
--disable_query_log
|
||||
let $my_var = `SELECT @old_general_log_file`;
|
||||
eval SET @@global.general_log_file = '$my_var';
|
||||
let $my_var = `SELECT @old_slow_query_log_file`;
|
||||
eval SET @@global.slow_query_log_file = '$my_var';
|
||||
--enable_query_log
|
||||
}
|
||||
|
||||
###########################################################################
|
||||
|
||||
--echo
|
||||
--echo # --
|
||||
--echo # -- Bug#32748: Inconsistent handling of assignments to
|
||||
--echo # -- general_log_file/slow_query_log_file.
|
||||
--echo # -- general_log_file/slow_query_log_file.
|
||||
--echo # --
|
||||
|
||||
--echo
|
||||
SET @general_log_file_saved = @@global.general_log_file;
|
||||
SET @slow_query_log_file_saved = @@global.slow_query_log_file;
|
||||
|
||||
--echo
|
||||
SET GLOBAL general_log_file = 'bug32748.query.log';
|
||||
SET GLOBAL slow_query_log_file = 'bug32748.slow.log';
|
||||
@@ -258,27 +303,37 @@ SET GLOBAL slow_query_log_file = 'bug32748.slow.log';
|
||||
--echo
|
||||
SHOW VARIABLES LIKE '%log_file';
|
||||
|
||||
# Reset to initial values
|
||||
--echo
|
||||
SET GLOBAL general_log_file = @general_log_file_saved;
|
||||
SET GLOBAL slow_query_log_file = @slow_query_log_file_saved;
|
||||
SET GLOBAL general_log_file = @old_general_log_file;
|
||||
SET GLOBAL slow_query_log_file = @old_slow_query_log_file;
|
||||
if(!$fixed_bug38124)
|
||||
{
|
||||
--disable_query_log
|
||||
let $my_var = `SELECT @old_general_log_file`;
|
||||
eval SET @@global.general_log_file = '$my_var';
|
||||
let $my_var = `SELECT @old_slow_query_log_file`;
|
||||
eval SET @@global.slow_query_log_file = '$my_var';
|
||||
--enable_query_log
|
||||
}
|
||||
|
||||
--echo
|
||||
--echo # -- End of Bug#32748.
|
||||
|
||||
|
||||
###########################################################################
|
||||
|
||||
# WL#4403 - deprecate @log and @slow_log_queries variables
|
||||
|
||||
|
||||
## WL#4403 - deprecate @log and @slow_log_queries variables
|
||||
|
||||
## these are all deprecated -- show for command-line as well!
|
||||
# These server system variables are all deprecated
|
||||
# -- show for command-line as well!
|
||||
--echo deprecated:
|
||||
SET GLOBAL log = 0;
|
||||
SET GLOBAL log_slow_queries = 0;
|
||||
SET GLOBAL log = DEFAULT;
|
||||
SET GLOBAL log_slow_queries = DEFAULT;
|
||||
|
||||
## these are NOT deprecated
|
||||
# These server system variables are NOT deprecated.
|
||||
--echo not deprecated:
|
||||
SELECT @@global.general_log_file INTO @my_glf;
|
||||
SELECT @@global.slow_query_log_file INTO @my_sqlf;
|
||||
@@ -291,6 +346,20 @@ SET GLOBAL slow_query_log_file = @my_sqlf;
|
||||
SET GLOBAL general_log = DEFAULT;
|
||||
SET GLOBAL slow_query_log = DEFAULT;
|
||||
|
||||
## Reset to initial values
|
||||
SET @@global.general_log = @old_general_log;
|
||||
SET @@global.general_log_file = @old_general_log_file;
|
||||
SET @@global.slow_query_log = @old_slow_query_log;
|
||||
SET @@global.slow_query_log_file = @old_slow_query_log_file;
|
||||
if(!$fixed_bug38124)
|
||||
{
|
||||
--disable_query_log
|
||||
let $my_var = `SELECT @old_general_log_file`;
|
||||
eval SET @@global.general_log_file = '$my_var';
|
||||
let $my_var = `SELECT @old_slow_query_log_file`;
|
||||
eval SET @@global.slow_query_log_file = '$my_var';
|
||||
--enable_query_log
|
||||
}
|
||||
|
||||
|
||||
--echo End of 5.1 tests
|
||||
@@ -298,17 +367,30 @@ SET GLOBAL slow_query_log = DEFAULT;
|
||||
--enable_ps_protocol
|
||||
|
||||
#
|
||||
# Cleanup (must be done last to avoid delayed 'Quit' message in general log)
|
||||
# Cleanup
|
||||
#
|
||||
# Disconnect must be done last to avoid delayed 'Quit' message in general log
|
||||
--echo # Close connection con1
|
||||
disconnect con1;
|
||||
# set back the saved default values
|
||||
connection default;
|
||||
set @@global.general_log= @start_general_log;
|
||||
set @@global.slow_query_log= @start_slow_query_log;
|
||||
set @@global.general_log_file= @start_general_log_file;
|
||||
|
||||
# Reset global system variables to initial values if forgotten somewhere above.
|
||||
SET global general_log = @old_general_log;
|
||||
SET global general_log_file = @old_general_log_file;
|
||||
SET global slow_query_log = @old_slow_query_log;
|
||||
SET global slow_query_log_file = @old_slow_query_log_file;
|
||||
if(!$fixed_bug38124)
|
||||
{
|
||||
--disable_query_log
|
||||
let $my_var = `SELECT @old_general_log_file`;
|
||||
eval SET @@global.general_log_file = '$my_var';
|
||||
let $my_var = `SELECT @old_slow_query_log_file`;
|
||||
eval SET @@global.slow_query_log_file = '$my_var';
|
||||
--enable_query_log
|
||||
}
|
||||
|
||||
# Remove the log files that was created in the "default location"
|
||||
# i.e var/run
|
||||
--remove_file $MYSQLTEST_VARDIR/run/mysqld.log
|
||||
--remove_file $MYSQLTEST_VARDIR/run/mysqld-slow.log
|
||||
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/log.master
|
||||
|
@@ -103,7 +103,6 @@ DROP TABLE t1;
|
||||
|
||||
connection default;
|
||||
SET @@global.myisam_data_pointer_size= @start_value;
|
||||
|
||||
################################################################
|
||||
# End of functionality Testing for myisam_data_pointer_size #
|
||||
################################################################
|
||||
|
@@ -32,3 +32,29 @@ let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--exec $MYISAMCHK -s --unpack $MYSQLD_DATADIR/test/t1
|
||||
CHECK TABLE t1 EXTENDED;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#40949 Debug version of MySQL server crashes when run OPTIMIZE on compressed table.
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
create table t1(f1 int, f2 char(255));
|
||||
insert into t1 values(1, 'foo'), (2, 'bar');
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
insert into t1 select * from t1;
|
||||
flush tables;
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
--exec $MYISAMPACK $MYSQLD_DATADIR/test/t1
|
||||
optimize table t1;
|
||||
drop table t1;
|
||||
|
@@ -291,6 +291,30 @@ EOF
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug29323.sql 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/bug29323.sql;
|
||||
|
||||
#
|
||||
# Bug #33812: mysql client incorrectly parsing DELIMITER
|
||||
#
|
||||
# The space and ; after delimiter are important
|
||||
--exec $MYSQL -e "select 1 delimiter ;"
|
||||
|
||||
#
|
||||
# Bug #38158: mysql client regression, can't read dump files
|
||||
#
|
||||
--write_file $MYSQLTEST_VARDIR/tmp/bug38158.sql
|
||||
-- Testing
|
||||
--
|
||||
delimiter ||
|
||||
select 2 ||
|
||||
EOF
|
||||
--exec $MYSQL < $MYSQLTEST_VARDIR/tmp/bug38158.sql 2>&1
|
||||
--exec $MYSQL -c < $MYSQLTEST_VARDIR/tmp/bug38158.sql 2>&1
|
||||
remove_file $MYSQLTEST_VARDIR/tmp/bug38158.sql;
|
||||
|
||||
#
|
||||
# Bug #41437: Value stored in 'case' lacks charset, causees segfault
|
||||
#
|
||||
--exec $MYSQL -e "select @z:='1',@z=database()"
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
@@ -119,4 +119,79 @@ drop view v1, `v-1`;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug #33094: Error in upgrading from 5.0 to 5.1 when table contains triggers
|
||||
# Bug #41385: Crash when attempting to repair a #mysql50# upgraded table with
|
||||
# triggers
|
||||
#
|
||||
SET NAMES utf8;
|
||||
CREATE TABLE `#mysql50#@` (a INT);
|
||||
SHOW TABLES;
|
||||
SET NAMES DEFAULT;
|
||||
--echo mysqlcheck --fix-table-names --databases test
|
||||
--exec $MYSQL_CHECK --fix-table-names --databases test
|
||||
SET NAMES utf8;
|
||||
SHOW TABLES;
|
||||
DROP TABLE `@`;
|
||||
|
||||
CREATE TABLE `я` (a INT);
|
||||
SET NAMES DEFAULT;
|
||||
--echo mysqlcheck --default-character-set="latin1" --databases test
|
||||
# Error returned depends on platform, replace it with "Table doesn't exist"
|
||||
--replace_result "Can't find file: './test/@003f.frm' (errno: 22)" "Table doesn't exist" "Table 'test.?' doesn't exist" "Table doesn't exist"
|
||||
--exec $MYSQL_CHECK --default-character-set="latin1" --databases test
|
||||
--echo mysqlcheck --default-character-set="utf8" --databases test
|
||||
--exec $MYSQL_CHECK --default-character-set="utf8" --databases test
|
||||
SET NAMES utf8;
|
||||
DROP TABLE `я`;
|
||||
SET NAMES DEFAULT;
|
||||
|
||||
CREATE DATABASE `#mysql50#a@b`;
|
||||
USE `#mysql50#a@b`;
|
||||
CREATE TABLE `#mysql50#c@d` (a INT);
|
||||
CREATE TABLE t1 (a INT);
|
||||
|
||||
# Create 5.0 like triggers
|
||||
let $MYSQLTEST_VARDIR= `select @@datadir`;
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/c@d.TRG
|
||||
TYPE=TRIGGERS
|
||||
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr1 BEFORE INSERT ON `c@d` FOR EACH ROW SET NEW.a = 10 * NEW.a'
|
||||
sql_modes=0
|
||||
definers='root@localhost'
|
||||
EOF
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/tr1.TRN
|
||||
TYPE=TRIGGERNAME
|
||||
trigger_table=c@d
|
||||
EOF
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/t1.TRG
|
||||
TYPE=TRIGGERS
|
||||
triggers='CREATE DEFINER=`root`@`localhost` TRIGGER tr2 BEFORE INSERT ON `a@b`.t1 FOR EACH ROW SET NEW.a = 100 * NEW.a'
|
||||
sql_modes=0
|
||||
definers='root@localhost'
|
||||
EOF
|
||||
--write_file $MYSQLTEST_VARDIR/a@b/tr2.TRN
|
||||
TYPE=TRIGGERNAME
|
||||
trigger_table=t1
|
||||
EOF
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS
|
||||
WHERE TRIGGER_SCHEMA="#mysql50#a@b" ORDER BY trigger_name;
|
||||
|
||||
--echo mysqlcheck --fix-db-names --fix-table-names --all-databases
|
||||
--exec $MYSQL_CHECK --fix-db-names --fix-table-names --all-databases
|
||||
|
||||
USE `a@b`;
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS
|
||||
WHERE TRIGGER_SCHEMA="a@b" ORDER BY trigger_name;
|
||||
|
||||
INSERT INTO `c@d` VALUES (2), (1);
|
||||
SELECT * FROM `c@d`;
|
||||
INSERT INTO t1 VALUES (3), (5);
|
||||
SELECT * FROM t1;
|
||||
|
||||
DROP DATABASE `a@b`;
|
||||
|
||||
USE test;
|
||||
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
1
mysql-test/t/partition_innodb_semi_consistent-master.opt
Normal file
1
mysql-test/t/partition_innodb_semi_consistent-master.opt
Normal file
@@ -0,0 +1 @@
|
||||
--innodb_lock_wait_timeout=2
|
194
mysql-test/t/partition_innodb_semi_consistent.test
Normal file
194
mysql-test/t/partition_innodb_semi_consistent.test
Normal file
@@ -0,0 +1,194 @@
|
||||
-- source include/have_partition.inc
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
# basic tests of semi-consistent reads
|
||||
# for verifying Bug#40595: Non-matching rows not released with READ-COMMITTED
|
||||
# on tables with partitions
|
||||
|
||||
connect (a,localhost,root,,);
|
||||
connect (b,localhost,root,,);
|
||||
connection a;
|
||||
set binlog_format=mixed;
|
||||
set session transaction isolation level read committed;
|
||||
create table t1(a int not null)
|
||||
engine=innodb
|
||||
DEFAULT CHARSET=latin1
|
||||
PARTITION BY RANGE(a)
|
||||
(PARTITION p0 VALUES LESS THAN (20),
|
||||
PARTITION p1 VALUES LESS THAN MAXVALUE);
|
||||
insert into t1 values (1),(2),(3),(4),(5),(6),(7);
|
||||
set autocommit=0;
|
||||
# this should lock the entire table
|
||||
select * from t1 where a=3 lock in share mode;
|
||||
connection b;
|
||||
set binlog_format=mixed;
|
||||
set session transaction isolation level read committed;
|
||||
set autocommit=0;
|
||||
-- error ER_LOCK_WAIT_TIMEOUT
|
||||
update t1 set a=10 where a=5;
|
||||
connection a;
|
||||
#DELETE FROM t1 WHERE a=5;
|
||||
commit;
|
||||
connection b;
|
||||
update t1 set a=10 where a=5;
|
||||
connection a;
|
||||
-- error ER_LOCK_WAIT_TIMEOUT
|
||||
select * from t1 where a=2 for update;
|
||||
# this should lock the records (1),(2)
|
||||
select * from t1 where a=2 limit 1 for update;
|
||||
connection b;
|
||||
update t1 set a=11 where a=6;
|
||||
-- error ER_LOCK_WAIT_TIMEOUT
|
||||
update t1 set a=12 where a=2;
|
||||
-- error ER_LOCK_WAIT_TIMEOUT
|
||||
update t1 set a=13 where a=1;
|
||||
connection a;
|
||||
commit;
|
||||
connection b;
|
||||
update t1 set a=14 where a=1;
|
||||
commit;
|
||||
connection a;
|
||||
--sorted_result
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
|
||||
connection default;
|
||||
disconnect a;
|
||||
disconnect b;
|
||||
|
||||
#
|
||||
# Bug #31310: Locked rows silently skipped in read-committed isolation level.
|
||||
# (This also tests the '*_semi_consistent*' functions in partitioning)
|
||||
# Copied from include/mix1.inc
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
SET SESSION AUTOCOMMIT = 0;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
set binlog_format=mixed;
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
|
||||
eval
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(256))
|
||||
ENGINE = InnoDB
|
||||
PARTITION BY RANGE (a)
|
||||
(PARTITION p0 VALUES LESS THAN (300),
|
||||
PARTITION p1 VALUES LESS THAN MAXVALUE);
|
||||
INSERT INTO t1 VALUES (1,2);
|
||||
|
||||
--echo # 1. test for locking:
|
||||
|
||||
BEGIN;
|
||||
--enable_info
|
||||
UPDATE t1 SET b = 12 WHERE a = 1;
|
||||
--disable_info
|
||||
SELECT * FROM t1;
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
|
||||
--enable_info
|
||||
--disable_abort_on_error
|
||||
--error ER_LOCK_WAIT_TIMEOUT
|
||||
UPDATE t1 SET b = 21 WHERE a = 1;
|
||||
--disable_info
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
SELECT * FROM t1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo # 2. test for serialized update:
|
||||
|
||||
CREATE TABLE t2 (a INT);
|
||||
|
||||
TRUNCATE t1;
|
||||
INSERT INTO t1 VALUES (1,'init');
|
||||
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
UPDATE t1 SET b = CONCAT(b, '+con2') WHERE a = 1;
|
||||
INSERT INTO t2 VALUES ();
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
BEGIN;
|
||||
--enable_info
|
||||
UPDATE t1 SET b = CONCAT(b, '+con1') WHERE a = 1;
|
||||
--disable_info
|
||||
SELECT * FROM t1;
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
|
||||
--send CALL p1;
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
SELECT * FROM t1;
|
||||
COMMIT;
|
||||
|
||||
let $bug31310 = 1;
|
||||
while ($bug31310)
|
||||
{
|
||||
let $bug31310= `SELECT 1 - COUNT(*) FROM t2`;
|
||||
}
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
--reap
|
||||
SELECT * FROM t1;
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
|
||||
--echo # 3. test for updated key column:
|
||||
|
||||
TRUNCATE t1;
|
||||
TRUNCATE t2;
|
||||
|
||||
INSERT INTO t1 VALUES (1,'init');
|
||||
|
||||
BEGIN;
|
||||
--enable_info
|
||||
UPDATE t1 SET a = 2, b = CONCAT(b, '+con1') WHERE a = 1;
|
||||
--disable_info
|
||||
SELECT * FROM t1;
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
|
||||
--send CALL p1;
|
||||
|
||||
--echo # Switch to connection con1
|
||||
connection con1;
|
||||
SELECT * FROM t1;
|
||||
COMMIT;
|
||||
|
||||
let $bug31310 = 1;
|
||||
while ($bug31310)
|
||||
{
|
||||
let $bug31310= `SELECT 1 - COUNT(*) FROM t2`;
|
||||
}
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
--echo # Switch to connection con2
|
||||
connection con2;
|
||||
SELECT * FROM t1;
|
||||
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
DROP PROCEDURE p1;
|
||||
DROP TABLE t1, t2;
|
||||
|
@@ -1,3 +1,4 @@
|
||||
--source include/have_partition.inc
|
||||
--source include/have_binlog_format_statement.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
|
@@ -3,6 +3,17 @@
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Bug 40389: REORGANIZE PARTITION crashes when only using one partition
|
||||
#
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY)
|
||||
ENGINE MYISAM
|
||||
PARTITION BY HASH (a)
|
||||
PARTITIONS 1;
|
||||
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
|
||||
ALTER TABLE t1 REORGANIZE PARTITION;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug 21143: mysqld hang when error in number of subparts in
|
||||
# REORGANIZE command
|
||||
|
@@ -8,6 +8,22 @@
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Bug#40972: some sql execution lead the whole database crashing
|
||||
#
|
||||
# Setup so the start is at partition pX and end is at p1
|
||||
# Pruning does handle 'bad' dates differently.
|
||||
CREATE TABLE t1
|
||||
(a INT NOT NULL AUTO_INCREMENT,
|
||||
b DATETIME,
|
||||
PRIMARY KEY (a,b),
|
||||
KEY (b))
|
||||
PARTITION BY RANGE (to_days(b))
|
||||
(PARTITION p0 VALUES LESS THAN (733681) COMMENT = 'LESS THAN 2008-10-01',
|
||||
PARTITION p1 VALUES LESS THAN (733712) COMMENT = 'LESS THAN 2008-11-01',
|
||||
PARTITION pX VALUES LESS THAN MAXVALUE);
|
||||
SELECT a,b FROM t1 WHERE b >= '2008-12-01' AND b < '2009-12-00';
|
||||
DROP TABLE t1;
|
||||
|
||||
# Check if we can infer from condition on partition fields that
|
||||
# no records will match.
|
||||
|
@@ -300,7 +300,7 @@ select * from t1;
|
||||
select * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
insert delayed into t1 values (4);
|
||||
--sleep 5 # Wait for insert delayed to be executed.
|
||||
--sleep 5 # Wait for insert delayed to be executed.
|
||||
select a from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
drop table t1;
|
||||
@@ -410,10 +410,10 @@ create table t1(id int auto_increment primary key);
|
||||
insert into t1 values (NULL), (NULL), (NULL);
|
||||
select * from t1 where id=2;
|
||||
alter table t1 rename to t2;
|
||||
-- error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t1 where id=2;
|
||||
drop table t2;
|
||||
-- error 1146
|
||||
--error ER_NO_SUCH_TABLE
|
||||
select * from t1 where id=2;
|
||||
|
||||
#
|
||||
@@ -435,11 +435,14 @@ create table t1 (a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
show status like "Qcache_queries_in_cache";
|
||||
select * from t1 into outfile "query_cache.out.file";
|
||||
--error 1086
|
||||
--error ER_FILE_EXISTS_ERROR
|
||||
select * from t1 into outfile "query_cache.out.file";
|
||||
select * from t1 limit 1 into dumpfile "query_cache.dump.file";
|
||||
show status like "Qcache_queries_in_cache";
|
||||
drop table t1;
|
||||
let $datadir=`select @@datadir`;
|
||||
--remove_file $datadir/test/query_cache.dump.file
|
||||
--remove_file $datadir/test/query_cache.out.file
|
||||
|
||||
#
|
||||
# test of SQL_SELECT_LIMIT
|
||||
@@ -537,7 +540,7 @@ drop table t1;
|
||||
# If at least one of the above variables has changed,
|
||||
# the cached query can't be reused. In the below test
|
||||
# absolutely the same query is used several times,
|
||||
# SELECT should fetch different results for every instance.
|
||||
# SELECT should fetch different results for every instance.
|
||||
# No hits should be produced.
|
||||
# New cache entry should appear for every SELECT.
|
||||
#
|
||||
@@ -554,21 +557,21 @@ show status like "Qcache_queries_in_cache";
|
||||
# Change collation_connection and run the same query again
|
||||
#
|
||||
set collation_connection=koi8r_bin;
|
||||
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
||||
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_queries_in_cache";
|
||||
#
|
||||
# Now change character_set_client and run the same query again
|
||||
#
|
||||
set character_set_client=cp1251;
|
||||
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
||||
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_queries_in_cache";
|
||||
#
|
||||
# And finally change character_set_results and run the same query again
|
||||
#
|
||||
set character_set_results=cp1251;
|
||||
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
||||
SELECT a,'<27>','<27>'='<27>' FROM t1;
|
||||
show status like "Qcache_hits";
|
||||
show status like "Qcache_queries_in_cache";
|
||||
SET NAMES default;
|
||||
@@ -602,12 +605,12 @@ insert into t1 set c = repeat('x',24);
|
||||
insert into t1 set c = concat(repeat('x',24),'x');
|
||||
insert into t1 set c = concat(repeat('x',24),'w');
|
||||
insert into t1 set c = concat(repeat('x',24),'y');
|
||||
set max_sort_length=200;
|
||||
set max_sort_length=200;
|
||||
select c from t1 order by c, id;
|
||||
reset query cache;
|
||||
set max_sort_length=20;
|
||||
select c from t1 order by c, id;
|
||||
set max_sort_length=200;
|
||||
set max_sort_length=200;
|
||||
select c from t1 order by c, id;
|
||||
set max_sort_length=default;
|
||||
# sql_mode
|
||||
@@ -1017,7 +1020,7 @@ set GLOBAL query_cache_size= default;
|
||||
|
||||
|
||||
#
|
||||
# Bug #28897 UUID() returns non-unique values when query cache is enabled
|
||||
# Bug#28897 UUID() returns non-unique values when query cache is enabled
|
||||
#
|
||||
|
||||
set GLOBAL query_cache_size=1000000;
|
||||
@@ -1026,7 +1029,7 @@ create table t1 (a char);
|
||||
insert into t1 values ('c');
|
||||
|
||||
let $q1= `select UUID(), a from t1`;
|
||||
let $q2= `select UUID(), a from t1`;
|
||||
let $q2= `select UUID(), a from t1`;
|
||||
|
||||
# disabling the logging of the query because the UUIDs are different each run.
|
||||
--disable_query_log
|
||||
@@ -1047,7 +1050,7 @@ create table t1 (a char);
|
||||
insert into t1 values ('c');
|
||||
|
||||
let $q1= `select RAND() from t1 union select sql_cache 1 from t1;`;
|
||||
let $q2= `select RAND() from t1 union select sql_cache 1 from t1;`;
|
||||
let $q2= `select RAND() from t1 union select sql_cache 1 from t1;`;
|
||||
|
||||
# disabling the logging of the query because the times are different each run.
|
||||
--disable_query_log
|
||||
@@ -1182,75 +1185,6 @@ DROP PROCEDURE proc29856;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL query_cache_size= default;
|
||||
|
||||
#
|
||||
# Bug #28249 Query Cache returns wrong result with concurrent insert / certain lock
|
||||
#
|
||||
--echo Bug#28249 Query Cache returns wrong result with concurrent insert/ certain lock
|
||||
connect (user1,localhost,root,,test,,);
|
||||
connect (user2,localhost,root,,test,,);
|
||||
connect (user3,localhost,root,,test,,);
|
||||
|
||||
connection user1;
|
||||
|
||||
set GLOBAL query_cache_type=1;
|
||||
set GLOBAL query_cache_limit=10000;
|
||||
set GLOBAL query_cache_min_res_unit=0;
|
||||
set GLOBAL query_cache_size= 100000;
|
||||
|
||||
flush tables;
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
create table t1 (a int);
|
||||
create table t2 (a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
connection user2;
|
||||
--echo Locking table T2 with a write lock.
|
||||
lock table t2 write;
|
||||
|
||||
connection user1;
|
||||
--echo Select blocked by write lock.
|
||||
--send select *, (select count(*) from t2) from t1;
|
||||
--echo Sleeing is ok, because selecting should be done very fast.
|
||||
sleep 5;
|
||||
|
||||
connection user3;
|
||||
--echo Inserting into table T1.
|
||||
insert into t1 values (4);
|
||||
|
||||
connection user2;
|
||||
--echo Unlocking the tables.
|
||||
unlock tables;
|
||||
|
||||
connection user1;
|
||||
--echo Collecting result from previously blocked select.
|
||||
#
|
||||
# Since the lock ordering rule in thr_multi_lock depends on
|
||||
# pointer values, from execution to execution we might have
|
||||
# different lock order, and therefore, sometimes lock t1 and block
|
||||
# on t2, and sometimes block on t2 right away. In the second case,
|
||||
# the following insert succeeds, and only then this select can
|
||||
# proceed, and we actually test nothing, as the very first select
|
||||
# returns 4 rows right away.
|
||||
# It's fine to have a test case that covers the problematic area
|
||||
# at least once in a while.
|
||||
# We, however, need to disable the result log here to make the
|
||||
# test repeatable.
|
||||
--disable_result_log
|
||||
--reap
|
||||
--enable_result_log
|
||||
--echo Next select should contain 4 rows, as the insert is long finished.
|
||||
select *, (select count(*) from t2) from t1;
|
||||
reset query cache;
|
||||
select *, (select count(*) from t2) from t1;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
connection default;
|
||||
disconnect user1;
|
||||
disconnect user2;
|
||||
disconnect user3;
|
||||
|
||||
#
|
||||
--echo #
|
||||
--echo # Bug#25132 disabled query cache: Qcache_free_blocks = 1
|
||||
@@ -1261,7 +1195,7 @@ set global query_cache_type=0;
|
||||
show status like 'Qcache_free_blocks';
|
||||
|
||||
--echo Restore default values.
|
||||
# Bug #28211 RENAME DATABASE and query cache don't play nicely together
|
||||
# Bug#28211 RENAME DATABASE and query cache don't play nicely together
|
||||
#
|
||||
# TODO: enable these tests when RENAME DATABASE is implemented.
|
||||
# --disable_warnings
|
||||
@@ -1279,7 +1213,7 @@ show status like 'Qcache_free_blocks';
|
||||
# show status like 'Qcache_queries_in_cache';
|
||||
# drop database db2;
|
||||
# set global query_cache_size=default;
|
||||
#
|
||||
#
|
||||
# --disable_warnings
|
||||
# drop database if exists db1;
|
||||
# drop database if exists db3;
|
||||
|
123
mysql-test/t/query_cache_28249.test
Normal file
123
mysql-test/t/query_cache_28249.test
Normal file
@@ -0,0 +1,123 @@
|
||||
### t/query_cache_28249.test ###
|
||||
#
|
||||
# Test for
|
||||
# Bug#28249 Query Cache returns wrong result with concurrent insert / certain lock
|
||||
#
|
||||
# Last modification:
|
||||
# 2008-11-27 mleich - Move this test out of query_cache.test
|
||||
# - Fix Bug#40179 Test main.query_cache failing randomly on Pushbuild,
|
||||
# test weakness
|
||||
# - Minor improvements (comments,formatting etc.)
|
||||
#
|
||||
|
||||
--source include/have_query_cache.inc
|
||||
|
||||
SET @query_cache_type= @@global.query_cache_type;
|
||||
SET @query_cache_limit= @@global.query_cache_limit;
|
||||
SET @query_cache_min_res_unit= @@global.query_cache_min_res_unit;
|
||||
SET @query_cache_size= @@global.query_cache_size;
|
||||
|
||||
--echo # Bug#28249 Query Cache returns wrong result with concurrent insert/ certain lock
|
||||
--echo # Establish connections user1,user2,user3 (user=root)
|
||||
connect (user1,localhost,root,,test,,);
|
||||
connect (user2,localhost,root,,test,,);
|
||||
connect (user3,localhost,root,,test,,);
|
||||
|
||||
--echo # Switch to connection user1
|
||||
connection user1;
|
||||
|
||||
SET GLOBAL query_cache_type=1;
|
||||
SET GLOBAL query_cache_limit=10000;
|
||||
SET GLOBAL query_cache_min_res_unit=0;
|
||||
SET GLOBAL query_cache_size= 100000;
|
||||
|
||||
FLUSH TABLES;
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
--enable_warnings
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
|
||||
--echo # Switch to connection user2
|
||||
connection user2;
|
||||
LOCK TABLE t2 WRITE;
|
||||
|
||||
--echo # Switch to connection user1
|
||||
connection user1;
|
||||
--echo # "send" the next select, "reap" the result later.
|
||||
--echo # The select will be blocked by the write lock on the t1.
|
||||
let $select_for_qc =
|
||||
SELECT *, (SELECT COUNT(*) FROM t2) FROM t1;
|
||||
send;
|
||||
eval $select_for_qc;
|
||||
|
||||
--echo # Switch to connection user3
|
||||
connection user3;
|
||||
# Typical information_schema.processlist content after sufficient sleep time
|
||||
# ID USER COMMAND TIME STATE INFO
|
||||
# ....
|
||||
# 2 root Query 5 Locked SELECT *, (SELECT COUNT(*) FROM t2) FROM t1
|
||||
# ....
|
||||
# XXXXXX XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
# The values marked with 'X' must be reached.
|
||||
--echo # Poll till the select of connection user1 is blocked by the write lock on t1.
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||
WHERE state = 'Locked'
|
||||
AND info = '$select_for_qc';
|
||||
--source include/wait_condition.inc
|
||||
eval
|
||||
SELECT user,command,state,info FROM information_schema.processlist
|
||||
WHERE state = 'Locked'
|
||||
AND info = '$select_for_qc';
|
||||
INSERT INTO t1 VALUES (4);
|
||||
|
||||
--echo # Switch to connection user2
|
||||
connection user2;
|
||||
UNLOCK TABLES;
|
||||
|
||||
--echo # Switch to connection user1
|
||||
connection user1;
|
||||
#
|
||||
# Since the lock ordering rule in thr_multi_lock depends on
|
||||
# pointer values, from execution to execution we might have
|
||||
# different lock order, and therefore, sometimes lock t1 and block
|
||||
# on t2, and sometimes block on t2 right away. In the second case,
|
||||
# the following insert succeeds, and only then this select can
|
||||
# proceed, and we actually test nothing, as the very first select
|
||||
# returns 4 rows right away.
|
||||
# It's fine to have a test case that covers the problematic area
|
||||
# at least once in a while.
|
||||
--echo # Collecting ("reap") the result from the previously blocked select.
|
||||
--echo # The printing of the result (varies between 3 and 4 rows) set has to be suppressed.
|
||||
--disable_result_log
|
||||
--reap
|
||||
--enable_result_log
|
||||
|
||||
--echo # Switch to connection user3
|
||||
connection user3;
|
||||
--echo # The next select enforces that effects of "concurrent_inserts" like the
|
||||
--echo # record with a = 4 is missing in result sets can no more happen.
|
||||
SELECT 1 FROM t1 WHERE a = 4;
|
||||
|
||||
--echo # Switch to connection user1
|
||||
connection user1;
|
||||
--echo # The next result set must contain 4 rows.
|
||||
# If not, we have a regression of Bug#28249
|
||||
eval $select_for_qc;
|
||||
RESET QUERY CACHE;
|
||||
eval $select_for_qc;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo # Switch to connection default + close connections user1,user2,user3
|
||||
connection default;
|
||||
disconnect user1;
|
||||
disconnect user2;
|
||||
disconnect user3;
|
||||
|
||||
SET GLOBAL query_cache_type= @query_cache_type;
|
||||
SET GLOBAL query_cache_limit= @query_cache_limit;
|
||||
SET GLOBAL query_cache_min_res_unit= @query_cache_min_res_unit;
|
||||
SET GLOBAL query_cache_size= @query_cache_size;
|
||||
|
@@ -1 +0,0 @@
|
||||
--init-slave="set global max_connections=500"
|
@@ -10,85 +10,92 @@
|
||||
# #
|
||||
# Creation Date: 2008-03-08 #
|
||||
# Author: Rizwan #
|
||||
# Modified: HHunger 2008-09-29 Fixed the bug by inserting the usual wait and #
|
||||
# SQL-Satements to control master and slave, #
|
||||
# deleted the sleep and made improvements like: #
|
||||
# - Replaced the opt file by dynamic variables, #
|
||||
# - Made the tests independant of the initial #
|
||||
# values of the global variables, #
|
||||
# - Reduced the test to the needed test case to #
|
||||
# save run time, #
|
||||
# - Beautification. #
|
||||
# #
|
||||
# Description: Test Cases of Dynamic System Variable init_slave #
|
||||
# that checks the behavior of this variable #
|
||||
# #
|
||||
# Reference: http://dev.mysql.com/doc/refman/5.1/en/ #
|
||||
# server-system-variables.html #
|
||||
# Reference: #
|
||||
# http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html #
|
||||
# #
|
||||
###############################################################################
|
||||
|
||||
source include/master-slave.inc;
|
||||
|
||||
--echo '#--------------------FN_DYNVARS_037_01-------------------------#'
|
||||
##################################################################
|
||||
# Check if setting init_slave is changed in every new connection #
|
||||
##################################################################
|
||||
|
||||
SET @@global.init_slave = "SET @a = 10";
|
||||
|
||||
--echo 'connect (con1,localhost,root,,)'
|
||||
connect (con1,localhost,root,,);
|
||||
--echo 'connection con1'
|
||||
connection con1;
|
||||
SELECT @@global.init_slave;
|
||||
disconnect con1;
|
||||
--echo 'connection master'
|
||||
connection master;
|
||||
|
||||
--echo '#--------------------FN_DYNVARS_037_02-------------------------#'
|
||||
####################################################
|
||||
# Begin the functionality Testing of init_slave #
|
||||
####################################################
|
||||
|
||||
#====================================================
|
||||
--echo 'check if value in slave opt file is executed'
|
||||
#====================================================
|
||||
save_master_pos;
|
||||
--echo 'connection slave'
|
||||
--echo connection slave
|
||||
connection slave;
|
||||
sleep 1;
|
||||
show variables like 'init_slave';
|
||||
show variables like 'max_connections';
|
||||
sync_with_master;
|
||||
reset master;
|
||||
#
|
||||
# save the current values
|
||||
|
||||
#===============================================================
|
||||
--echo 'check if value in slave opt file doesnt apply to master'
|
||||
#===============================================================
|
||||
SET @start_max_connections= @@global.max_connections;
|
||||
SET @start_init_slave= @@global.init_slave;
|
||||
|
||||
--echo 'connection master'
|
||||
connection master;
|
||||
show variables like 'init_slave';
|
||||
show variables like 'max_connections';
|
||||
save_master_pos;
|
||||
--echo 'connection slave'
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
# setting of a global value with an effect on the next start of the slave server
|
||||
# check that @@global.init_slave could be set
|
||||
let $my_init_slave=
|
||||
'SET @@global.max_connections = @@global.max_connections + 1';
|
||||
eval SET @@global.init_slave = $my_init_slave;
|
||||
|
||||
#=======================================================
|
||||
--echo 'try creating a temporary variable in init_slave'
|
||||
#=======================================================
|
||||
|
||||
SET @@global.init_slave = "SET @a=5";
|
||||
|
||||
source include/stop_slave.inc;
|
||||
reset slave;
|
||||
# Clean up old test tables
|
||||
# show the data type of the variable
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TEMPORARY TABLE t1 AS SELECT @@global.init_slave AS my_column;
|
||||
--enable_warnings
|
||||
start slave;
|
||||
|
||||
DESCRIBE t1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# check that the new setting of @@global.init_slave becomes immediately visible
|
||||
eval SELECT @@global.init_slave = $my_init_slave;
|
||||
--echo Expect 1
|
||||
# wait for the slave threads have set the global variable.
|
||||
let $wait_timeout= 90;
|
||||
let $wait_condition= SELECT @@global.max_connections = @start_max_connections;
|
||||
--source include/wait_condition_sp.inc
|
||||
# check that the action in init_slave does not happen immediately
|
||||
SELECT @@global.max_connections= @start_max_connections;
|
||||
--echo Expect 1
|
||||
#
|
||||
# reset of the server
|
||||
STOP SLAVE;
|
||||
--wait_for_slave_to_stop
|
||||
RESET MASTER;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
source include/wait_for_slave_to_start.inc;
|
||||
#
|
||||
# wait for the slave threads have set the global variable.
|
||||
let $wait_timeout= 90;
|
||||
let $wait_condition= SELECT @@global.max_connections = @start_max_connections + 1;
|
||||
--source include/wait_condition_sp.inc
|
||||
# check that the action in init_slave was executed and had the intended effect
|
||||
SELECT @@global.max_connections = @start_max_connections + 1;
|
||||
--echo Expect 1
|
||||
#
|
||||
# Setting a variable(which is local to a session) and must not be visible
|
||||
SET @@global.init_slave = "SET @a=5";
|
||||
#
|
||||
STOP SLAVE;
|
||||
--wait_for_slave_to_stop
|
||||
RESET MASTER;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
source include/wait_for_slave_to_start.inc;
|
||||
#
|
||||
SHOW VARIABLES LIKE 'init_slave';
|
||||
# expect NULL
|
||||
SELECT @a;
|
||||
|
||||
--echo 'Bug#35365 SET statement in init_slave not execute if slave is restarted'
|
||||
|
||||
# Restore value
|
||||
set global max_connections= default;
|
||||
|
||||
--echo Expect NULL
|
||||
#
|
||||
# Clean up
|
||||
SET @@global.max_connections= @start_max_connections;
|
||||
SET @@global.init_slave= @start_init_slave;
|
||||
##################################################
|
||||
# End of functionality Testing for init_slave #
|
||||
##################################################
|
||||
|
@@ -3690,6 +3690,42 @@ SELECT DISTINCT b FROM t1 LEFT JOIN t2 USING(a) WHERE c <= 3;
|
||||
SHOW STATUS LIKE 'Handler_read%';
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug#40953 SELECT query throws "ERROR 1062 (23000): Duplicate entry..." error
|
||||
#
|
||||
CREATE TABLE t1 (f1 bigint(20) NOT NULL default '0',
|
||||
f2 int(11) NOT NULL default '0',
|
||||
f3 bigint(20) NOT NULL default '0',
|
||||
f4 varchar(255) NOT NULL default '',
|
||||
PRIMARY KEY (f1),
|
||||
KEY key1 (f4),
|
||||
KEY key2 (f2));
|
||||
CREATE TABLE t2 (f1 int(11) NOT NULL default '0',
|
||||
f2 enum('A1','A2','A3') NOT NULL default 'A1',
|
||||
f3 int(11) NOT NULL default '0',
|
||||
PRIMARY KEY (f1),
|
||||
KEY key1 (f3));
|
||||
CREATE TABLE t3 (f1 bigint(20) NOT NULL default '0',
|
||||
f2 datetime NOT NULL default '1980-01-01 00:00:00',
|
||||
PRIMARY KEY (f1));
|
||||
|
||||
insert into t1 values (1, 1, 1, 'abc');
|
||||
insert into t1 values (2, 1, 2, 'def');
|
||||
insert into t1 values (3, 1, 2, 'def');
|
||||
insert into t2 values (1, 'A1', 1);
|
||||
insert into t3 values (1, '1980-01-01');
|
||||
|
||||
SELECT a.f3, cr.f4, count(*) count
|
||||
FROM t2 a
|
||||
STRAIGHT_JOIN t1 cr ON cr.f2 = a.f1
|
||||
LEFT JOIN
|
||||
(t1 cr2
|
||||
JOIN t3 ae2 ON cr2.f3 = ae2.f1
|
||||
) ON a.f1 = cr2.f2 AND ae2.f2 < now() - INTERVAL 7 DAY AND
|
||||
cr.f4 = cr2.f4
|
||||
GROUP BY a.f3, cr.f4;
|
||||
|
||||
drop table t1, t2, t3;
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
@@ -3701,3 +3737,36 @@ SELECT a FROM t1 ORDER BY a LIMIT 2;
|
||||
SELECT a FROM t1 ORDER BY a LIMIT 2,4294967296;
|
||||
SELECT a FROM t1 ORDER BY a LIMIT 2,4294967297;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #37936: ASSERT_COLUMN_MARKED_FOR_WRITE in Field_datetime::store ,
|
||||
# Field_varstring::store
|
||||
#
|
||||
|
||||
CREATE TABLE A (date_key date);
|
||||
|
||||
CREATE TABLE C (
|
||||
pk int,
|
||||
int_nokey int,
|
||||
int_key int,
|
||||
date_key date NOT NULL,
|
||||
date_nokey date,
|
||||
varchar_key varchar(1)
|
||||
);
|
||||
|
||||
INSERT INTO C VALUES
|
||||
(1,1,1,'0000-00-00',NULL,NULL),
|
||||
(1,1,1,'0000-00-00',NULL,NULL);
|
||||
|
||||
SELECT 1 FROM C WHERE pk > ANY (SELECT 1 FROM C);
|
||||
|
||||
SELECT COUNT(DISTINCT 1) FROM C
|
||||
WHERE date_key = (SELECT 1 FROM A WHERE C.date_key IS NULL) GROUP BY pk;
|
||||
SELECT date_nokey FROM C
|
||||
WHERE int_key IN (SELECT 1 FROM A)
|
||||
HAVING date_nokey = '10:41:7'
|
||||
ORDER BY date_key;
|
||||
|
||||
DROP TABLE A,C;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@@ -238,6 +238,8 @@ let $tmp_table2 = `show global status like 'Created_tmp_tables'`;
|
||||
--disable_query_log
|
||||
eval select substring_index('$rnd_next2',0x9,-1)-substring_index('$rnd_next',0x9,-1) as rnd_diff, substring_index('$tmp_table2',0x9,-1)-substring_index('$tmp_table',0x9,-1) as tmp_table_diff;
|
||||
--enable_query_log
|
||||
disconnect con1;
|
||||
connection default;
|
||||
|
||||
#
|
||||
# Bug#30252 Com_create_function is not incremented.
|
||||
@@ -288,7 +290,6 @@ show procedure status where name ='proc37908' and 1 in (select f1 from db37908.t
|
||||
show function status where name ='func37908' and 1 in (select func37908());
|
||||
|
||||
connection default;
|
||||
disconnect con1;
|
||||
disconnect user1;
|
||||
disconnect root;
|
||||
drop database db37908;
|
||||
@@ -296,6 +297,43 @@ drop procedure proc37908;
|
||||
drop function func37908;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
DROP USER mysqltest_1@localhost;
|
||||
|
||||
#
|
||||
# Bug#41131 "Questions" fails to increment - ignores statements instead stored procs
|
||||
#
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
--enable_warnings
|
||||
DELIMITER $$;
|
||||
CREATE FUNCTION f1() RETURNS INTEGER
|
||||
BEGIN
|
||||
DECLARE foo INTEGER;
|
||||
DECLARE bar INTEGER;
|
||||
SET foo=1;
|
||||
SET bar=2;
|
||||
RETURN foo;
|
||||
END $$
|
||||
CREATE PROCEDURE p1()
|
||||
BEGIN
|
||||
SELECT 1;
|
||||
END $$
|
||||
DELIMITER ;$$
|
||||
let $org_queries= `SHOW STATUS LIKE 'Queries'`;
|
||||
SELECT f1();
|
||||
CALL p1();
|
||||
let $new_queries= `SHOW STATUS LIKE 'Queries'`;
|
||||
--disable_query_log
|
||||
let $diff= `SELECT SUBSTRING('$new_queries',9)-SUBSTRING('$org_queries',9)`;
|
||||
--enable_query_log
|
||||
eval SELECT $diff;
|
||||
disconnect con1;
|
||||
connection default;
|
||||
DROP PROCEDURE p1;
|
||||
DROP FUNCTION f1;
|
||||
|
||||
# End of 5.1 tests
|
||||
|
||||
# Restore global concurrent_insert value. Keep in the end of the test file.
|
||||
|
68
mysql-test/t/status2.test
Normal file
68
mysql-test/t/status2.test
Normal file
@@ -0,0 +1,68 @@
|
||||
--source include/not_embedded.inc
|
||||
|
||||
--echo #
|
||||
--echo # Bug#24289 Status Variable "Questions" gets wrong values with Stored Routines
|
||||
--echo #
|
||||
FLUSH STATUS;
|
||||
DELIMITER $$;
|
||||
CREATE FUNCTION testQuestion() RETURNS INTEGER
|
||||
BEGIN
|
||||
DECLARE foo INTEGER;
|
||||
DECLARE bar INTEGER;
|
||||
SET foo=1;
|
||||
SET bar=2;
|
||||
RETURN foo;
|
||||
END $$
|
||||
CREATE PROCEDURE testQuestion2()
|
||||
BEGIN
|
||||
SELECT 1;
|
||||
END $$
|
||||
DELIMITER ;$$
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
--enable_warnings
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE EVENT ev1 ON SCHEDULE EVERY 1 SECOND
|
||||
DO INSERT INTO t1 VALUES(1);
|
||||
|
||||
--echo Assert Questions == 7
|
||||
SHOW STATUS LIKE 'Questions';
|
||||
SELECT testQuestion();
|
||||
--echo Assert Questions == 9
|
||||
SHOW STATUS LIKE 'Questions';
|
||||
CALL testQuestion2();
|
||||
--echo Assert Questions == 11
|
||||
SHOW STATUS LIKE 'Questions';
|
||||
SELECT 1;
|
||||
--echo Assert Questions == 13
|
||||
SHOW STATUS LIKE 'Questions';
|
||||
connect (con1,localhost,root,,);
|
||||
connection con1;
|
||||
SELECT 1;
|
||||
connection default;
|
||||
disconnect con1;
|
||||
--echo Assert Questions == 14
|
||||
SHOW STATUS LIKE 'Questions';
|
||||
DELIMITER $$;
|
||||
CREATE TRIGGER trigg1 AFTER INSERT ON t1
|
||||
FOR EACH ROW BEGIN
|
||||
INSERT INTO t2 VALUES (1);
|
||||
END;
|
||||
$$
|
||||
DELIMITER ;$$
|
||||
--echo Assert Questions == 16
|
||||
SHOW STATUS LIKE 'Questions';
|
||||
INSERT INTO t1 VALUES (1);
|
||||
--echo Assert Questions == 18
|
||||
SHOW STATUS LIKE 'Questions';
|
||||
# TODO: Uncomment the lines below when FLUSH GLOBAL STATUS is implemented.
|
||||
# FLUSH STATUS;
|
||||
# SHOW GLOBAL STATUS LIKE 'Questions';
|
||||
DROP PROCEDURE testQuestion2;
|
||||
DROP TRIGGER trigg1;
|
||||
DROP FUNCTION testQuestion;
|
||||
DROP EVENT ev1;
|
||||
DROP TABLE t1,t2;
|
||||
--echo End of 6.0 tests
|
||||
|
@@ -1198,6 +1198,15 @@ comment '123456789*123456789*123456789*123456789*123456789*123456789*';
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #39591: Crash if table comment is longer than 62 characters
|
||||
#
|
||||
|
||||
#60 chars, 120 (+1) bytes (UTF-8 with 2-byte chars)
|
||||
CREATE TABLE t3 (f1 INT) COMMENT 'כקבהחןכקבהחןכקבהחןכקבהחןכקבהחןכקבהחןכקבהחןכקבהחןכקבהחןכקבהחן';
|
||||
SHOW CREATE TABLE t3;
|
||||
DROP TABLE t3;
|
||||
|
||||
#
|
||||
# Bug #26359: Strings becoming truncated and converted to numbers under STRICT mode
|
||||
#
|
||||
|
@@ -204,4 +204,35 @@ DELETE FROM t1;
|
||||
SELECT * FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug#41348: INSERT INTO tbl SELECT * FROM temp_tbl overwrites locking type of temp table
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TEMPORARY TABLE t1 (a INT);
|
||||
CREATE TEMPORARY TABLE t2 LIKE t1;
|
||||
|
||||
DELIMITER |;
|
||||
CREATE FUNCTION f1() RETURNS INT
|
||||
BEGIN
|
||||
return 1;
|
||||
END|
|
||||
DELIMITER ;|
|
||||
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT f1();
|
||||
|
||||
CREATE TABLE t3 SELECT * FROM t1;
|
||||
INSERT INTO t1 SELECT f1();
|
||||
|
||||
UPDATE t1,t2 SET t1.a = t2.a;
|
||||
INSERT INTO t2 SELECT f1();
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
DROP FUNCTION f1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@@ -352,6 +352,51 @@ SELECT HEX(b1), HEX(b2), i2 FROM t2
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
#
|
||||
# Bug #35796 SHOW CREATE TABLE and default value for BIT field
|
||||
#
|
||||
CREATE TABLE IF NOT EXISTS t1 (
|
||||
f1 bit(2) NOT NULL default b'10',
|
||||
f2 bit(14) NOT NULL default b'11110000111100'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--error ER_INVALID_DEFAULT
|
||||
CREATE TABLE IF NOT EXISTS t1 (
|
||||
f1 bit(2) NOT NULL default b''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
|
||||
|
||||
|
||||
#
|
||||
# Bug#31399 Wrong query result when doing join buffering over BIT fields
|
||||
#
|
||||
create table t1bit7 (a1 bit(7) not null) engine=MyISAM;
|
||||
create table t2bit7 (b1 bit(7)) engine=MyISAM;
|
||||
|
||||
insert into t1bit7 values (b'1100000');
|
||||
insert into t1bit7 values (b'1100001');
|
||||
insert into t1bit7 values (b'1100010');
|
||||
insert into t2bit7 values (b'1100001');
|
||||
insert into t2bit7 values (b'1100010');
|
||||
insert into t2bit7 values (b'1100110');
|
||||
|
||||
select bin(a1) from t1bit7, t2bit7 where t1bit7.a1=t2bit7.b1;
|
||||
drop table t1bit7, t2bit7;
|
||||
|
||||
create table t1bit7 (a1 bit(15) not null) engine=MyISAM;
|
||||
create table t2bit7 (b1 bit(15)) engine=MyISAM;
|
||||
|
||||
insert into t1bit7 values (b'110000011111111');
|
||||
insert into t1bit7 values (b'110000111111111');
|
||||
insert into t1bit7 values (b'110001011111111');
|
||||
insert into t2bit7 values (b'110000111111111');
|
||||
insert into t2bit7 values (b'110001011111111');
|
||||
insert into t2bit7 values (b'110011011111111');
|
||||
|
||||
select bin(a1) from t1bit7, t2bit7 where t1bit7.a1=t2bit7.b1;
|
||||
drop table t1bit7, t2bit7;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
#
|
||||
|
@@ -62,7 +62,7 @@ drop table t1;
|
||||
# Test of date and not null
|
||||
#
|
||||
|
||||
create table t1 (date date);
|
||||
create table t1 (date date);
|
||||
insert into t1 values ("2000-08-10"),("2000-08-11");
|
||||
select date_add(date,INTERVAL 1 DAY),date_add(date,INTERVAL 1 SECOND) from t1;
|
||||
drop table t1;
|
||||
@@ -75,9 +75,12 @@ CREATE TABLE t1(AFIELD INT);
|
||||
INSERT INTO t1 VALUES(1);
|
||||
CREATE TABLE t2(GMT VARCHAR(32));
|
||||
INSERT INTO t2 VALUES('GMT-0800');
|
||||
SELECT DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ' , t2.GMT)) FROM t1, t2 GROUP BY t1.AFIELD;
|
||||
SELECT DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ', t2.GMT))
|
||||
FROM t1, t2 GROUP BY t1.AFIELD;
|
||||
INSERT INTO t1 VALUES(1);
|
||||
SELECT DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ' , t2.GMT)), DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ' , t2.GMT)) FROM t1,t2 GROUP BY t1.AFIELD;
|
||||
SELECT DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ', t2.GMT)),
|
||||
DATE_FORMAT("2002-03-06 10:11:12", CONCAT('%a, %d %M %Y %H:%i:%s ', t2.GMT))
|
||||
FROM t1,t2 GROUP BY t1.AFIELD;
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
@@ -90,7 +93,7 @@ SELECT DATE_FORMAT(f1, "%l.%i %p") , DATE_FORMAT(f2, "%l.%i %p") FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug 4937: different date -> string conversion when using SELECT ... UNION
|
||||
# Bug#4937: different date -> string conversion when using SELECT ... UNION
|
||||
# and INSERT ... SELECT ... UNION
|
||||
#
|
||||
|
||||
@@ -141,7 +144,7 @@ select * from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #30942: select str_to_date from derived table returns varying results
|
||||
# Bug#30942: select str_to_date from derived table returns varying results
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
a INT
|
||||
@@ -155,10 +158,22 @@ DROP TABLE t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug #31221: Optimizer incorrectly identifies impossible WHERE clause
|
||||
# Bug#31221: Optimizer incorrectly identifies impossible WHERE clause
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a DATE, b int, PRIMARY KEY (a,b));
|
||||
CREATE TABLE t1 (a DATE, b INT, PRIMARY KEY (a,b));
|
||||
## The current sub test could fail (difference to expected result) if we
|
||||
## have just reached midnight.
|
||||
## (Bug#41776 type_date.test may fail if run around midnight)
|
||||
## Therefore we sleep a bit if we are too close to midnight.
|
||||
## The complete test itself needs in average less than 1 second.
|
||||
## Therefore a time_distance to midnight of 5 seconds should be sufficient.
|
||||
if (`SELECT CURTIME() > SEC_TO_TIME(24 * 3600 - 5)`)
|
||||
{
|
||||
# We are here when CURTIME() is between '23:59:56' and '23:59:59'.
|
||||
# So a sleep time of 5 seconds brings us between '00:00:01' and '00:00:04'.
|
||||
--real_sleep 5
|
||||
}
|
||||
INSERT INTO t1 VALUES (DATE(NOW()), 1);
|
||||
SELECT COUNT(*) FROM t1 WHERE a = NOW();
|
||||
EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
|
||||
@@ -174,7 +189,7 @@ EXPLAIN SELECT COUNT(*) FROM t1 WHERE a = NOW();
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #28687: Search fails on '0000-00-00' date after sql_mode change
|
||||
# Bug#28687: Search fails on '0000-00-00' date after sql_mode change
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (a DATE);
|
||||
|
@@ -252,4 +252,19 @@ insert into t1 values (2e30), (-2e30);
|
||||
select f1 + 0e0 from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #27483: Casting 'scientific notation type' to 'unsigned bigint' fails on
|
||||
# windows.
|
||||
#
|
||||
|
||||
create table t1(d double, u bigint unsigned);
|
||||
|
||||
insert into t1(d) values (9.22337203685479e18),
|
||||
(1.84e19);
|
||||
|
||||
update t1 set u = d;
|
||||
select u from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
@@ -4,7 +4,7 @@
|
||||
#
|
||||
disable_query_log;
|
||||
--require r/true.require
|
||||
select support = 'Disabled' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
select support = 'NO' as `TRUE` from information_schema.engines where engine = 'ndbcluster';
|
||||
enable_query_log;
|
||||
|
||||
|
||||
@@ -16,4 +16,9 @@ create table t1 (id int) engine=NDB;
|
||||
alter table t1 engine=NDB;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Bug#29263 disabled storage engines omitted in SHOW ENGINES
|
||||
#
|
||||
SELECT ENGINE, SUPPORT FROM INFORMATION_SCHEMA.ENGINES WHERE ENGINE='ndbcluster';
|
||||
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE
|
||||
PLUGIN_NAME='ndbcluster';
|
||||
|
@@ -551,4 +551,29 @@ INSERT INTO t1 VALUES (0), (0);
|
||||
SELECT 1 FROM t1 ORDER BY(UPDATEXML(a, '1', '1'));
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# BUG#38227 EXTRACTVALUE doesn't work with DTD declarations
|
||||
#
|
||||
# Check that quoted strings work fine in DOCTYPE declaration.
|
||||
#
|
||||
|
||||
SET @xml=
|
||||
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title> Title - document with document declaration</title>
|
||||
</head>
|
||||
<body> Hi, Im a webpage with document a declaration </body>
|
||||
</html>';
|
||||
|
||||
SELECT ExtractValue(@xml, 'html/head/title');
|
||||
SELECT ExtractValue(@xml, 'html/body');
|
||||
|
||||
# These two documents will fail.
|
||||
# Quoted strings are not allowed in regular tags
|
||||
#
|
||||
SELECT ExtractValue('<xml "xxx" "yyy">CharData</xml>', '/xml');
|
||||
SELECT ExtractValue('<xml xxx "yyy">CharData</xml>', '/xml');
|
||||
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
Reference in New Issue
Block a user