Loading mysql-test/r/ndb_index_unique.result +50 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,28 @@ insert into t1 values(7,8,3); select * from t1 where b = 4 order by a; a b c 3 4 6 insert into t1 values(8, 2, 3); ERROR 23000: Can't write, because of unique constraint, to table 't1' select * from t1 order by a; a b c 1 2 3 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 delete from t1 where a = 1; insert into t1 values(8, 2, 3); select * from t1 order by a; a b c 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 8 2 3 drop table t1; CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, Loading @@ -42,6 +64,28 @@ insert into t2 values(7,8,3); select * from t2 where b = 4 order by a; a b c 3 4 6 insert into t2 values(8, 2, 3); ERROR 23000: Can't write, because of unique constraint, to table 't2' select * from t2 order by a; a b c 1 2 3 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 delete from t2 where a = 1; insert into t2 values(8, 2, 3); select * from t2 order by a; a b c 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 8 2 3 drop table t2; CREATE TABLE t3 ( a int unsigned NOT NULL, Loading Loading @@ -74,8 +118,10 @@ 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) PRIMARY KEY (cid), UNIQUE KEY (cid, cap) ) engine=ndbcluster; INSERT INTO t2 VALUES (NULL,'another dummy'); CREATE TABLE t3 ( gid bigint(20) unsigned NOT NULL auto_increment, gn varchar(255) NOT NULL default '', Loading Loading @@ -132,6 +178,9 @@ cid cv 8 dummy select * from t1 where cv = 'test'; cid cv select * from t2 where cap = 'another dummy'; cid cap 0 another dummy select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4; uid gid rid cid 1 1 2 4 Loading mysql-test/t/ndb_index_ordered.test +20 −0 Original line number Diff line number Diff line Loading @@ -114,3 +114,23 @@ select * from t1 where b=4 and c<=5 order by a; 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; # # Indexing NULL values # #CREATE TABLE t1 ( # a int unsigned NOT NULL PRIMARY KEY, # b int unsigned, # c int unsigned, # KEY 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); #select count(*) from t1 use index (bc); #select count(*) from t1 use index (PRIMARY) where b IS NULL; #select count(*) from t1 use index (bc) where b IS NULL; #select count(*) from t1 use index (bc) where b IS NULL and c = 2; #select count(*) from t1 use index (bc) where b IS NOT NULL; #drop table t1; mysql-test/t/ndb_index_unique.test +60 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,13 @@ 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; -- error 1169 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; drop table t1; Loading @@ -42,6 +49,13 @@ select * from t2 where c = 6; insert into t2 values(7,8,3); select * from t2 where b = 4 order by a; -- error 1169 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; drop table t2; # Loading @@ -64,6 +78,48 @@ select * from t3 where b = 4 order by a; drop table t3; # # Indexes on NULL-able columns # #CREATE TABLE t1 ( # pk int NOT NULL PRIMARY KEY, # a int unsigned, # UNIQUE KEY (a) #) engine=ndbcluster; #insert into t1 values (-1,NULL), (0,0), (1,NULL),(2,2),(3,NULL),(4,4); #select * from t1 order by pk; #--error 1169 #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; #--error 1169 #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; #drop table t1, t2; # # More complex tables # Loading @@ -78,8 +134,10 @@ 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) PRIMARY KEY (cid), UNIQUE KEY (cid, cap) ) engine=ndbcluster; INSERT INTO t2 VALUES (NULL,'another dummy'); CREATE TABLE t3 ( gid bigint(20) unsigned NOT NULL auto_increment, gn varchar(255) NOT NULL default '', Loading Loading @@ -134,6 +192,7 @@ INSERT INTO t7 VALUES(10, 5, 1, 1, 10); select * from t1 where cv = 'dummy'; select * from t1 where cv = 'test'; select * from t2 where cap = 'another dummy'; 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; Loading ndb/src/kernel/blocks/dbdict/Dbdict.cpp +0 −10 Original line number Diff line number Diff line Loading @@ -6255,16 +6255,6 @@ Dbdict::createIndex_toCreateTable(Signal* signal, OpCreateIndexPtr opPtr) jam(); found = true; const Uint32 a = aRec->attributeDescriptor; bool isNullable = AttributeDescriptor::getNullable(a); // We do not allow more than one NULLable attribute for hash index if (isNullable && indexPtr.p->isHashIndex() && (opPtr.p->m_attrList.sz > 1)) { jam(); opPtr.p->m_errorCode = CreateIndxRef::AttributeNullable; opPtr.p->m_errorLine = __LINE__; return; } if (indexPtr.p->isHashIndex()) { const Uint32 s1 = AttributeDescriptor::getSize(a); const Uint32 s2 = AttributeDescriptor::getArraySize(a); Loading ndb/src/kernel/blocks/dbtc/Dbtc.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,7 @@ #define ZNOT_FOUND 626 #define ZALREADYEXIST 630 #define ZINCONSISTENTHASHINDEX 892 #define ZNOTUNIQUE 893 #endif class Dbtc: public SimulatedBlock { Loading Loading
mysql-test/r/ndb_index_unique.result +50 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,28 @@ insert into t1 values(7,8,3); select * from t1 where b = 4 order by a; a b c 3 4 6 insert into t1 values(8, 2, 3); ERROR 23000: Can't write, because of unique constraint, to table 't1' select * from t1 order by a; a b c 1 2 3 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 delete from t1 where a = 1; insert into t1 values(8, 2, 3); select * from t1 order by a; a b c 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 8 2 3 drop table t1; CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, Loading @@ -42,6 +64,28 @@ insert into t2 values(7,8,3); select * from t2 where b = 4 order by a; a b c 3 4 6 insert into t2 values(8, 2, 3); ERROR 23000: Can't write, because of unique constraint, to table 't2' select * from t2 order by a; a b c 1 2 3 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 delete from t2 where a = 1; insert into t2 values(8, 2, 3); select * from t2 order by a; a b c 2 3 5 3 4 6 4 5 8 5 6 2 6 7 2 7 8 3 8 2 3 drop table t2; CREATE TABLE t3 ( a int unsigned NOT NULL, Loading Loading @@ -74,8 +118,10 @@ 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) PRIMARY KEY (cid), UNIQUE KEY (cid, cap) ) engine=ndbcluster; INSERT INTO t2 VALUES (NULL,'another dummy'); CREATE TABLE t3 ( gid bigint(20) unsigned NOT NULL auto_increment, gn varchar(255) NOT NULL default '', Loading Loading @@ -132,6 +178,9 @@ cid cv 8 dummy select * from t1 where cv = 'test'; cid cv select * from t2 where cap = 'another dummy'; cid cap 0 another dummy select * from t4 where uid = 1 and gid=1 and rid=2 and cid=4; uid gid rid cid 1 1 2 4 Loading
mysql-test/t/ndb_index_ordered.test +20 −0 Original line number Diff line number Diff line Loading @@ -114,3 +114,23 @@ select * from t1 where b=4 and c<=5 order by a; 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; # # Indexing NULL values # #CREATE TABLE t1 ( # a int unsigned NOT NULL PRIMARY KEY, # b int unsigned, # c int unsigned, # KEY 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); #select count(*) from t1 use index (bc); #select count(*) from t1 use index (PRIMARY) where b IS NULL; #select count(*) from t1 use index (bc) where b IS NULL; #select count(*) from t1 use index (bc) where b IS NULL and c = 2; #select count(*) from t1 use index (bc) where b IS NOT NULL; #drop table t1;
mysql-test/t/ndb_index_unique.test +60 −1 Original line number Diff line number Diff line Loading @@ -21,6 +21,13 @@ 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; -- error 1169 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; drop table t1; Loading @@ -42,6 +49,13 @@ select * from t2 where c = 6; insert into t2 values(7,8,3); select * from t2 where b = 4 order by a; -- error 1169 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; drop table t2; # Loading @@ -64,6 +78,48 @@ select * from t3 where b = 4 order by a; drop table t3; # # Indexes on NULL-able columns # #CREATE TABLE t1 ( # pk int NOT NULL PRIMARY KEY, # a int unsigned, # UNIQUE KEY (a) #) engine=ndbcluster; #insert into t1 values (-1,NULL), (0,0), (1,NULL),(2,2),(3,NULL),(4,4); #select * from t1 order by pk; #--error 1169 #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; #--error 1169 #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; #drop table t1, t2; # # More complex tables # Loading @@ -78,8 +134,10 @@ 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) PRIMARY KEY (cid), UNIQUE KEY (cid, cap) ) engine=ndbcluster; INSERT INTO t2 VALUES (NULL,'another dummy'); CREATE TABLE t3 ( gid bigint(20) unsigned NOT NULL auto_increment, gn varchar(255) NOT NULL default '', Loading Loading @@ -134,6 +192,7 @@ INSERT INTO t7 VALUES(10, 5, 1, 1, 10); select * from t1 where cv = 'dummy'; select * from t1 where cv = 'test'; select * from t2 where cap = 'another dummy'; 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; Loading
ndb/src/kernel/blocks/dbdict/Dbdict.cpp +0 −10 Original line number Diff line number Diff line Loading @@ -6255,16 +6255,6 @@ Dbdict::createIndex_toCreateTable(Signal* signal, OpCreateIndexPtr opPtr) jam(); found = true; const Uint32 a = aRec->attributeDescriptor; bool isNullable = AttributeDescriptor::getNullable(a); // We do not allow more than one NULLable attribute for hash index if (isNullable && indexPtr.p->isHashIndex() && (opPtr.p->m_attrList.sz > 1)) { jam(); opPtr.p->m_errorCode = CreateIndxRef::AttributeNullable; opPtr.p->m_errorLine = __LINE__; return; } if (indexPtr.p->isHashIndex()) { const Uint32 s1 = AttributeDescriptor::getSize(a); const Uint32 s2 = AttributeDescriptor::getArraySize(a); Loading
ndb/src/kernel/blocks/dbtc/Dbtc.hpp +1 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,7 @@ #define ZNOT_FOUND 626 #define ZALREADYEXIST 630 #define ZINCONSISTENTHASHINDEX 892 #define ZNOTUNIQUE 893 #endif class Dbtc: public SimulatedBlock { Loading