config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/innodb_gis/t/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //home/usr.opt/mysql57/mysql-test/suite/innodb_gis/t/rtree_concurrent_srch.test

# WL#6745 InnoDB R-tree support
# This test case will test R-tree split.

# Not supported in embedded
--source include/not_embedded.inc

--source include/have_innodb.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/big_test.inc

# Create table with R-tree index.
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;

# Insert enough values to let R-tree split.
insert into t1 values(1, Point(1,1));
insert into t1 values(2, Point(2,2));
insert into t1 values(3, Point(3,3));
insert into t1 values(4, Point(4,4));
insert into t1 values(5, Point(5,5));
insert into t1 values(6, Point(6,6));
insert into t1 values(7, Point(7,7));
insert into t1 values(8, Point(8,8));
insert into t1 values(9, Point(9,9));

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;

connect (a,localhost,root,,);
connection a;
SET SESSION debug="+d,rtr_pcur_move_to_next_return";

set session transaction isolation level serializable;
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
SET DEBUG_SYNC = 'RESET';
SET DEBUG_SYNC = 'row_search_for_mysql_before_return SIGNAL started WAIT_FOR go_ahead';
--send select count(*) from t1 where MBRWithin(t1.c2, @g1);

--echo # Establish session con1 (user=root)
connect (con1,localhost,root,,);
connection con1;
set session transaction isolation level serializable;

SET DEBUG_SYNC = 'now WAIT_FOR started';
insert into t1 select * from t1;
SET DEBUG_SYNC = 'now SIGNAL go_ahead';

connection a;
reap;
select count(*) from t1 where MBRWithin(t1.c2, @g1);

connection default;
insert into t1 select * from t1;
insert into t1 select * from t1;

set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
select count(*) from t1 where MBRWithin(t1.c2, @g1);

set @g1 = ST_GeomFromText('Polygon((10 10,10 800,800 800,800 10,10 10))');
select count(*) from t1 where MBRWithin(t1.c2, @g1);

set session transaction isolation level serializable;

truncate t1;

# Test on predicate locking
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));

insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;

# Connection 'a' will place predicate lock on almost all pages
connection a;
set session transaction isolation level serializable;
select @@tx_isolation;
start transaction;
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
select count(*) from t1 where MBRwithin(t1.c2, @g1);

# The split will replicate locks across pages
connect (b,localhost,root,,);
connection b;
set session transaction isolation level serializable;
set session innodb_lock_wait_timeout = 1;

select @@tx_isolation;

insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;

# FIXME: Put this back once we sort out the shrink business
#insert into t1 select * from t1;

connection a;
commit;

connection default;
select count(*) from t1;

# Insert a record that would be in the search range
insert into t1 values (105, Point(105, 105));

# Connection 'a' will place predicate lock on almost all pages
connection a;
start transaction;
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
select count(*) from t1 where MBRwithin(t1.c2, @g1);

connection b;
select @@innodb_lock_wait_timeout;
select @@tx_isolation;

--error ER_LOCK_WAIT_TIMEOUT
insert into t1 select * from t1;
select count(*) from t1;

connection a;
select sleep(2);
commit;

#==================Test predicates on "MBRIntersects"==========================
connection default;
truncate t1;

# Test on predicate locking
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(4 4, 170 170)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));

insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;

# Connection 'a' will place predicate lock on almost all pages
connection a;
set session transaction isolation level serializable;
select @@tx_isolation;
start transaction;
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
select count(*) from t1 where MBRwithin(t1.c2, @g1);

# The split will replicate locks across pages
connection b;
set session transaction isolation level serializable;
set session innodb_lock_wait_timeout = 1;

select @@tx_isolation;

insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;
insert into t1 select * from t1;

connection a;
commit;

connection default;
select count(*) from t1;

# Insert a record that would be in the search range
insert into t1 values (105, Point(105, 105));

# Connection 'a' will place predicate lock on almost all pages
connection a;
start transaction;
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
select count(*) from t1 where MBRwithin(t1.c2, @g1);
select count(*) from t1 where MBRIntersects(t1.c2, @g1);

connection b;
select @@innodb_lock_wait_timeout;
select @@tx_isolation;

# this should conflict with the "MBRIntersects" predicate lock in session "a"
--error ER_LOCK_WAIT_TIMEOUT
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(8 105, 200 105)'));
select count(*) from t1;

connection a;
select sleep(2);
commit;

#==================Test predicate lock on "delete"==========================
connection default;
truncate t1;

# Test on predicate locking
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));

# Connection default will place predicate lock on follow range
set @g1 = ST_GeomFromText('Polygon((3 3, 3 5, 5 5, 5 3, 3 3))');
start transaction;
delete from t1 where MBRWithin(t1.c2, @g1);

connection a;
set session innodb_lock_wait_timeout = 1;
select @@innodb_lock_wait_timeout;
--error ER_LOCK_WAIT_TIMEOUT
insert into t1 values(4, Point(4,4));

connection default;
rollback;

#==================Test predicate lock on "select for update"==================
connection default;
truncate t1;

# Test on predicate locking
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(3 3, 160 160)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));

# Connection default will place predicate lock on follow range
set @g1 = ST_GeomFromText('Polygon((3 3, 3 5, 5 5, 5 3, 3 3))');
start transaction;
select count(*) from t1 where MBRWithin(t1.c2, @g1) for update;

connection a;
set session innodb_lock_wait_timeout = 1;
select @@innodb_lock_wait_timeout;
--error ER_LOCK_WAIT_TIMEOUT
insert into t1 values(4, Point(4,4));

connection default;
rollback;
#==================Test predicates replicate through split  =================
connection default;
truncate t1;

delimiter |;
create procedure insert_t1(IN start int, IN total int)
begin
        declare i int default 1;
	set i = start;
        while (i <= total) DO
                insert into t1 values (i, Point(i, i));
                set i = i + 1;
        end while;
end|
delimiter ;|

CALL insert_t1(0, 1000);

# Connection 'a' will place predicate lock on root and last leaf page
connection a;
set session transaction isolation level serializable;
select @@tx_isolation;
start transaction;
set @g1 = ST_GeomFromText('Polygon((800 800, 800 1000, 1000 1000, 1000 800, 800 800))');
select count(*) from t1 where MBRwithin(t1.c2, @g1);

# Connection 'b' will split the last leaf page, so the predicate
# lock should replicate
connection b;

CALL insert_t1(1001, 2000);

# This insert goes to the new page after split, it should be blocked
set session transaction isolation level serializable;
set session innodb_lock_wait_timeout = 1;
# Insert a record that would be in the search range
--error ER_LOCK_WAIT_TIMEOUT
insert into t1 values (1200, Point(950, 950));

connection a;
select sleep(2);
commit;

connection a;
SET SESSION debug="-d,rtr_pcur_move_to_next_return";
disconnect a;
--source include/wait_until_disconnected.inc

connection b;
disconnect b;
--source include/wait_until_disconnected.inc

# Clean up.
connection default;
drop table t1;

drop procedure insert_t1;

#============ Test row locks =======================
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;


INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(2 2, 150 150)'));
INSERT INTO t1  VALUES (2, ST_GeomFromText('LineString(3 3, 160 160)'));
INSERT INTO t1  VALUES (2, ST_GeomFromText('LineString(4 4, 170 170)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(5 5, 180 180)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(6 6, 190 190)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(7 7, 200 200)'));
INSERT INTO t1  VALUES (1, ST_GeomFromText('LineString(8 8, 210 210)'));

connect (a,localhost,root,,);
connection a;
SET SESSION debug="+d,rtr_pcur_move_to_next_return";

set transaction isolation level serializable;
start transaction;
set @g1 = ST_GeomFromText('Polygon((100 100, 100 110, 110 110, 110 100, 100 100))');
select count(*) from t1 where MBRwithin(t1.c2, @g1);

connect (b,localhost,root,,);
connection b;

# This should be successful
delete from t1 where  c1 = 1;

connection a;
commit;
set transaction isolation level serializable;
start transaction;
set @g1 = ST_GeomFromText('Polygon((0 0, 0 300, 300 300, 300 0, 0 0))');
select count(*) from t1 where MBRwithin(t1.c2, @g1);

connection b;

set session innodb_lock_wait_timeout = 1;
--error ER_LOCK_WAIT_TIMEOUT
delete from t1 where  c1 = 2;

# Clean up.
connection a;
commit;

connection default;
drop table t1;
SET DEBUG_SYNC= 'RESET';

# Test btr_discard_page adjust concurrent search path
create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;

start transaction;
insert into t1 values(1, Point(1,1));
insert into t1 values(2, Point(2,2));
insert into t1 values(3, Point(3,3));
insert into t1 values(4, Point(4,4));
insert into t1 values(5, Point(5,5));
insert into t1 values(6, Point(6,6));
insert into t1 values(7, Point(7,7));
insert into t1 values(8, Point(8,8));
insert into t1 values(9, Point(9,9));

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;

select count(*) from t1;

connection b;
set @g1 = ST_GeomFromText('Polygon((0 0,0 100,100 100,100 0,0 0))');
set transaction isolation level read uncommitted;
SET DEBUG_SYNC= 'row_search_for_mysql_before_return SIGNAL siga WAIT_FOR sigb';
send select count(*) from t1 where MBRWithin(t1.c2, @g1);

connection default;
SET DEBUG_SYNC= 'now WAIT_FOR siga';
rollback;
SET DEBUG_SYNC= 'now SIGNAL sigb';

connection b;
--reap
select count(*) from t1 where MBRWithin(t1.c2, @g1);

connection default;
DROP TABLE t1;
SET DEBUG_SYNC = 'RESET';

create table t1 (c1 int, c2 geometry not null, spatial index (c2))engine=innodb;

delimiter |;
create procedure insert_t1(IN total int)
begin
        declare i int default 1;
        while (i <= total) DO
                insert into t1 values (i, Point(i, i));
                set i = i + 1;
        end while;
end|
delimiter ;|

start transaction;

CALL insert_t1(100);

connection a;
set @g1 = ST_GeomFromText('Polygon((0 0,0 1000,1000 1000,1000 0,0 0))');
SET DEBUG_SYNC= 'rtr_pcur_move_to_next_return SIGNAL siga WAIT_FOR sigb';
--send select count(*) from t1 where MBRWithin(t1.c2, @g1);

connection default;
SET DEBUG_SYNC= 'now WAIT_FOR siga';
rollback;

SET DEBUG_SYNC= 'now SIGNAL sigb';

connection a;
--reap;

connection default;
drop procedure insert_t1;
DROP TABLE t1;

connection a;
SET SESSION debug="-d,rtr_pcur_move_to_next_return";
disconnect a;
--source include/wait_until_disconnected.inc

connection b;
disconnect b;
--source include/wait_until_disconnected.inc

connection default;
SET DEBUG_SYNC = 'RESET';

Man Man