Commit 7b207a83 authored by unknown's avatar unknown
Browse files

Merge mskold@bk-internal.mysql.com:/home/bk/mysql-4.1

into  mysql.com:/home/marty/MySQL/mysql-4.1

parents 1d522eb7 a3f36966
Loading
Loading
Loading
Loading
+86 −0
Original line number Diff line number Diff line
@@ -63,3 +63,89 @@ pk u o
5	5	5
insert into t1 values (1,1,1);
drop table t1;
create table t1 (x integer not null primary key, y varchar(32), z integer, key(z)) engine = ndb;
insert into t1 values (1,'one',1), (2,'two',2),(3,"three",3);
begin;
select * from t1 where x = 1 for update;
x	y	z
1	one	1
begin;
select * from t1 where x = 2 for update;
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where y = 'one' or y = 'three' for update;
x	y	z
3	three	3
1	one	1
begin;
select * from t1 where x = 2 for update;
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where z > 1 and z < 3 for update;
x	y	z
2	two	2
begin;
select * from t1 where x = 1 for update;
x	y	z
1	one	1
select * from t1 where x = 2 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where x = 1 lock in share mode;
x	y	z
1	one	1
begin;
select * from t1 where x = 1 lock in share mode;
x	y	z
1	one	1
select * from t1 where x = 2 for update;
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where y = 'one' or y = 'three' lock in share mode;
x	y	z
3	three	3
1	one	1
begin;
select * from t1 where y = 'one' lock in share mode;
x	y	z
1	one	1
select * from t1 where x = 2 for update;
x	y	z
2	two	2
select * from t1 where x = 1 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
begin;
select * from t1 where z > 1 and z < 3 lock in share mode;
x	y	z
2	two	2
begin;
select * from t1 where z = 1 lock in share mode;
x	y	z
1	one	1
select * from t1 where x = 1 for update;
x	y	z
1	one	1
select * from t1 where x = 2 for update;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
rollback;
commit;
drop table t1;
+16 −7
Original line number Diff line number Diff line
DROP TABLE IF EXISTS t2;
CREATE TABLE t2 (
a bigint unsigned NOT NULL PRIMARY KEY,
DROP TABLE IF EXISTS t1, t2;
CREATE TABLE t1 (
a bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
b int unsigned not null,
c int unsigned
) engine=ndbcluster;
select count(*) from t2;
select count(*) from t1;
count(*)
5000
truncate table t2;
select count(*) from t2;
select * from t1 order by a limit 2;
a	b	c
1	509	2500
2	510	7
truncate table t1;
select count(*) from t1;
count(*)
0
drop table t2;
insert into t1 values(NULL,1,1),(NULL,2,2);
select * from t1 order by a;
a	b	c
1	1	1
2	2	2
drop table t1;
+111 −0
Original line number Diff line number Diff line
@@ -69,4 +69,115 @@ insert into t1 values (1,1,1);

drop table t1;

# Lock for update

create table t1 (x integer not null primary key, y varchar(32), z integer, key(z)) engine = ndb;

insert into t1 values (1,'one',1), (2,'two',2),(3,"three",3); 

# PK access
connection con1;
begin;
select * from t1 where x = 1 for update;

connection con2;
begin;
select * from t1 where x = 2 for update;
--error 1205
select * from t1 where x = 1 for update;
rollback;

connection con1;
commit;

# table scan
connection con1;
begin;
select * from t1 where y = 'one' or y = 'three' for update;

connection con2;
begin;
# Have to check with pk access here since scans take locks on
# all rows and then release them in chunks
select * from t1 where x = 2 for update;
--error 1205
select * from t1 where x = 1 for update;
rollback;

connection con1;
commit;

# index scan
connection con1;
begin;
select * from t1 where z > 1 and z < 3 for update;

connection con2;
begin;
# Have to check with pk access here since scans take locks on
# all rows and then release them in chunks
select * from t1 where x = 1 for update;
--error 1205
select * from t1 where x = 2 for update;
rollback;

connection con1;
commit;

# share locking

# PK access
connection con1;
begin;
select * from t1 where x = 1 lock in share mode;

connection con2;
begin;
select * from t1 where x = 1 lock in share mode;
select * from t1 where x = 2 for update;
--error 1205
select * from t1 where x = 1 for update;
rollback;

connection con1;
commit;

# table scan
connection con1;
begin;
select * from t1 where y = 'one' or y = 'three' lock in share mode;

connection con2;
begin;
select * from t1 where y = 'one' lock in share mode;
# Have to check with pk access here since scans take locks on
# all rows and then release them in chunks
select * from t1 where x = 2 for update;
--error 1205
select * from t1 where x = 1 for update;
rollback;

connection con1;
commit;

# index scan
connection con1;
begin;
select * from t1 where z > 1 and z < 3 lock in share mode;

connection con2;
begin;
select * from t1 where z = 1 lock in share mode;
# Have to check with pk access here since scans take locks on
# all rows and then release them in chunks
select * from t1 where x = 1 for update;
--error 1205
select * from t1 where x = 2 for update;
rollback;

connection con1;
commit;

drop table t1;

# End of 4.1 tests
+14 −9
Original line number Diff line number Diff line
@@ -2,12 +2,11 @@
-- source include/not_embedded.inc

--disable_warnings
DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t1, t2;
--enable_warnings


CREATE TABLE t2 (
  a bigint unsigned NOT NULL PRIMARY KEY,
CREATE TABLE t1 (
  a bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  b int unsigned not null,
  c int unsigned
) engine=ndbcluster;
@@ -20,17 +19,23 @@ let $1=500;
disable_query_log;
while ($1)
{
 eval insert into t2 values($1*10, $1+9, 5*$1), ($1*10+1, $1+10, 7),($1*10+2, $1+10, 7*$1), ($1*10+3, $1+10, 10+$1), ($1*10+4, $1+10, 70*$1), ($1*10+5, $1+10, 7), ($1*10+6, $1+10, 9), ($1*10+7, $1+299, 899), ($1*10+8, $1+10, 12), ($1*10+9, $1+10, 14*$1);
 eval insert into t1 values(NULL, $1+9, 5*$1), (NULL, $1+10, 7),(NULL, $1+10, 7*$1), (NULL, $1+10, 10+$1), (NULL, $1+10, 70*$1), (NULL, $1+10, 7), (NULL, $1+10, 9), (NULL, $1+299, 899), (NULL, $1+10, 12), (NULL, $1+10, 14*$1);
 dec $1;
}
enable_query_log;

select count(*) from t2;
select count(*) from t1;

select * from t1 order by a limit 2;

truncate table t1;

select count(*) from t1;

truncate table t2;
insert into t1 values(NULL,1,1),(NULL,2,2);

select count(*) from t2;
select * from t1 order by a;

drop table t2;
drop table t1;

# End of 4.1 tests
+4 −3
Original line number Diff line number Diff line
@@ -45,14 +45,15 @@ public:
  NdbResultSet* readTuples(LockMode = LM_Read,
			   Uint32 batch = 0, 
			   Uint32 parallel = 0,
			   bool order_by = false);
			   bool order_by = false,
			   bool keyinfo = false);
  
  inline NdbResultSet* readTuples(int parallell){
    return readTuples(LM_Read, 0, parallell, false);
    return readTuples(LM_Read, 0, parallell);
  }
  
  inline NdbResultSet* readTuplesExclusive(int parallell = 0){
    return readTuples(LM_Exclusive, 0, parallell, false);
    return readTuples(LM_Exclusive, 0, parallell);
  }

  /**
Loading