Commit beff6a44 authored by magnus@neptunus.(none)'s avatar magnus@neptunus.(none)

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

into neptunus.(none):/home/magnus/mysql-4.1
parents 34f2da92 787c9786
......@@ -1470,16 +1470,23 @@ $ECHO "Starting Tests"
#
if [ "$DO_BENCH" = 1 ]
then
start_master
if [ ! -z "$USE_NDBCLUSTER" ]
then
EXTRA_BENCH_ARGS="--create-options=TYPE=ndb"
fi
BENCHDIR=$BASEDIR/sql-bench/
savedir=`pwd`
cd $BENCHDIR
if [ -z "$1" ]
then
./run-all-tests --socket=$MASTER_MYSOCK --user=root
./run-all-tests --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
else
if [ -x "./$1" ]
then
./$1 --socket=$MASTER_MYSOCK --user=root
./$1 --socket=$MASTER_MYSOCK --user=root $EXTRA_BENCH_ARGS
else
echo "benchmark $1 not found"
fi
......
......@@ -2,6 +2,7 @@
#NoOfFragmentLogfiles: 1
#TimeBetweenLocalCheckpoints: 31
NoOfReplicas: 2
MaxNoOfConcurrentOperations: 100000
[COMPUTER]
Id: 1
......
......@@ -22,9 +22,9 @@ done
stop_default_ndbcluster() {
if [ ! -f $pidfile ] ; then
exit 0
fi
#if [ ! -f $pidfile ] ; then
# exit 0
#fi
if [ ! -f $cfgfile ] ; then
echo "$cfgfile missing"
......@@ -43,8 +43,11 @@ echo "all stop" | $exec_mgmtclient
sleep 5
kill `cat $pidfile`
rm $pidfile
if [ -f $pidfile ] ; then
kill `cat $pidfile`
rm $pidfile
fi
}
stop_default_ndbcluster
......
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
a INT NOT NULL,
b INT NOT NULL
) ENGINE=ndbcluster;
INSERT INTO t1 VALUES (9410,9412);
ALTER TABLE t1 ADD COLUMN c int not null;
SELECT * FROM t1;
a b c
9410 9412 0
DROP TABLE t1;
create table t1 (
col1 int not null auto_increment primary key,
col2 varchar(30) not null,
col3 varchar (20) not null,
col4 varchar(4) not null,
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
col6 int not null, to_be_deleted int);
insert into t1 values (2,4,3,5,"PENDING",1,7);
alter table t1
add column col4_5 varchar(20) not null after col4,
add column col7 varchar(30) not null after col5,
add column col8 datetime not null, drop column to_be_deleted,
change column col2 fourth varchar(30) not null after col3,
modify column col6 int not null first;
select * from t1;
col6 col1 col3 fourth col4 col4_5 col5 col7 col8
1 2 3 4 5 PENDING 0000-00-00 00:00:00
drop table t1;
......@@ -25,11 +25,59 @@ pk1 attr1
DELETE FROM t1;
SELECT * FROM t1;
pk1 attr1
INSERT INTO t1 VALUES (9410,9412);
INSERT INTO t1 VALUES (9410,9412), (9411, 9413), (9408, 8765),
(7,8), (8,9), (9,10), (10,11), (11,12), (12,13), (13,14);
UPDATE t1 SET attr1 = 9999;
SELECT * FROM t1 ORDER BY pk1;
pk1 attr1
7 9999
8 9999
9 9999
10 9999
11 9999
12 9999
13 9999
9408 9999
9410 9999
9411 9999
UPDATE t1 SET attr1 = 9998 WHERE pk1 < 1000;
SELECT * FROM t1 ORDER BY pk1;
pk1 attr1
7 9998
8 9998
9 9998
10 9998
11 9998
12 9998
13 9998
9408 9999
9410 9999
9411 9999
UPDATE t1 SET attr1 = 9997 WHERE attr1 = 9999;
SELECT * FROM t1 ORDER BY pk1;
pk1 attr1
7 9998
8 9998
9 9998
10 9998
11 9998
12 9998
13 9998
9408 9997
9410 9997
9411 9997
DELETE FROM t1 WHERE pk1 = 9410;
SELECT * FROM t1;
SELECT * FROM t1 ORDER BY pk1;
pk1 attr1
INSERT INTO t1 VALUES (9410,9412), (9411, 9413), (9408, 8765);
7 9998
8 9998
9 9998
10 9998
11 9998
12 9998
13 9998
9408 9997
9411 9997
DELETE FROM t1;
SELECT * FROM t1;
pk1 attr1
......
drop table if exists t1;
CREATE TABLE t1 (
PORT varchar(16) NOT NULL,
ACCESSNODE varchar(16) NOT NULL,
POP varchar(48) NOT NULL,
ACCESSTYPE int unsigned NOT NULL,
CUSTOMER_ID varchar(20) NOT NULL,
PROVIDER varchar(16),
TEXPIRE int unsigned,
NUM_IP int unsigned,
LEASED_NUM_IP int unsigned,
LOCKED_IP int unsigned,
STATIC_DNS int unsigned,
SUSPENDED_SERVICE int unsigned,
SUSPENDED_REASON int unsigned,
BGP_COMMUNITY int unsigned,
INDEX CUSTOMER_ID_INDEX(CUSTOMER_ID),
INDEX FQPN_INDEX(POP,ACCESSNODE,PORT),
PRIMARY KEY(POP,ACCESSNODE,PORT,ACCESSTYPE)
) engine=ndbcluster;
INSERT INTO t1 VALUES ('port67', 'node78', 'pop98', 1, 'kllopmn', 'pr_43', 121212, 1, 2, 3, 8, NULL, NULL, NULL);
INSERT INTO t1 VALUES ('port67', 'node78', 'pop99', 2, 'klkighh', 'pr_44', 121213, 3, 3, 6, 7, NULL, NULL, NULL);
INSERT INTO t1 VALUES ('port79', 'node79', 'pop79', 2, 'kpongfaa', 'pr_44', 981213, 2, 4, 10, 11, 2, 99, 1278);
select port, accessnode, pop, accesstype from t1 where port='port67' order by accesstype;
port accessnode pop accesstype
port67 node78 pop98 1
port67 node78 pop99 2
select port, accessnode, pop, accesstype from t1 where port='foo';
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where accessnode='node78' order by accesstype;
port accessnode pop accesstype
port67 node78 pop98 1
port67 node78 pop99 2
select port, accessnode, pop, accesstype from t1 where accessnode='foo';
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where pop='pop98';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='pop98';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='pop98';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='pop98' order by accesstype;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='POP98';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='POP98' order by accesstype;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='foo';
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where accesstype=1;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where accesstype=2 order by port;
port accessnode pop accesstype
port67 node78 pop99 2
port79 node79 pop79 2
select port, accessnode, pop, accesstype from t1 where accesstype=98 order by port;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where customer_id='KLLOPMN';
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where customer_id='kLLoPMn';
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where customer_id='foo';
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where provider='pr_43';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where provider='foo';
port accessnode pop accesstype
select port, accessnode from t1 where texpire=121212;
port accessnode
port67 node78
select port, accessnode from t1 where texpire=2323;
port accessnode
select port, accessnode, pop, accesstype from t1 where num_ip=1;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where num_ip=89;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where leased_num_ip=2;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where leased_num_ip=89;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where locked_ip=3;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where locked_ip=89;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where static_dns=8;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where static_dns=89;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where suspended_service=8;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where suspended_service=89;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where suspended_reason=NULL;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where suspended_reason=89;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where suspended_reason=0;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where bgp_community=NULL;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where bgp_community=89;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where bgp_community=0;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where port='port67' and accessnode='node78' and pop='pop98' and accesstype=1;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where port='port67' and accesstype=1 and accessnode='node78' and pop='pop98';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='pop98' and port='port67' and accesstype=1 and accessnode='node78';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode from t1 where port='foo' and accessnode='foo' and pop='foo' and accesstype=99;
port accessnode
select port, accessnode, pop, accesstype from t1 where port='port67' and pop='pop98' and accesstype=1;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where accesstype=1 and accessnode='node78' and pop='pop98';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where port='port67' and accesstype=1 and accessnode='node78';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode from t1 where port='foo' and accessnode='foo' and pop='foo';
port accessnode
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn' and accesstype=1;
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn' and accesstype=2;
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where accesstype=2 and customer_id='kllopmn';
port accessnode pop accesstype
select port, accessnode, pop, accesstype from t1 where pop='pop98' and accessnode='node78' and port='port67';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='pop98' and accessnode='node78' and port='port67' and customer_id='kllopmn';
port accessnode pop accesstype
port67 node78 pop98 1
select port, accessnode, pop, accesstype from t1 where pop='pop98' and accessnode='node78' and port='port67' and customer_id='foo';
port accessnode pop accesstype
drop table t1;
drop table if exists t1;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned,
KEY(b)
) engine=ndbcluster;
insert t1 values(1, 2, 3), (2,3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
select * from t1 order by b;
a b c
1 2 3
2 3 5
3 4 6
4 5 8
5 6 2
6 7 2
select * from t1 where b >= 4 order by b;
a b c
3 4 6
4 5 8
5 6 2
6 7 2
select * from t1 where b = 4 order by b;
a b c
3 4 6
select * from t1 where b > 4 order by b;
a b c
4 5 8
5 6 2
6 7 2
select * from t1 where b < 4 order by b;
a b c
1 2 3
2 3 5
select * from t1 where b <= 4 order by b;
a b c
1 2 3
2 3 5
3 4 6
update t1 set c = 3 where b = 3;
select * from t1 order by a;
a b c
1 2 3
2 3 3
3 4 6
4 5 8
5 6 2
6 7 2
update t1 set c = 10 where b >= 6;
select * from t1 order by a;
a b c
1 2 3
2 3 3
3 4 6
4 5 8
5 6 10
6 7 10
update t1 set c = 11 where b < 5;
select * from t1 order by a;
a b c
1 2 11
2 3 11
3 4 11
4 5 8
5 6 10
6 7 10
update t1 set c = 12 where b > 0;
select * from t1 order by a;
a b c
1 2 12
2 3 12
3 4 12
4 5 12
5 6 12
6 7 12
update t1 set c = 13 where b <= 3;
select * from t1 order by a;
a b c
1 2 13
2 3 13
3 4 12
4 5 12
5 6 12
6 7 12
drop table t1;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned,
KEY(b)
) engine=ndbcluster;
insert t1 values(1, 2, 13), (2,3, 13), (3, 4, 12), (4, 5, 12), (5,6, 12), (6,7, 12);
delete from t1 where b = 3;
select * from t1 order by a;
a b c
1 2 13
3 4 12
4 5 12
5 6 12
6 7 12
delete from t1 where b >= 6;
select * from t1 order by a;
a b c
1 2 13
3 4 12
4 5 12
delete from t1 where b < 4;
select * from t1 order by a;
a b c
3 4 12
4 5 12
delete from t1 where b > 5;
select * from t1 order by a;
a b c
3 4 12
4 5 12
delete from t1 where b <= 4;
select * from t1 order by a;
a b c
4 5 12
drop table t1;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned not null,
) engine = ndb;
create index a1 on t1 (b, c);
insert into t1 values (1, 2, 13);
insert into t1 values (2,3, 13);
insert into t1 values (3, 4, 12);
insert into t1 values (4, 5, 12);
insert into t1 values (5,6, 12);
insert into t1 values (6,7, 12);
insert into t1 values (7, 2, 1);
insert into t1 values (8,3, 6);
insert into t1 values (9, 4, 12);
insert into t1 values (14, 5, 4);
insert into t1 values (15,5,5);
insert into t1 values (16,5, 6);
insert into t1 values (17,4,4);
insert into t1 values (18,1, 7);
select * from t1 order by a;
a b c
1 2 13
2 3 13
3 4 12
4 5 12
5 6 12
6 7 12
7 2 1
8 3 6
9 4 12
14 5 4
15 5 5
16 5 6
17 4 4
18 1 7
select * from t1 where b<=5 order by a;
a b c
1 2 13
2 3 13
3 4 12
4 5 12
7 2 1
8 3 6
9 4 12
14 5 4
15 5 5
16 5 6
17 4 4
18 1 7
select * from t1 where b<=5 and c=0;
a b c
insert into t1 values (19,4, 0);
select * from t1 where b<=5 and c=0;
a b c
19 4 0
select * from t1 where b=4 and c<=5;
a b c
19 4 0
17 4 4
select * from t1 where b<=4 and c<=5 order by a;
a b c
7 2 1
17 4 4
19 4 0
select * from t1 where b<=5 and c=0 or b<=5 and c=2;
a b c
19 4 0
drop table t1;
drop table if exists t1, t2, t3, t4, t5, t6, t7;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned,
UNIQUE(b)
) engine=ndbcluster;
insert t1 values(1, 2, 3), (2, 3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
select * from t1 order by b;
a b c
1 2 3
2 3 5
3 4 6
4 5 8
5 6 2
6 7 2
select * from t1 where b = 4 order by b;
a b c
3 4 6
insert into t1 values(7,8,3);
select * from t1 where b = 4 order by a;
a b c
3 4 6
drop table t1;
CREATE TABLE t1 (
cid smallint(5) unsigned NOT NULL default '0',
cv varchar(250) NOT NULL default '',
PRIMARY KEY (cid),
UNIQUE KEY cv (cv)
) engine=ndbcluster;
INSERT INTO t1 VALUES (8,'dummy');
CREATE TABLE t2 (
cid bigint(20) unsigned NOT NULL auto_increment,
cap varchar(255) NOT NULL default '',
PRIMARY KEY (cid),
) engine=ndbcluster;
CREATE TABLE t3 (
gid bigint(20) unsigned NOT NULL auto_increment,
gn varchar(255) NOT NULL default '',
must tinyint(4) default NULL,
PRIMARY KEY (gid),
) engine=ndbcluster;
INSERT INTO t3 VALUES (1,'V1',NULL);
CREATE TABLE t4 (
uid bigint(20) unsigned NOT NULL default '0',
gid bigint(20) unsigned NOT NULL,
rid bigint(20) unsigned NOT NULL default '-1',
cid bigint(20) unsigned NOT NULL default '-1',
UNIQUE KEY m (uid,gid,rid,cid),
) engine=ndbcluster;
INSERT INTO t4 VALUES (1,1,2,4);
INSERT INTO t4 VALUES (1,1,2,3);
INSERT INTO t4 VALUES (1,1,5,7);
INSERT INTO t4 VALUES (1,1,10,8);
CREATE TABLE t5 (
rid bigint(20) unsigned NOT NULL auto_increment,
rl varchar(255) NOT NULL default '',
PRIMARY KEY (rid),
) engine=ndbcluster;
CREATE TABLE t6 (
uid bigint(20) unsigned NOT NULL auto_increment,
un varchar(250) NOT NULL default '',
uc smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (uid),
UNIQUE KEY nc (un,uc),
) engine=ndbcluster;
INSERT INTO t6 VALUES (1,'test',8);
INSERT INTO t6 VALUES (2,'test2',9);
INSERT INTO t6 VALUES (3,'tre',3);
CREATE TABLE t7 (
mid bigint(20) unsigned NOT NULL PRIMARY KEY,
uid bigint(20) unsigned NOT NULL default '0',
gid bigint(20) unsigned NOT NULL,
rid bigint(20) unsigned NOT NULL default '-1',
cid bigint(20) unsigned NOT NULL default '-1',
UNIQUE KEY m (uid,gid,rid,cid),
) engine=ndbcluster;
INSERT INTO t7 VALUES(1, 1, 1, 1, 1);
INSERT INTO t7 VALUES(2, 2, 1, 1, 1);
INSERT INTO t7 VALUES(3, 3, 1, 1, 1);
INSERT INTO t7 VALUES(4, 4, 1, 1, 1);
INSERT INTO t7 VALUES(5, 5, 1, 1, 1);
INSERT INTO t7 VALUES(6, 1, 1, 1, 6);
INSERT INTO t7 VALUES(7, 2, 1, 1, 7);
INSERT INTO t7 VALUES(8, 3, 1, 1, 8);
INSERT INTO t7 VALUES(9, 4, 1, 1, 9);
INSERT INTO t7 VALUES(10, 5, 1, 1, 10);
select * from t1 where cv = 'dummy';
cid cv
8 dummy
select * from t1 where cv = 'test';
cid cv
select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4;
uid gid rid cid
1 1 2 4
select * from t4 where uid = 1 and gid=1 and rid=1 and cid=4;
uid gid rid cid
select * from t4 where uid = 1 order by cid;
uid gid rid cid
1 1 2 3
1 1 2 4
1 1 5 7
1 1 10 8
select * from t4 where rid = 2 order by cid;
uid gid rid cid
1 1 2 3
1 1 2 4
select * from t6 where un='test' and uc=8;
uid un uc
1 test 8
select * from t6 where un='test' and uc=7;
uid un uc
select * from t6 where un='test';
uid un uc
1 test 8
select * from t7 where mid = 8;
mid uid gid rid cid
8 3 1 1 8
select * from t7 where uid = 8;
mid uid gid rid cid
select * from t7 where uid = 1 order by mid;
mid uid gid rid cid
1 1 1 1 1
6 1 1 1 6
select * from t7 where uid = 4 order by mid;
mid uid gid rid cid
4 4 1 1 1
9 4 1 1 9
select * from t7 where gid = 4;
mid uid gid rid cid
select * from t7 where gid = 1 order by mid;
mid uid gid rid cid
1 1 1 1 1
2 2 1 1 1
3 3 1 1 1
4 4 1 1 1
5 5 1 1 1
6 1 1 1 6
7 2 1 1 7
8 3 1 1 8
9 4 1 1 9
10 5 1 1 10
select * from t7 where cid = 4;
mid uid gid rid cid
select * from t7 where cid = 8;
mid uid gid rid cid
8 3 1 1 8
select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4;
uid gid rid cid
1 1 2 4
select * from t4 where uid = 1 and gid=1 and rid=1 and cid=4;
uid gid rid cid
select * from t4 where uid = 1 order by gid,cid;
uid gid rid cid
1 1 2 3
1 1 2 4
1 1 5 7
1 1 10 8
1 1 5 12
1 2 5 12
1 3 9 11
1 3 5 12
1 4 5 12
1 5 5 12
1 6 5 12
1 7 5 12
1 8 5 12
1 9 5 12
1 10 5 12
1 11 5 12
1 12 5 12
1 13 5 12
1 14 5 12
1 15 5 12
1 16 5 12
1 17 5 12
1 18 5 12
1 19 5 12
1 20 5 12
1 21 5 12
1 22 5 12
1 23 5 12
1 24 5 12
1 25 5 12
1 26 5 12
1 27 5 12
1 28 5 12
1 29 5 12
1 30 5 12
1 31 5 12
1 32 5 12
1 33 5 12
1 34 5 12
1 35 5 12
1 36 5 12
1 37 5 12
1 38 5 12
1 39 5 12
1 40 5 12
1 41 5 12
1 42 5 12
1 43 5 12
1 44 5 12
1 45 5 12
1 46 5 12
1 47 5 12
1 48 5 12
1 49 5 12
1 50 5 12
1 51 5 12
1 52 5 12
1 53 5 12
1 54 5 12
1 55 5 12
1 56 5 12
1 57 5 12
1 58 5 12
1 59 5 12
1 60 5 12
1 61 5 12
1 62 5 12
1 63 5 12
1 64 5 12
1 65 5 12
1 66 5 12
1 67 5 12
1 68 5 12
1 69 5 12
1 70 5 12
1 71 5 12
1 72 5 12
1 73 5 12
1 74 5 12
1 75 5 12
1 76 5 12
1 77 5 12
1 78 5 12
1 79 5 12
1 80 5 12
1 81 5 12
1 82 5 12
1 83 5 12
1 84 5 12
1 85 5 12
1 86 5 12
1 87 5 12
1 88 5 12
1 89 5 12
1 90 5 12
1 91 5 12
1 92 5 12
1 93 5 12
1 94 5 12
1 95 5 12
1 96 5 12
1 97 5 12
1 98 5 12
1 99 5 12
1 100 5 12
select * from t4 where uid = 1 order by gid,cid;
uid gid rid cid
1 1 2 3
1 1 2 4
1 1 5 7
1 1 10 8
1 1 5 12
1 2 5 12
1 3 9 11
1 3 5 12
1 4 5 12
1 5 5 12
1 6 5 12
1 7 5 12
1 8 5 12
1 9 5 12
1 10 5 12
1 11 5 12
1 12 5 12
1 13 5 12
1 14 5 12
1 15 5 12
1 16 5 12
1 17 5 12
1 18 5 12
1 19 5 12
1 20 5 12
1 21 5 12
1 22 5 12
1 23 5 12
1 24 5 12
1 25 5 12
1 26 5 12
1 27 5 12
1 28 5 12
1 29 5 12
1 30 5 12
1 31 5 12
1 32 5 12
1 33 5 12
1 34 5 12
1 35 5 12
1 36 5 12
1 37 5 12
1 38 5 12
1 39 5 12
1 40 5 12
1 41 5 12
1 42 5 12
1 43 5 12
1 44 5 12
1 45 5 12
1 46 5 12
1 47 5 12
1 48 5 12
1 49 5 12
1 50 5 12
1 51 5 12
1 52 5 12
1 53 5 12
1 54 5 12
1 55 5 12
1 56 5 12
1 57 5 12
1 58 5 12
1 59 5 12
1 60 5 12
1 61 5 12
1 62 5 12
1 63 5 12
1 64 5 12
1 65 5 12
1 66 5 12
1 67 5 12
1 68 5 12
1 69 5 12
1 70 5 12
1 71 5 12
1 72 5 12
1 73 5 12
1 74 5 12
1 75 5 12
1 76 5 12
1 77 5 12
1 78 5 12
1 79 5 12
1 80 5 12
1 81 5 12
1 82 5 12
1 83 5 12
1 84 5 12
1 85 5 12
1 86 5 12
1 87 5 12
1 88 5 12
1 89 5 12
1 90 5 12
1 91 5 12
1 92 5 12
1 93 5 12
1 94 5 12
1 95 5 12
1 96 5 12
1 97 5 12
1 98 5 12
1 99 5 12
1 100 5 12
select * from t4 where rid = 2 order by cid;
uid gid rid cid
1 1 2 3
1 1 2 4
drop table t1,t2,t3,t4,t5,t6,t7;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (
pk1 INT NOT NULL PRIMARY KEY,
b INT NOT NULL,
c INT NOT NULL
) ENGINE=ndbcluster;
INSERT INTO t1 VALUES (0, 0, 0);
SELECT * FROM t1;
pk1 b c
0 0 0
INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10),
(11,11,11),(12,12,12),(13,13,13),(14,14,14),(15,15,15),
(16,16,16),(17,17,17),(18,18,18),(19,19,19),(20,20,20),
(21,21,21),(22,22,22),(23,23,23),(24,24,24),(25,25,25),
(26,26,26),(27,27,27),(28,28,28),(29,29,29),(30,30,30),
(31,31,31),(32,32,32),(33,33,33),(34,34,34),(35,35,35),
(36,36,36),(37,37,37),(38,38,38),(39,39,39),(40,40,40),
(41,41,41),(42,42,42),(43,43,43),(44,44,44),(45,45,45),
(46,46,46),(47,47,47),(48,48,48),(49,49,49),(50,50,50),
(51,51,51),(52,52,52),(53,53,53),(54,54,54),(55,55,55),
(56,56,56),(57,57,57),(58,58,58),(59,59,59),(60,60,60),
(61,61,61),(62,62,62),(63,63,63),(64,64,64),(65,65,65),
(66,66,66),(67,67,67),(68,68,68),(69,69,69),(70,70,70),
(71,71,71),(72,72,72),(73,73,73),(74,74,74),(75,75,75),
(76,76,76),(77,77,77),(78,78,78),(79,79,79),(80,80,80),
(81,81,81),(82,82,82),(83,83,83),(84,84,84),(85,85,85),
(86,86,86),(87,87,87),(88,88,88),(89,89,89),(90,90,90),
(91,91,91),(92,92,92),(93,93,93),(94,94,94),(95,95,95),
(96,96,96),(97,97,97),(98,98,98),(99,99,99),(100,100,100),
(101,101,101),(102,102,102),(103,103,103),(104,104,104),(105,105,105),
(106,106,106),(107,107,107),(108,108,108),(109,109,109),(110,110,110),
(111,111,111),(112,112,112),(113,113,113),(114,114,114),(115,115,115),
(116,116,116),(117,117,117),(118,118,118),(119,119,119),(120,120,120),
(121,121,121),(122,122,122),(123,123,123),(124,124,124),(125,125,125),
(126,126,126),(127,127,127),(128,128,128),(129,129,129),(130,130,130),
(131,131,131),(132,132,132),(133,133,133),(134,134,134),(135,135,135),
(136,136,136),(137,137,137),(138,138,138),(139,139,139),(140,140,140),
(141,141,141),(142,142,142),(143,143,143),(144,144,144),(145,145,145),
(146,146,146),(147,147,147),(148,148,148),(149,149,149),(150,150,150),
(151,151,151),(152,152,152),(153,153,153),(154,154,154),(155,155,155),
(156,156,156),(157,157,157),(158,158,158),(159,159,159),(160,160,160),
(161,161,161),(162,162,162),(163,163,163),(164,164,164),(165,165,165),
(166,166,166),(167,167,167),(168,168,168),(169,169,169),(170,170,170),
(171,171,171),(172,172,172),(173,173,173),(174,174,174),(175,175,175),
(176,176,176),(177,177,177),(178,178,178),(179,179,179),(180,180,180),
(181,181,181),(182,182,182),(183,183,183),(184,184,184),(185,185,185),
(186,186,186),(187,187,187),(188,188,188),(189,189,189),(190,190,190),
(191,191,191),(192,192,192),(193,193,193),(194,194,194),(195,195,195),
(196,196,196),(197,197,197),(198,198,198),(199,199,199),(200,200,200),
(201,201,201),(202,202,202),(203,203,203),(204,204,204),(205,205,205),
(206,206,206),(207,207,207),(208,208,208),(209,209,209),(210,210,210),
(211,211,211),(212,212,212),(213,213,213),(214,214,214),(215,215,215),
(216,216,216),(217,217,217),(218,218,218),(219,219,219),(220,220,220),
(221,221,221),(222,222,222),(223,223,223),(224,224,224),(225,225,225),
(226,226,226),(227,227,227),(228,228,228),(229,229,229),(230,230,230),
(231,231,231),(232,232,232),(233,233,233),(234,234,234),(235,235,235),
(236,236,236),(237,237,237),(238,238,238),(239,239,239),(240,240,240),
(241,241,241),(242,242,242),(243,243,243),(244,244,244),(245,245,245),
(246,246,246),(247,247,247),(248,248,248),(249,249,249),(250,250,250),
(251,251,251),(252,252,252),(253,253,253),(254,254,254),(255,255,255),
(256,256,256),(257,257,257),(258,258,258),(259,259,259),(260,260,260),
(261,261,261),(262,262,262),(263,263,263),(264,264,264),(265,265,265),
(266,266,266),(267,267,267),(268,268,268),(269,269,269),(270,270,270),
(271,271,271),(272,272,272),(273,273,273),(274,274,274),(275,275,275),
(276,276,276),(277,277,277),(278,278,278),(279,279,279),(280,280,280),
(281,281,281),(282,282,282),(283,283,283),(284,284,284),(285,285,285),
(286,286,286),(287,287,287),(288,288,288),(289,289,289),(290,290,290),
(291,291,291),(292,292,292),(293,293,293),(294,294,294),(295,295,295),
(296,296,296),(297,297,297),(298,298,298),(299,299,299),(300,300,300),
(301,301,301),(302,302,302),(303,303,303),(304,304,304),(305,305,305),
(306,306,306),(307,307,307),(308,308,308),(309,309,309),(310,310,310),
(311,311,311),(312,312,312),(313,313,313),(314,314,314),(315,315,315),
(316,316,316),(317,317,317),(318,318,318),(319,319,319),(320,320,320),
(321,321,321),(322,322,322),(323,323,323),(324,324,324),(325,325,325),
(326,326,326),(327,327,327),(328,328,328),(329,329,329),(330,330,330),
(331,331,331),(332,332,332),(333,333,333),(334,334,334),(335,335,335),
(336,336,336),(337,337,337),(338,338,338),(339,339,339),(340,340,340),
(341,341,341),(342,342,342),(343,343,343),(344,344,344),(345,345,345),
(346,346,346),(347,347,347),(348,348,348),(349,349,349),(350,350,350),
(351,351,351),(352,352,352),(353,353,353),(354,354,354),(355,355,355),
(356,356,356),(357,357,357),(358,358,358),(359,359,359),(360,360,360),
(361,361,361),(362,362,362),(363,363,363),(364,364,364),(365,365,365),
(366,366,366),(367,367,367),(368,368,368),(369,369,369),(370,370,370),
(371,371,371),(372,372,372),(373,373,373),(374,374,374),(375,375,375),
(376,376,376),(377,377,377),(378,378,378),(379,379,379),(380,380,380),
(381,381,381),(382,382,382),(383,383,383),(384,384,384),(385,385,385),
(386,386,386),(387,387,387),(388,388,388),(389,389,389),(390,390,390),
(391,391,391),(392,392,392),(393,393,393),(394,394,394),(395,395,395),
(396,396,396),(397,397,397),(398,398,398),(399,399,399),(400,400,400),
(401,401,401),(402,402,402),(403,403,403),(404,404,404),(405,405,405),
(406,406,406),(407,407,407),(408,408,408),(409,409,409),(410,410,410),
(411,411,411),(412,412,412),(413,413,413),(414,414,414),(415,415,415),
(416,416,416),(417,417,417),(418,418,418),(419,419,419),(420,420,420),
(421,421,421),(422,422,422),(423,423,423),(424,424,424),(425,425,425),
(426,426,426),(427,427,427),(428,428,428),(429,429,429),(430,430,430),
(431,431,431),(432,432,432),(433,433,433),(434,434,434),(435,435,435),
(436,436,436),(437,437,437),(438,438,438),(439,439,439),(440,440,440),
(441,441,441),(442,442,442),(443,443,443),(444,444,444),(445,445,445),
(446,446,446),(447,447,447),(448,448,448),(449,449,449),(450,450,450),
(451,451,451),(452,452,452),(453,453,453),(454,454,454),(455,455,455),
(456,456,456),(457,457,457),(458,458,458),(459,459,459),(460,460,460),
(461,461,461),(462,462,462),(463,463,463),(464,464,464),(465,465,465),
(466,466,466),(467,467,467),(468,468,468),(469,469,469),(470,470,470),
(471,471,471),(472,472,472),(473,473,473),(474,474,474),(475,475,475),
(476,476,476),(477,477,477),(478,478,478),(479,479,479),(480,480,480),
(481,481,481),(482,482,482),(483,483,483),(484,484,484),(485,485,485),
(486,486,486),(487,487,487),(488,488,488),(489,489,489),(490,490,490),
(491,491,491),(492,492,492),(493,493,493),(494,494,494),(495,495,495),
(496,496,496),(497,497,497),(498,498,498),(499,499,499),(500, 500, 500);
SELECT COUNT(*) FROM t1;
COUNT(*)
501
INSERT INTO t1 VALUES
(501,501,501),(502,502,502),(503,503,503),(504,504,504),(505,505,505),
(506,506,506),(507,507,507),(508,508,508),(509,509,509),(510,510,510),
(511,511,511),(512,512,512),(513,513,513),(514,514,514),(515,515,515),
(516,516,516),(517,517,517),(518,518,518),(519,519,519),(520,520,520),
(521,521,521),(522,522,522),(523,523,523),(524,524,524),(525,525,525),
(526,526,526),(527,527,527),(528,528,528),(529,529,529),(530,530,530),
(531,531,531),(532,532,532),(533,533,533),(534,534,534),(535,535,535),
(536,536,536),(537,537,537),(538,538,538),(539,539,539),(540,540,540),
(541,541,541),(542,542,542),(543,543,543),(544,544,544),(545,545,545),
(546,546,546),(547,547,547),(548,548,548),(549,549,549),(550,550,550),
(551,551,551),(552,552,552),(553,553,553),(554,554,554),(555,555,555),
(556,556,556),(557,557,557),(558,558,558),(559,559,559),(560,560,560),
(561,561,561),(562,562,562),(563,563,563),(564,564,564),(565,565,565),
(566,566,566),(567,567,567),(568,568,568),(569,569,569),(570,570,570),
(571,571,571),(572,572,572),(573,573,573),(574,574,574),(575,575,575),
(576,576,576),(577,577,577),(578,578,578),(579,579,579),(580,580,580),
(581,581,581),(582,582,582),(583,583,583),(584,584,584),(585,585,585),
(586,586,586),(587,587,587),(588,588,588),(589,589,589),(590,590,590),
(591,591,591),(592,592,592),(593,593,593),(594,594,594),(595,595,595),
(596,596,596),(597,597,597),(598,598,598),(599,599,599),(600,600,600),
(601,601,601),(602,602,602),(603,603,603),(604,604,604),(605,605,605),
(606,606,606),(607,607,607),(608,608,608),(609,609,609),(610,610,610),
(611,611,611),(612,612,612),(613,613,613),(614,614,614),(615,615,615),
(616,616,616),(617,617,617),(618,618,618),(619,619,619),(620,620,620),
(621,621,621),(622,622,622),(623,623,623),(624,624,624),(625,625,625),
(626,626,626),(627,627,627),(628,628,628),(629,629,629),(630,630,630),
(631,631,631),(632,632,632),(633,633,633),(634,634,634),(635,635,635),
(636,636,636),(637,637,637),(638,638,638),(639,639,639),(640,640,640),
(641,641,641),(642,642,642),(643,643,643),(644,644,644),(645,645,645),
(646,646,646),(647,647,647),(648,648,648),(649,649,649),(650,650,650),
(651,651,651),(652,652,652),(653,653,653),(654,654,654),(655,655,655),
(656,656,656),(657,657,657),(658,658,658),(659,659,659),(660,660,660),
(661,661,661),(662,662,662),(663,663,663),(664,664,664),(665,665,665),
(666,666,666),(667,667,667),(668,668,668),(669,669,669),(670,670,670),
(671,671,671),(672,672,672),(673,673,673),(674,674,674),(675,675,675),
(676,676,676),(677,677,677),(678,678,678),(679,679,679),(680,680,680),
(681,681,681),(682,682,682),(683,683,683),(684,684,684),(685,685,685),
(686,686,686),(687,687,687),(688,688,688),(689,689,689),(690,690,690),
(691,691,691),(692,692,692),(693,693,693),(694,694,694),(695,695,695),
(696,696,696),(697,697,697),(698,698,698),(699,699,699),(700,700,700),
(701,701,701),(702,702,702),(703,703,703),(704,704,704),(705,705,705),
(706,706,706),(707,707,707),(708,708,708),(709,709,709),(710,710,710),
(711,711,711),(712,712,712),(713,713,713),(714,714,714),(715,715,715),
(716,716,716),(717,717,717),(718,718,718),(719,719,719),(720,720,720),
(721,721,721),(722,722,722),(723,723,723),(724,724,724),(725,725,725),
(726,726,726),(727,727,727),(728,728,728),(729,729,729),(730,730,730),
(731,731,731),(732,732,732),(733,733,733),(734,734,734),(735,735,735),
(736,736,736),(737,737,737),(738,738,738),(739,739,739),(740,740,740),
(741,741,741),(742,742,742),(743,743,743),(744,744,744),(745,745,745),
(746,746,746),(747,747,747),(748,748,748),(749,749,749),(750,750,750),
(751,751,751),(752,752,752),(753,753,753),(754,754,754),(755,755,755),
(756,756,756),(757,757,757),(758,758,758),(759,759,759),(760,760,760),
(761,761,761),(762,762,762),(763,763,763),(764,764,764),(765,765,765),
(766,766,766),(767,767,767),(768,768,768),(769,769,769),(770,770,770),
(771,771,771),(772,772,772),(773,773,773),(774,774,774),(775,775,775),
(776,776,776),(777,777,777),(778,778,778),(779,779,779),(780,780,780),
(781,781,781),(782,782,782),(783,783,783),(784,784,784),(785,785,785),
(786,786,786),(787,787,787),(788,788,788),(789,789,789),(790,790,790),
(791,791,791),(792,792,792),(793,793,793),(794,794,794),(795,795,795),
(796,796,796),(797,797,797),(798,798,798),(799,799,799),(800,800,800),
(801,801,801),(802,802,802),(803,803,803),(804,804,804),(805,805,805),
(806,806,806),(807,807,807),(808,808,808),(809,809,809),(810,810,810),
(811,811,811),(812,812,812),(813,813,813),(814,814,814),(815,815,815),
(816,816,816),(817,817,817),(818,818,818),(819,819,819),(820,820,820),
(821,821,821),(822,822,822),(823,823,823),(824,824,824),(825,825,825),
(826,826,826),(827,827,827),(828,828,828),(829,829,829),(830,830,830),
(831,831,831),(832,832,832),(833,833,833),(834,834,834),(835,835,835),
(836,836,836),(837,837,837),(838,838,838),(839,839,839),(840,840,840),
(841,841,841),(842,842,842),(843,843,843),(844,844,844),(845,845,845),
(846,846,846),(847,847,847),(848,848,848),(849,849,849),(850,850,850),
(851,851,851),(852,852,852),(853,853,853),(854,854,854),(855,855,855),
(856,856,856),(857,857,857),(858,858,858),(859,859,859),(860,860,860),
(861,861,861),(862,862,862),(863,863,863),(864,864,864),(865,865,865),
(866,866,866),(867,867,867),(868,868,868),(869,869,869),(870,870,870),
(871,871,871),(872,872,872),(873,873,873),(874,874,874),(875,875,875),
(876,876,876),(877,877,877),(878,878,878),(879,879,879),(880,880,880),
(881,881,881),(882,882,882),(883,883,883),(884,884,884),(885,885,885),
(886,886,886),(887,887,887),(888,888,888),(889,889,889),(890,890,890),
(891,891,891),(892,892,892),(893,893,893),(894,894,894),(895,895,895),
(896,896,896),(897,897,897),(898,898,898),(899,899,899),(900,900,900),
(901,901,901),(902,902,902),(903,903,903),(904,904,904),(905,905,905),
(906,906,906),(907,907,907),(908,908,908),(909,909,909),(910,910,910),
(911,911,911),(912,912,912),(913,913,913),(914,914,914),(915,915,915),
(916,916,916),(917,917,917),(918,918,918),(919,919,919),(920,920,920),
(921,921,921),(922,922,922),(923,923,923),(924,924,924),(925,925,925),
(926,926,926),(927,927,927),(928,928,928),(929,929,929),(930,930,930),
(931,931,931),(932,932,932),(933,933,933),(934,934,934),(935,935,935),
(936,936,936),(937,937,937),(938,938,938),(939,939,939),(940,940,940),
(941,941,941),(942,942,942),(943,943,943),(944,944,944),(945,945,945),
(946,946,946),(947,947,947),(948,948,948),(949,949,949),(950,950,950),
(951,951,951),(952,952,952),(953,953,953),(954,954,954),(955,955,955),
(956,956,956),(957,957,957),(958,958,958),(959,959,959),(960,960,960),
(961,961,961),(962,962,962),(963,963,963),(964,964,964),(965,965,965),
(966,966,966),(967,967,967),(968,968,968),(969,969,969),(970,970,970),
(971,971,971),(972,972,972),(973,973,973),(974,974,974),(975,975,975),
(976,976,976),(977,977,977),(978,978,978),(979,979,979),(980,980,980),
(981,981,981),(982,982,982),(983,983,983),(984,984,984),(985,985,985),
(986,986,986),(987,987,987),(988,988,988),(989,989,989),(990,990,990),
(991,991,991),(992,992,992),(993,993,993),(994,994,994),(995,995,995),
(996,996,996),(997,997,997),(998,998,998),(999,999,999),(1000,1000,1000),
(1001,1001,1001),(1002,1002,1002),(1003,1003,1003),(1004,1004,1004),(1005,1005,1005),
(1006,1006,1006),(1007,1007,1007),(1008,1008,1008),(1009,1009,1009),(1010,1010,1010),
(1011,1011,1011),(1012,1012,1012),(1013,1013,1013),(1014,1014,1014),(1015,1015,1015),
(1016,1016,1016),(1017,1017,1017),(1018,1018,1018),(1019,1019,1019),(1020,1020,1020),
(1021,1021,1021),(1022,1022,1022),(1023,1023,1023),(1024,1024,1024),(1025,1025,1025),
(1026,1026,1026),(1027,1027,1027),(1028,1028,1028),(1029,1029,1029),(1030,1030,1030),
(1031,1031,1031),(1032,1032,1032),(1033,1033,1033),(1034,1034,1034),(1035,1035,1035),
(1036,1036,1036),(1037,1037,1037),(1038,1038,1038),(1039,1039,1039),(1040,1040,1040),
(1041,1041,1041),(1042,1042,1042),(1043,1043,1043),(1044,1044,1044),(1045,1045,1045),
(1046,1046,1046),(1047,1047,1047),(1048,1048,1048),(1049,1049,1049),(1050,1050,1050),
(1051,1051,1051),(1052,1052,1052),(1053,1053,1053),(1054,1054,1054),(1055,1055,1055),
(1056,1056,1056),(1057,1057,1057),(1058,1058,1058),(1059,1059,1059),(1060,1060,1060),
(1061,1061,1061),(1062,1062,1062),(1063,1063,1063),(1064,1064,1064),(1065,1065,1065),
(1066,1066,1066),(1067,1067,1067),(1068,1068,1068),(1069,1069,1069),(1070,1070,1070),
(1071,1071,1071),(1072,1072,1072),(1073,1073,1073),(1074,1074,1074),(1075,1075,1075),
(1076,1076,1076),(1077,1077,1077),(1078,1078,1078),(1079,1079,1079),(1080,1080,1080),
(1081,1081,1081),(1082,1082,1082),(1083,1083,1083),(1084,1084,1084),(1085,1085,1085),
(1086,1086,1086),(1087,1087,1087),(1088,1088,1088),(1089,1089,1089),(1090,1090,1090),
(1091,1091,1091),(1092,1092,1092),(1093,1093,1093),(1094,1094,1094),(1095,1095,1095),
(1096,1096,1096),(1097,1097,1097),(1098,1098,1098),(1099,1099,1099),(1100,1100,1100),
(1101,1101,1101),(1102,1102,1102),(1103,1103,1103),(1104,1104,1104),(1105,1105,1105),
(1106,1106,1106),(1107,1107,1107),(1108,1108,1108),(1109,1109,1109),(1110,1110,1110),
(1111,1111,1111),(1112,1112,1112),(1113,1113,1113),(1114,1114,1114),(1115,1115,1115),
(1116,1116,1116),(1117,1117,1117),(1118,1118,1118),(1119,1119,1119),(1120,1120,1120),
(1121,1121,1121),(1122,1122,1122),(1123,1123,1123),(1124,1124,1124),(1125,1125,1125),
(1126,1126,1126),(1127,1127,1127),(1128,1128,1128),(1129,1129,1129),(1130,1130,1130),
(1131,1131,1131),(1132,1132,1132),(1133,1133,1133),(1134,1134,1134),(1135,1135,1135),
(1136,1136,1136),(1137,1137,1137),(1138,1138,1138),(1139,1139,1139),(1140,1140,1140),
(1141,1141,1141),(1142,1142,1142),(1143,1143,1143),(1144,1144,1144),(1145,1145,1145),
(1146,1146,1146),(1147,1147,1147),(1148,1148,1148),(1149,1149,1149),(1150,1150,1150),
(1151,1151,1151),(1152,1152,1152),(1153,1153,1153),(1154,1154,1154),(1155,1155,1155),
(1156,1156,1156),(1157,1157,1157),(1158,1158,1158),(1159,1159,1159),(1160,1160,1160),
(1161,1161,1161),(1162,1162,1162),(1163,1163,1163),(1164,1164,1164),(1165,1165,1165),
(1166,1166,1166),(1167,1167,1167),(1168,1168,1168),(1169,1169,1169),(1170,1170,1170),
(1171,1171,1171),(1172,1172,1172),(1173,1173,1173),(1174,1174,1174),(1175,1175,1175),
(1176,1176,1176),(1177,1177,1177),(1178,1178,1178),(1179,1179,1179),(1180,1180,1180),
(1181,1181,1181),(1182,1182,1182),(1183,1183,1183),(1184,1184,1184),(1185,1185,1185),
(1186,1186,1186),(1187,1187,1187),(1188,1188,1188),(1189,1189,1189),(1190,1190,1190),
(1191,1191,1191),(1192,1192,1192),(1193,1193,1193),(1194,1194,1194),(1195,1195,1195),
(1196,1196,1196),(1197,1197,1197),(1198,1198,1198),(1199,1199,1199),(1200,1200,1200),
(1201,1201,1201),(1202,1202,1202),(1203,1203,1203),(1204,1204,1204),(1205,1205,1205),
(1206,1206,1206),(1207,1207,1207),(1208,1208,1208),(1209,1209,1209),(1210,1210,1210),
(1211,1211,1211),(1212,1212,1212),(1213,1213,1213),(1214,1214,1214),(1215,1215,1215),
(1216,1216,1216),(1217,1217,1217),(1218,1218,1218),(1219,1219,1219),(1220,1220,1220),
(1221,1221,1221),(1222,1222,1222),(1223,1223,1223),(1224,1224,1224),(1225,1225,1225),
(1226,1226,1226),(1227,1227,1227),(1228,1228,1228),(1229,1229,1229),(1230,1230,1230),
(1231,1231,1231),(1232,1232,1232),(1233,1233,1233),(1234,1234,1234),(1235,1235,1235),
(1236,1236,1236),(1237,1237,1237),(1238,1238,1238),(1239,1239,1239),(1240,1240,1240),
(1241,1241,1241),(1242,1242,1242),(1243,1243,1243),(1244,1244,1244),(1245,1245,1245),
(1246,1246,1246),(1247,1247,1247),(1248,1248,1248),(1249,1249,1249),(1250,1250,1250),
(1251,1251,1251),(1252,1252,1252),(1253,1253,1253),(1254,1254,1254),(1255,1255,1255),
(1256,1256,1256),(1257,1257,1257),(1258,1258,1258),(1259,1259,1259),(1260,1260,1260),
(1261,1261,1261),(1262,1262,1262),(1263,1263,1263),(1264,1264,1264),(1265,1265,1265),
(1266,1266,1266),(1267,1267,1267),(1268,1268,1268),(1269,1269,1269),(1270,1270,1270),
(1271,1271,1271),(1272,1272,1272),(1273,1273,1273),(1274,1274,1274),(1275,1275,1275),
(1276,1276,1276),(1277,1277,1277),(1278,1278,1278),(1279,1279,1279),(1280,1280,1280),
(1281,1281,1281),(1282,1282,1282),(1283,1283,1283),(1284,1284,1284),(1285,1285,1285),
(1286,1286,1286),(1287,1287,1287),(1288,1288,1288),(1289,1289,1289),(1290,1290,1290),
(1291,1291,1291),(1292,1292,1292),(1293,1293,1293),(1294,1294,1294),(1295,1295,1295),
(1296,1296,1296),(1297,1297,1297),(1298,1298,1298),(1299,1299,1299),(1300,1300,1300),
(1301,1301,1301),(1302,1302,1302),(1303,1303,1303),(1304,1304,1304),(1305,1305,1305),
(1306,1306,1306),(1307,1307,1307),(1308,1308,1308),(1309,1309,1309),(1310,1310,1310),
(1311,1311,1311),(1312,1312,1312),(1313,1313,1313),(1314,1314,1314),(1315,1315,1315),
(1316,1316,1316),(1317,1317,1317),(1318,1318,1318),(1319,1319,1319),(1320,1320,1320),
(1321,1321,1321),(1322,1322,1322),(1323,1323,1323),(1324,1324,1324),(1325,1325,1325),
(1326,1326,1326),(1327,1327,1327),(1328,1328,1328),(1329,1329,1329),(1330,1330,1330),
(1331,1331,1331),(1332,1332,1332),(1333,1333,1333),(1334,1334,1334),(1335,1335,1335),
(1336,1336,1336),(1337,1337,1337),(1338,1338,1338),(1339,1339,1339),(1340,1340,1340),
(1341,1341,1341),(1342,1342,1342),(1343,1343,1343),(1344,1344,1344),(1345,1345,1345),
(1346,1346,1346),(1347,1347,1347),(1348,1348,1348),(1349,1349,1349),(1350,1350,1350),
(1351,1351,1351),(1352,1352,1352),(1353,1353,1353),(1354,1354,1354),(1355,1355,1355),
(1356,1356,1356),(1357,1357,1357),(1358,1358,1358),(1359,1359,1359),(1360,1360,1360),
(1361,1361,1361),(1362,1362,1362),(1363,1363,1363),(1364,1364,1364),(1365,1365,1365),
(1366,1366,1366),(1367,1367,1367),(1368,1368,1368),(1369,1369,1369),(1370,1370,1370),
(1371,1371,1371),(1372,1372,1372),(1373,1373,1373),(1374,1374,1374),(1375,1375,1375),
(1376,1376,1376),(1377,1377,1377),(1378,1378,1378),(1379,1379,1379),(1380,1380,1380),
(1381,1381,1381),(1382,1382,1382),(1383,1383,1383),(1384,1384,1384),(1385,1385,1385),
(1386,1386,1386),(1387,1387,1387),(1388,1388,1388),(1389,1389,1389),(1390,1390,1390),
(1391,1391,1391),(1392,1392,1392),(1393,1393,1393),(1394,1394,1394),(1395,1395,1395),
(1396,1396,1396),(1397,1397,1397),(1398,1398,1398),(1399,1399,1399),(1400,1400,1400),
(1401,1401,1401),(1402,1402,1402),(1403,1403,1403),(1404,1404,1404),(1405,1405,1405),
(1406,1406,1406),(1407,1407,1407),(1408,1408,1408),(1409,1409,1409),(1410,1410,1410),
(1411,1411,1411),(1412,1412,1412),(1413,1413,1413),(1414,1414,1414),(1415,1415,1415),
(1416,1416,1416),(1417,1417,1417),(1418,1418,1418),(1419,1419,1419),(1420,1420,1420),
(1421,1421,1421),(1422,1422,1422),(1423,1423,1423),(1424,1424,1424),(1425,1425,1425),
(1426,1426,1426),(1427,1427,1427),(1428,1428,1428),(1429,1429,1429),(1430,1430,1430),
(1431,1431,1431),(1432,1432,1432),(1433,1433,1433),(1434,1434,1434),(1435,1435,1435),
(1436,1436,1436),(1437,1437,1437),(1438,1438,1438),(1439,1439,1439),(1440,1440,1440),
(1441,1441,1441),(1442,1442,1442),(1443,1443,1443),(1444,1444,1444),(1445,1445,1445),
(1446,1446,1446),(1447,1447,1447),(1448,1448,1448),(1449,1449,1449),(1450,1450,1450),
(1451,1451,1451),(1452,1452,1452),(1453,1453,1453),(1454,1454,1454),(1455,1455,1455),
(1456,1456,1456),(1457,1457,1457),(1458,1458,1458),(1459,1459,1459),(1460,1460,1460),
(1461,1461,1461),(1462,1462,1462),(1463,1463,1463),(1464,1464,1464),(1465,1465,1465),
(1466,1466,1466),(1467,1467,1467),(1468,1468,1468),(1469,1469,1469),(1470,1470,1470),
(1471,1471,1471),(1472,1472,1472),(1473,1473,1473),(1474,1474,1474),(1475,1475,1475),
(1476,1476,1476),(1477,1477,1477),(1478,1478,1478),(1479,1479,1479),(1480,1480,1480),
(1481,1481,1481),(1482,1482,1482),(1483,1483,1483),(1484,1484,1484),(1485,1485,1485),
(1486,1486,1486),(1487,1487,1487),(1488,1488,1488),(1489,1489,1489),(1490,1490,1490),
(1491,1491,1491),(1492,1492,1492),(1493,1493,1493),(1494,1494,1494),(1495,1495,1495),
(1496,1496,1496),(1497,1497,1497),(1498,1498,1498),(1499,1499,1499),(1500,1500,1500),
(1501,1501,1501),(1502,1502,1502),(1503,1503,1503),(1504,1504,1504),(1505,1505,1505),
(1506,1506,1506),(1507,1507,1507),(1508,1508,1508),(1509,1509,1509),(1510,1510,1510),
(1511,1511,1511),(1512,1512,1512),(1513,1513,1513),(1514,1514,1514),(1515,1515,1515),
(1516,1516,1516),(1517,1517,1517),(1518,1518,1518),(1519,1519,1519),(1520,1520,1520),
(1521,1521,1521),(1522,1522,1522),(1523,1523,1523),(1524,1524,1524),(1525,1525,1525),
(1526,1526,1526),(1527,1527,1527),(1528,1528,1528),(1529,1529,1529),(1530,1530,1530),
(1531,1531,1531),(1532,1532,1532),(1533,1533,1533),(1534,1534,1534),(1535,1535,1535),
(1536,1536,1536),(1537,1537,1537),(1538,1538,1538),(1539,1539,1539),(1540,1540,1540),
(1541,1541,1541),(1542,1542,1542),(1543,1543,1543),(1544,1544,1544),(1545,1545,1545),
(1546,1546,1546),(1547,1547,1547),(1548,1548,1548),(1549,1549,1549),(1550,1550,1550),
(1551,1551,1551),(1552,1552,1552),(1553,1553,1553),(1554,1554,1554),(1555,1555,1555),
(1556,1556,1556),(1557,1557,1557),(1558,1558,1558),(1559,1559,1559),(1560,1560,1560),
(1561,1561,1561),(1562,1562,1562),(1563,1563,1563),(1564,1564,1564),(1565,1565,1565),
(1566,1566,1566),(1567,1567,1567),(1568,1568,1568),(1569,1569,1569),(1570,1570,1570),
(1571,1571,1571),(1572,1572,1572),(1573,1573,1573),(1574,1574,1574),(1575,1575,1575),
(1576,1576,1576),(1577,1577,1577),(1578,1578,1578),(1579,1579,1579),(1580,1580,1580),
(1581,1581,1581),(1582,1582,1582),(1583,1583,1583),(1584,1584,1584),(1585,1585,1585),
(1586,1586,1586),(1587,1587,1587),(1588,1588,1588),(1589,1589,1589),(1590,1590,1590),
(1591,1591,1591),(1592,1592,1592),(1593,1593,1593),(1594,1594,1594),(1595,1595,1595),
(1596,1596,1596),(1597,1597,1597),(1598,1598,1598),(1599,1599,1599),(1600,1600,1600),
(1601,1601,1601),(1602,1602,1602),(1603,1603,1603),(1604,1604,1604),(1605,1605,1605),
(1606,1606,1606),(1607,1607,1607),(1608,1608,1608),(1609,1609,1609),(1610,1610,1610),
(1611,1611,1611),(1612,1612,1612),(1613,1613,1613),(1614,1614,1614),(1615,1615,1615),
(1616,1616,1616),(1617,1617,1617),(1618,1618,1618),(1619,1619,1619),(1620,1620,1620),
(1621,1621,1621),(1622,1622,1622),(1623,1623,1623),(1624,1624,1624),(1625,1625,1625),
(1626,1626,1626),(1627,1627,1627),(1628,1628,1628),(1629,1629,1629),(1630,1630,1630),
(1631,1631,1631),(1632,1632,1632),(1633,1633,1633),(1634,1634,1634),(1635,1635,1635),
(1636,1636,1636),(1637,1637,1637),(1638,1638,1638),(1639,1639,1639),(1640,1640,1640),
(1641,1641,1641),(1642,1642,1642),(1643,1643,1643),(1644,1644,1644),(1645,1645,1645),
(1646,1646,1646),(1647,1647,1647),(1648,1648,1648),(1649,1649,1649),(1650,1650,1650),
(1651,1651,1651),(1652,1652,1652),(1653,1653,1653),(1654,1654,1654),(1655,1655,1655),
(1656,1656,1656),(1657,1657,1657),(1658,1658,1658),(1659,1659,1659),(1660,1660,1660),
(1661,1661,1661),(1662,1662,1662),(1663,1663,1663),(1664,1664,1664),(1665,1665,1665),
(1666,1666,1666),(1667,1667,1667),(1668,1668,1668),(1669,1669,1669),(1670,1670,1670),
(1671,1671,1671),(1672,1672,1672),(1673,1673,1673),(1674,1674,1674),(1675,1675,1675),
(1676,1676,1676),(1677,1677,1677),(1678,1678,1678),(1679,1679,1679),(1680,1680,1680),
(1681,1681,1681),(1682,1682,1682),(1683,1683,1683),(1684,1684,1684),(1685,1685,1685),
(1686,1686,1686),(1687,1687,1687),(1688,1688,1688),(1689,1689,1689),(1690,1690,1690),
(1691,1691,1691),(1692,1692,1692),(1693,1693,1693),(1694,1694,1694),(1695,1695,1695),
(1696,1696,1696),(1697,1697,1697),(1698,1698,1698),(1699,1699,1699),(1700,1700,1700),
(1701,1701,1701),(1702,1702,1702),(1703,1703,1703),(1704,1704,1704),(1705,1705,1705),
(1706,1706,1706),(1707,1707,1707),(1708,1708,1708),(1709,1709,1709),(1710,1710,1710),
(1711,1711,1711),(1712,1712,1712),(1713,1713,1713),(1714,1714,1714),(1715,1715,1715),
(1716,1716,1716),(1717,1717,1717),(1718,1718,1718),(1719,1719,1719),(1720,1720,1720),
(1721,1721,1721),(1722,1722,1722),(1723,1723,1723),(1724,1724,1724),(1725,1725,1725),
(1726,1726,1726),(1727,1727,1727),(1728,1728,1728),(1729,1729,1729),(1730,1730,1730),
(1731,1731,1731),(1732,1732,1732),(1733,1733,1733),(1734,1734,1734),(1735,1735,1735),
(1736,1736,1736),(1737,1737,1737),(1738,1738,1738),(1739,1739,1739),(1740,1740,1740),
(1741,1741,1741),(1742,1742,1742),(1743,1743,1743),(1744,1744,1744),(1745,1745,1745),
(1746,1746,1746),(1747,1747,1747),(1748,1748,1748),(1749,1749,1749),(1750,1750,1750),
(1751,1751,1751),(1752,1752,1752),(1753,1753,1753),(1754,1754,1754),(1755,1755,1755),
(1756,1756,1756),(1757,1757,1757),(1758,1758,1758),(1759,1759,1759),(1760,1760,1760),
(1761,1761,1761),(1762,1762,1762),(1763,1763,1763),(1764,1764,1764),(1765,1765,1765),
(1766,1766,1766),(1767,1767,1767),(1768,1768,1768),(1769,1769,1769),(1770,1770,1770),
(1771,1771,1771),(1772,1772,1772),(1773,1773,1773),(1774,1774,1774),(1775,1775,1775),
(1776,1776,1776),(1777,1777,1777),(1778,1778,1778),(1779,1779,1779),(1780,1780,1780),
(1781,1781,1781),(1782,1782,1782),(1783,1783,1783),(1784,1784,1784),(1785,1785,1785),
(1786,1786,1786),(1787,1787,1787),(1788,1788,1788),(1789,1789,1789),(1790,1790,1790),
(1791,1791,1791),(1792,1792,1792),(1793,1793,1793),(1794,1794,1794),(1795,1795,1795),
(1796,1796,1796),(1797,1797,1797),(1798,1798,1798),(1799,1799,1799),(1800,1800,1800),
(1801,1801,1801),(1802,1802,1802),(1803,1803,1803),(1804,1804,1804),(1805,1805,1805),
(1806,1806,1806),(1807,1807,1807),(1808,1808,1808),(1809,1809,1809),(1810,1810,1810),
(1811,1811,1811),(1812,1812,1812),(1813,1813,1813),(1814,1814,1814),(1815,1815,1815),
(1816,1816,1816),(1817,1817,1817),(1818,1818,1818),(1819,1819,1819),(1820,1820,1820),
(1821,1821,1821),(1822,1822,1822),(1823,1823,1823),(1824,1824,1824),(1825,1825,1825),
(1826,1826,1826),(1827,1827,1827),(1828,1828,1828),(1829,1829,1829),(1830,1830,1830),
(1831,1831,1831),(1832,1832,1832),(1833,1833,1833),(1834,1834,1834),(1835,1835,1835),
(1836,1836,1836),(1837,1837,1837),(1838,1838,1838),(1839,1839,1839),(1840,1840,1840),
(1841,1841,1841),(1842,1842,1842),(1843,1843,1843),(1844,1844,1844),(1845,1845,1845),
(1846,1846,1846),(1847,1847,1847),(1848,1848,1848),(1849,1849,1849),(1850,1850,1850),
(1851,1851,1851),(1852,1852,1852),(1853,1853,1853),(1854,1854,1854),(1855,1855,1855),
(1856,1856,1856),(1857,1857,1857),(1858,1858,1858),(1859,1859,1859),(1860,1860,1860),
(1861,1861,1861),(1862,1862,1862),(1863,1863,1863),(1864,1864,1864),(1865,1865,1865),
(1866,1866,1866),(1867,1867,1867),(1868,1868,1868),(1869,1869,1869),(1870,1870,1870),
(1871,1871,1871),(1872,1872,1872),(1873,1873,1873),(1874,1874,1874),(1875,1875,1875),
(1876,1876,1876),(1877,1877,1877),(1878,1878,1878),(1879,1879,1879),(1880,1880,1880),
(1881,1881,1881),(1882,1882,1882),(1883,1883,1883),(1884,1884,1884),(1885,1885,1885),
(1886,1886,1886),(1887,1887,1887),(1888,1888,1888),(1889,1889,1889),(1890,1890,1890),
(1891,1891,1891),(1892,1892,1892),(1893,1893,1893),(1894,1894,1894),(1895,1895,1895),
(1896,1896,1896),(1897,1897,1897),(1898,1898,1898),(1899,1899,1899),(1900,1900,1900),
(1901,1901,1901),(1902,1902,1902),(1903,1903,1903),(1904,1904,1904),(1905,1905,1905),
(1906,1906,1906),(1907,1907,1907),(1908,1908,1908),(1909,1909,1909),(1910,1910,1910),
(1911,1911,1911),(1912,1912,1912),(1913,1913,1913),(1914,1914,1914),(1915,1915,1915),
(1916,1916,1916),(1917,1917,1917),(1918,1918,1918),(1919,1919,1919),(1920,1920,1920),
(1921,1921,1921),(1922,1922,1922),(1923,1923,1923),(1924,1924,1924),(1925,1925,1925),
(1926,1926,1926),(1927,1927,1927),(1928,1928,1928),(1929,1929,1929),(1930,1930,1930),
(1931,1931,1931),(1932,1932,1932),(1933,1933,1933),(1934,1934,1934),(1935,1935,1935),
(1936,1936,1936),(1937,1937,1937),(1938,1938,1938),(1939,1939,1939),(1940,1940,1940),
(1941,1941,1941),(1942,1942,1942),(1943,1943,1943),(1944,1944,1944),(1945,1945,1945),
(1946,1946,1946),(1947,1947,1947),(1948,1948,1948),(1949,1949,1949),(1950,1950,1950),
(1951,1951,1951),(1952,1952,1952),(1953,1953,1953),(1954,1954,1954),(1955,1955,1955),
(1956,1956,1956),(1957,1957,1957),(1958,1958,1958),(1959,1959,1959),(1960,1960,1960),
(1961,1961,1961),(1962,1962,1962),(1963,1963,1963),(1964,1964,1964),(1965,1965,1965),
(1966,1966,1966),(1967,1967,1967),(1968,1968,1968),(1969,1969,1969),(1970,1970,1970),
(1971,1971,1971),(1972,1972,1972),(1973,1973,1973),(1974,1974,1974),(1975,1975,1975),
(1976,1976,1976),(1977,1977,1977),(1978,1978,1978),(1979,1979,1979),(1980,1980,1980),
(1981,1981,1981),(1982,1982,1982),(1983,1983,1983),(1984,1984,1984),(1985,1985,1985),
(1986,1986,1986),(1987,1987,1987),(1988,1988,1988),(1989,1989,1989),(1990,1990,1990),
(1991,1991,1991),(1992,1992,1992),(1993,1993,1993),(1994,1994,1994),(1995,1995,1995),
(1996,1996,1996),(1997,1997,1997),(1998,1998,1998),(1999,1999,1999);
SELECT COUNT(*) FROM t1;
COUNT(*)
2000
DROP TABLE t1;
-- source include/have_ndb.inc
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
#
# Basic test to show that the ALTER TABLE
# is working
#
CREATE TABLE t1 (
a INT NOT NULL,
b INT NOT NULL
) ENGINE=ndbcluster;
INSERT INTO t1 VALUES (9410,9412);
ALTER TABLE t1 ADD COLUMN c int not null;
SELECT * FROM t1;
DROP TABLE t1;
#
# More advanced test
#
create table t1 (
col1 int not null auto_increment primary key,
col2 varchar(30) not null,
col3 varchar (20) not null,
col4 varchar(4) not null,
col5 enum('PENDING', 'ACTIVE', 'DISABLED') not null,
col6 int not null, to_be_deleted int);
insert into t1 values (2,4,3,5,"PENDING",1,7);
alter table t1
add column col4_5 varchar(20) not null after col4,
add column col7 varchar(30) not null after col5,
add column col8 datetime not null, drop column to_be_deleted,
change column col2 fourth varchar(30) not null after col3,
modify column col6 int not null first;
select * from t1;
drop table t1;
......@@ -23,6 +23,7 @@ SELECT pk1 FROM t1;
SELECT * FROM t1;
SELECT t1.* FROM t1;
# Update on record by primary key
UPDATE t1 SET attr1=1 WHERE pk1=9410;
SELECT * FROM t1;
......@@ -35,13 +36,23 @@ SELECT * FROM t1;
DELETE FROM t1;
SELECT * FROM t1;
# Delete the record by specifying pk
INSERT INTO t1 VALUES (9410,9412);
# Insert more records and update them all at once
INSERT INTO t1 VALUES (9410,9412), (9411, 9413), (9408, 8765),
(7,8), (8,9), (9,10), (10,11), (11,12), (12,13), (13,14);
UPDATE t1 SET attr1 = 9999;
SELECT * FROM t1 ORDER BY pk1;
UPDATE t1 SET attr1 = 9998 WHERE pk1 < 1000;
SELECT * FROM t1 ORDER BY pk1;
UPDATE t1 SET attr1 = 9997 WHERE attr1 = 9999;
SELECT * FROM t1 ORDER BY pk1;
# Delete one record by specifying pk
DELETE FROM t1 WHERE pk1 = 9410;
SELECT * FROM t1;
SELECT * FROM t1 ORDER BY pk1;
# Insert three records and delete the
INSERT INTO t1 VALUES (9410,9412), (9411, 9413), (9408, 8765);
# Delete all from table
DELETE FROM t1;
SELECT * FROM t1;
......
-- source include/have_ndb.inc
--disable_warnings
drop table if exists t1;
--enable_warnings
CREATE TABLE t1 (
PORT varchar(16) NOT NULL,
ACCESSNODE varchar(16) NOT NULL,
POP varchar(48) NOT NULL,
ACCESSTYPE int unsigned NOT NULL,
CUSTOMER_ID varchar(20) NOT NULL,
PROVIDER varchar(16),
TEXPIRE int unsigned,
NUM_IP int unsigned,
LEASED_NUM_IP int unsigned,
LOCKED_IP int unsigned,
STATIC_DNS int unsigned,
SUSPENDED_SERVICE int unsigned,
SUSPENDED_REASON int unsigned,
BGP_COMMUNITY int unsigned,
INDEX CUSTOMER_ID_INDEX(CUSTOMER_ID),
INDEX FQPN_INDEX(POP,ACCESSNODE,PORT),
PRIMARY KEY(POP,ACCESSNODE,PORT,ACCESSTYPE)
) engine=ndbcluster;
INSERT INTO t1 VALUES ('port67', 'node78', 'pop98', 1, 'kllopmn', 'pr_43', 121212, 1, 2, 3, 8, NULL, NULL, NULL);
INSERT INTO t1 VALUES ('port67', 'node78', 'pop99', 2, 'klkighh', 'pr_44', 121213, 3, 3, 6, 7, NULL, NULL, NULL);
INSERT INTO t1 VALUES ('port79', 'node79', 'pop79', 2, 'kpongfaa', 'pr_44', 981213, 2, 4, 10, 11, 2, 99, 1278);
# Test select using port
select port, accessnode, pop, accesstype from t1 where port='port67' order by accesstype;
select port, accessnode, pop, accesstype from t1 where port='foo';
# Test select using accessnode
select port, accessnode, pop, accesstype from t1 where accessnode='node78' order by accesstype;
select port, accessnode, pop, accesstype from t1 where accessnode='foo';
# Test select using pop
select port, accessnode, pop, accesstype from t1 where pop='pop98';
select port, accessnode, pop, accesstype from t1 where pop='pop98';
select port, accessnode, pop, accesstype from t1 where pop='pop98';
select port, accessnode, pop, accesstype from t1 where pop='pop98' order by accesstype;
select port, accessnode, pop, accesstype from t1 where pop='POP98';
select port, accessnode, pop, accesstype from t1 where pop='POP98' order by accesstype;
select port, accessnode, pop, accesstype from t1 where pop='foo';
# Test select using accesstype
select port, accessnode, pop, accesstype from t1 where accesstype=1;
select port, accessnode, pop, accesstype from t1 where accesstype=2 order by port;
select port, accessnode, pop, accesstype from t1 where accesstype=98 order by port;
# Test select using customer_id
# NOTE! customer_id has a INDEX (ordered index in NDB), it's case sensitive!
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn';
select port, accessnode, pop, accesstype from t1 where customer_id='KLLOPMN';
select port, accessnode, pop, accesstype from t1 where customer_id='kLLoPMn';
select port, accessnode, pop, accesstype from t1 where customer_id='foo';
# Test select using provider
select port, accessnode, pop, accesstype from t1 where provider='pr_43';
select port, accessnode, pop, accesstype from t1 where provider='foo';
# Test select using texpire
select port, accessnode from t1 where texpire=121212;
select port, accessnode from t1 where texpire=2323;
# Test select using num_ip
select port, accessnode, pop, accesstype from t1 where num_ip=1;
select port, accessnode, pop, accesstype from t1 where num_ip=89;
# Test select using leased_num_ip
select port, accessnode, pop, accesstype from t1 where leased_num_ip=2;
select port, accessnode, pop, accesstype from t1 where leased_num_ip=89;
# Test select using locked_ip
select port, accessnode, pop, accesstype from t1 where locked_ip=3;
select port, accessnode, pop, accesstype from t1 where locked_ip=89;
# Test select using static_dns
select port, accessnode, pop, accesstype from t1 where static_dns=8;
select port, accessnode, pop, accesstype from t1 where static_dns=89;
# Test select using suspended_service
select port, accessnode, pop, accesstype from t1 where suspended_service=8;
select port, accessnode, pop, accesstype from t1 where suspended_service=89;
# Test select using suspended_reason
select port, accessnode, pop, accesstype from t1 where suspended_reason=NULL;
select port, accessnode, pop, accesstype from t1 where suspended_reason=89;
select port, accessnode, pop, accesstype from t1 where suspended_reason=0;
# Test select using bgp_community
select port, accessnode, pop, accesstype from t1 where bgp_community=NULL;
select port, accessnode, pop, accesstype from t1 where bgp_community=89;
select port, accessnode, pop, accesstype from t1 where bgp_community=0;
# Test select using full primary key
select port, accessnode, pop, accesstype from t1 where port='port67' and accessnode='node78' and pop='pop98' and accesstype=1;
select port, accessnode, pop, accesstype from t1 where port='port67' and accesstype=1 and accessnode='node78' and pop='pop98';
select port, accessnode, pop, accesstype from t1 where pop='pop98' and port='port67' and accesstype=1 and accessnode='node78';
select port, accessnode from t1 where port='foo' and accessnode='foo' and pop='foo' and accesstype=99;
# Test select using partial primary key
select port, accessnode, pop, accesstype from t1 where port='port67' and pop='pop98' and accesstype=1;
select port, accessnode, pop, accesstype from t1 where accesstype=1 and accessnode='node78' and pop='pop98';
select port, accessnode, pop, accesstype from t1 where port='port67' and accesstype=1 and accessnode='node78';
select port, accessnode from t1 where port='foo' and accessnode='foo' and pop='foo';
# Test select using CUSTOMER_ID_INDEX
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn';
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn' and accesstype=1;
select port, accessnode, pop, accesstype from t1 where customer_id='kllopmn' and accesstype=2;
select port, accessnode, pop, accesstype from t1 where accesstype=2 and customer_id='kllopmn';
# Test select using FQPN_INDEX
select port, accessnode, pop, accesstype from t1 where pop='pop98' and accessnode='node78' and port='port67';
#select port, accessnode, pop, accesstype from t1 where pop='pop98' and accessnode='node78' and port='port67' order by accesstype;
#select port, accessnode, pop, accesstype from t1 where accessnode='node78' and port='port67' and pop='pop98' order by accesstype;
#select port, accessnode, pop, accesstype from t1 where port='port67' and pop='pop98' and accessnode='node78' order by accesstype;
select port, accessnode, pop, accesstype from t1 where pop='pop98' and accessnode='node78' and port='port67' and customer_id='kllopmn';
select port, accessnode, pop, accesstype from t1 where pop='pop98' and accessnode='node78' and port='port67' and customer_id='foo';
drop table t1;
-- source include/have_ndb.inc
--disable_warnings
drop table if exists t1;
--enable_warnings
#
# Simple test to show use of ordered indexes
#
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned,
KEY(b)
) engine=ndbcluster;
insert t1 values(1, 2, 3), (2,3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
select * from t1 order by b;
select * from t1 where b >= 4 order by b;
select * from t1 where b = 4 order by b;
select * from t1 where b > 4 order by b;
select * from t1 where b < 4 order by b;
select * from t1 where b <= 4 order by b;
#
# Here we should add some "explain select" to verify that the ordered index is
# used for these queries.
#
#
# Update using ordered index scan
#
update t1 set c = 3 where b = 3;
select * from t1 order by a;
update t1 set c = 10 where b >= 6;
select * from t1 order by a;
update t1 set c = 11 where b < 5;
select * from t1 order by a;
update t1 set c = 12 where b > 0;
select * from t1 order by a;
update t1 set c = 13 where b <= 3;
select * from t1 order by a;
#
# Delete using ordered index scan
#
drop table t1;
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned,
KEY(b)
) engine=ndbcluster;
insert t1 values(1, 2, 13), (2,3, 13), (3, 4, 12), (4, 5, 12), (5,6, 12), (6,7, 12);
delete from t1 where b = 3;
select * from t1 order by a;
delete from t1 where b >= 6;
select * from t1 order by a;
delete from t1 where b < 4;
select * from t1 order by a;
delete from t1 where b > 5;
select * from t1 order by a;
delete from t1 where b <= 4;
select * from t1 order by a;
drop table t1;
#
#multi part key
#
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned not null,
) engine = ndb;
create index a1 on t1 (b, c);
insert into t1 values (1, 2, 13);
insert into t1 values (2,3, 13);
insert into t1 values (3, 4, 12);
insert into t1 values (4, 5, 12);
insert into t1 values (5,6, 12);
insert into t1 values (6,7, 12);
insert into t1 values (7, 2, 1);
insert into t1 values (8,3, 6);
insert into t1 values (9, 4, 12);
insert into t1 values (14, 5, 4);
insert into t1 values (15,5,5);
insert into t1 values (16,5, 6);
insert into t1 values (17,4,4);
insert into t1 values (18,1, 7);
select * from t1 order by a;
select * from t1 where b<=5 order by a;
select * from t1 where b<=5 and c=0;
insert into t1 values (19,4, 0);
select * from t1 where b<=5 and c=0;
select * from t1 where b=4 and c<=5;
select * from t1 where b<=4 and c<=5 order by a;
select * from t1 where b<=5 and c=0 or b<=5 and c=2;
drop table t1;
-- source include/have_ndb.inc
--disable_warnings
drop table if exists t1, t2, t3, t4, t5, t6, t7;
--enable_warnings
#
# Simple test to show use of UNIQUE indexes
#
CREATE TABLE t1 (
a int unsigned NOT NULL PRIMARY KEY,
b int unsigned not null,
c int unsigned,
UNIQUE(b)
) engine=ndbcluster;
insert t1 values(1, 2, 3), (2, 3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
select * from t1 order by b;
select * from t1 where b = 4 order by b;
insert into t1 values(7,8,3);
select * from t1 where b = 4 order by a;
drop table t1;
#
# More complex tables
#
CREATE TABLE t1 (
cid smallint(5) unsigned NOT NULL default '0',
cv varchar(250) NOT NULL default '',
PRIMARY KEY (cid),
UNIQUE KEY cv (cv)
) engine=ndbcluster;
INSERT INTO t1 VALUES (8,'dummy');
CREATE TABLE t2 (
cid bigint(20) unsigned NOT NULL auto_increment,
cap varchar(255) NOT NULL default '',
PRIMARY KEY (cid),
) engine=ndbcluster;
CREATE TABLE t3 (
gid bigint(20) unsigned NOT NULL auto_increment,
gn varchar(255) NOT NULL default '',
must tinyint(4) default NULL,
PRIMARY KEY (gid),
) engine=ndbcluster;
INSERT INTO t3 VALUES (1,'V1',NULL);
CREATE TABLE t4 (
uid bigint(20) unsigned NOT NULL default '0',
gid bigint(20) unsigned NOT NULL,
rid bigint(20) unsigned NOT NULL default '-1',
cid bigint(20) unsigned NOT NULL default '-1',
UNIQUE KEY m (uid,gid,rid,cid),
) engine=ndbcluster;
INSERT INTO t4 VALUES (1,1,2,4);
INSERT INTO t4 VALUES (1,1,2,3);
INSERT INTO t4 VALUES (1,1,5,7);
INSERT INTO t4 VALUES (1,1,10,8);
CREATE TABLE t5 (
rid bigint(20) unsigned NOT NULL auto_increment,
rl varchar(255) NOT NULL default '',
PRIMARY KEY (rid),
) engine=ndbcluster;
CREATE TABLE t6 (
uid bigint(20) unsigned NOT NULL auto_increment,
un varchar(250) NOT NULL default '',
uc smallint(5) unsigned NOT NULL default '0',
PRIMARY KEY (uid),
UNIQUE KEY nc (un,uc),
) engine=ndbcluster;
INSERT INTO t6 VALUES (1,'test',8);
INSERT INTO t6 VALUES (2,'test2',9);
INSERT INTO t6 VALUES (3,'tre',3);
CREATE TABLE t7 (
mid bigint(20) unsigned NOT NULL PRIMARY KEY,
uid bigint(20) unsigned NOT NULL default '0',
gid bigint(20) unsigned NOT NULL,
rid bigint(20) unsigned NOT NULL default '-1',
cid bigint(20) unsigned NOT NULL default '-1',
UNIQUE KEY m (uid,gid,rid,cid),
) engine=ndbcluster;
INSERT INTO t7 VALUES(1, 1, 1, 1, 1);
INSERT INTO t7 VALUES(2, 2, 1, 1, 1);
INSERT INTO t7 VALUES(3, 3, 1, 1, 1);
INSERT INTO t7 VALUES(4, 4, 1, 1, 1);
INSERT INTO t7 VALUES(5, 5, 1, 1, 1);
INSERT INTO t7 VALUES(6, 1, 1, 1, 6);
INSERT INTO t7 VALUES(7, 2, 1, 1, 7);
INSERT INTO t7 VALUES(8, 3, 1, 1, 8);
INSERT INTO t7 VALUES(9, 4, 1, 1, 9);
INSERT INTO t7 VALUES(10, 5, 1, 1, 10);
select * from t1 where cv = 'dummy';
select * from t1 where cv = 'test';
select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4;
select * from t4 where uid = 1 and gid=1 and rid=1 and cid=4;
select * from t4 where uid = 1 order by cid;
select * from t4 where rid = 2 order by cid;
select * from t6 where un='test' and uc=8;
select * from t6 where un='test' and uc=7;
select * from t6 where un='test';
select * from t7 where mid = 8;
select * from t7 where uid = 8;
select * from t7 where uid = 1 order by mid;
select * from t7 where uid = 4 order by mid;
select * from t7 where gid = 4;
select * from t7 where gid = 1 order by mid;
select * from t7 where cid = 4;
select * from t7 where cid = 8;
#
# insert more records into t4
#
let $1=100;
disable_query_log;
while ($1)
{
eval insert into t4 values(1, $1, 5, 12);
eval insert into t4 values($1, 3, 9, 11);
dec $1;
}
enable_query_log;
select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4;
select * from t4 where uid = 1 and gid=1 and rid=1 and cid=4;
select * from t4 where uid = 1 order by gid,cid;
select * from t4 where uid = 1 order by gid,cid;
select * from t4 where rid = 2 order by cid;
drop table t1,t2,t3,t4,t5,t6,t7;
-- source include/have_ndb.inc
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
#
# Basic test of INSERT in NDB
#
#
# Create a normal table with primary key
#
CREATE TABLE t1 (
pk1 INT NOT NULL PRIMARY KEY,
b INT NOT NULL,
c INT NOT NULL
) ENGINE=ndbcluster;
INSERT INTO t1 VALUES (0, 0, 0);
SELECT * FROM t1;
INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),
(6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10),
(11,11,11),(12,12,12),(13,13,13),(14,14,14),(15,15,15),
(16,16,16),(17,17,17),(18,18,18),(19,19,19),(20,20,20),
(21,21,21),(22,22,22),(23,23,23),(24,24,24),(25,25,25),
(26,26,26),(27,27,27),(28,28,28),(29,29,29),(30,30,30),
(31,31,31),(32,32,32),(33,33,33),(34,34,34),(35,35,35),
(36,36,36),(37,37,37),(38,38,38),(39,39,39),(40,40,40),
(41,41,41),(42,42,42),(43,43,43),(44,44,44),(45,45,45),
(46,46,46),(47,47,47),(48,48,48),(49,49,49),(50,50,50),
(51,51,51),(52,52,52),(53,53,53),(54,54,54),(55,55,55),
(56,56,56),(57,57,57),(58,58,58),(59,59,59),(60,60,60),
(61,61,61),(62,62,62),(63,63,63),(64,64,64),(65,65,65),
(66,66,66),(67,67,67),(68,68,68),(69,69,69),(70,70,70),
(71,71,71),(72,72,72),(73,73,73),(74,74,74),(75,75,75),
(76,76,76),(77,77,77),(78,78,78),(79,79,79),(80,80,80),
(81,81,81),(82,82,82),(83,83,83),(84,84,84),(85,85,85),
(86,86,86),(87,87,87),(88,88,88),(89,89,89),(90,90,90),
(91,91,91),(92,92,92),(93,93,93),(94,94,94),(95,95,95),
(96,96,96),(97,97,97),(98,98,98),(99,99,99),(100,100,100),
(101,101,101),(102,102,102),(103,103,103),(104,104,104),(105,105,105),
(106,106,106),(107,107,107),(108,108,108),(109,109,109),(110,110,110),
(111,111,111),(112,112,112),(113,113,113),(114,114,114),(115,115,115),
(116,116,116),(117,117,117),(118,118,118),(119,119,119),(120,120,120),
(121,121,121),(122,122,122),(123,123,123),(124,124,124),(125,125,125),
(126,126,126),(127,127,127),(128,128,128),(129,129,129),(130,130,130),
(131,131,131),(132,132,132),(133,133,133),(134,134,134),(135,135,135),
(136,136,136),(137,137,137),(138,138,138),(139,139,139),(140,140,140),
(141,141,141),(142,142,142),(143,143,143),(144,144,144),(145,145,145),
(146,146,146),(147,147,147),(148,148,148),(149,149,149),(150,150,150),
(151,151,151),(152,152,152),(153,153,153),(154,154,154),(155,155,155),
(156,156,156),(157,157,157),(158,158,158),(159,159,159),(160,160,160),
(161,161,161),(162,162,162),(163,163,163),(164,164,164),(165,165,165),
(166,166,166),(167,167,167),(168,168,168),(169,169,169),(170,170,170),
(171,171,171),(172,172,172),(173,173,173),(174,174,174),(175,175,175),
(176,176,176),(177,177,177),(178,178,178),(179,179,179),(180,180,180),
(181,181,181),(182,182,182),(183,183,183),(184,184,184),(185,185,185),
(186,186,186),(187,187,187),(188,188,188),(189,189,189),(190,190,190),
(191,191,191),(192,192,192),(193,193,193),(194,194,194),(195,195,195),
(196,196,196),(197,197,197),(198,198,198),(199,199,199),(200,200,200),
(201,201,201),(202,202,202),(203,203,203),(204,204,204),(205,205,205),
(206,206,206),(207,207,207),(208,208,208),(209,209,209),(210,210,210),
(211,211,211),(212,212,212),(213,213,213),(214,214,214),(215,215,215),
(216,216,216),(217,217,217),(218,218,218),(219,219,219),(220,220,220),
(221,221,221),(222,222,222),(223,223,223),(224,224,224),(225,225,225),
(226,226,226),(227,227,227),(228,228,228),(229,229,229),(230,230,230),
(231,231,231),(232,232,232),(233,233,233),(234,234,234),(235,235,235),
(236,236,236),(237,237,237),(238,238,238),(239,239,239),(240,240,240),
(241,241,241),(242,242,242),(243,243,243),(244,244,244),(245,245,245),
(246,246,246),(247,247,247),(248,248,248),(249,249,249),(250,250,250),
(251,251,251),(252,252,252),(253,253,253),(254,254,254),(255,255,255),
(256,256,256),(257,257,257),(258,258,258),(259,259,259),(260,260,260),
(261,261,261),(262,262,262),(263,263,263),(264,264,264),(265,265,265),
(266,266,266),(267,267,267),(268,268,268),(269,269,269),(270,270,270),
(271,271,271),(272,272,272),(273,273,273),(274,274,274),(275,275,275),
(276,276,276),(277,277,277),(278,278,278),(279,279,279),(280,280,280),
(281,281,281),(282,282,282),(283,283,283),(284,284,284),(285,285,285),
(286,286,286),(287,287,287),(288,288,288),(289,289,289),(290,290,290),
(291,291,291),(292,292,292),(293,293,293),(294,294,294),(295,295,295),
(296,296,296),(297,297,297),(298,298,298),(299,299,299),(300,300,300),
(301,301,301),(302,302,302),(303,303,303),(304,304,304),(305,305,305),
(306,306,306),(307,307,307),(308,308,308),(309,309,309),(310,310,310),
(311,311,311),(312,312,312),(313,313,313),(314,314,314),(315,315,315),
(316,316,316),(317,317,317),(318,318,318),(319,319,319),(320,320,320),
(321,321,321),(322,322,322),(323,323,323),(324,324,324),(325,325,325),
(326,326,326),(327,327,327),(328,328,328),(329,329,329),(330,330,330),
(331,331,331),(332,332,332),(333,333,333),(334,334,334),(335,335,335),
(336,336,336),(337,337,337),(338,338,338),(339,339,339),(340,340,340),
(341,341,341),(342,342,342),(343,343,343),(344,344,344),(345,345,345),
(346,346,346),(347,347,347),(348,348,348),(349,349,349),(350,350,350),
(351,351,351),(352,352,352),(353,353,353),(354,354,354),(355,355,355),
(356,356,356),(357,357,357),(358,358,358),(359,359,359),(360,360,360),
(361,361,361),(362,362,362),(363,363,363),(364,364,364),(365,365,365),
(366,366,366),(367,367,367),(368,368,368),(369,369,369),(370,370,370),
(371,371,371),(372,372,372),(373,373,373),(374,374,374),(375,375,375),
(376,376,376),(377,377,377),(378,378,378),(379,379,379),(380,380,380),
(381,381,381),(382,382,382),(383,383,383),(384,384,384),(385,385,385),
(386,386,386),(387,387,387),(388,388,388),(389,389,389),(390,390,390),
(391,391,391),(392,392,392),(393,393,393),(394,394,394),(395,395,395),
(396,396,396),(397,397,397),(398,398,398),(399,399,399),(400,400,400),
(401,401,401),(402,402,402),(403,403,403),(404,404,404),(405,405,405),
(406,406,406),(407,407,407),(408,408,408),(409,409,409),(410,410,410),
(411,411,411),(412,412,412),(413,413,413),(414,414,414),(415,415,415),
(416,416,416),(417,417,417),(418,418,418),(419,419,419),(420,420,420),
(421,421,421),(422,422,422),(423,423,423),(424,424,424),(425,425,425),
(426,426,426),(427,427,427),(428,428,428),(429,429,429),(430,430,430),
(431,431,431),(432,432,432),(433,433,433),(434,434,434),(435,435,435),
(436,436,436),(437,437,437),(438,438,438),(439,439,439),(440,440,440),
(441,441,441),(442,442,442),(443,443,443),(444,444,444),(445,445,445),
(446,446,446),(447,447,447),(448,448,448),(449,449,449),(450,450,450),
(451,451,451),(452,452,452),(453,453,453),(454,454,454),(455,455,455),
(456,456,456),(457,457,457),(458,458,458),(459,459,459),(460,460,460),
(461,461,461),(462,462,462),(463,463,463),(464,464,464),(465,465,465),
(466,466,466),(467,467,467),(468,468,468),(469,469,469),(470,470,470),
(471,471,471),(472,472,472),(473,473,473),(474,474,474),(475,475,475),
(476,476,476),(477,477,477),(478,478,478),(479,479,479),(480,480,480),
(481,481,481),(482,482,482),(483,483,483),(484,484,484),(485,485,485),
(486,486,486),(487,487,487),(488,488,488),(489,489,489),(490,490,490),
(491,491,491),(492,492,492),(493,493,493),(494,494,494),(495,495,495),
(496,496,496),(497,497,497),(498,498,498),(499,499,499),(500, 500, 500);
SELECT COUNT(*) FROM t1;
INSERT INTO t1 VALUES
(501,501,501),(502,502,502),(503,503,503),(504,504,504),(505,505,505),
(506,506,506),(507,507,507),(508,508,508),(509,509,509),(510,510,510),
(511,511,511),(512,512,512),(513,513,513),(514,514,514),(515,515,515),
(516,516,516),(517,517,517),(518,518,518),(519,519,519),(520,520,520),
(521,521,521),(522,522,522),(523,523,523),(524,524,524),(525,525,525),
(526,526,526),(527,527,527),(528,528,528),(529,529,529),(530,530,530),
(531,531,531),(532,532,532),(533,533,533),(534,534,534),(535,535,535),
(536,536,536),(537,537,537),(538,538,538),(539,539,539),(540,540,540),
(541,541,541),(542,542,542),(543,543,543),(544,544,544),(545,545,545),
(546,546,546),(547,547,547),(548,548,548),(549,549,549),(550,550,550),
(551,551,551),(552,552,552),(553,553,553),(554,554,554),(555,555,555),
(556,556,556),(557,557,557),(558,558,558),(559,559,559),(560,560,560),
(561,561,561),(562,562,562),(563,563,563),(564,564,564),(565,565,565),
(566,566,566),(567,567,567),(568,568,568),(569,569,569),(570,570,570),
(571,571,571),(572,572,572),(573,573,573),(574,574,574),(575,575,575),
(576,576,576),(577,577,577),(578,578,578),(579,579,579),(580,580,580),
(581,581,581),(582,582,582),(583,583,583),(584,584,584),(585,585,585),
(586,586,586),(587,587,587),(588,588,588),(589,589,589),(590,590,590),
(591,591,591),(592,592,592),(593,593,593),(594,594,594),(595,595,595),
(596,596,596),(597,597,597),(598,598,598),(599,599,599),(600,600,600),
(601,601,601),(602,602,602),(603,603,603),(604,604,604),(605,605,605),
(606,606,606),(607,607,607),(608,608,608),(609,609,609),(610,610,610),
(611,611,611),(612,612,612),(613,613,613),(614,614,614),(615,615,615),
(616,616,616),(617,617,617),(618,618,618),(619,619,619),(620,620,620),
(621,621,621),(622,622,622),(623,623,623),(624,624,624),(625,625,625),
(626,626,626),(627,627,627),(628,628,628),(629,629,629),(630,630,630),
(631,631,631),(632,632,632),(633,633,633),(634,634,634),(635,635,635),
(636,636,636),(637,637,637),(638,638,638),(639,639,639),(640,640,640),
(641,641,641),(642,642,642),(643,643,643),(644,644,644),(645,645,645),
(646,646,646),(647,647,647),(648,648,648),(649,649,649),(650,650,650),
(651,651,651),(652,652,652),(653,653,653),(654,654,654),(655,655,655),
(656,656,656),(657,657,657),(658,658,658),(659,659,659),(660,660,660),
(661,661,661),(662,662,662),(663,663,663),(664,664,664),(665,665,665),
(666,666,666),(667,667,667),(668,668,668),(669,669,669),(670,670,670),
(671,671,671),(672,672,672),(673,673,673),(674,674,674),(675,675,675),
(676,676,676),(677,677,677),(678,678,678),(679,679,679),(680,680,680),
(681,681,681),(682,682,682),(683,683,683),(684,684,684),(685,685,685),
(686,686,686),(687,687,687),(688,688,688),(689,689,689),(690,690,690),
(691,691,691),(692,692,692),(693,693,693),(694,694,694),(695,695,695),
(696,696,696),(697,697,697),(698,698,698),(699,699,699),(700,700,700),
(701,701,701),(702,702,702),(703,703,703),(704,704,704),(705,705,705),
(706,706,706),(707,707,707),(708,708,708),(709,709,709),(710,710,710),
(711,711,711),(712,712,712),(713,713,713),(714,714,714),(715,715,715),
(716,716,716),(717,717,717),(718,718,718),(719,719,719),(720,720,720),
(721,721,721),(722,722,722),(723,723,723),(724,724,724),(725,725,725),
(726,726,726),(727,727,727),(728,728,728),(729,729,729),(730,730,730),
(731,731,731),(732,732,732),(733,733,733),(734,734,734),(735,735,735),
(736,736,736),(737,737,737),(738,738,738),(739,739,739),(740,740,740),
(741,741,741),(742,742,742),(743,743,743),(744,744,744),(745,745,745),
(746,746,746),(747,747,747),(748,748,748),(749,749,749),(750,750,750),
(751,751,751),(752,752,752),(753,753,753),(754,754,754),(755,755,755),
(756,756,756),(757,757,757),(758,758,758),(759,759,759),(760,760,760),
(761,761,761),(762,762,762),(763,763,763),(764,764,764),(765,765,765),
(766,766,766),(767,767,767),(768,768,768),(769,769,769),(770,770,770),
(771,771,771),(772,772,772),(773,773,773),(774,774,774),(775,775,775),
(776,776,776),(777,777,777),(778,778,778),(779,779,779),(780,780,780),
(781,781,781),(782,782,782),(783,783,783),(784,784,784),(785,785,785),
(786,786,786),(787,787,787),(788,788,788),(789,789,789),(790,790,790),
(791,791,791),(792,792,792),(793,793,793),(794,794,794),(795,795,795),
(796,796,796),(797,797,797),(798,798,798),(799,799,799),(800,800,800),
(801,801,801),(802,802,802),(803,803,803),(804,804,804),(805,805,805),
(806,806,806),(807,807,807),(808,808,808),(809,809,809),(810,810,810),
(811,811,811),(812,812,812),(813,813,813),(814,814,814),(815,815,815),
(816,816,816),(817,817,817),(818,818,818),(819,819,819),(820,820,820),
(821,821,821),(822,822,822),(823,823,823),(824,824,824),(825,825,825),
(826,826,826),(827,827,827),(828,828,828),(829,829,829),(830,830,830),
(831,831,831),(832,832,832),(833,833,833),(834,834,834),(835,835,835),
(836,836,836),(837,837,837),(838,838,838),(839,839,839),(840,840,840),
(841,841,841),(842,842,842),(843,843,843),(844,844,844),(845,845,845),
(846,846,846),(847,847,847),(848,848,848),(849,849,849),(850,850,850),
(851,851,851),(852,852,852),(853,853,853),(854,854,854),(855,855,855),
(856,856,856),(857,857,857),(858,858,858),(859,859,859),(860,860,860),
(861,861,861),(862,862,862),(863,863,863),(864,864,864),(865,865,865),
(866,866,866),(867,867,867),(868,868,868),(869,869,869),(870,870,870),
(871,871,871),(872,872,872),(873,873,873),(874,874,874),(875,875,875),
(876,876,876),(877,877,877),(878,878,878),(879,879,879),(880,880,880),
(881,881,881),(882,882,882),(883,883,883),(884,884,884),(885,885,885),
(886,886,886),(887,887,887),(888,888,888),(889,889,889),(890,890,890),
(891,891,891),(892,892,892),(893,893,893),(894,894,894),(895,895,895),
(896,896,896),(897,897,897),(898,898,898),(899,899,899),(900,900,900),
(901,901,901),(902,902,902),(903,903,903),(904,904,904),(905,905,905),
(906,906,906),(907,907,907),(908,908,908),(909,909,909),(910,910,910),
(911,911,911),(912,912,912),(913,913,913),(914,914,914),(915,915,915),
(916,916,916),(917,917,917),(918,918,918),(919,919,919),(920,920,920),
(921,921,921),(922,922,922),(923,923,923),(924,924,924),(925,925,925),
(926,926,926),(927,927,927),(928,928,928),(929,929,929),(930,930,930),
(931,931,931),(932,932,932),(933,933,933),(934,934,934),(935,935,935),
(936,936,936),(937,937,937),(938,938,938),(939,939,939),(940,940,940),
(941,941,941),(942,942,942),(943,943,943),(944,944,944),(945,945,945),
(946,946,946),(947,947,947),(948,948,948),(949,949,949),(950,950,950),
(951,951,951),(952,952,952),(953,953,953),(954,954,954),(955,955,955),
(956,956,956),(957,957,957),(958,958,958),(959,959,959),(960,960,960),
(961,961,961),(962,962,962),(963,963,963),(964,964,964),(965,965,965),
(966,966,966),(967,967,967),(968,968,968),(969,969,969),(970,970,970),
(971,971,971),(972,972,972),(973,973,973),(974,974,974),(975,975,975),
(976,976,976),(977,977,977),(978,978,978),(979,979,979),(980,980,980),
(981,981,981),(982,982,982),(983,983,983),(984,984,984),(985,985,985),
(986,986,986),(987,987,987),(988,988,988),(989,989,989),(990,990,990),
(991,991,991),(992,992,992),(993,993,993),(994,994,994),(995,995,995),
(996,996,996),(997,997,997),(998,998,998),(999,999,999),(1000,1000,1000),
(1001,1001,1001),(1002,1002,1002),(1003,1003,1003),(1004,1004,1004),(1005,1005,1005),
(1006,1006,1006),(1007,1007,1007),(1008,1008,1008),(1009,1009,1009),(1010,1010,1010),
(1011,1011,1011),(1012,1012,1012),(1013,1013,1013),(1014,1014,1014),(1015,1015,1015),
(1016,1016,1016),(1017,1017,1017),(1018,1018,1018),(1019,1019,1019),(1020,1020,1020),
(1021,1021,1021),(1022,1022,1022),(1023,1023,1023),(1024,1024,1024),(1025,1025,1025),
(1026,1026,1026),(1027,1027,1027),(1028,1028,1028),(1029,1029,1029),(1030,1030,1030),
(1031,1031,1031),(1032,1032,1032),(1033,1033,1033),(1034,1034,1034),(1035,1035,1035),
(1036,1036,1036),(1037,1037,1037),(1038,1038,1038),(1039,1039,1039),(1040,1040,1040),
(1041,1041,1041),(1042,1042,1042),(1043,1043,1043),(1044,1044,1044),(1045,1045,1045),
(1046,1046,1046),(1047,1047,1047),(1048,1048,1048),(1049,1049,1049),(1050,1050,1050),
(1051,1051,1051),(1052,1052,1052),(1053,1053,1053),(1054,1054,1054),(1055,1055,1055),
(1056,1056,1056),(1057,1057,1057),(1058,1058,1058),(1059,1059,1059),(1060,1060,1060),
(1061,1061,1061),(1062,1062,1062),(1063,1063,1063),(1064,1064,1064),(1065,1065,1065),
(1066,1066,1066),(1067,1067,1067),(1068,1068,1068),(1069,1069,1069),(1070,1070,1070),
(1071,1071,1071),(1072,1072,1072),(1073,1073,1073),(1074,1074,1074),(1075,1075,1075),
(1076,1076,1076),(1077,1077,1077),(1078,1078,1078),(1079,1079,1079),(1080,1080,1080),
(1081,1081,1081),(1082,1082,1082),(1083,1083,1083),(1084,1084,1084),(1085,1085,1085),
(1086,1086,1086),(1087,1087,1087),(1088,1088,1088),(1089,1089,1089),(1090,1090,1090),
(1091,1091,1091),(1092,1092,1092),(1093,1093,1093),(1094,1094,1094),(1095,1095,1095),
(1096,1096,1096),(1097,1097,1097),(1098,1098,1098),(1099,1099,1099),(1100,1100,1100),
(1101,1101,1101),(1102,1102,1102),(1103,1103,1103),(1104,1104,1104),(1105,1105,1105),
(1106,1106,1106),(1107,1107,1107),(1108,1108,1108),(1109,1109,1109),(1110,1110,1110),
(1111,1111,1111),(1112,1112,1112),(1113,1113,1113),(1114,1114,1114),(1115,1115,1115),
(1116,1116,1116),(1117,1117,1117),(1118,1118,1118),(1119,1119,1119),(1120,1120,1120),
(1121,1121,1121),(1122,1122,1122),(1123,1123,1123),(1124,1124,1124),(1125,1125,1125),
(1126,1126,1126),(1127,1127,1127),(1128,1128,1128),(1129,1129,1129),(1130,1130,1130),
(1131,1131,1131),(1132,1132,1132),(1133,1133,1133),(1134,1134,1134),(1135,1135,1135),
(1136,1136,1136),(1137,1137,1137),(1138,1138,1138),(1139,1139,1139),(1140,1140,1140),
(1141,1141,1141),(1142,1142,1142),(1143,1143,1143),(1144,1144,1144),(1145,1145,1145),
(1146,1146,1146),(1147,1147,1147),(1148,1148,1148),(1149,1149,1149),(1150,1150,1150),
(1151,1151,1151),(1152,1152,1152),(1153,1153,1153),(1154,1154,1154),(1155,1155,1155),
(1156,1156,1156),(1157,1157,1157),(1158,1158,1158),(1159,1159,1159),(1160,1160,1160),
(1161,1161,1161),(1162,1162,1162),(1163,1163,1163),(1164,1164,1164),(1165,1165,1165),
(1166,1166,1166),(1167,1167,1167),(1168,1168,1168),(1169,1169,1169),(1170,1170,1170),
(1171,1171,1171),(1172,1172,1172),(1173,1173,1173),(1174,1174,1174),(1175,1175,1175),
(1176,1176,1176),(1177,1177,1177),(1178,1178,1178),(1179,1179,1179),(1180,1180,1180),
(1181,1181,1181),(1182,1182,1182),(1183,1183,1183),(1184,1184,1184),(1185,1185,1185),
(1186,1186,1186),(1187,1187,1187),(1188,1188,1188),(1189,1189,1189),(1190,1190,1190),
(1191,1191,1191),(1192,1192,1192),(1193,1193,1193),(1194,1194,1194),(1195,1195,1195),
(1196,1196,1196),(1197,1197,1197),(1198,1198,1198),(1199,1199,1199),(1200,1200,1200),
(1201,1201,1201),(1202,1202,1202),(1203,1203,1203),(1204,1204,1204),(1205,1205,1205),
(1206,1206,1206),(1207,1207,1207),(1208,1208,1208),(1209,1209,1209),(1210,1210,1210),
(1211,1211,1211),(1212,1212,1212),(1213,1213,1213),(1214,1214,1214),(1215,1215,1215),
(1216,1216,1216),(1217,1217,1217),(1218,1218,1218),(1219,1219,1219),(1220,1220,1220),
(1221,1221,1221),(1222,1222,1222),(1223,1223,1223),(1224,1224,1224),(1225,1225,1225),
(1226,1226,1226),(1227,1227,1227),(1228,1228,1228),(1229,1229,1229),(1230,1230,1230),
(1231,1231,1231),(1232,1232,1232),(1233,1233,1233),(1234,1234,1234),(1235,1235,1235),
(1236,1236,1236),(1237,1237,1237),(1238,1238,1238),(1239,1239,1239),(1240,1240,1240),
(1241,1241,1241),(1242,1242,1242),(1243,1243,1243),(1244,1244,1244),(1245,1245,1245),
(1246,1246,1246),(1247,1247,1247),(1248,1248,1248),(1249,1249,1249),(1250,1250,1250),
(1251,1251,1251),(1252,1252,1252),(1253,1253,1253),(1254,1254,1254),(1255,1255,1255),
(1256,1256,1256),(1257,1257,1257),(1258,1258,1258),(1259,1259,1259),(1260,1260,1260),
(1261,1261,1261),(1262,1262,1262),(1263,1263,1263),(1264,1264,1264),(1265,1265,1265),
(1266,1266,1266),(1267,1267,1267),(1268,1268,1268),(1269,1269,1269),(1270,1270,1270),
(1271,1271,1271),(1272,1272,1272),(1273,1273,1273),(1274,1274,1274),(1275,1275,1275),
(1276,1276,1276),(1277,1277,1277),(1278,1278,1278),(1279,1279,1279),(1280,1280,1280),
(1281,1281,1281),(1282,1282,1282),(1283,1283,1283),(1284,1284,1284),(1285,1285,1285),
(1286,1286,1286),(1287,1287,1287),(1288,1288,1288),(1289,1289,1289),(1290,1290,1290),
(1291,1291,1291),(1292,1292,1292),(1293,1293,1293),(1294,1294,1294),(1295,1295,1295),
(1296,1296,1296),(1297,1297,1297),(1298,1298,1298),(1299,1299,1299),(1300,1300,1300),
(1301,1301,1301),(1302,1302,1302),(1303,1303,1303),(1304,1304,1304),(1305,1305,1305),
(1306,1306,1306),(1307,1307,1307),(1308,1308,1308),(1309,1309,1309),(1310,1310,1310),
(1311,1311,1311),(1312,1312,1312),(1313,1313,1313),(1314,1314,1314),(1315,1315,1315),
(1316,1316,1316),(1317,1317,1317),(1318,1318,1318),(1319,1319,1319),(1320,1320,1320),
(1321,1321,1321),(1322,1322,1322),(1323,1323,1323),(1324,1324,1324),(1325,1325,1325),
(1326,1326,1326),(1327,1327,1327),(1328,1328,1328),(1329,1329,1329),(1330,1330,1330),
(1331,1331,1331),(1332,1332,1332),(1333,1333,1333),(1334,1334,1334),(1335,1335,1335),
(1336,1336,1336),(1337,1337,1337),(1338,1338,1338),(1339,1339,1339),(1340,1340,1340),
(1341,1341,1341),(1342,1342,1342),(1343,1343,1343),(1344,1344,1344),(1345,1345,1345),
(1346,1346,1346),(1347,1347,1347),(1348,1348,1348),(1349,1349,1349),(1350,1350,1350),
(1351,1351,1351),(1352,1352,1352),(1353,1353,1353),(1354,1354,1354),(1355,1355,1355),
(1356,1356,1356),(1357,1357,1357),(1358,1358,1358),(1359,1359,1359),(1360,1360,1360),
(1361,1361,1361),(1362,1362,1362),(1363,1363,1363),(1364,1364,1364),(1365,1365,1365),
(1366,1366,1366),(1367,1367,1367),(1368,1368,1368),(1369,1369,1369),(1370,1370,1370),
(1371,1371,1371),(1372,1372,1372),(1373,1373,1373),(1374,1374,1374),(1375,1375,1375),
(1376,1376,1376),(1377,1377,1377),(1378,1378,1378),(1379,1379,1379),(1380,1380,1380),
(1381,1381,1381),(1382,1382,1382),(1383,1383,1383),(1384,1384,1384),(1385,1385,1385),
(1386,1386,1386),(1387,1387,1387),(1388,1388,1388),(1389,1389,1389),(1390,1390,1390),
(1391,1391,1391),(1392,1392,1392),(1393,1393,1393),(1394,1394,1394),(1395,1395,1395),
(1396,1396,1396),(1397,1397,1397),(1398,1398,1398),(1399,1399,1399),(1400,1400,1400),
(1401,1401,1401),(1402,1402,1402),(1403,1403,1403),(1404,1404,1404),(1405,1405,1405),
(1406,1406,1406),(1407,1407,1407),(1408,1408,1408),(1409,1409,1409),(1410,1410,1410),
(1411,1411,1411),(1412,1412,1412),(1413,1413,1413),(1414,1414,1414),(1415,1415,1415),
(1416,1416,1416),(1417,1417,1417),(1418,1418,1418),(1419,1419,1419),(1420,1420,1420),
(1421,1421,1421),(1422,1422,1422),(1423,1423,1423),(1424,1424,1424),(1425,1425,1425),
(1426,1426,1426),(1427,1427,1427),(1428,1428,1428),(1429,1429,1429),(1430,1430,1430),
(1431,1431,1431),(1432,1432,1432),(1433,1433,1433),(1434,1434,1434),(1435,1435,1435),
(1436,1436,1436),(1437,1437,1437),(1438,1438,1438),(1439,1439,1439),(1440,1440,1440),
(1441,1441,1441),(1442,1442,1442),(1443,1443,1443),(1444,1444,1444),(1445,1445,1445),
(1446,1446,1446),(1447,1447,1447),(1448,1448,1448),(1449,1449,1449),(1450,1450,1450),
(1451,1451,1451),(1452,1452,1452),(1453,1453,1453),(1454,1454,1454),(1455,1455,1455),
(1456,1456,1456),(1457,1457,1457),(1458,1458,1458),(1459,1459,1459),(1460,1460,1460),
(1461,1461,1461),(1462,1462,1462),(1463,1463,1463),(1464,1464,1464),(1465,1465,1465),
(1466,1466,1466),(1467,1467,1467),(1468,1468,1468),(1469,1469,1469),(1470,1470,1470),
(1471,1471,1471),(1472,1472,1472),(1473,1473,1473),(1474,1474,1474),(1475,1475,1475),
(1476,1476,1476),(1477,1477,1477),(1478,1478,1478),(1479,1479,1479),(1480,1480,1480),
(1481,1481,1481),(1482,1482,1482),(1483,1483,1483),(1484,1484,1484),(1485,1485,1485),
(1486,1486,1486),(1487,1487,1487),(1488,1488,1488),(1489,1489,1489),(1490,1490,1490),
(1491,1491,1491),(1492,1492,1492),(1493,1493,1493),(1494,1494,1494),(1495,1495,1495),
(1496,1496,1496),(1497,1497,1497),(1498,1498,1498),(1499,1499,1499),(1500,1500,1500),
(1501,1501,1501),(1502,1502,1502),(1503,1503,1503),(1504,1504,1504),(1505,1505,1505),
(1506,1506,1506),(1507,1507,1507),(1508,1508,1508),(1509,1509,1509),(1510,1510,1510),
(1511,1511,1511),(1512,1512,1512),(1513,1513,1513),(1514,1514,1514),(1515,1515,1515),
(1516,1516,1516),(1517,1517,1517),(1518,1518,1518),(1519,1519,1519),(1520,1520,1520),
(1521,1521,1521),(1522,1522,1522),(1523,1523,1523),(1524,1524,1524),(1525,1525,1525),
(1526,1526,1526),(1527,1527,1527),(1528,1528,1528),(1529,1529,1529),(1530,1530,1530),
(1531,1531,1531),(1532,1532,1532),(1533,1533,1533),(1534,1534,1534),(1535,1535,1535),
(1536,1536,1536),(1537,1537,1537),(1538,1538,1538),(1539,1539,1539),(1540,1540,1540),
(1541,1541,1541),(1542,1542,1542),(1543,1543,1543),(1544,1544,1544),(1545,1545,1545),
(1546,1546,1546),(1547,1547,1547),(1548,1548,1548),(1549,1549,1549),(1550,1550,1550),
(1551,1551,1551),(1552,1552,1552),(1553,1553,1553),(1554,1554,1554),(1555,1555,1555),
(1556,1556,1556),(1557,1557,1557),(1558,1558,1558),(1559,1559,1559),(1560,1560,1560),
(1561,1561,1561),(1562,1562,1562),(1563,1563,1563),(1564,1564,1564),(1565,1565,1565),
(1566,1566,1566),(1567,1567,1567),(1568,1568,1568),(1569,1569,1569),(1570,1570,1570),
(1571,1571,1571),(1572,1572,1572),(1573,1573,1573),(1574,1574,1574),(1575,1575,1575),
(1576,1576,1576),(1577,1577,1577),(1578,1578,1578),(1579,1579,1579),(1580,1580,1580),
(1581,1581,1581),(1582,1582,1582),(1583,1583,1583),(1584,1584,1584),(1585,1585,1585),
(1586,1586,1586),(1587,1587,1587),(1588,1588,1588),(1589,1589,1589),(1590,1590,1590),
(1591,1591,1591),(1592,1592,1592),(1593,1593,1593),(1594,1594,1594),(1595,1595,1595),
(1596,1596,1596),(1597,1597,1597),(1598,1598,1598),(1599,1599,1599),(1600,1600,1600),
(1601,1601,1601),(1602,1602,1602),(1603,1603,1603),(1604,1604,1604),(1605,1605,1605),
(1606,1606,1606),(1607,1607,1607),(1608,1608,1608),(1609,1609,1609),(1610,1610,1610),
(1611,1611,1611),(1612,1612,1612),(1613,1613,1613),(1614,1614,1614),(1615,1615,1615),
(1616,1616,1616),(1617,1617,1617),(1618,1618,1618),(1619,1619,1619),(1620,1620,1620),
(1621,1621,1621),(1622,1622,1622),(1623,1623,1623),(1624,1624,1624),(1625,1625,1625),
(1626,1626,1626),(1627,1627,1627),(1628,1628,1628),(1629,1629,1629),(1630,1630,1630),
(1631,1631,1631),(1632,1632,1632),(1633,1633,1633),(1634,1634,1634),(1635,1635,1635),
(1636,1636,1636),(1637,1637,1637),(1638,1638,1638),(1639,1639,1639),(1640,1640,1640),
(1641,1641,1641),(1642,1642,1642),(1643,1643,1643),(1644,1644,1644),(1645,1645,1645),
(1646,1646,1646),(1647,1647,1647),(1648,1648,1648),(1649,1649,1649),(1650,1650,1650),
(1651,1651,1651),(1652,1652,1652),(1653,1653,1653),(1654,1654,1654),(1655,1655,1655),
(1656,1656,1656),(1657,1657,1657),(1658,1658,1658),(1659,1659,1659),(1660,1660,1660),
(1661,1661,1661),(1662,1662,1662),(1663,1663,1663),(1664,1664,1664),(1665,1665,1665),
(1666,1666,1666),(1667,1667,1667),(1668,1668,1668),(1669,1669,1669),(1670,1670,1670),
(1671,1671,1671),(1672,1672,1672),(1673,1673,1673),(1674,1674,1674),(1675,1675,1675),
(1676,1676,1676),(1677,1677,1677),(1678,1678,1678),(1679,1679,1679),(1680,1680,1680),
(1681,1681,1681),(1682,1682,1682),(1683,1683,1683),(1684,1684,1684),(1685,1685,1685),
(1686,1686,1686),(1687,1687,1687),(1688,1688,1688),(1689,1689,1689),(1690,1690,1690),
(1691,1691,1691),(1692,1692,1692),(1693,1693,1693),(1694,1694,1694),(1695,1695,1695),
(1696,1696,1696),(1697,1697,1697),(1698,1698,1698),(1699,1699,1699),(1700,1700,1700),
(1701,1701,1701),(1702,1702,1702),(1703,1703,1703),(1704,1704,1704),(1705,1705,1705),
(1706,1706,1706),(1707,1707,1707),(1708,1708,1708),(1709,1709,1709),(1710,1710,1710),
(1711,1711,1711),(1712,1712,1712),(1713,1713,1713),(1714,1714,1714),(1715,1715,1715),
(1716,1716,1716),(1717,1717,1717),(1718,1718,1718),(1719,1719,1719),(1720,1720,1720),
(1721,1721,1721),(1722,1722,1722),(1723,1723,1723),(1724,1724,1724),(1725,1725,1725),
(1726,1726,1726),(1727,1727,1727),(1728,1728,1728),(1729,1729,1729),(1730,1730,1730),
(1731,1731,1731),(1732,1732,1732),(1733,1733,1733),(1734,1734,1734),(1735,1735,1735),
(1736,1736,1736),(1737,1737,1737),(1738,1738,1738),(1739,1739,1739),(1740,1740,1740),
(1741,1741,1741),(1742,1742,1742),(1743,1743,1743),(1744,1744,1744),(1745,1745,1745),
(1746,1746,1746),(1747,1747,1747),(1748,1748,1748),(1749,1749,1749),(1750,1750,1750),
(1751,1751,1751),(1752,1752,1752),(1753,1753,1753),(1754,1754,1754),(1755,1755,1755),
(1756,1756,1756),(1757,1757,1757),(1758,1758,1758),(1759,1759,1759),(1760,1760,1760),
(1761,1761,1761),(1762,1762,1762),(1763,1763,1763),(1764,1764,1764),(1765,1765,1765),
(1766,1766,1766),(1767,1767,1767),(1768,1768,1768),(1769,1769,1769),(1770,1770,1770),
(1771,1771,1771),(1772,1772,1772),(1773,1773,1773),(1774,1774,1774),(1775,1775,1775),
(1776,1776,1776),(1777,1777,1777),(1778,1778,1778),(1779,1779,1779),(1780,1780,1780),
(1781,1781,1781),(1782,1782,1782),(1783,1783,1783),(1784,1784,1784),(1785,1785,1785),
(1786,1786,1786),(1787,1787,1787),(1788,1788,1788),(1789,1789,1789),(1790,1790,1790),
(1791,1791,1791),(1792,1792,1792),(1793,1793,1793),(1794,1794,1794),(1795,1795,1795),
(1796,1796,1796),(1797,1797,1797),(1798,1798,1798),(1799,1799,1799),(1800,1800,1800),
(1801,1801,1801),(1802,1802,1802),(1803,1803,1803),(1804,1804,1804),(1805,1805,1805),
(1806,1806,1806),(1807,1807,1807),(1808,1808,1808),(1809,1809,1809),(1810,1810,1810),
(1811,1811,1811),(1812,1812,1812),(1813,1813,1813),(1814,1814,1814),(1815,1815,1815),
(1816,1816,1816),(1817,1817,1817),(1818,1818,1818),(1819,1819,1819),(1820,1820,1820),
(1821,1821,1821),(1822,1822,1822),(1823,1823,1823),(1824,1824,1824),(1825,1825,1825),
(1826,1826,1826),(1827,1827,1827),(1828,1828,1828),(1829,1829,1829),(1830,1830,1830),
(1831,1831,1831),(1832,1832,1832),(1833,1833,1833),(1834,1834,1834),(1835,1835,1835),
(1836,1836,1836),(1837,1837,1837),(1838,1838,1838),(1839,1839,1839),(1840,1840,1840),
(1841,1841,1841),(1842,1842,1842),(1843,1843,1843),(1844,1844,1844),(1845,1845,1845),
(1846,1846,1846),(1847,1847,1847),(1848,1848,1848),(1849,1849,1849),(1850,1850,1850),
(1851,1851,1851),(1852,1852,1852),(1853,1853,1853),(1854,1854,1854),(1855,1855,1855),
(1856,1856,1856),(1857,1857,1857),(1858,1858,1858),(1859,1859,1859),(1860,1860,1860),
(1861,1861,1861),(1862,1862,1862),(1863,1863,1863),(1864,1864,1864),(1865,1865,1865),
(1866,1866,1866),(1867,1867,1867),(1868,1868,1868),(1869,1869,1869),(1870,1870,1870),
(1871,1871,1871),(1872,1872,1872),(1873,1873,1873),(1874,1874,1874),(1875,1875,1875),
(1876,1876,1876),(1877,1877,1877),(1878,1878,1878),(1879,1879,1879),(1880,1880,1880),
(1881,1881,1881),(1882,1882,1882),(1883,1883,1883),(1884,1884,1884),(1885,1885,1885),
(1886,1886,1886),(1887,1887,1887),(1888,1888,1888),(1889,1889,1889),(1890,1890,1890),
(1891,1891,1891),(1892,1892,1892),(1893,1893,1893),(1894,1894,1894),(1895,1895,1895),
(1896,1896,1896),(1897,1897,1897),(1898,1898,1898),(1899,1899,1899),(1900,1900,1900),
(1901,1901,1901),(1902,1902,1902),(1903,1903,1903),(1904,1904,1904),(1905,1905,1905),
(1906,1906,1906),(1907,1907,1907),(1908,1908,1908),(1909,1909,1909),(1910,1910,1910),
(1911,1911,1911),(1912,1912,1912),(1913,1913,1913),(1914,1914,1914),(1915,1915,1915),
(1916,1916,1916),(1917,1917,1917),(1918,1918,1918),(1919,1919,1919),(1920,1920,1920),
(1921,1921,1921),(1922,1922,1922),(1923,1923,1923),(1924,1924,1924),(1925,1925,1925),
(1926,1926,1926),(1927,1927,1927),(1928,1928,1928),(1929,1929,1929),(1930,1930,1930),
(1931,1931,1931),(1932,1932,1932),(1933,1933,1933),(1934,1934,1934),(1935,1935,1935),
(1936,1936,1936),(1937,1937,1937),(1938,1938,1938),(1939,1939,1939),(1940,1940,1940),
(1941,1941,1941),(1942,1942,1942),(1943,1943,1943),(1944,1944,1944),(1945,1945,1945),
(1946,1946,1946),(1947,1947,1947),(1948,1948,1948),(1949,1949,1949),(1950,1950,1950),
(1951,1951,1951),(1952,1952,1952),(1953,1953,1953),(1954,1954,1954),(1955,1955,1955),
(1956,1956,1956),(1957,1957,1957),(1958,1958,1958),(1959,1959,1959),(1960,1960,1960),
(1961,1961,1961),(1962,1962,1962),(1963,1963,1963),(1964,1964,1964),(1965,1965,1965),
(1966,1966,1966),(1967,1967,1967),(1968,1968,1968),(1969,1969,1969),(1970,1970,1970),
(1971,1971,1971),(1972,1972,1972),(1973,1973,1973),(1974,1974,1974),(1975,1975,1975),
(1976,1976,1976),(1977,1977,1977),(1978,1978,1978),(1979,1979,1979),(1980,1980,1980),
(1981,1981,1981),(1982,1982,1982),(1983,1983,1983),(1984,1984,1984),(1985,1985,1985),
(1986,1986,1986),(1987,1987,1987),(1988,1988,1988),(1989,1989,1989),(1990,1990,1990),
(1991,1991,1991),(1992,1992,1992),(1993,1993,1993),(1994,1994,1994),(1995,1995,1995),
(1996,1996,1996),(1997,1997,1997),(1998,1998,1998),(1999,1999,1999);
SELECT COUNT(*) FROM t1;
DROP TABLE t1;
#!/bin/sh
# NAME
# regression.sh
#
# SYNOPSIS
# regression.sh
#
# DESCRIPTION
#
# This script runs a number of regression tests to verify that nothing
# is broken. Currently it executes the same tests as in the autotest
# regression suite.
#
# OPTIONS
#
# EXAMPLES
#
#
# ENVIRONMENT
# verbose verbose printouts
#
# FILES
#
#
# SEE ALSO
#
# DIAGNOSTICTS
#
#
# VERSION
# 1.0
#
# AUTHOR
#
#
# die prints the supplied message to stderr,
# prefixed with the program name, and exits
# with the exit code given by "-e num" or
# 1, if no -e option is present.
#
die ()
{
die_code__=1
[ "X$1" = X-e ] && { die_code__=$2; shift 2; }
[ "X$1" = X-- ] && shift
errmsg "$@"
exit $die_code__
}
# msg prints the supplied message to stderr,
# prefixed with the program name.
#
errmsg ()
{
echo "${progname:-<no program name set>}:" "$@" >&2
}
# rawdie prints the supplied message to stderr.
# It then exits with the exit code given with "-e num"
# or 1, if no -e option is present.
#
rawdie ()
{
rawdie_code__=1
[ "X$1" = X-e ] && { rawdie_code__=$2; shift 2; }
[ "X$1" = X-- ] && shift
rawerrmsg "$@"
exit $rawdie_code__
}
# Syndie prints the supplied message (if present) to stderr,
# prefixed with the program name, on the first line.
# On the second line, it prints $synopsis.
# It then exits with the exit code given with "-e num"
# or 1, if no -e option is present.
#
syndie ()
{
syndie_code__=1
[ "X$1" = X-e ] && { syndie_code__=$2; shift 2; }
[ "X$1" = X-- ] && shift
[ -n "$*" ] && msg "$*"
rawdie -e $syndie_code__ "Synopsis: $synopsis"
}
# msg prints the supplied message to stdout,
# prefixed with the program name.
#
msg ()
{
echo "${progname:-<no program name set>}:" "$@"
}
rawmsg () { echo "$*"; } # print the supplied message to stdout
rawerrmsg () { echo "$*" >&2; } # print the supplied message to stderr
# trace prints the supplied message to stdout if verbose is non-null
#
trace ()
{
[ -n "$verbose" ] && msg "$@"
}
# errtrace prints the supplied message to stderr if verbose is non-null
#
errtrace ()
{
[ -n "$verbose" ] && msg "$@" >&2
}
synopsis="regression.sh"
progname=`basename $0`
numOfTestsOK=0
numOfTestsFailed=0
LOG=regression-$1.`date '+%Y-%m-%d'`
executeTest()
{
eval "$@" | tee -a $LOG
if [ $? -eq 0 ]
then
echo "SUCCESS: $@"
numOfTestsOK=`expr $numOfTestsOK + 1`
else
echo "FAILED: $@"
numOfTestsFailed=`expr $numOfTestsFailed + 1`
fi
}
#
# INFO
#
trace "Starting: `date`"
trace "NDB_TOP = $NDB_TOP"
#
# THE TESTS TO EXECUTE
#
# BASIC FUNCTIONALITY
if [ $1 = "basic" ]
then
executeTest 'testBasic -n PkRead'
executeTest 'drop_all_tabs'
executeTest 'testBasic -n PkUpdate'
executeTest 'drop_all_tabs'
executeTest 'testBasic -n PkDelete'
executeTest 'drop_all_tabs'
executeTest 'testBasic -n PkInsert'
executeTest 'drop_all_tabs'
executeTest 'testBasic -n UpdateAndRead'
executeTest 'drop_all_tabs'
executeTest 'testBasic -n PkReadAndLocker' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n PkReadAndLocker2' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n PkReadUpdateAndLocker' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n ReadWithLocksAndInserts' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n PkInsertTwice' T1 T6 T10
executeTest 'drop_tab' T1 T6 T10
executeTest 'testBasic -n PkDirtyRead'
executeTest 'drop_all_tabs'
executeTest 'testBasic -n Fill' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n Fill' T1
executeTest 'drop_tab' T1
executeTest 'testBasic -n NoCommitSleep' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n NoCommit626' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n NoCommitAndClose' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n Commit626' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n CommitTry626' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n CommitAsMuch626' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n NoCommit626' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n NoCommitRollback626' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n Commit630' T1 T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n CommitTry630' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n CommitAsMuch630' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n NoCommit630' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n NoCommitRollback630' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n NoCommitAndClose' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n RollbackUpdate' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n RollbackDeleteMultiple' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n ImplicitRollbackDelete' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n CommitDelete' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n RollbackNothing' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testBasic -n ReadConsistency' T6
executeTest 'drop_tab' T6
executeTest 'testBasic -n PkRead' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'testBasic -n PkUpdate' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'testBasic -n PkDelete' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'testBasic -n PkInsert' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_409
executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'testBasic -n UpdateAndRead' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
#executeTest 'drop_tab' TPK_33 TPK_34 TPK_1003 TPK_2003 TPK_4092
executeTest 'testBasicAsynch -n PkInsertAsynch'
executeTest 'drop_all_tabs'
executeTest 'testBasicAsynch -n PkReadAsynch'
executeTest 'drop_all_tabs'
executeTest 'testBasicAsynch -n PkUpdateAsynch'
executeTest 'drop_all_tabs'
executeTest 'testBasicAsynch -n PkDeleteAsynch'
executeTest 'drop_all_tabs'
fi
# SCAN TESTS
if [ $1 = "scan" ]
then
executeTest 'testScan -n ScanRead16'
executeTest 'drop_all_tabs'
executeTest 'testScan -n ScanRead240'
executeTest 'drop_all_tabs'
executeTest 'testScan -n ScanUpdate'
executeTest 'drop_all_tabs'
executeTest 'testScan -n ScanUpdate2' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanDelete'
executeTest 'drop_all_tab'
executeTest 'testScan -n ScanDelete2' T10
executeTest 'drop_tab' T10
executeTest 'testScan -n ScanUpdateAndScanRead' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanReadAndLocker' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanReadAndPkRead' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanRead488' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanWithLocksAndInserts' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanReadAbort' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanReadAbort15' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanReadAbort240' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanUpdateAbort16' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanReadRestart' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ScanUpdateRestart' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n CheckGetValue' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n CloseWithoutStop' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n NextScanWhenNoMore' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n ExecuteScanWithoutOpenScan' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n OnlyOpenScanOnce' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n OnlyOneOpInScanTrans' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n OnlyOneOpBeforeOpenScan' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n OnlyOneScanPerTrans' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n NoCloseTransaction' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n CheckInactivityTimeOut' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n CheckInactivityBeforeClose' T6
executeTest 'drop_tab' T6
executeTest 'testScan -n CheckAfterTerror' T6
executeTest 'drop_tab' T6
fi
# DICT TESTS
if [ $1 = "dict" ]
then
executeTest 'testDict -n CreateAndDrop'
executeTest 'drop_all_tabs'
executeTest 'testDict -n CreateAndDropWithData'
executeTest 'drop_all_tabs'
executeTest 'testDict -n CreateAndDropDuring' T6
executeTest 'drop_tab' T6
executeTest 'testDict -n CreateInvalidTables'
executeTest 'drop_all_tabs'
executeTest 'testDict -n CreateTableWhenDbIsFull' T6
executeTest 'drop_tab' T6
executeTest 'testDict -n CreateMaxTables' T6
executeTest 'drop_tab' T6
executeTest 'testDict -n FragmentTypeAll' T1 T6 T7 T8
executeTest 'drop_tab' T1 T6 T7 T8
executeTest 'testDict -n FragmentTypeAllLarge' T1 T6 T7 T8
executeTest 'drop_tab' T1 T6 T7 T8
executeTest 'testDict -n TemporaryTables' T1 T6 T7 T8
executeTest 'drop_tab' T1 T6 T7 T8
fi
# TEST NDBAPI
if [ $1 = "api" ]
then
executeTest 'testNdbApi -n MaxNdb' T6
executeTest 'drop_tab' T6
executeTest 'testNdbApi -n MaxTransactions' T1 T6 T7 T8 T13
executeTest 'drop_tab' T1 T6 T7 T8 T13
executeTest 'testNdbApi -n MaxOperations' T1 T6 T7 T8 T1
executeTest 'drop_tab' T1 T6 T7 T8 T13
executeTest 'testNdbApi -n MaxGetValue' T1 T6 T7 T8 T13
executeTest 'drop_tab' T1 T6 T7 T8 T13
executeTest 'testNdbApi -n MaxEqual'
executeTest 'drop_all_tabs'
executeTest 'testNdbApi -n DeleteNdb' T1 T6
executeTest 'drop_tab' T1 T6
executeTest 'testNdbApi -n WaitUntilReady' T1 T6 T7 T8 T13
executeTest 'drop_tab' T1 T6 T7 T8 T13
executeTest 'testNdbApi -n GetOperationNoTab' T6
executeTest 'drop_tab' T6
executeTest 'testNdbApi -n NdbErrorOperation' T6
executeTest 'drop_tab' T6
executeTest 'testNdbApi -n MissingOperation' T6
executeTest 'drop_tab' T6
executeTest 'testNdbApi -n GetValueInUpdate' T6
executeTest 'drop_tab' T6
executeTest 'testNdbApi -n UpdateWithoutKeys' T6
executeTest 'drop_tab' T6
executeTest 'testNdbApi -n UpdateWithoutValues' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadRead' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadReadEx' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadInsert' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadUpdate' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadDelete' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadExRead' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadExReadEx' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadExInsert' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadExUpdate' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n ReadExDelete' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n InsertRead' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n InsertReadEx' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n InsertInsert' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n InsertUpdate' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n InsertDelete' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n UpdateRead' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n UpdateReadEx' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n UpdateInsert' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n UpdateUpdate' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n UpdateDelete' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n DeleteRead' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n DeleteReadEx' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n DeleteInsert' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n DeleteUpdate' T6
executeTest 'drop_tab' T6
executeTest 'testOperations -n DeleteDelete' T6
executeTest 'drop_tab' T6
executeTest 'testRestartGci' T6
executeTest 'drop_tab' T6
executeTest 'testIndex -n CreateAll'
executeTest 'drop_all_tabs'
executeTest 'testIndex -n InsertDeleteGentle' T1 T6 T8 T10
executeTest 'drop_tab' T1 T6 T8 T10
executeTest 'testIndex -n InsertDelete' T1 T6 T8 T10
executeTest 'drop_tab' T1 T6 T8 T10
executeTest 'testIndex -n CreateLoadDropGentle' T1 T6 T8 T10
executeTest 'drop_tab' T1 T6 T8 T10
executeTest 'testIndex -n CreateLoadDrop' T1 T6 T8 T10
executeTest 'drop_tab' T1 T6 T8 T10
executeTest 'testBackup' -n BackupOne
executeTest 'testBackup' -n BackupBank T6
executeTest 'drop_tab' T6
fi
# TEST SYSTEM RESTARTS
if [ $1 = "sr" ]
then
executeTest 'testSystemRestart -n SR1' T1
executeTest 'testSystemRestart -n SR1' T6
executeTest 'testSystemRestart -n SR1' T7
executeTest 'testSystemRestart -n SR1' T8
executeTest 'testSystemRestart -n SR1' T10
executeTest 'testSystemRestart -n SR2' T1
executeTest 'testSystemRestart -n SR2' T6
executeTest 'testSystemRestart -n SR2' T7
executeTest 'testSystemRestart -n SR2' T10
executeTest 'testSystemRestart -n SR2' T13
executeTest 'testSystemRestart -n SR3' T6
executeTest 'testSystemRestart -n SR3' T10
executeTest 'testSystemRestart -n SR4' T6
executeTest 'testSystemRestart -n SR_UNDO' T1
executeTest 'testSystemRestart -n SR_UNDO' T6
executeTest 'testSystemRestart -n SR_UNDO' T7
executeTest 'testSystemRestart -n SR_UNDO' T8
executeTest 'testSystemRestart -n SR_UNDO' T10
executeTest 'drop_tab' T1 T6 T7 T8 T10
fi
# TEST NODE RESTARTS
if [ $1 = "nr" ]
then
executeTest 'testNodeRestart -n NoLoad' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n PkRead' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n PkReadPkUpdate' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n ReadUpdateScan' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n Terror' T6 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n FullDb' T6 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartRandomNode' T6 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartRandomNodeError' T6 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartRandomNodeInitial' T6 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartNFDuringNR' T6 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartNodeDuringLCP' T6 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartMasterNodeError' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n TwoNodeFailure' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n TwoMasterNodeFailure' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n FiftyPercentFail' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartAllNodes' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartAllNodesAbort' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n RestartAllNodesError9999' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
executeTest 'testNodeRestart -n FiftyPercentStopAndWait' T6 T8 T13
executeTest 'drop_tab' T6 T8 T13
fi
# TESTS FINISHED
trace "Finished: `date`"
#
# TEST SUMMARY
#
if [ $numOfTestsFailed -eq 0 ]
then
echo "-- REGRESSION TEST SUCCESSFUL --"
else
echo "-- REGRESSION TEST FAILED!! --"
fi
echo "Number of successful tests: $numOfTestsOK"
echo "Number of failed tests : $numOfTestsFailed"
......@@ -31,7 +31,6 @@
#define NDB_MAX_KEYSIZE_IN_WORDS 1023
#define NDB_MAX_KEY_SIZE NDB_MAX_KEYSIZE_IN_WORDS*sizeof(Uint32)
#define NDB_MAX_TUPLE_SIZE 8191
#define NDB_MAX_CONNECTIONS 127
#define NDB_MAX_TRANSACTIONS 1024
#define NDB_MAX_PARALLEL_SCANS 12
#define NDB_MAX_ACTIVE_EVENTS 100
......
......@@ -183,6 +183,13 @@ sub new
{
$self->{'transactions'} = 1; # Transactions enabled
}
if (defined($main::opt_create_options) &&
$main::opt_create_options =~ /type=ndb/i)
{
$self->{'transactions'} = 1; # Transactions enabled
$limits{'max_columns'} = 90; # Max number of columns in table
$limits{'working_blobs'} = 0; # NDB tables can't handle BLOB's
}
if (defined($main::opt_create_options) &&
$main::opt_create_options =~ /type=bdb/i)
{
......
......@@ -20,12 +20,6 @@
NDB Cluster
*/
/*
TODO
After CREATE DATABASE gör discover på alla tabeller i den databasen
*/
#ifdef __GNUC__
#pragma implementation // gcc: Class implementation
......@@ -41,6 +35,7 @@
#define USE_DISCOVER_ON_STARTUP
//#define USE_NDB_POOL
#define USE_EXTRA_ORDERED_INDEX
// Default value for parallelism
static const int parallelism= 240;
......@@ -64,6 +59,10 @@ typedef NdbDictionary::Dictionary NDBDICT;
bool ndbcluster_inited= false;
#ifdef USE_EXTRA_ORDERED_INDEX
static const char* unique_suffix= "$unique";
#endif
// Handler synchronization
pthread_mutex_t ndbcluster_mutex;
......@@ -95,6 +94,7 @@ static const err_code_mapping err_map[]=
{ 630, HA_ERR_FOUND_DUPP_KEY },
{ 893, HA_ERR_FOUND_DUPP_UNIQUE },
{ 721, HA_ERR_TABLE_EXIST },
{ 4244, HA_ERR_TABLE_EXIST },
{ 241, HA_ERR_OLD_METADATA },
{ -1, -1 }
};
......@@ -354,15 +354,37 @@ int ha_ndbcluster::get_metadata(const char *path)
m_table= (void*)tab;
for (i= 0; i < MAX_KEY; i++)
{
m_indextype[i]= UNDEFINED_INDEX;
m_unique_index_name[i]= NULL;
}
// Save information about all known indexes
for (i= 0; i < table->keys; i++)
m_indextype[i] = get_index_type_from_table(i);
{
m_indextype[i]= get_index_type_from_table(i);
#ifdef USE_EXTRA_ORDERED_INDEX
if (m_indextype[i] == UNIQUE_INDEX)
{
char *name;
const char *index_name= get_index_name(i);
int name_len= strlen(index_name)+strlen(unique_suffix)+1;
if (!(name= my_malloc(name_len, MYF(MY_WME))))
DBUG_RETURN(2);
strxnmov(name, name_len, index_name, unique_suffix, NullS);
m_unique_index_name[i]= name;
DBUG_PRINT("info", ("Created unique index name: %s for index %d",
name, i));
}
#endif
}
DBUG_RETURN(0);
}
/*
Decode the type of an index from information
provided in table object
......@@ -380,27 +402,43 @@ NDB_INDEX_TYPE ha_ndbcluster::get_index_type_from_table(uint index_no) const
void ha_ndbcluster::release_metadata()
{
int i;
DBUG_ENTER("release_metadata");
DBUG_PRINT("enter", ("m_tabname: %s", m_tabname));
m_table= NULL;
for (i= 0; i < MAX_KEY; i++)
{
my_free((char*)m_unique_index_name[i], MYF(MY_ALLOW_ZERO_PTR));
m_unique_index_name[i]= NULL;
}
DBUG_VOID_RETURN;
}
inline int ha_ndbcluster::get_ndb_lock_type()
{
return (int)((m_lock.type == TL_WRITE_ALLOW_WRITE) ?
NdbCursorOperation::LM_Exclusive : NdbCursorOperation::LM_Read);
}
static const ulong index_type_flags[]=
{
/* UNDEFINED_INDEX */
0,
/* PRIMARY_KEY_INDEX */
HA_ONLY_WHOLE_INDEX |
HA_WRONG_ASCII_ORDER |
/*
Enable HA_KEY_READ_ONLY when "sorted" indexes are supported,
thus ORDERD BY clauses can be optimized by reading directly
through the index.
*/
HA_NOT_READ_PREFIX_LAST,
/* UNIQUE_INDEX */
HA_ONLY_WHOLE_INDEX |
HA_WRONG_ASCII_ORDER |
HA_NOT_READ_PREFIX_LAST,
/* ORDERED_INDEX */
......@@ -416,6 +454,18 @@ inline const char* ha_ndbcluster::get_index_name(uint idx_no) const
return table->keynames.type_names[idx_no];
}
inline const char* ha_ndbcluster::get_unique_index_name(uint idx_no) const
{
#ifdef USE_EXTRA_ORDERED_INDEX
DBUG_ASSERT(idx_no < MAX_KEY);
DBUG_ASSERT(m_unique_index_name[idx_no]);
return m_unique_index_name[idx_no];
#else
return get_index_name(idx_no);
#endif
}
inline NDB_INDEX_TYPE ha_ndbcluster::get_index_type(uint idx_no) const
{
DBUG_ASSERT(idx_no < MAX_KEY);
......@@ -433,6 +483,7 @@ inline NDB_INDEX_TYPE ha_ndbcluster::get_index_type(uint idx_no) const
inline ulong ha_ndbcluster::index_flags(uint idx_no) const
{
DBUG_ENTER("index_flags");
DBUG_PRINT("info", ("idx_no: %d", idx_no));
DBUG_ASSERT(get_index_type_from_table(idx_no) < index_flags_size);
DBUG_RETURN(index_type_flags[get_index_type_from_table(idx_no)]);
}
......@@ -550,7 +601,6 @@ int ha_ndbcluster::unique_index_read(const byte *key,
uint key_len, byte *buf)
{
NdbConnection *trans= m_active_trans;
const char *index_name;
NdbIndexOperation *op;
THD *thd= current_thd;
byte *key_ptr;
......@@ -560,9 +610,10 @@ int ha_ndbcluster::unique_index_read(const byte *key,
DBUG_ENTER("unique_index_read");
DBUG_PRINT("enter", ("key_len: %u, index: %u", key_len, active_index));
DBUG_DUMP("key", (char*)key, key_len);
DBUG_PRINT("enter", ("name: %s", get_unique_index_name(active_index)));
index_name= get_index_name(active_index);
if (!(op= trans->getNdbIndexOperation(index_name, m_tabname)) ||
if (!(op= trans->getNdbIndexOperation(get_unique_index_name(active_index),
m_tabname)) ||
op->readTuple() != 0)
ERR_RETURN(trans->getNdbError());
......@@ -608,22 +659,61 @@ int ha_ndbcluster::unique_index_read(const byte *key,
}
/*
Get the next record of a started scan
Get the next record of a started scan. Try to fetch
it locally from NdbApi cached records if possible,
otherwise ask NDB for more.
NOTE
If this is a update/delete make sure to not contact
NDB before any pending ops have been sent to NDB.
*/
inline int ha_ndbcluster::next_result(byte *buf)
{
int check;
NdbConnection *trans= m_active_trans;
NdbResultSet *cursor= m_active_cursor;
DBUG_ENTER("next_result");
if (cursor->nextResult() == 0)
{
// One more record found
unpack_record(buf);
table->status= 0;
DBUG_RETURN(0);
}
if (!cursor)
DBUG_RETURN(HA_ERR_END_OF_FILE);
/*
If this an update or delete, call nextResult with false
to process any records already cached in NdbApi
*/
bool contact_ndb = m_lock.type != TL_WRITE_ALLOW_WRITE;
do {
DBUG_PRINT("info", ("Call nextResult, contact_ndb: %d", contact_ndb));
check= cursor->nextResult(contact_ndb);
if (check == 0)
{
// One more record found
DBUG_PRINT("info", ("One more record found"));
unpack_record(buf);
table->status= 0;
DBUG_RETURN(0);
}
else if (check == 1 || check == 2)
{
// 1: No more records
// 2: No more cached records
/*
Before fetching more rows and releasing lock(s),
all pending update or delete operations should
be sent to NDB
*/
DBUG_PRINT("info", ("ops_pending: %d", ops_pending));
if (ops_pending && trans->execute(NoCommit) != 0)
DBUG_RETURN(ndb_err(trans));
ops_pending= 0;
contact_ndb= (check == 2);
}
} while (check == 2);
table->status= STATUS_NOT_FOUND;
if (ndb_err(trans))
ERR_RETURN(trans->getNdbError());
......@@ -635,112 +725,117 @@ inline int ha_ndbcluster::next_result(byte *buf)
/*
Read record(s) from NDB using ordered index scan
Set bounds for a ordered index scan, use key_range
*/
int ha_ndbcluster::ordered_index_scan(const byte *key, uint key_len,
byte *buf,
enum ha_rkey_function find_flag)
{
uint no_fields= table->fields;
uint tot_len, i;
NdbConnection *trans= m_active_trans;
NdbResultSet *cursor= m_active_cursor;
NdbScanOperation *op;
const char *bound_str= NULL;
const char *index_name;
NdbOperation::BoundType bound_type = NdbOperation::BoundEQ;
bool can_be_handled_by_ndb= FALSE;
int ha_ndbcluster::set_bounds(NdbOperation *op,
const key_range *key,
int bound)
{
uint i, tot_len;
byte *key_ptr;
KEY *key_info;
THD* thd = current_thd;
DBUG_ENTER("ordered_index_scan");
DBUG_PRINT("enter", ("index: %u", active_index));
DBUG_PRINT("enter", ("Starting new ordered scan on %s", m_tabname));
index_name= get_index_name(active_index);
if (!(op= trans->getNdbScanOperation(index_name, m_tabname)))
ERR_RETURN(trans->getNdbError());
if (!(cursor= op->readTuples(parallelism)))
ERR_RETURN(trans->getNdbError());
m_active_cursor= cursor;
switch (find_flag) {
case HA_READ_KEY_EXACT: /* Find first record else error */
bound_str= "HA_READ_KEY_EXACT";
bound_type= NdbOperation::BoundEQ;
can_be_handled_by_ndb= TRUE;
break;
case HA_READ_KEY_OR_NEXT: /* Record or next record */
bound_str= "HA_READ_KEY_OR_NEXT";
bound_type= NdbOperation::BoundLE;
can_be_handled_by_ndb= TRUE;
break;
case HA_READ_KEY_OR_PREV: /* Record or previous */
bound_str= "HA_READ_KEY_OR_PREV";
bound_type= NdbOperation::BoundGE;
can_be_handled_by_ndb= TRUE;
break;
case HA_READ_AFTER_KEY: /* Find next rec. after key-record */
bound_str= "HA_READ_AFTER_KEY";
bound_type= NdbOperation::BoundLT;
can_be_handled_by_ndb= TRUE;
break;
case HA_READ_BEFORE_KEY: /* Find next rec. before key-record */
bound_str= "HA_READ_BEFORE_KEY";
bound_type= NdbOperation::BoundGT;
can_be_handled_by_ndb= TRUE;
break;
case HA_READ_PREFIX: /* Key which as same prefix */
bound_str= "HA_READ_PREFIX";
break;
case HA_READ_PREFIX_LAST: /* Last key with the same prefix */
bound_str= "HA_READ_PREFIX_LAST";
break;
case HA_READ_PREFIX_LAST_OR_PREV:
/* Last or prev key with the same prefix */
bound_str= "HA_READ_PREFIX_LAST_OR_PREV";
break;
default:
bound_str= "UNKNOWN";
break;
}
DBUG_PRINT("info", ("find_flag: %s, bound_type: %d,"
"can_be_handled_by_ndb: %d",
bound_str, bound_type, can_be_handled_by_ndb));
if (!can_be_handled_by_ndb)
DBUG_RETURN(1);
KEY* key_info= table->key_info + active_index;
KEY_PART_INFO* key_part= key_info->key_part;
KEY_PART_INFO* end= key_part+key_info->key_parts;
DBUG_ENTER("set_bounds");
DBUG_PRINT("enter", ("bound: %d", bound));
DBUG_PRINT("enter", ("key_parts: %d", key_info->key_parts));
DBUG_PRINT("enter", ("key->length: %d", key->length));
DBUG_PRINT("enter", ("key->flag: %d", key->flag));
// Set bounds using key data
tot_len= 0;
key_ptr= (byte *) key;
key_info= table->key_info + active_index;
for (i= 0; i < key_info->key_parts; i++)
key_ptr= (byte *) key->key;
for (; key_part != end; key_part++)
{
Field* field= key_info->key_part[i].field;
Field* field= key_part->field;
uint32 field_len= field->pack_length();
DBUG_PRINT("info", ("Set index bound on %s",
tot_len+= field_len;
const char* bounds[]= {"LE", "LT", "GE", "GT", "EQ"};
DBUG_ASSERT(bound >= 0 && bound <= 4);
DBUG_PRINT("info", ("Set Bound%s on %s",
bounds[bound],
field->field_name));
DBUG_DUMP("key", (char*)key_ptr, field_len);
if (op->setBound(field->field_name,
bound_type,
bound,
key_ptr,
field_len) != 0)
ERR_RETURN(op->getNdbError());
key_ptr+= field_len;
tot_len+= field_len;
if (tot_len >= key_len)
if (tot_len >= key->length)
break;
/*
Only one bound which is not EQ can be set
so if this bound was not EQ, bail out and make
a best effort attempt
*/
if (bound != NdbOperation::BoundEQ)
break;
}
DBUG_RETURN(0);
}
/*
Start ordered index scan in NDB
*/
int ha_ndbcluster::ordered_index_scan(const key_range *start_key,
const key_range *end_key,
bool sorted, byte* buf)
{
NdbConnection *trans= m_active_trans;
NdbResultSet *cursor;
NdbScanOperation *op;
const char *index_name;
DBUG_ENTER("ordered_index_scan");
DBUG_PRINT("enter", ("index: %u, sorted: %d", active_index, sorted));
DBUG_PRINT("enter", ("Starting new ordered scan on %s", m_tabname));
index_name= get_index_name(active_index);
if (!(op= trans->getNdbScanOperation(index_name, m_tabname)))
ERR_RETURN(trans->getNdbError());
if (!(cursor=
op->readTuples(parallelism,
(NdbCursorOperation::LockMode)get_ndb_lock_type())))
ERR_RETURN(trans->getNdbError());
m_active_cursor= cursor;
if (start_key &&
set_bounds(op, start_key,
(start_key->flag == HA_READ_KEY_EXACT) ?
NdbOperation::BoundEQ :
(start_key->flag == HA_READ_AFTER_KEY) ?
NdbOperation::BoundLT :
NdbOperation::BoundLE))
DBUG_RETURN(1);
if (end_key)
{
if (start_key && start_key->flag == HA_READ_KEY_EXACT)
DBUG_PRINT("info", ("start_key is HA_READ_KEY_EXACT ignoring end_key"));
else if (set_bounds(op, end_key,
(end_key->flag == HA_READ_AFTER_KEY) ?
NdbOperation::BoundGE :
NdbOperation::BoundGT))
DBUG_RETURN(1);
}
// Define attributes to read
for (i= 0; i < no_fields; i++)
{
Field *field= table->field[i];
if ((thd->query_id == field->query_id) ||
(field->flags & PRI_KEY_FLAG))
(field->flags & PRI_KEY_FLAG) ||
retrieve_all_fields)
{
if (get_ndb_value(op, i, field->ptr))
ERR_RETURN(op->getNdbError());
......@@ -768,22 +863,31 @@ int ha_ndbcluster::ordered_index_scan(const byte *key, uint key_len,
if (trans->execute(NoCommit) != 0)
DBUG_RETURN(ndb_err(trans));
DBUG_PRINT("exit", ("Scan started successfully"));
DBUG_RETURN(next_result(buf));
DBUG_RETURN(define_read_attrs(buf, op));
}
#if 0
/*
Read record(s) from NDB using full table scan with filter
Start a filtered scan in NDB.
NOTE
This function is here as an example of how to start a
filtered scan. It should be possible to replace full_table_scan
with this function and make a best effort attempt
at filtering out the irrelevant data by converting the "items"
into interpreted instructions.
This would speed up table scans where there is a limiting WHERE clause
that doesn't match any index in the table.
*/
int ha_ndbcluster::filtered_scan(const byte *key, uint key_len,
byte *buf,
enum ha_rkey_function find_flag)
{
uint no_fields= table->fields;
NdbConnection *trans= m_active_trans;
NdbResultSet *cursor= m_active_cursor;
NdbResultSet *cursor;
NdbScanOperation *op;
DBUG_ENTER("filtered_scan");
DBUG_PRINT("enter", ("key_len: %u, index: %u",
......@@ -791,12 +895,12 @@ int ha_ndbcluster::filtered_scan(const byte *key, uint key_len,
DBUG_DUMP("key", (char*)key, key_len);
DBUG_PRINT("info", ("Starting a new filtered scan on %s",
m_tabname));
NdbScanOperation *op= trans->getNdbScanOperation(m_tabname);
if (!op)
if (!(op= trans->getNdbScanOperation(m_tabname)))
ERR_RETURN(trans->getNdbError());
cursor= op->readTuples(parallelism);
if (!cursor)
if (!(cursor=
op->readTuples(parallelism,
(NdbCursorOperation::LockMode)get_ndb_lock_type())))
ERR_RETURN(trans->getNdbError());
m_active_cursor= cursor;
......@@ -845,66 +949,51 @@ int ha_ndbcluster::filtered_scan(const byte *key, uint key_len,
sf.end();
}
// Define attributes to read
for (uint field_no= 0; field_no < no_fields; field_no++)
{
Field *field= table->field[field_no];
// Read attribute
DBUG_PRINT("get", ("%d: %s", field_no, field->field_name));
if (get_ndb_value(op, field_no, field->ptr))
ERR_RETURN(op->getNdbError());
}
if (table->primary_key == MAX_KEY)
{
DBUG_PRINT("info", ("Getting hidden key"));
// Scanning table with no primary key
int hidden_no= no_fields;
#ifndef DBUG_OFF
const NDBTAB *tab= (NDBTAB *) m_table;
if (!tab->getColumn(hidden_no))
DBUG_RETURN(1);
#endif
if (get_ndb_value(op, hidden_no, NULL))
ERR_RETURN(op->getNdbError());
}
if (trans->execute(NoCommit) != 0)
DBUG_RETURN(ndb_err(trans));
DBUG_PRINT("exit", ("Scan started successfully"));
DBUG_RETURN(next_result(buf));
DBUG_RETURN(define_read_attrs(buf, op));
}
#endif
/*
Read records from NDB using full table scan
Start full table scan in NDB
*/
int ha_ndbcluster::full_table_scan(byte *buf)
{
uint i;
THD *thd= current_thd;
NdbConnection *trans= m_active_trans;
NdbResultSet *cursor;
NdbScanOperation *op;
NdbConnection *trans= m_active_trans;
DBUG_ENTER("full_table_scan");
DBUG_PRINT("enter", ("Starting new scan on %s", m_tabname));
if (!(op=trans->getNdbScanOperation(m_tabname)))
ERR_RETURN(trans->getNdbError());
if (!(cursor= op->readTuples(parallelism)))
if (!(cursor=
op->readTuples(parallelism,
(NdbCursorOperation::LockMode)get_ndb_lock_type())))
ERR_RETURN(trans->getNdbError());
m_active_cursor= cursor;
DBUG_RETURN(define_read_attrs(buf, op));
}
inline
int ha_ndbcluster::define_read_attrs(byte* buf, NdbOperation* op)
{
uint i;
THD *thd= current_thd;
NdbConnection *trans= m_active_trans;
DBUG_ENTER("define_read_attrs");
// Define attributes to read
for (i= 0; i < table->fields; i++)
{
Field *field= table->field[i];
if ((thd->query_id == field->query_id) ||
(field->flags & PRI_KEY_FLAG))
(field->flags & PRI_KEY_FLAG) ||
retrieve_all_fields)
{
if (get_ndb_value(op, i, field->ptr))
ERR_RETURN(op->getNdbError());
......@@ -991,8 +1080,17 @@ int ha_ndbcluster::write_row(byte *record)
to NoCommit the transaction between each row.
Find out how this is detected!
*/
if (trans->execute(NoCommit) != 0)
DBUG_RETURN(ndb_err(trans));
rows_inserted++;
if ((rows_inserted == rows_to_insert) ||
((rows_inserted % bulk_insert_rows) == 0))
{
// Send rows to NDB
DBUG_PRINT("info", ("Sending inserts to NDB, "\
"rows_inserted:%d, bulk_insert_rows: %d",
rows_inserted, bulk_insert_rows));
if (trans->execute(NoCommit) != 0)
DBUG_RETURN(ndb_err(trans));
}
DBUG_RETURN(0);
}
......@@ -1039,6 +1137,7 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
{
THD *thd= current_thd;
NdbConnection *trans= m_active_trans;
NdbResultSet* cursor= m_active_cursor;
NdbOperation *op;
uint i;
DBUG_ENTER("update_row");
......@@ -1047,49 +1146,66 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
if (table->timestamp_on_update_now)
update_timestamp(new_data+table->timestamp_on_update_now-1);
if (!(op= trans->getNdbOperation(m_tabname)) ||
op->updateTuple() != 0)
ERR_RETURN(trans->getNdbError());
if (table->primary_key == MAX_KEY)
{
// This table has no primary key, use "hidden" primary key
DBUG_PRINT("info", ("Using hidden key"));
// Require that the PK for this record has previously been
// read into m_value
uint no_fields= table->fields;
NdbRecAttr* rec= m_value[no_fields];
DBUG_ASSERT(rec);
DBUG_DUMP("key", (char*)rec->aRef(), NDB_HIDDEN_PRIMARY_KEY_LENGTH);
if (set_hidden_key(op, no_fields, rec->aRef()))
ERR_RETURN(op->getNdbError());
}
else
/* Check for update of primary key and return error */
if ((table->primary_key != MAX_KEY) &&
(key_cmp(table->primary_key, old_data, new_data)))
DBUG_RETURN(HA_ERR_UNSUPPORTED);
if (cursor)
{
/* Check for update of primary key and return error */
if (key_cmp(table->primary_key, old_data, new_data))
DBUG_RETURN(HA_ERR_UNSUPPORTED);
int res;
if ((res= set_primary_key(op, old_data + table->null_bytes)))
DBUG_RETURN(res);
/*
We are scanning records and want to update the record
that was just found, call updateTuple on the cursor
to take over the lock to a new update operation
And thus setting the primary key of the record from
the active record in cursor
*/
DBUG_PRINT("info", ("Calling updateTuple on cursor"));
if (!(op= cursor->updateTuple()))
ERR_RETURN(trans->getNdbError());
ops_pending++;
}
else
{
if (!(op= trans->getNdbOperation(m_tabname)) ||
op->updateTuple() != 0)
ERR_RETURN(trans->getNdbError());
if (table->primary_key == MAX_KEY)
{
// This table has no primary key, use "hidden" primary key
DBUG_PRINT("info", ("Using hidden key"));
// Require that the PK for this record has previously been
// read into m_value
uint no_fields= table->fields;
NdbRecAttr* rec= m_value[no_fields];
DBUG_ASSERT(rec);
DBUG_DUMP("key", (char*)rec->aRef(), NDB_HIDDEN_PRIMARY_KEY_LENGTH);
if (set_hidden_key(op, no_fields, rec->aRef()))
ERR_RETURN(op->getNdbError());
}
else
{
int res;
if ((res= set_primary_key(op, old_data + table->null_bytes)))
DBUG_RETURN(res);
}
}
// Set non-key attribute(s)
for (i= 0; i < table->fields; i++)
{
Field *field= table->field[i];
if ((thd->query_id == field->query_id) &&
(!(field->flags & PRI_KEY_FLAG)) &&
set_ndb_value(op, field, i))
ERR_RETURN(op->getNdbError());
}
// Execute update operation
if (trans->execute(NoCommit) != 0)
if (!cursor && trans->execute(NoCommit) != 0)
DBUG_RETURN(ndb_err(trans));
DBUG_RETURN(0);
......@@ -1103,39 +1219,61 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
int ha_ndbcluster::delete_row(const byte *record)
{
NdbConnection *trans= m_active_trans;
NdbResultSet* cursor= m_active_cursor;
NdbOperation *op;
DBUG_ENTER("delete_row");
statistic_increment(ha_delete_count,&LOCK_status);
if (!(op=trans->getNdbOperation(m_tabname)) ||
op->deleteTuple() != 0)
ERR_RETURN(trans->getNdbError());
if (table->primary_key == MAX_KEY)
if (cursor)
{
// This table has no primary key, use "hidden" primary key
DBUG_PRINT("info", ("Using hidden key"));
uint no_fields= table->fields;
NdbRecAttr* rec= m_value[no_fields];
DBUG_ASSERT(rec != NULL);
/*
We are scanning records and want to update the record
that was just found, call deleteTuple on the cursor
to take over the lock to a new update operation
And thus setting the primary key of the record from
the active record in cursor
*/
DBUG_PRINT("info", ("Calling deleteTuple on cursor"));
if (cursor->deleteTuple() != 0)
ERR_RETURN(trans->getNdbError());
ops_pending++;
if (set_hidden_key(op, no_fields, rec->aRef()))
ERR_RETURN(op->getNdbError());
}
else
// If deleting from cursor, NoCommit will be handled in next_result
DBUG_RETURN(0);
}
else
{
int res;
if ((res= set_primary_key(op)))
return res;
if (!(op=trans->getNdbOperation(m_tabname)) ||
op->deleteTuple() != 0)
ERR_RETURN(trans->getNdbError());
if (table->primary_key == MAX_KEY)
{
// This table has no primary key, use "hidden" primary key
DBUG_PRINT("info", ("Using hidden key"));
uint no_fields= table->fields;
NdbRecAttr* rec= m_value[no_fields];
DBUG_ASSERT(rec != NULL);
if (set_hidden_key(op, no_fields, rec->aRef()))
ERR_RETURN(op->getNdbError());
}
else
{
int res;
if ((res= set_primary_key(op)))
return res;
}
}
// Execute delete operation
if (trans->execute(NoCommit) != 0)
DBUG_RETURN(ndb_err(trans));
DBUG_RETURN(0);
}
/*
Unpack a record read from NDB
......@@ -1349,20 +1487,52 @@ int ha_ndbcluster::index_read(byte *buf,
DBUG_PRINT("enter", ("active_index: %u, key_len: %u, find_flag: %d",
active_index, key_len, find_flag));
KEY* key_info;
int error= 1;
statistic_increment(ha_read_key_count, &LOCK_status);
switch (get_index_type(active_index)){
case PRIMARY_KEY_INDEX:
#ifdef USE_EXTRA_ORDERED_INDEX
key_info= table->key_info + active_index;
if (key_len < key_info->key_length ||
find_flag != HA_READ_KEY_EXACT)
{
key_range start_key;
start_key.key= key;
start_key.length= key_len;
start_key.flag= find_flag;
error= ordered_index_scan(&start_key, 0, false, buf);
break;
}
#endif
error= pk_read(key, key_len, buf);
break;
case UNIQUE_INDEX:
#ifdef USE_EXTRA_ORDERED_INDEX
key_info= table->key_info + active_index;
if (key_len < key_info->key_length ||
find_flag != HA_READ_KEY_EXACT)
{
key_range start_key;
start_key.key= key;
start_key.length= key_len;
start_key.flag= find_flag;
error= ordered_index_scan(&start_key, 0, false, buf);
break;
}
#endif
error= unique_index_read(key, key_len, buf);
break;
case ORDERED_INDEX:
error= ordered_index_scan(key, key_len, buf, find_flag);
key_range start_key;
start_key.key= key;
start_key.length= key_len;
start_key.flag= find_flag;
error= ordered_index_scan(&start_key, 0, false, buf);
break;
default:
......@@ -1391,11 +1561,7 @@ int ha_ndbcluster::index_next(byte *buf)
int error = 1;
statistic_increment(ha_read_next_count,&LOCK_status);
if (get_index_type(active_index) == PRIMARY_KEY_INDEX)
error= HA_ERR_END_OF_FILE;
else
error = next_result(buf);
DBUG_RETURN(error);
DBUG_RETURN(next_result(buf));
}
......@@ -1423,6 +1589,49 @@ int ha_ndbcluster::index_last(byte *buf)
}
int ha_ndbcluster::read_range_first(const key_range *start_key,
const key_range *end_key,
bool sorted)
{
KEY* key_info;
int error= 1;
byte* buf= table->record[0];
DBUG_ENTER("ha_ndbcluster::read_range_first");
DBUG_PRINT("info", ("sorted: %d", sorted));
switch (get_index_type(active_index)){
case PRIMARY_KEY_INDEX:
key_info= table->key_info + active_index;
if (start_key &&
start_key->length == key_info->key_length &&
start_key->flag == HA_READ_KEY_EXACT)
DBUG_RETURN(pk_read(start_key->key, start_key->length, buf));
break;
case UNIQUE_INDEX:
key_info= table->key_info + active_index;
if (start_key &&
start_key->length == key_info->key_length &&
start_key->flag == HA_READ_KEY_EXACT)
DBUG_RETURN(unique_index_read(start_key->key, start_key->length, buf));
break;
default:
break;
}
// Start the ordered index scan and fetch the first row
error= ordered_index_scan(start_key, end_key, sorted,
buf);
DBUG_RETURN(error);
}
int ha_ndbcluster::read_range_next(bool eq_range)
{
DBUG_ENTER("ha_ndbcluster::read_range_next");
DBUG_RETURN(next_result(table->record[0]));
}
int ha_ndbcluster::rnd_init(bool scan)
{
NdbResultSet *cursor= m_active_cursor;
......@@ -1455,12 +1664,10 @@ int ha_ndbcluster::rnd_next(byte *buf)
{
DBUG_ENTER("rnd_next");
statistic_increment(ha_read_rnd_next_count, &LOCK_status);
int error = 1;
if (!m_active_cursor)
error = full_table_scan(buf);
else
error = next_result(buf);
DBUG_RETURN(error);
DBUG_RETURN(full_table_scan(buf));
DBUG_RETURN(next_result(buf));
}
......@@ -1654,6 +1861,7 @@ int ha_ndbcluster::extra(enum ha_extra_function operation)
where field->query_id is the same as
the current query id */
DBUG_PRINT("info", ("HA_EXTRA_RETRIEVE_ALL_COLS"));
retrieve_all_fields= TRUE;
break;
case HA_EXTRA_PREPARE_FOR_DELETE:
DBUG_PRINT("info", ("HA_EXTRA_PREPARE_FOR_DELETE"));
......@@ -1679,6 +1887,53 @@ int ha_ndbcluster::extra(enum ha_extra_function operation)
DBUG_RETURN(0);
}
/*
Start of an insert, remember number of rows to be inserted, it will
be used in write_row and get_autoincrement to send an optimal number
of rows in each roundtrip to the server
SYNOPSIS
rows number of rows to insert, 0 if unknown
*/
void ha_ndbcluster::start_bulk_insert(ha_rows rows)
{
int bytes, batch;
const NDBTAB *tab= (NDBTAB *) m_table;
DBUG_ENTER("start_bulk_insert");
DBUG_PRINT("enter", ("rows: %d", rows));
rows_inserted= 0;
rows_to_insert= rows;
/*
Calculate how many rows that should be inserted
per roundtrip to NDB. This is done in order to minimize the
number of roundtrips as much as possible. However performance will
degrade if too many bytes are inserted, thus it's limited by this
calculation.
*/
const int bytesperbatch = 8192;
bytes= 12 + tab->getRowSizeInBytes() + 4 * tab->getNoOfColumns();
batch= bytesperbatch/bytes;
batch= batch == 0 ? 1 : batch;
DBUG_PRINT("info", ("batch: %d, bytes: %d", batch, bytes));
bulk_insert_rows= batch;
DBUG_VOID_RETURN;
}
/*
End of an insert
*/
int ha_ndbcluster::end_bulk_insert()
{
DBUG_ENTER("end_bulk_insert");
DBUG_RETURN(0);
}
int ha_ndbcluster::extra_opt(enum ha_extra_function operation, ulong cache_size)
{
......@@ -1708,7 +1963,7 @@ const char **ha_ndbcluster::bas_ext() const
double ha_ndbcluster::scan_time()
{
return rows2double(records/3);
return rows2double(records*1000);
}
......@@ -1740,6 +1995,8 @@ THR_LOCK_DATA **ha_ndbcluster::store_lock(THD *thd,
m_lock.type=lock_type;
}
*to++= &m_lock;
DBUG_PRINT("exit", ("lock_type: %d", lock_type));
DBUG_RETURN(to);
}
......@@ -1853,7 +2110,10 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
(NdbConnection*)thd->transaction.all.ndb_tid:
(NdbConnection*)thd->transaction.stmt.ndb_tid;
DBUG_ASSERT(m_active_trans);
// Start of transaction
retrieve_all_fields= FALSE;
ops_pending= 0;
}
else
{
......@@ -1904,6 +2164,10 @@ int ha_ndbcluster::start_stmt(THD *thd)
thd->transaction.stmt.ndb_tid= trans;
}
m_active_trans= trans;
// Start of statement
retrieve_all_fields= FALSE;
ops_pending= 0;
DBUG_RETURN(error);
}
......@@ -2041,9 +2305,8 @@ int ha_ndbcluster::create(const char *name,
NdbDictionary::Column::Type ndb_type;
NDBCOL col;
uint pack_length, length, i;
int res;
const void *data, *pack_data;
const char **key_name= form->keynames.type_names;
const char **key_names= form->keynames.type_names;
char name2[FN_HEADLEN];
DBUG_ENTER("create");
......@@ -2086,13 +2349,11 @@ int ha_ndbcluster::create(const char *name,
col.setPrimaryKey(field->flags & PRI_KEY_FLAG);
if (field->flags & AUTO_INCREMENT_FLAG)
{
DBUG_PRINT("info", ("Found auto_increment key"));
col.setAutoIncrement(TRUE);
ulonglong value = info->auto_increment_value ?
info->auto_increment_value -1 :
(ulonglong) 0;
DBUG_PRINT("info", ("initial value=%ld", value));
// col.setInitialAutIncValue(value);
ulonglong value= info->auto_increment_value ?
info->auto_increment_value -1 : (ulonglong) 0;
DBUG_PRINT("info", ("Autoincrement key, initial: %d", value));
col.setAutoIncrementInitialValue(value);
}
else
col.setAutoIncrement(false);
......@@ -2143,54 +2404,90 @@ int ha_ndbcluster::create(const char *name,
}
// Create secondary indexes
for (i= 0; i < form->keys; i++)
KEY* key_info= form->key_info;
const char** key_name= key_names;
for (i= 0; i < form->keys; i++, key_info++, key_name++)
{
DBUG_PRINT("info", ("Found index %u: %s", i, key_name[i]));
int error= 0;
DBUG_PRINT("info", ("Index %u: %s", i, *key_name));
if (i == form->primary_key)
{
DBUG_PRINT("info", ("Skipping it, PK already created"));
continue;
{
#ifdef USE_EXTRA_ORDERED_INDEX
error= create_ordered_index(*key_name, key_info);
#endif
}
else if (key_info->flags & HA_NOSAME)
error= create_unique_index(*key_name, key_info);
else
error= create_ordered_index(*key_name, key_info);
DBUG_PRINT("info", ("Creating index %u: %s", i, key_name[i]));
res= create_index(key_name[i],
form->key_info + i);
switch(res){
case 0:
// OK
break;
default:
if (error)
{
DBUG_PRINT("error", ("Failed to create index %u", i));
drop_table();
my_errno= res;
goto err_end;
my_errno= error;
break;
}
}
err_end:
DBUG_RETURN(my_errno);
}
int ha_ndbcluster::create_ordered_index(const char *name,
KEY *key_info)
{
DBUG_ENTER("create_ordered_index");
DBUG_RETURN(create_index(name, key_info, false));
}
int ha_ndbcluster::create_unique_index(const char *name,
KEY *key_info)
{
int error;
const char* unique_name= name;
DBUG_ENTER("create_unique_index");
#ifdef USE_EXTRA_ORDERED_INDEX
char buf[FN_HEADLEN];
strxnmov(buf, FN_HEADLEN, name, unique_suffix, NullS);
unique_name= buf;
#endif
error= create_index(unique_name, key_info, true);
if (error)
DBUG_RETURN(error);
#ifdef USE_EXTRA_ORDERED_INDEX
/*
If unique index contains more then one attribute
an ordered index should be created to support
partial key search
*/
error= create_ordered_index(name, key_info);
#endif
DBUG_RETURN(error);
}
/*
Create an index in NDB Cluster
*/
int ha_ndbcluster::create_index(const char *name,
KEY *key_info){
KEY *key_info,
bool unique)
{
NdbDictionary::Dictionary *dict= m_ndb->getDictionary();
KEY_PART_INFO *key_part= key_info->key_part;
KEY_PART_INFO *end= key_part + key_info->key_parts;
DBUG_ENTER("create_index");
DBUG_PRINT("enter", ("name: %s ", name));
// Check that an index with the same name do not already exist
if (dict->getIndex(name, m_tabname))
ERR_RETURN(dict->getNdbError());
NdbDictionary::Index ndb_index(name);
if (key_info->flags & HA_NOSAME)
if (unique)
ndb_index.setType(NdbDictionary::Index::UniqueHashIndex);
else
{
......@@ -2321,10 +2618,10 @@ int ndbcluster_drop_database(const char *path)
longlong ha_ndbcluster::get_auto_increment()
{
// NOTE If number of values to be inserted is known
// the autoincrement cache could be used here
Uint64 auto_value= m_ndb->getAutoIncrementValue(m_tabname);
{
int cache_size = rows_to_insert ? rows_to_insert : 32;
Uint64 auto_value=
m_ndb->getAutoIncrementValue(m_tabname, cache_size);
return (longlong)auto_value;
}
......@@ -2347,9 +2644,15 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
HA_NO_BLOBS |
HA_DROP_BEFORE_CREATE |
HA_NOT_READ_AFTER_KEY),
m_use_write(false)
m_use_write(false),
retrieve_all_fields(FALSE),
rows_to_insert(0),
rows_inserted(0),
bulk_insert_rows(1024),
ops_pending(0)
{
int i;
DBUG_ENTER("ha_ndbcluster");
m_tabname[0]= '\0';
......@@ -2360,6 +2663,12 @@ ha_ndbcluster::ha_ndbcluster(TABLE *table_arg):
records= 100;
block_size= 1024;
for (i= 0; i < MAX_KEY; i++)
{
m_indextype[i]= UNDEFINED_INDEX;
m_unique_index_name[i]= NULL;
}
DBUG_VOID_RETURN;
}
......@@ -2765,6 +3074,7 @@ ha_ndbcluster::records_in_range(int inx,
DBUG_PRINT("enter", ("end_key: %x, end_key_len: %d", end_key, end_key_len));
DBUG_PRINT("enter", ("end_search_flag: %d", end_search_flag));
#ifndef USE_EXTRA_ORDERED_INDEX
/*
Check that start_key_len is equal to
the length of the used index and
......@@ -2779,6 +3089,14 @@ ha_ndbcluster::records_in_range(int inx,
key_length));
records= HA_POS_ERROR;
}
#else
/*
Extra ordered indexes are created primarily
to support partial key scan/read and range scans of hash indexes.
I.e. the ordered index are used instead of the hash indexes for
these queries.
*/
#endif
DBUG_RETURN(records);
}
......
......@@ -76,6 +76,11 @@ class ha_ndbcluster: public handler
int rnd_next(byte *buf);
int rnd_pos(byte *buf, byte *pos);
void position(const byte *record);
int read_range_first(const key_range *start_key,
const key_range *end_key,
bool sorted);
int read_range_next(bool eq_range);
void info(uint);
int extra(enum ha_extra_function operation);
......@@ -127,6 +132,8 @@ class ha_ndbcluster: public handler
const byte *end_key,uint end_key_len,
enum ha_rkey_function end_search_flag);
void start_bulk_insert(ha_rows rows);
int end_bulk_insert();
static Ndb* seize_ndb();
static void release_ndb(Ndb* ndb);
......@@ -135,29 +142,31 @@ class ha_ndbcluster: public handler
private:
int alter_table_name(const char *from, const char *to);
int drop_table();
int create_index(const char *name, KEY *key_info);
int create_index(const char *name, KEY *key_info, bool unique);
int create_ordered_index(const char *name, KEY *key_info);
int create_unique_index(const char *name, KEY *key_info);
int initialize_autoincrement(const void* table);
int get_metadata(const char* path);
void release_metadata();
const char* get_index_name(uint idx_no) const;
const char* get_unique_index_name(uint idx_no) const;
NDB_INDEX_TYPE get_index_type(uint idx_no) const;
NDB_INDEX_TYPE get_index_type_from_table(uint index_no) const;
int get_ndb_lock_type();
int pk_read(const byte *key, uint key_len,
byte *buf);
int unique_index_read(const byte *key, uint key_len,
byte *buf);
int ordered_index_scan(const byte *key, uint key_len,
byte *buf,
enum ha_rkey_function find_flag);
int ordered_index_scan(const key_range *start_key,
const key_range *end_key,
bool sorted, byte* buf);
int full_table_scan(byte * buf);
int next_result(byte *buf);
#if 0
int define_read_attrs(byte* buf, NdbOperation* op);
int filtered_scan(const byte *key, uint key_len,
byte *buf,
enum ha_rkey_function find_flag);
#endif
void unpack_record(byte *buf);
void set_dbname(const char *pathname);
......@@ -172,6 +181,8 @@ class ha_ndbcluster: public handler
int get_ndb_value(NdbOperation*, uint fieldnr, byte *field_ptr);
int set_primary_key(NdbOperation *op, const byte *key);
int set_primary_key(NdbOperation *op);
int set_bounds(NdbOperation *ndb_op, const key_range *key,
int bound);
int key_cmp(uint keynr, const byte * old_row, const byte * new_row);
void print_results();
......@@ -193,8 +204,14 @@ class ha_ndbcluster: public handler
THR_LOCK_DATA m_lock;
NDB_SHARE *m_share;
NDB_INDEX_TYPE m_indextype[MAX_KEY];
const char* m_unique_index_name[MAX_KEY];
NdbRecAttr *m_value[NDB_MAX_ATTRIBUTES_IN_TABLE];
bool m_use_write;
bool retrieve_all_fields;
ha_rows rows_to_insert;
ha_rows rows_inserted;
ha_rows bulk_insert_rows;
ha_rows ops_pending;
};
bool ndbcluster_init(void);
......
......@@ -3247,7 +3247,11 @@ copy_data_between_tables(TABLE *from,TABLE *to,
error= 1;
goto err;
}
/* Handler must be told explicitly to retrieve all columns, because
this function does not set field->query_id in the columns to the
current query id */
from->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS);
init_read_record(&info, thd, from, (SQL_SELECT *) 0, 1,1);
if (handle_duplicates == DUP_IGNORE ||
handle_duplicates == DUP_REPLACE)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment