2004-04-29 09:58:38 +02:00
|
|
|
-- source include/have_ndb.inc
|
2005-04-19 17:23:49 +02:00
|
|
|
-- source include/not_embedded.inc
|
2004-04-29 09:58:38 +02:00
|
|
|
|
|
|
|
--disable_warnings
|
2005-01-26 10:32:56 +01:00
|
|
|
drop table if exists t1, t2, t3, t4, t5, t6, t7, t8;
|
2004-04-29 09:58:38 +02:00
|
|
|
--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;
|
|
|
|
|
2004-11-18 12:11:56 +01:00
|
|
|
-- error 1062
|
2004-08-13 13:51:18 +02:00
|
|
|
insert into t1 values(8, 2, 3);
|
|
|
|
select * from t1 order by a;
|
|
|
|
delete from t1 where a = 1;
|
|
|
|
insert into t1 values(8, 2, 3);
|
|
|
|
select * from t1 order by a;
|
|
|
|
|
2004-04-29 09:58:38 +02:00
|
|
|
drop table t1;
|
|
|
|
|
2004-11-22 13:58:11 +01:00
|
|
|
#
|
|
|
|
# Indexing NULL values
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
a int unsigned NOT NULL PRIMARY KEY,
|
|
|
|
b int unsigned,
|
|
|
|
c int unsigned,
|
|
|
|
UNIQUE bc(b,c)
|
|
|
|
) engine = ndb;
|
|
|
|
|
|
|
|
insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
|
|
|
|
select * from t1 use index (bc) where b IS NULL order by a;
|
|
|
|
|
|
|
|
select * from t1 use index (bc)order by a;
|
|
|
|
select * from t1 use index (bc) order by a;
|
|
|
|
select * from t1 use index (PRIMARY) where b IS NULL order by a;
|
|
|
|
select * from t1 use index (bc) where b IS NULL order by a;
|
|
|
|
select * from t1 use index (bc) where b IS NULL and c IS NULL order by a;
|
|
|
|
select * from t1 use index (bc) where b IS NULL and c = 2 order by a;
|
|
|
|
select * from t1 use index (bc) where b < 4 order by a;
|
|
|
|
select * from t1 use index (bc) where b IS NOT NULL order by a;
|
|
|
|
-- error 1062
|
|
|
|
insert into t1 values(5,1,1);
|
|
|
|
drop table t1;
|
|
|
|
|
2004-05-25 14:40:51 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Show use of UNIQUE USING HASH indexes
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t2 (
|
|
|
|
a int unsigned NOT NULL PRIMARY KEY,
|
|
|
|
b int unsigned not null,
|
|
|
|
c int unsigned not null,
|
|
|
|
UNIQUE USING HASH (b, c)
|
|
|
|
) engine=ndbcluster;
|
|
|
|
|
|
|
|
insert t2 values(1, 2, 3), (2, 3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
|
|
|
|
select * from t2 where a = 3;
|
|
|
|
select * from t2 where b = 4;
|
|
|
|
select * from t2 where c = 6;
|
|
|
|
insert into t2 values(7,8,3);
|
|
|
|
select * from t2 where b = 4 order by a;
|
|
|
|
|
2004-11-18 12:11:56 +01:00
|
|
|
-- error 1062
|
2004-08-13 13:51:18 +02:00
|
|
|
insert into t2 values(8, 2, 3);
|
|
|
|
select * from t2 order by a;
|
|
|
|
delete from t2 where a = 1;
|
|
|
|
insert into t2 values(8, 2, 3);
|
|
|
|
select * from t2 order by a;
|
|
|
|
|
2006-12-07 15:49:59 +01:00
|
|
|
# Bug #24818 CREATE UNIQUE INDEX (...) USING HASH on a NDB table crashes mysqld
|
|
|
|
create unique index bi using hash on t2(b);
|
|
|
|
-- error 1062
|
|
|
|
insert into t2 values(9, 3, 1);
|
|
|
|
alter table t2 drop index bi;
|
|
|
|
insert into t2 values(9, 3, 1);
|
|
|
|
select * from t2 order by a;
|
|
|
|
|
2004-05-25 14:40:51 +02:00
|
|
|
drop table t2;
|
|
|
|
|
2004-11-22 10:35:03 +01:00
|
|
|
CREATE TABLE t2 (
|
|
|
|
a int unsigned NOT NULL PRIMARY KEY,
|
|
|
|
b int unsigned not null,
|
|
|
|
c int unsigned,
|
|
|
|
UNIQUE USING HASH (b, c)
|
|
|
|
) engine=ndbcluster;
|
|
|
|
|
2006-11-07 16:38:37 +01:00
|
|
|
|
|
|
|
insert t2 values(1,1,NULL),(2,2,2),(3,3,NULL),(4,4,4),(5,5,NULL),(6,6,6),(7,7,NULL),(8,3,NULL),(9,3,NULL);
|
|
|
|
|
|
|
|
select * from t2 where c IS NULL order by a;
|
|
|
|
select * from t2 where b = 3 AND c IS NULL order by a;
|
|
|
|
select * from t2 where (b = 3 OR b = 5) AND c IS NULL order by a;
|
|
|
|
set @old_ecpd = @@session.engine_condition_pushdown;
|
|
|
|
set engine_condition_pushdown = true;
|
|
|
|
explain select * from t2 where (b = 3 OR b = 5) AND c IS NULL AND a < 9 order by a;
|
|
|
|
select * from t2 where (b = 3 OR b = 5) AND c IS NULL AND a < 9 order by a;
|
|
|
|
set engine_condition_pushdown = @old_ecpd;
|
|
|
|
|
|
|
|
drop table t2;
|
|
|
|
|
2004-05-25 14:40:51 +02:00
|
|
|
#
|
|
|
|
# Show use of PRIMARY KEY USING HASH indexes
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t3 (
|
|
|
|
a int unsigned NOT NULL,
|
|
|
|
b int unsigned not null,
|
|
|
|
c int unsigned,
|
|
|
|
PRIMARY KEY USING HASH (a, b)
|
|
|
|
) engine=ndbcluster;
|
|
|
|
|
|
|
|
insert t3 values(1, 2, 3), (2, 3, 5), (3, 4, 6), (4, 5, 8), (5,6, 2), (6,7, 2);
|
|
|
|
select * from t3 where a = 3;
|
|
|
|
select * from t3 where b = 4;
|
|
|
|
select * from t3 where c = 6;
|
|
|
|
insert into t3 values(7,8,3);
|
|
|
|
select * from t3 where b = 4 order by a;
|
|
|
|
|
|
|
|
drop table t3;
|
|
|
|
|
2004-08-13 13:51:18 +02:00
|
|
|
#
|
|
|
|
# Indexes on NULL-able columns
|
|
|
|
#
|
|
|
|
|
2004-08-31 10:19:10 +02:00
|
|
|
CREATE TABLE t1 (
|
|
|
|
pk int NOT NULL PRIMARY KEY,
|
|
|
|
a int unsigned,
|
|
|
|
UNIQUE KEY (a)
|
|
|
|
) engine=ndbcluster;
|
2004-08-13 13:51:18 +02:00
|
|
|
|
2004-08-31 10:19:10 +02:00
|
|
|
insert into t1 values (-1,NULL), (0,0), (1,NULL),(2,2),(3,NULL),(4,4);
|
|
|
|
|
|
|
|
select * from t1 order by pk;
|
|
|
|
|
2004-11-18 12:11:56 +01:00
|
|
|
--error 1062
|
2004-08-31 10:19:10 +02:00
|
|
|
insert into t1 values (5,0);
|
|
|
|
select * from t1 order by pk;
|
|
|
|
delete from t1 where a = 0;
|
|
|
|
insert into t1 values (5,0);
|
|
|
|
select * from t1 order by pk;
|
|
|
|
|
|
|
|
CREATE TABLE t2 (
|
|
|
|
pk int NOT NULL PRIMARY KEY,
|
|
|
|
a int unsigned,
|
|
|
|
b tinyint NOT NULL,
|
|
|
|
c VARCHAR(10),
|
|
|
|
UNIQUE KEY si(a, c)
|
|
|
|
) engine=ndbcluster;
|
|
|
|
|
|
|
|
insert into t2 values (-1,1,17,NULL),(0,NULL,18,NULL),(1,3,19,'abc');
|
|
|
|
|
|
|
|
select * from t2 order by pk;
|
|
|
|
|
2004-11-18 12:11:56 +01:00
|
|
|
--error 1062
|
2004-08-31 10:19:10 +02:00
|
|
|
insert into t2 values(2,3,19,'abc');
|
|
|
|
select * from t2 order by pk;
|
|
|
|
delete from t2 where c IS NOT NULL;
|
|
|
|
insert into t2 values(2,3,19,'abc');
|
|
|
|
select * from t2 order by pk;
|
2004-08-13 13:51:18 +02:00
|
|
|
|
2004-08-31 10:19:10 +02:00
|
|
|
drop table t1, t2;
|
2004-08-13 13:51:18 +02:00
|
|
|
|
2004-04-29 09:58:38 +02:00
|
|
|
#
|
|
|
|
# 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 '',
|
2004-08-13 13:51:18 +02:00
|
|
|
PRIMARY KEY (cid),
|
|
|
|
UNIQUE KEY (cid, cap)
|
2004-04-29 09:58:38 +02:00
|
|
|
) engine=ndbcluster;
|
2004-08-13 13:51:18 +02:00
|
|
|
INSERT INTO t2 VALUES (NULL,'another dummy');
|
2004-04-29 09:58:38 +02:00
|
|
|
CREATE TABLE t3 (
|
|
|
|
gid bigint(20) unsigned NOT NULL auto_increment,
|
|
|
|
gn varchar(255) NOT NULL default '',
|
|
|
|
must tinyint(4) default NULL,
|
2004-05-11 10:40:48 +02:00
|
|
|
PRIMARY KEY (gid)
|
2004-04-29 09:58:38 +02:00
|
|
|
) 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,
|
2005-04-01 14:04:50 +02:00
|
|
|
rid bigint(20) unsigned NOT NULL,
|
|
|
|
cid bigint(20) unsigned NOT NULL,
|
2004-05-11 10:40:48 +02:00
|
|
|
UNIQUE KEY m (uid,gid,rid,cid)
|
2004-04-29 09:58:38 +02:00
|
|
|
) 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 '',
|
2004-05-11 10:40:48 +02:00
|
|
|
PRIMARY KEY (rid)
|
2004-04-29 09:58:38 +02:00
|
|
|
) 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),
|
2004-05-11 10:40:48 +02:00
|
|
|
UNIQUE KEY nc (un,uc)
|
2004-04-29 09:58:38 +02:00
|
|
|
) 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,
|
2005-04-01 14:04:50 +02:00
|
|
|
rid bigint(20) unsigned NOT NULL,
|
|
|
|
cid bigint(20) unsigned NOT NULL,
|
2004-05-11 10:40:48 +02:00
|
|
|
UNIQUE KEY m (uid,gid,rid,cid)
|
2004-04-29 09:58:38 +02:00
|
|
|
) 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';
|
2004-08-13 13:51:18 +02:00
|
|
|
select * from t2 where cap = 'another dummy';
|
2004-04-29 09:58:38 +02:00
|
|
|
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;
|
|
|
|
|
2004-11-30 07:41:26 +01:00
|
|
|
# test null in indexes
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
a int unsigned NOT NULL PRIMARY KEY,
|
|
|
|
b int unsigned,
|
|
|
|
c int unsigned,
|
|
|
|
UNIQUE bc(b,c) ) engine = ndb;
|
|
|
|
|
|
|
|
insert into t1 values(1,1,1),(2,NULL,2),(3,NULL,NULL),(4,4,NULL);
|
|
|
|
select * from t1 where b=1 and c=1;
|
|
|
|
select * from t1 where b is null and c is null;
|
|
|
|
select * from t1 where b is null and c = 2;
|
|
|
|
select * from t1 where b = 4 and c is null;
|
|
|
|
create table t8 as
|
|
|
|
select * from t1 where (b = 1 and c = 1)
|
|
|
|
or (b is null and c is null)
|
|
|
|
or (b is null and c = 2)
|
|
|
|
or (b = 4 and c is null);
|
|
|
|
select * from t8 order by a;
|
|
|
|
select * from t1 order by a;
|
|
|
|
drop table t1, t8;
|
2004-04-29 09:58:38 +02:00
|
|
|
|
2005-01-26 11:31:46 +01:00
|
|
|
###############################
|
|
|
|
# Bug 8101
|
|
|
|
#
|
|
|
|
# Unique index not specified in the same order as in table
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1(
|
|
|
|
id integer not null auto_increment,
|
|
|
|
month integer not null,
|
|
|
|
year integer not null,
|
|
|
|
code varchar( 2) not null,
|
|
|
|
primary key ( id),
|
|
|
|
unique idx_t1( month, code, year)
|
|
|
|
) engine=ndb;
|
|
|
|
|
|
|
|
INSERT INTO t1 (month, year, code) VALUES (4,2004,'12');
|
|
|
|
INSERT INTO t1 (month, year, code) VALUES (5,2004,'12');
|
|
|
|
|
|
|
|
select * from t1 where code = '12' and month = 4 and year = 2004 ;
|
|
|
|
|
|
|
|
drop table t1;
|
2005-07-28 02:22:47 +02:00
|
|
|
|
2006-02-07 19:57:31 +01:00
|
|
|
# bug#15918 Unique Key Limit in NDB Engine
|
|
|
|
|
|
|
|
create table t1 (a int primary key, b varchar(1000) not null, unique key (b))
|
|
|
|
engine=ndb charset=utf8;
|
|
|
|
|
|
|
|
insert into t1 values (1, repeat(_utf8 0xe288ab6474, 200));
|
|
|
|
--error 1062
|
|
|
|
insert into t1 values (2, repeat(_utf8 0xe288ab6474, 200));
|
|
|
|
select a, sha1(b) from t1;
|
|
|
|
|
|
|
|
# perl -e 'print pack("H2000","e288ab6474"x200)' | sha1sum
|
|
|
|
|
|
|
|
drop table t1;
|
|
|
|
|
2005-07-28 02:22:47 +02:00
|
|
|
# End of 4.1 tests
|