Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
ddbb4d42
Commit
ddbb4d42
authored
Dec 10, 2007
by
tomas@whalegate.ndb.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.0-ndb-merge
parents
ae7d4929
4619caa5
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
892 additions
and
354 deletions
+892
-354
mysql-test/r/ndb_auto_increment.result
mysql-test/r/ndb_auto_increment.result
+445
-0
mysql-test/r/ndb_charset.result
mysql-test/r/ndb_charset.result
+4
-4
mysql-test/r/ndb_index_unique.result
mysql-test/r/ndb_index_unique.result
+7
-7
mysql-test/r/ndb_insert.result
mysql-test/r/ndb_insert.result
+0
-169
mysql-test/r/ndb_update.result
mysql-test/r/ndb_update.result
+1
-1
mysql-test/t/ndb_auto_increment.test
mysql-test/t/ndb_auto_increment.test
+294
-0
mysql-test/t/ndb_insert.test
mysql-test/t/ndb_insert.test
+0
-138
ndb/include/kernel/signaldata/TcKeyRef.hpp
ndb/include/kernel/signaldata/TcKeyRef.hpp
+2
-1
ndb/include/kernel/signaldata/TcRollbackRep.hpp
ndb/include/kernel/signaldata/TcRollbackRep.hpp
+2
-1
ndb/include/ndbapi/NdbDictionary.hpp
ndb/include/ndbapi/NdbDictionary.hpp
+6
-1
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
+1
-0
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
+16
-1
ndb/src/ndbapi/NdbDictionary.cpp
ndb/src/ndbapi/NdbDictionary.cpp
+9
-0
ndb/src/ndbapi/NdbOperationExec.cpp
ndb/src/ndbapi/NdbOperationExec.cpp
+7
-0
ndb/src/ndbapi/NdbTransaction.cpp
ndb/src/ndbapi/NdbTransaction.cpp
+10
-2
ndb/src/ndbapi/ndberror.c
ndb/src/ndbapi/ndberror.c
+0
-2
sql/ha_ndbcluster.cc
sql/ha_ndbcluster.cc
+83
-25
sql/ha_ndbcluster.h
sql/ha_ndbcluster.h
+3
-0
sql/mysqld.cc
sql/mysqld.cc
+2
-2
No files found.
mysql-test/r/ndb_auto_increment.result
0 → 100644
View file @
ddbb4d42
DROP TABLE IF EXISTS t1,t2;
DROP TABLE IF EXISTS t1;
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;
insert into t1 values (NULL);
select * from t1 order by a;
a
1
update t1 set a = 5 where a = 1;
insert into t1 values (NULL);
select * from t1 order by a;
a
5
6
insert into t1 values (7);
insert into t1 values (NULL);
select * from t1 order by a;
a
5
6
7
8
insert into t1 values (2);
insert into t1 values (NULL);
select * from t1 order by a;
a
2
5
6
7
8
9
update t1 set a = 4 where a = 2;
insert into t1 values (NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
10
delete from t1 where a = 10;
insert into t1 values (NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
11
replace t1 values (NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
replace t1 values (15);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
15
replace into t1 values (NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
15
16
replace t1 values (15);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
15
16
insert ignore into t1 values (NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
15
16
17
insert ignore into t1 values (15), (NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
15
16
17
18
insert into t1 values (15)
on duplicate key update a = 20;
insert into t1 values (NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
16
17
18
20
21
insert into t1 values (NULL) on duplicate key update a = 30;
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
16
17
18
20
21
22
insert into t1 values (30) on duplicate key update a = 40;
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
16
17
18
20
21
22
30
insert ignore into t1 values(600),(NULL),(NULL),(610),(NULL);
select * from t1 order by a;
a
4
5
6
7
8
9
11
12
16
17
18
20
21
22
30
600
601
602
610
611
drop table t1;
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;
a b
1 1
3 3
4 4
drop table t1;
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;
pk b c
1 1 0
11 2 1
21 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
5 1 0
15 2 1
25 3 2
27 4 3
35 5 4
99 6 5
105 7 6
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
7
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;
pk b c
1 1 0
3 2 1
5 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
7 1 0
8 2 1
9 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
5 1 0
15 2 1
25 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
15 1 0
25 2 1
35 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
5 1 0
15 2 1
25 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
105 1 0
115 2 1
125 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
DROP TABLE t1, t2;
SET @@session.auto_increment_offset=1;
SET @@session.auto_increment_increment=1;
set ndb_autoincrement_prefetch_sz = 32;
drop table if exists t1;
SET @@session.auto_increment_offset=1;
SET @@session.auto_increment_increment=1;
set ndb_autoincrement_prefetch_sz = 32;
create table t1 (a int not null auto_increment primary key) engine ndb;
insert into t1 values (NULL);
insert into t1 values (NULL);
select * from t1 order by a;
a
1
33
insert into t1 values (20);
insert into t1 values (NULL);
select * from t1 order by a;
a
1
20
33
34
insert into t1 values (35);
insert into t1 values (NULL);
insert into t1 values (NULL);
ERROR 23000: Duplicate entry '35' for key 1
select * from t1 order by a;
a
1
20
21
33
34
35
insert into t1 values (100);
insert into t1 values (NULL);
insert into t1 values (NULL);
select * from t1 order by a;
a
1
20
21
22
33
34
35
100
101
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;
mysql-test/r/ndb_charset.result
View file @
ddbb4d42
...
...
@@ -112,9 +112,9 @@ unique key(a)
) engine=ndb;
insert into t1 values(1, 'aAa');
insert into t1 values(2, 'aaa');
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
aaa' for key 2
insert into t1 values(3, 'AAA');
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
AAA' for key 2
select * from t1 order by p;
p a
1 aAa
...
...
@@ -138,9 +138,9 @@ unique key(a)
) engine=ndb;
insert into t1 values (1,'A'),(2,'b '),(3,'C '),(4,'d '),(5,'E'),(6,'f');
insert into t1 values(99,'b');
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
b' for key 2
insert into t1 values(99,'a ');
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
a ' for key 2
select a,length(a) from t1 order by a;
a length(a)
A 1
...
...
mysql-test/r/ndb_index_unique.result
View file @
ddbb4d42
...
...
@@ -22,7 +22,7 @@ select * from t1 where b = 4 order by a;
a b c
3 4 6
insert into t1 values(8, 2, 3);
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
2' for key 2
select * from t1 order by a;
a b c
1 2 3
...
...
@@ -89,7 +89,7 @@ a b c
1 1 1
4 4 NULL
insert into t1 values(5,1,1);
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
1-1' for key 2
drop table t1;
CREATE TABLE t2 (
a int unsigned NOT NULL PRIMARY KEY,
...
...
@@ -112,7 +112,7 @@ select * from t2 where b = 4 order by a;
a b c
3 4 6
insert into t2 values(8, 2, 3);
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
2-3' for key 2
select * from t2 order by a;
a b c
1 2 3
...
...
@@ -135,7 +135,7 @@ a b c
8 2 3
create unique index bi using hash on t2(b);
insert into t2 values(9, 3, 1);
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
3' for key 3
alter table t2 drop index bi;
insert into t2 values(9, 3, 1);
select * from t2 order by a;
...
...
@@ -225,7 +225,7 @@ pk a
3 NULL
4 4
insert into t1 values (5,0);
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
0' for key 2
select * from t1 order by pk;
pk a
-1 NULL
...
...
@@ -258,7 +258,7 @@ pk a b c
0 NULL 18 NULL
1 3 19 abc
insert into t2 values(2,3,19,'abc');
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
3-abc' for key 2
select * from t2 order by pk;
pk a b c
-1 1 17 NULL
...
...
@@ -678,7 +678,7 @@ create table t1 (a int primary key, b varchar(1000) not null, unique key (b))
engine=ndb charset=utf8;
insert into t1 values (1, repeat(_utf8 0xe288ab6474, 200));
insert into t1 values (2, repeat(_utf8 0xe288ab6474, 200));
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫dt∫d' for key 2
select a, sha1(b) from t1;
a sha1(b)
1 08f5d02c8b8bc244f275bdfc22c42c5cab0d9d7d
...
...
mysql-test/r/ndb_insert.result
View file @
ddbb4d42
...
...
@@ -657,172 +657,3 @@ a b
2 NULL
3 NULL
drop table t1;
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;
pk b c
1 1 0
11 2 1
21 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
5 1 0
15 2 1
25 3 2
27 4 3
35 5 4
99 6 5
105 7 6
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
7
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;
pk b c
1 1 0
3 2 1
5 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
7 1 0
8 2 1
9 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
5 1 0
15 2 1
25 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
15 1 0
25 2 1
35 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
5 1 0
15 2 1
25 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
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;
pk b c
105 1 0
115 2 1
125 3 2
SELECT COUNT(t1.pk) FROM t1, t2 WHERE t1.pk = t2.pk AND t1.b = t2.b AND t1.c = t1.c;
COUNT(t1.pk)
3
DROP TABLE t1, t2;
mysql-test/r/ndb_update.result
View file @
ddbb4d42
...
...
@@ -26,7 +26,7 @@ pk1 b c
2 2 2
4 1 1
UPDATE t1 set pk1 = 1, c = 2 where pk1 = 4;
ERROR 23000: Duplicate entry '
' for key 0
ERROR 23000: Duplicate entry '
2' for key 2
UPDATE IGNORE t1 set pk1 = 1, c = 2 where pk1 = 4;
select * from t1 order by pk1;
pk1 b c
...
...
mysql-test/t/ndb_auto_increment.test
0 → 100644
View file @
ddbb4d42
--
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
;
mysql-test/t/ndb_insert.test
View file @
ddbb4d42
...
...
@@ -638,142 +638,4 @@ create table t1(a int primary key, b int, unique key(b)) engine=ndb;
insert
ignore
into
t1
values
(
1
,
0
),
(
2
,
0
),
(
2
,
null
),
(
3
,
null
);
select
*
from
t1
order
by
a
;
drop
table
t1
;
# Bug#26342 auto_increment_increment AND auto_increment_offset REALLY REALLY anger NDB cluster
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
;
# End of 4.1 tests
ndb/include/kernel/signaldata/TcKeyRef.hpp
View file @
ddbb4d42
...
...
@@ -40,12 +40,13 @@ class TcKeyRef {
friend
bool
printTCKEYREF
(
FILE
*
,
const
Uint32
*
,
Uint32
,
Uint16
);
public:
STATIC_CONST
(
SignalLength
=
4
);
STATIC_CONST
(
SignalLength
=
5
);
private:
Uint32
connectPtr
;
Uint32
transId
[
2
];
Uint32
errorCode
;
Uint32
errorData
;
};
#endif
ndb/include/kernel/signaldata/TcRollbackRep.hpp
View file @
ddbb4d42
...
...
@@ -38,12 +38,13 @@ class TcRollbackRep {
friend
bool
printTCROLBACKREP
(
FILE
*
,
const
Uint32
*
,
Uint32
,
Uint16
);
public:
STATIC_CONST
(
SignalLength
=
4
);
STATIC_CONST
(
SignalLength
=
5
);
private:
Uint32
connectPtr
;
Uint32
transId
[
2
];
Uint32
returnCode
;
Uint32
errorData
;
};
#endif
ndb/include/ndbapi/NdbDictionary.hpp
View file @
ddbb4d42
...
...
@@ -792,7 +792,12 @@ public:
* Get the name of the table being indexed
*/
const
char
*
getTable
()
const
;
/**
* Get the table representing the index
*/
const
Table
*
getIndexTable
()
const
;
/**
* Get the number of columns in the index
*/
...
...
ndb/src/kernel/blocks/dbtc/Dbtc.hpp
View file @
ddbb4d42
...
...
@@ -727,6 +727,7 @@ public:
// Index op return context
UintR
indexOp
;
UintR
clientData
;
Uint32
errorData
;
UintR
attrInfoLen
;
UintR
accumulatingIndexOp
;
...
...
ndb/src/kernel/blocks/dbtc/DbtcMain.cpp
View file @
ddbb4d42
...
...
@@ -5107,6 +5107,7 @@ void Dbtc::releaseDirtyWrite(Signal* signal)
void
Dbtc
::
execLQHKEYREF
(
Signal
*
signal
)
{
const
LqhKeyRef
*
const
lqhKeyRef
=
(
LqhKeyRef
*
)
signal
->
getDataPtr
();
Uint32
indexId
=
0
;
jamEntry
();
UintR
compare_transid1
,
compare_transid2
;
...
...
@@ -5158,6 +5159,9 @@ void Dbtc::execLQHKEYREF(Signal* signal)
ptrCheckGuard
(
opPtr
,
ctcConnectFilesize
,
localTcConnectRecord
);
// The operation executed an index trigger
TcIndexData
*
indexData
=
c_theIndexes
.
getPtr
(
currentIndexId
);
indexId
=
indexData
->
indexId
;
regApiPtr
->
errorData
=
indexId
;
const
Uint32
opType
=
regTcPtr
->
operation
;
if
(
errCode
==
ZALREADYEXIST
)
errCode
=
terrorCode
=
ZNOTUNIQUE
;
...
...
@@ -5170,7 +5174,6 @@ void Dbtc::execLQHKEYREF(Signal* signal)
}
else
{
jam
();
/** ZDELETE && NOT_FOUND */
TcIndexData
*
indexData
=
c_theIndexes
.
getPtr
(
currentIndexId
);
if
(
indexData
->
indexState
==
IS_BUILDING
&&
state
!=
CS_ABORTING
){
jam
();
/**
...
...
@@ -5242,12 +5245,14 @@ void Dbtc::execLQHKEYREF(Signal* signal)
jam
();
regApiPtr
->
lqhkeyreqrec
--
;
// Compensate for extra during read
tcKeyRef
->
connectPtr
=
indexOp
;
tcKeyRef
->
errorData
=
indexId
;
EXECUTE_DIRECT
(
DBTC
,
GSN_TCKEYREF
,
signal
,
TcKeyRef
::
SignalLength
);
apiConnectptr
.
i
=
save
;
apiConnectptr
.
p
=
regApiPtr
;
}
else
{
jam
();
tcKeyRef
->
connectPtr
=
clientData
;
tcKeyRef
->
errorData
=
indexId
;
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCKEYREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
}
//if
...
...
@@ -10548,6 +10553,7 @@ void Dbtc::releaseAbortResources(Signal* signal)
tcRollbackRep
->
transId
[
0
]
=
apiConnectptr
.
p
->
transid
[
0
];
tcRollbackRep
->
transId
[
1
]
=
apiConnectptr
.
p
->
transid
[
1
];
tcRollbackRep
->
returnCode
=
apiConnectptr
.
p
->
returncode
;
tcRollbackRep
->
errorData
=
apiConnectptr
.
p
->
errorData
;
sendSignal
(
blockRef
,
GSN_TCROLLBACKREP
,
signal
,
TcRollbackRep
::
SignalLength
,
JBB
);
}
...
...
@@ -11972,6 +11978,7 @@ void Dbtc::execTCKEYCONF(Signal* signal)
tcIndxRef
->
transId
[
0
]
=
regApiPtr
->
transid
[
0
];
tcIndxRef
->
transId
[
1
]
=
regApiPtr
->
transid
[
1
];
tcIndxRef
->
errorCode
=
4349
;
tcIndxRef
->
errorData
=
0
;
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCINDXREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
return
;
...
...
@@ -11991,6 +11998,7 @@ void Dbtc::execTCKEYCONF(Signal* signal)
tcIndxRef
->
transId
[
0
]
=
regApiPtr
->
transid
[
0
];
tcIndxRef
->
transId
[
1
]
=
regApiPtr
->
transid
[
1
];
tcIndxRef
->
errorCode
=
4349
;
tcIndxRef
->
errorData
=
0
;
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCINDXREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
return
;
...
...
@@ -12074,6 +12082,7 @@ void Dbtc::execTCKEYREF(Signal* signal)
tcIndxRef
->
transId
[
0
]
=
tcKeyRef
->
transId
[
0
];
tcIndxRef
->
transId
[
1
]
=
tcKeyRef
->
transId
[
1
];
tcIndxRef
->
errorCode
=
tcKeyRef
->
errorCode
;
tcIndxRef
->
errorData
=
0
;
releaseIndexOperation
(
regApiPtr
,
indexOp
);
...
...
@@ -12151,6 +12160,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef
->
transId
[
0
]
=
regApiPtr
->
transid
[
0
];
tcIndxRef
->
transId
[
1
]
=
regApiPtr
->
transid
[
1
];
tcIndxRef
->
errorCode
=
4000
;
tcIndxRef
->
errorData
=
0
;
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCINDXREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
return
;
...
...
@@ -12166,6 +12176,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef
->
transId
[
0
]
=
regApiPtr
->
transid
[
0
];
tcIndxRef
->
transId
[
1
]
=
regApiPtr
->
transid
[
1
];
tcIndxRef
->
errorCode
=
4349
;
tcIndxRef
->
errorData
=
0
;
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCINDXREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
return
;
...
...
@@ -12194,6 +12205,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef->transId[0] = regApiPtr->transid[0];
tcIndxRef->transId[1] = regApiPtr->transid[1];
tcIndxRef->errorCode = 4349;
tcIndxRef->errorData = 0;
sendSignal(regApiPtr->ndbapiBlockref, GSN_TCINDXREF, signal,
TcKeyRef::SignalLength, JBB);
*/
...
...
@@ -12219,6 +12231,7 @@ void Dbtc::execTRANSID_AI(Signal* signal)
tcIndxRef
->
transId
[
0
]
=
regApiPtr
->
transid
[
0
];
tcIndxRef
->
transId
[
1
]
=
regApiPtr
->
transid
[
1
];
tcIndxRef
->
errorCode
=
4349
;
tcIndxRef
->
errorData
=
regApiPtr
->
errorData
;
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCINDXREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
return
;
...
...
@@ -12272,6 +12285,7 @@ void Dbtc::readIndexTable(Signal* signal,
tcIndxRef
->
transId
[
0
]
=
regApiPtr
->
transid
[
0
];
tcIndxRef
->
transId
[
1
]
=
regApiPtr
->
transid
[
1
];
tcIndxRef
->
errorCode
=
4000
;
// tcIndxRef->errorData = ??; Where to find indexId
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCINDXREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
return
;
...
...
@@ -12414,6 +12428,7 @@ void Dbtc::executeIndexOperation(Signal* signal,
tcIndxRef
->
transId
[
0
]
=
regApiPtr
->
transid
[
0
];
tcIndxRef
->
transId
[
1
]
=
regApiPtr
->
transid
[
1
];
tcIndxRef
->
errorCode
=
4349
;
tcIndxRef
->
errorData
=
0
;
sendSignal
(
regApiPtr
->
ndbapiBlockref
,
GSN_TCINDXREF
,
signal
,
TcKeyRef
::
SignalLength
,
JBB
);
return
;
...
...
ndb/src/ndbapi/NdbDictionary.cpp
View file @
ddbb4d42
...
...
@@ -542,6 +542,15 @@ NdbDictionary::Index::getTable() const {
return
m_impl
.
getTable
();
}
const
NdbDictionary
::
Table
*
NdbDictionary
::
Index
::
getIndexTable
()
const
{
NdbTableImpl
*
t
=
m_impl
.
m_table
;
if
(
t
)
{
return
t
->
m_facade
;
}
return
0
;
}
unsigned
NdbDictionary
::
Index
::
getNoOfColumns
()
const
{
return
m_impl
.
m_columns
.
size
();
...
...
ndb/src/ndbapi/NdbOperationExec.cpp
View file @
ddbb4d42
...
...
@@ -24,6 +24,7 @@
#include "Interpreter.hpp"
#include <AttributeHeader.hpp>
#include <signaldata/TcKeyReq.hpp>
#include <signaldata/TcKeyRef.hpp>
#include <signaldata/KeyInfo.hpp>
#include <signaldata/AttrInfo.hpp>
#include <signaldata/ScanTab.hpp>
...
...
@@ -550,6 +551,12 @@ NdbOperation::receiveTCKEYREF( NdbApiSignal* aSignal)
theNdbCon
->
theReturnStatus
=
NdbTransaction
::
ReturnFailure
;
}
theError
.
code
=
aSignal
->
readData
(
4
);
if
(
aSignal
->
getLength
()
==
TcKeyRef
::
SignalLength
)
{
// Signal may contain additional error data
theError
.
details
=
(
char
*
)
aSignal
->
readData
(
5
);
}
theNdbCon
->
setOperationErrorCodeAbort
(
aSignal
->
readData
(
4
),
ao
);
if
(
theOperationType
!=
ReadRequest
||
!
theSimpleIndicator
)
// not simple read
...
...
ndb/src/ndbapi/NdbTransaction.cpp
View file @
ddbb4d42
...
...
@@ -30,6 +30,7 @@
#include <signaldata/TcCommit.hpp>
#include <signaldata/TcKeyFailConf.hpp>
#include <signaldata/TcHbRep.hpp>
#include <signaldata/TcRollbackRep.hpp>
/*****************************************************************************
NdbTransaction( Ndb* aNdb );
...
...
@@ -1757,6 +1758,8 @@ Remark: Handles the reception of the ROLLBACKREP signal.
int
NdbTransaction
::
receiveTCROLLBACKREP
(
NdbApiSignal
*
aSignal
)
{
DBUG_ENTER
(
"NdbTransaction::receiveTCROLLBACKREP"
);
/****************************************************************************
Check that we are expecting signals from this transaction and that it doesn't
belong to a transaction already completed. Simply ignore messages from other
...
...
@@ -1764,6 +1767,11 @@ transactions.
****************************************************************************/
if
(
checkState_TransId
(
aSignal
->
getDataPtr
()
+
1
)){
theError
.
code
=
aSignal
->
readData
(
4
);
// Override any previous errors
if
(
aSignal
->
getLength
()
==
TcRollbackRep
::
SignalLength
)
{
// Signal may contain additional error data
theError
.
details
=
(
char
*
)
aSignal
->
readData
(
5
);
}
/**********************************************************************/
/* A serious error has occured. This could be due to deadlock or */
...
...
@@ -1775,14 +1783,14 @@ transactions.
theCompletionStatus
=
CompletedFailure
;
theCommitStatus
=
Aborted
;
theReturnStatus
=
ReturnFailure
;
return
0
;
DBUG_RETURN
(
0
)
;
}
else
{
#ifdef NDB_NO_DROPPED_SIGNAL
abort
();
#endif
}
return
-
1
;
DBUG_RETURN
(
-
1
)
;
}
//NdbTransaction::receiveTCROLLBACKREP()
/*******************************************************************************
...
...
ndb/src/ndbapi/ndberror.c
View file @
ddbb4d42
...
...
@@ -640,8 +640,6 @@ ndberror_update(ndberror_struct * error){
if
(
!
found
){
error
->
status
=
ST_U
;
}
error
->
details
=
0
;
}
int
...
...
sql/ha_ndbcluster.cc
View file @
ddbb4d42
...
...
@@ -540,6 +540,25 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans)
err
.
code
,
res
));
if
(
res
==
HA_ERR_FOUND_DUPP_KEY
)
{
char
*
error_data
=
err
.
details
;
uint
dupkey
=
MAX_KEY
;
for
(
uint
i
=
0
;
i
<
MAX_KEY
;
i
++
)
{
if
(
m_index
[
i
].
type
==
UNIQUE_INDEX
||
m_index
[
i
].
type
==
UNIQUE_ORDERED_INDEX
)
{
const
NDBINDEX
*
unique_index
=
(
const
NDBINDEX
*
)
m_index
[
i
].
unique_index
;
if
(
unique_index
&&
unique_index
->
getIndexTable
()
&&
(
char
*
)
unique_index
->
getIndexTable
()
->
getTableId
()
==
error_data
)
{
dupkey
=
i
;
break
;
}
}
}
if
(
m_rows_to_insert
==
1
)
{
/*
...
...
@@ -547,7 +566,7 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans)
violations here, so we need to return MAX_KEY for non-primary
to signal that key is unknown
*/
m_dupkey
=
err
.
code
==
630
?
table
->
s
->
primary_key
:
MAX_KEY
;
m_dupkey
=
err
.
code
==
630
?
table
->
s
->
primary_key
:
dupkey
;
}
else
{
...
...
@@ -2259,6 +2278,25 @@ int ha_ndbcluster::full_table_scan(byte *buf)
DBUG_RETURN
(
next_result
(
buf
));
}
int
ha_ndbcluster
::
set_auto_inc
(
Field
*
field
)
{
Ndb
*
ndb
=
get_ndb
();
Uint64
next_val
=
(
Uint64
)
field
->
val_int
()
+
1
;
DBUG_ENTER
(
"ha_ndbcluster::set_auto_inc"
);
#ifndef DBUG_OFF
char
buff
[
22
];
DBUG_PRINT
(
"info"
,
(
"Trying to set next auto increment value to %s"
,
llstr
(
next_val
,
buff
)));
#endif
if
(
ndb
->
setAutoIncrementValue
((
const
NDBTAB
*
)
m_table
,
next_val
,
TRUE
)
==
-
1
)
ERR_RETURN
(
ndb
->
getNdbError
());
DBUG_RETURN
(
0
);
}
/*
Insert one record into NDB
*/
...
...
@@ -2413,17 +2451,11 @@ int ha_ndbcluster::write_row(byte *record)
}
if
((
has_auto_increment
)
&&
(
m_skip_auto_increment
))
{
Ndb
*
ndb
=
get_ndb
();
Uint64
next_val
=
(
Uint64
)
table
->
next_number_field
->
val_int
()
+
1
;
#ifndef DBUG_OFF
char
buff
[
22
];
DBUG_PRINT
(
"info"
,
(
"Trying to set next auto increment value to %s"
,
llstr
(
next_val
,
buff
)));
#endif
if
(
ndb
->
setAutoIncrementValue
((
const
NDBTAB
*
)
m_table
,
next_val
,
TRUE
)
==
-
1
)
ERR_RETURN
(
ndb
->
getNdbError
());
int
ret_val
;
if
((
ret_val
=
set_auto_inc
(
table
->
next_number_field
)))
{
DBUG_RETURN
(
ret_val
);
}
}
m_skip_auto_increment
=
TRUE
;
...
...
@@ -2476,6 +2508,7 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
NdbScanOperation
*
cursor
=
m_active_cursor
;
NdbOperation
*
op
;
uint
i
;
int
auto_res
;
bool
pk_update
=
(
table
->
s
->
primary_key
!=
MAX_KEY
&&
key_cmp
(
table
->
s
->
primary_key
,
old_data
,
new_data
));
DBUG_ENTER
(
"update_row"
);
...
...
@@ -2531,6 +2564,16 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
// Insert new row
DBUG_PRINT
(
"info"
,
(
"delete succeded"
));
m_primary_key_update
=
TRUE
;
/*
If we are updating a primary key with auto_increment
then we need to update the auto_increment counter
*/
if
(
table
->
found_next_number_field
&&
table
->
found_next_number_field
->
query_id
==
thd
->
query_id
&&
(
auto_res
=
set_auto_inc
(
table
->
found_next_number_field
)))
{
DBUG_RETURN
(
auto_res
);
}
insert_res
=
write_row
(
new_data
);
m_primary_key_update
=
FALSE
;
if
(
insert_res
)
...
...
@@ -2553,7 +2596,16 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
DBUG_PRINT
(
"info"
,
(
"delete+insert succeeded"
));
DBUG_RETURN
(
0
);
}
/*
If we are updating a unique key with auto_increment
then we need to update the auto_increment counter
*/
if
(
table
->
found_next_number_field
&&
table
->
found_next_number_field
->
query_id
==
thd
->
query_id
&&
(
auto_res
=
set_auto_inc
(
table
->
found_next_number_field
)))
{
DBUG_RETURN
(
auto_res
);
}
if
(
cursor
)
{
/*
...
...
@@ -3841,9 +3893,11 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
// store thread specific data first to set the right context
m_force_send
=
thd
->
variables
.
ndb_force_send
;
m_ha_not_exact_count
=
!
thd
->
variables
.
ndb_use_exact_count
;
m_autoincrement_prefetch
=
(
ha_rows
)
thd
->
variables
.
ndb_autoincrement_prefetch_sz
;
m_autoincrement_prefetch
=
(
thd
->
variables
.
ndb_autoincrement_prefetch_sz
>
NDB_DEFAULT_AUTO_PREFETCH
)
?
(
ha_rows
)
thd
->
variables
.
ndb_autoincrement_prefetch_sz
:
(
ha_rows
)
NDB_DEFAULT_AUTO_PREFETCH
;
m_active_trans
=
thd_ndb
->
all
?
thd_ndb
->
all
:
thd_ndb
->
stmt
;
DBUG_ASSERT
(
m_active_trans
);
// Start of transaction
...
...
@@ -4866,10 +4920,11 @@ int ha_ndbcluster::drop_table()
ulonglong
ha_ndbcluster
::
get_auto_increment
()
{
int
cache_size
;
u
int
cache_size
;
Uint64
auto_value
;
Uint64
step
=
current_thd
->
variables
.
auto_increment_increment
;
Uint64
start
=
current_thd
->
variables
.
auto_increment_offset
;
THD
*
thd
=
current_thd
;
Uint64
step
=
thd
->
variables
.
auto_increment_increment
;
Uint64
start
=
thd
->
variables
.
auto_increment_offset
;
DBUG_ENTER
(
"get_auto_increment"
);
DBUG_PRINT
(
"enter"
,
(
"m_tabname: %s"
,
m_tabname
));
Ndb
*
ndb
=
get_ndb
();
...
...
@@ -4879,11 +4934,14 @@ ulonglong ha_ndbcluster::get_auto_increment()
/* We guessed too low */
m_rows_to_insert
+=
m_autoincrement_prefetch
;
}
cache_size
=
(
int
)
((
m_rows_to_insert
-
m_rows_inserted
<
m_autoincrement_prefetch
)
?
m_rows_to_insert
-
m_rows_inserted
:
((
m_rows_to_insert
>
m_autoincrement_prefetch
)
?
m_rows_to_insert
:
m_autoincrement_prefetch
));
uint
remaining
=
m_rows_to_insert
-
m_rows_inserted
;
uint
min_prefetch
=
(
remaining
<
thd
->
variables
.
ndb_autoincrement_prefetch_sz
)
?
thd
->
variables
.
ndb_autoincrement_prefetch_sz
:
remaining
;
cache_size
=
((
remaining
<
m_autoincrement_prefetch
)
?
min_prefetch
:
remaining
);
uint
retries
=
NDB_AUTO_INCREMENT_RETRIES
;
int
retry_sleep
=
30
;
/* 30 milliseconds, transaction */
for
(;;)
...
...
@@ -4953,7 +5011,7 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
m_dupkey
((
uint
)
-
1
),
m_ha_not_exact_count
(
FALSE
),
m_force_send
(
TRUE
),
m_autoincrement_prefetch
((
ha_rows
)
32
),
m_autoincrement_prefetch
((
ha_rows
)
NDB_DEFAULT_AUTO_PREFETCH
),
m_transaction_on
(
TRUE
),
m_cond
(
NULL
),
m_multi_cursor
(
NULL
)
...
...
sql/ha_ndbcluster.h
View file @
ddbb4d42
...
...
@@ -27,6 +27,8 @@
#include <ndbapi_limits.h>
#define NDB_HIDDEN_PRIMARY_KEY_LENGTH 8
#define NDB_DEFAULT_AUTO_PREFETCH 32
/* Forward declarations */
class
Ndb
;
class
NdbOperation
;
...
...
@@ -271,6 +273,7 @@ private:
int
full_table_scan
(
byte
*
buf
);
int
fetch_next
(
NdbScanOperation
*
op
);
int
next_result
(
byte
*
buf
);
int
set_auto_inc
(
Field
*
field
);
int
define_read_attrs
(
byte
*
buf
,
NdbOperation
*
op
);
int
filtered_scan
(
const
byte
*
key
,
uint
key_len
,
byte
*
buf
,
...
...
sql/mysqld.cc
View file @
ddbb4d42
...
...
@@ -5354,8 +5354,8 @@ Disable with --skip-ndbcluster (will save memory).",
{
"ndb-autoincrement-prefetch-sz"
,
OPT_NDB_AUTOINCREMENT_PREFETCH_SZ
,
"Specify number of autoincrement values that are prefetched."
,
(
gptr
*
)
&
global_system_variables
.
ndb_autoincrement_prefetch_sz
,
(
gptr
*
)
&
global
_system_variables
.
ndb_autoincrement_prefetch_sz
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
32
,
1
,
256
,
0
,
0
,
0
},
(
gptr
*
)
&
max
_system_variables
.
ndb_autoincrement_prefetch_sz
,
0
,
GET_ULONG
,
REQUIRED_ARG
,
1
,
1
,
256
,
0
,
0
,
0
},
{
"ndb-force-send"
,
OPT_NDB_FORCE_SEND
,
"Force send of buffers to ndb immediately without waiting for "
"other threads."
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment