mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge msvensson@bk-internal.mysql.com:/home/bk/mysql-4.1
into neptunus.(none):/home/magnus/mysql-4.1 mysql-test/mysql-test-run.sh: Auto merged sql/ha_ndbcluster.h: Auto merged sql/sql_table.cc: Auto merged
This commit is contained in:
commit
4a3580ca1a
18 changed files with 2428 additions and 144 deletions
|
@ -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
|
||||
|
|
29
mysql-test/r/ndb_alter_table.result
Normal file
29
mysql-test/r/ndb_alter_table.result
Normal file
|
@ -0,0 +1,29 @@
|
|||
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;
|
160
mysql-test/r/ndb_index.result
Normal file
160
mysql-test/r/ndb_index.result
Normal file
|
@ -0,0 +1,160 @@
|
|||
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;
|
190
mysql-test/r/ndb_index_ordered.result
Normal file
190
mysql-test/r/ndb_index_ordered.result
Normal file
|
@ -0,0 +1,190 @@
|
|||
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;
|
371
mysql-test/r/ndb_index_unique.result
Normal file
371
mysql-test/r/ndb_index_unique.result
Normal file
|
@ -0,0 +1,371 @@
|
|||
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;
|
419
mysql-test/r/ndb_insert.result
Normal file
419
mysql-test/r/ndb_insert.result
Normal file
|
@ -0,0 +1,419 @@
|
|||
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;
|
41
mysql-test/t/ndb_alter_table.test
Normal file
41
mysql-test/t/ndb_alter_table.test
Normal file
|
@ -0,0 +1,41 @@
|
|||
-- 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;
|
126
mysql-test/t/ndb_index.test
Normal file
126
mysql-test/t/ndb_index.test
Normal file
|
@ -0,0 +1,126 @@
|
|||
-- 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;
|
112
mysql-test/t/ndb_index_ordered.test
Normal file
112
mysql-test/t/ndb_index_ordered.test
Normal file
|
@ -0,0 +1,112 @@
|
|||
-- 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;
|
134
mysql-test/t/ndb_index_unique.test
Normal file
134
mysql-test/t/ndb_index_unique.test
Normal file
|
@ -0,0 +1,134 @@
|
|||
-- 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;
|
||||
|
||||
|
433
mysql-test/t/ndb_insert.test
Normal file
433
mysql-test/t/ndb_insert.test
Normal file
|
@ -0,0 +1,433 @@
|
|||
-- 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;
|
|
@ -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,11 +402,19 @@ 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;
|
||||
}
|
||||
|
||||
|
@ -416,6 +446,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);
|
||||
|
@ -550,7 +592,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 +601,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());
|
||||
|
||||
|
@ -634,25 +676,80 @@ inline int ha_ndbcluster::next_result(byte *buf)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Set bounds for a ordered index scan, use key_range
|
||||
*/
|
||||
|
||||
int ha_ndbcluster::set_bounds(NdbOperation *op,
|
||||
const key_range *key,
|
||||
int bound)
|
||||
{
|
||||
uint i, tot_len;
|
||||
byte *key_ptr;
|
||||
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;
|
||||
for (; key_part != end; key_part++)
|
||||
{
|
||||
Field* field= key_part->field;
|
||||
uint32 field_len= field->pack_length();
|
||||
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,
|
||||
key_ptr,
|
||||
field_len) != 0)
|
||||
ERR_RETURN(op->getNdbError());
|
||||
|
||||
key_ptr+= field_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);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Read record(s) from NDB using ordered index scan
|
||||
*/
|
||||
|
||||
int ha_ndbcluster::ordered_index_scan(const byte *key, uint key_len,
|
||||
byte *buf,
|
||||
enum ha_rkey_function find_flag)
|
||||
int ha_ndbcluster::ordered_index_scan(const key_range *start_key,
|
||||
const key_range *end_key,
|
||||
bool sorted, byte* buf)
|
||||
{
|
||||
uint no_fields= table->fields;
|
||||
uint tot_len, i;
|
||||
uint 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;
|
||||
byte *key_ptr;
|
||||
KEY *key_info;
|
||||
THD* thd = current_thd;
|
||||
DBUG_ENTER("ordered_index_scan");
|
||||
DBUG_PRINT("enter", ("index: %u", active_index));
|
||||
|
@ -664,77 +761,27 @@ int ha_ndbcluster::ordered_index_scan(const byte *key, uint key_len,
|
|||
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)
|
||||
|
||||
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 &&
|
||||
(start_key && start_key->flag != HA_READ_KEY_EXACT) &&
|
||||
// MASV Is it a bug that end_key is not 0
|
||||
// if start flag is HA_READ_KEY_EXACT
|
||||
|
||||
// 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++)
|
||||
{
|
||||
Field* field= key_info->key_part[i].field;
|
||||
uint32 field_len= field->pack_length();
|
||||
DBUG_PRINT("info", ("Set index bound on %s",
|
||||
field->field_name));
|
||||
DBUG_DUMP("key", (char*)key_ptr, field_len);
|
||||
|
||||
if (op->setBound(field->field_name,
|
||||
bound_type,
|
||||
key_ptr,
|
||||
field_len) != 0)
|
||||
ERR_RETURN(op->getNdbError());
|
||||
|
||||
key_ptr+= field_len;
|
||||
tot_len+= field_len;
|
||||
if (tot_len >= key_len)
|
||||
break;
|
||||
}
|
||||
|
||||
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++)
|
||||
{
|
||||
|
@ -904,7 +951,8 @@ int ha_ndbcluster::full_table_scan(byte *buf)
|
|||
{
|
||||
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 +1039,16 @@ 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 % 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);
|
||||
}
|
||||
|
||||
|
@ -1349,20 +1405,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,7 +1479,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)
|
||||
if (!m_active_cursor)
|
||||
error= HA_ERR_END_OF_FILE;
|
||||
else
|
||||
error = next_result(buf);
|
||||
|
@ -1423,6 +1511,44 @@ 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)
|
||||
{
|
||||
int error= 1;
|
||||
DBUG_ENTER("ha_ndbcluster::read_range_first");
|
||||
|
||||
switch (get_index_type(active_index)){
|
||||
case PRIMARY_KEY_INDEX:
|
||||
error= pk_read(start_key->key, start_key->length,
|
||||
table->record[0]);
|
||||
break;
|
||||
|
||||
case UNIQUE_INDEX:
|
||||
error= unique_index_read(start_key->key, start_key->length,
|
||||
table->record[0]);
|
||||
break;
|
||||
|
||||
case ORDERED_INDEX:
|
||||
// Start the ordered index scan and fetch the first row
|
||||
error= ordered_index_scan(start_key, end_key, sorted,
|
||||
table->record[0]);
|
||||
break;
|
||||
|
||||
default:
|
||||
case UNDEFINED_INDEX:
|
||||
break;
|
||||
}
|
||||
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;
|
||||
|
@ -1654,6 +1780,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 +1806,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.
|
||||
*/
|
||||
bytes= 12 + tab->getRowSizeInBytes() + 4 * tab->getNoOfColumns();
|
||||
batch= (1024*256); // 1024 rows, with size 256
|
||||
batch= batch/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)
|
||||
{
|
||||
|
@ -1853,6 +2027,8 @@ 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);
|
||||
|
||||
retrieve_all_fields = FALSE;
|
||||
|
||||
}
|
||||
else
|
||||
|
@ -1904,6 +2080,8 @@ int ha_ndbcluster::start_stmt(THD *thd)
|
|||
thd->transaction.stmt.ndb_tid= trans;
|
||||
}
|
||||
m_active_trans= trans;
|
||||
|
||||
retrieve_all_fields = FALSE;
|
||||
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
@ -2041,9 +2219,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 +2263,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 +2318,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 +2532,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 +2558,14 @@ 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)
|
||||
{
|
||||
|
||||
int i;
|
||||
|
||||
DBUG_ENTER("ha_ndbcluster");
|
||||
|
||||
m_tabname[0]= '\0';
|
||||
|
@ -2360,6 +2576,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 +2987,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 +3002,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,11 +142,14 @@ 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;
|
||||
|
||||
|
@ -147,9 +157,9 @@ class ha_ndbcluster: public handler
|
|||
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
|
||||
|
@ -172,6 +182,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 +205,13 @@ 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;
|
||||
};
|
||||
|
||||
bool ndbcluster_init(void);
|
||||
|
|
|
@ -3222,7 +3222,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)
|
||||
|
|
Loading…
Reference in a new issue