mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
f7ee88253a
Bug #31956 auto increment bugs in MySQL Cluster: Added utility method and constant for internal prefetch default ndb_auto_increment.result: BitKeeper file /home/marty/MySQL/mysql-5.0-ndb/mysql-test/r/ndb_auto_increment.result mysqld.cc: Bug #25176 Trying to set ndb_autoincrement_prefetch_sz always fails: Changed pointer to max value Bug #31956 auto increment bugs in MySQL Cluster: Changed meaning of ndb_autoincrement_prefetch_sz to specify prefetch between statements, changed default to 1 (with internal prefetch to at least 32 inside a statement) ndb_insert.test, ndb_insert.result: Moved auto_increment tests to ndb_auto_increment.test ndb_auto_increment.test: BitKeeper file /home/marty/MySQL/mysql-5.0-ndb/mysql-test/t/ndb_auto_increment.test ha_ndbcluster.cc: Bug #31956 auto increment bugs in MySQL Cluster: Changed meaning of ndb_autoincrement_prefetch_sz to specify prefetch between statements, changed default to 1 (with internal prefetch to at least 32 inside a statement), added handling of updates of pk/unique key with auto_increment Bug #32055 Cluster does not handle auto inc correctly with insert ignore statement sql/mysqld.cc: Bug #25176 Trying to set ndb_autoincrement_prefetch_sz always fails: Changed pointer to max value Bug #31956 auto increment bugs in MySQL Cluster: Changed meaning of ndb_autoincrement_prefetch_sz to specify prefetch between statements, changed default to 1 (with internal prefetch to at least 32 inside a statement) sql/ha_ndbcluster.h: Bug #31956 auto increment bugs in MySQL Cluster: Added utility method and constant for internal prefetch default sql/ha_ndbcluster.cc: Bug #31956 auto increment bugs in MySQL Cluster: Changed meaning of ndb_autoincrement_prefetch_sz to specify prefetch between statements, changed default to 1 (with internal prefetch to at least 32 inside a statement), added handling of updates of pk/unique key with auto_increment Bug #32055 Cluster does not handle auto inc correctly with insert ignore statement mysql-test/r/ndb_auto_increment.result: BitKeeper file /home/marty/MySQL/mysql-5.0-ndb/mysql-test/r/ndb_auto_increment.result mysql-test/t/ndb_auto_increment.test: BitKeeper file /home/marty/MySQL/mysql-5.0-ndb/mysql-test/t/ndb_auto_increment.test mysql-test/t/ndb_insert.test: Moved auto_increment tests to ndb_auto_increment.test mysql-test/r/ndb_insert.result: Moved auto_increment tests to ndb_auto_increment.test
294 lines
9 KiB
Text
294 lines
9 KiB
Text
-- source include/have_ndb.inc
|
|
-- source include/have_multi_ndb.inc
|
|
-- source include/not_embedded.inc
|
|
|
|
--disable_warnings
|
|
connection server1;
|
|
DROP TABLE IF EXISTS t1,t2;
|
|
connection server2;
|
|
DROP TABLE IF EXISTS t1;
|
|
connection server1;
|
|
--enable_warnings
|
|
|
|
set @old_auto_increment_offset = @@session.auto_increment_offset;
|
|
set @old_auto_increment_increment = @@session.auto_increment_increment;
|
|
set @old_ndb_autoincrement_prefetch_sz = @@session.ndb_autoincrement_prefetch_sz;
|
|
|
|
flush status;
|
|
|
|
create table t1 (a int not null auto_increment primary key) engine ndb;
|
|
|
|
# Step 1: Verify simple insert
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 2: Verify simple update with higher than highest value causes
|
|
# next insert to use updated_value + 1
|
|
update t1 set a = 5 where a = 1;
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 3: Verify insert that inserts higher than highest value causes
|
|
# next insert to use inserted_value + 1
|
|
insert into t1 values (7);
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 4: Verify that insert into hole, lower than highest value doesn't
|
|
# affect next insert
|
|
insert into t1 values (2);
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 5: Verify that update into hole, lower than highest value doesn't
|
|
# affect next insert
|
|
update t1 set a = 4 where a = 2;
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 6: Verify that delete of highest value doesn't cause the next
|
|
# insert to reuse this value
|
|
delete from t1 where a = 10;
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 7: Verify that REPLACE has the same effect as INSERT
|
|
replace t1 values (NULL);
|
|
select * from t1 order by a;
|
|
replace t1 values (15);
|
|
select * from t1 order by a;
|
|
replace into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 8: Verify that REPLACE has the same effect as UPDATE
|
|
replace t1 values (15);
|
|
select * from t1 order by a;
|
|
|
|
# Step 9: Verify that IGNORE doesn't affect auto_increment
|
|
insert ignore into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
insert ignore into t1 values (15), (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 10: Verify that on duplicate key as UPDATE behaves as an
|
|
# UPDATE
|
|
insert into t1 values (15)
|
|
on duplicate key update a = 20;
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
# Step 11: Verify that on duplicate key as INSERT behaves as INSERT
|
|
insert into t1 values (NULL) on duplicate key update a = 30;
|
|
select * from t1 order by a;
|
|
insert into t1 values (30) on duplicate key update a = 40;
|
|
select * from t1 order by a;
|
|
|
|
#Step 12: Vefify INSERT IGNORE (bug#32055)
|
|
insert ignore into t1 values(600),(NULL),(NULL),(610),(NULL);
|
|
select * from t1 order by a;
|
|
drop table t1;
|
|
|
|
#Step 13: Verify auto_increment of unique key
|
|
create table t1 (a int not null primary key,
|
|
b int not null unique auto_increment) engine ndb;
|
|
insert into t1 values (1, NULL);
|
|
insert into t1 values (3, NULL);
|
|
update t1 set b = 3 where a = 3;
|
|
insert into t1 values (4, NULL);
|
|
select * from t1 order by a;
|
|
drop table t1;
|
|
|
|
#Step 14: Verify that auto_increment_increment and auto_increment_offset
|
|
# work as expected
|
|
|
|
CREATE TABLE t1 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=NDBCLUSTER;
|
|
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=MYISAM;
|
|
|
|
SET @@session.auto_increment_increment=10;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
TRUNCATE t1;
|
|
TRUNCATE t2;
|
|
SET @@session.auto_increment_offset=5;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t1 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (pk,b,c) VALUES (27,4,3),(NULL,5,4),(99,6,5),(NULL,7,6);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
TRUNCATE t1;
|
|
TRUNCATE t2;
|
|
SET @@session.auto_increment_increment=2;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
DROP TABLE t1, t2;
|
|
|
|
CREATE TABLE t1 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
|
|
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=MYISAM AUTO_INCREMENT = 7;
|
|
|
|
SET @@session.auto_increment_offset=1;
|
|
SET @@session.auto_increment_increment=1;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
DROP TABLE t1, t2;
|
|
|
|
CREATE TABLE t1 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=NDBCLUSTER AUTO_INCREMENT = 3;
|
|
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=MYISAM AUTO_INCREMENT = 3;
|
|
|
|
SET @@session.auto_increment_offset=5;
|
|
SET @@session.auto_increment_increment=10;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
DROP TABLE t1, t2;
|
|
|
|
CREATE TABLE t1 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=NDBCLUSTER AUTO_INCREMENT = 7;
|
|
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=MYISAM AUTO_INCREMENT = 7;
|
|
|
|
SET @@session.auto_increment_offset=5;
|
|
SET @@session.auto_increment_increment=10;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
DROP TABLE t1, t2;
|
|
|
|
CREATE TABLE t1 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=NDBCLUSTER AUTO_INCREMENT = 5;
|
|
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=MYISAM AUTO_INCREMENT = 5;
|
|
|
|
SET @@session.auto_increment_offset=5;
|
|
SET @@session.auto_increment_increment=10;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
DROP TABLE t1, t2;
|
|
|
|
CREATE TABLE t1 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=NDBCLUSTER AUTO_INCREMENT = 100;
|
|
|
|
CREATE TABLE t2 (
|
|
pk INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
|
|
b INT NOT NULL,
|
|
c INT NOT NULL UNIQUE
|
|
) ENGINE=MYISAM AUTO_INCREMENT = 100;
|
|
|
|
SET @@session.auto_increment_offset=5;
|
|
SET @@session.auto_increment_increment=10;
|
|
INSERT INTO t1 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
INSERT INTO t2 (b,c) VALUES (1,0),(2,1),(3,2);
|
|
SELECT * FROM t1 ORDER BY pk;
|
|
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
|
|
DROP TABLE t1, t2;
|
|
|
|
#Step 15: Now verify that behaviour on multiple MySQL Servers behave
|
|
# properly. Start by dropping table and recreating it to start
|
|
# counters and id caches from zero again.
|
|
--disable_warnings
|
|
connection server2;
|
|
SET @@session.auto_increment_offset=1;
|
|
SET @@session.auto_increment_increment=1;
|
|
set ndb_autoincrement_prefetch_sz = 32;
|
|
drop table if exists t1;
|
|
connection server1;
|
|
SET @@session.auto_increment_offset=1;
|
|
SET @@session.auto_increment_increment=1;
|
|
set ndb_autoincrement_prefetch_sz = 32;
|
|
--enable_warnings
|
|
|
|
|
|
create table t1 (a int not null auto_increment primary key) engine ndb;
|
|
# Basic test, ensure that the second server gets a new range.
|
|
#Generate record with key = 1
|
|
insert into t1 values (NULL);
|
|
connection server2;
|
|
#Generate record with key = 33
|
|
insert into t1 values (NULL);
|
|
connection server1;
|
|
select * from t1 order by a;
|
|
|
|
#This insert should not affect the range of the second server
|
|
insert into t1 values (20);
|
|
connection server2;
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
connection server1;
|
|
#This insert should remove cached values but also skip values already
|
|
#taken by server2, given that there is no method of communicating with
|
|
#the other server it should also cause a conflict
|
|
connection server1;
|
|
|
|
insert into t1 values (35);
|
|
insert into t1 values (NULL);
|
|
connection server2;
|
|
--error ER_DUP_ENTRY
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
insert into t1 values (100);
|
|
insert into t1 values (NULL);
|
|
connection server1;
|
|
insert into t1 values (NULL);
|
|
select * from t1 order by a;
|
|
|
|
set auto_increment_offset = @old_auto_increment_offset;
|
|
set auto_increment_increment = @old_auto_increment_increment;
|
|
set ndb_autoincrement_prefetch_sz = @old_ndb_autoincrement_prefetch_sz;
|
|
|
|
drop table t1;
|