From a90335e912430dd406e37fae3e570e5f6b79e5dc Mon Sep 17 00:00:00 2001 From: "tomas@poseidon.ndb.mysql.com" <> Date: Thu, 25 Nov 2004 18:12:05 +0000 Subject: [PATCH] sql/ha_ndbcluster.cc added missing DBUG_RETURN's mysql-test/r/ndb_read_multi_range.result@1.0 BitKeeper file /home/tomas/wl2126/mysql-test/r/ndb_read_multi_range.result mysql-test/r/ndb_read_multi_range.result@1.1 (NO COMMENTS AVAILABLE) mysql-test/t/ndb_read_multi_range.test@1.0 BitKeeper file /home/tomas/wl2126/mysql-test/t/ndb_read_multi_range.test mysql-test/t/ndb_read_multi_range.test@1.1 (NO COMMENTS AVAILABLE) --- mysql-test/r/ndb_read_multi_range.result | 168 +++++++++++++++++++++++ mysql-test/t/ndb_read_multi_range.test | 152 ++++++++++++++++++++ sql/ha_ndbcluster.cc | 32 ++--- 3 files changed, 336 insertions(+), 16 deletions(-) create mode 100644 mysql-test/r/ndb_read_multi_range.result create mode 100644 mysql-test/t/ndb_read_multi_range.test diff --git a/mysql-test/r/ndb_read_multi_range.result b/mysql-test/r/ndb_read_multi_range.result new file mode 100644 index 00000000000..23220912188 --- /dev/null +++ b/mysql-test/r/ndb_read_multi_range.result @@ -0,0 +1,168 @@ +DROP TABLE IF EXISTS t1, r1; +create table t1 ( +a int primary key, +b int not null, +c int not null, +index(b), unique index using hash(c) +) engine = ndb; +insert into t1 values +(1,2,1),(2,3,2),(3,4,3),(4,5,4), +(5,2,12),(6,3,11),(7,4,10),(8,5,9), +(9,2,8),(10,3,7),(11,4,6),(12,5,5); +create table r1 as select * from t1 where a in (2,8,12); +select * from r1 order by a; +a b c +2 3 2 +8 5 9 +12 5 5 +drop table r1; +create table r1 as select * from t1 where b in (1,2,5); +select * from r1 order by a; +a b c +1 2 1 +4 5 4 +5 2 12 +8 5 9 +9 2 8 +12 5 5 +drop table r1; +create table r1 as select * from t1 where c in (2,8,12); +select * from r1 order by a; +a b c +2 3 2 +5 2 12 +9 2 8 +drop table r1; +create table r1 as select * from t1 where a in (33,8,12); +select * from r1 order by a; +a b c +8 5 9 +12 5 5 +drop table r1; +select * from t1 where a in (33,34,35) order by a; +a b c +select * from t1 where a in (33,8,12) order by a; +a b c +8 5 9 +12 5 5 +create table r1 as select * from t1 where a in (2,33,8,12,34); +select * from r1 order by a; +a b c +2 3 2 +8 5 9 +12 5 5 +drop table r1; +create table r1 as select * from t1 where b in (1,33,5); +select * from r1 order by a; +a b c +4 5 4 +8 5 9 +12 5 5 +drop table r1; +select * from t1 where b in (1,33,5) order by a; +a b c +4 5 4 +8 5 9 +12 5 5 +create table r1 as select * from t1 where b in (45,1,33,5,44); +select * from r1 order by a; +a b c +4 5 4 +8 5 9 +12 5 5 +drop table r1; +select * from t1 where b in (45,22) order by a; +a b c +drop table t1; +create table t1 ( +a int not null, +b int not null, +c int not null, +d int not null, +e int not null, +primary key (a,b,c,d), index (d) +) engine = ndb; +insert into t1 values +(1,2,1,1,1),(2,3,2,3,1),(3,4,3,1,1),(4,5,4,7,1), +(5,2,12,12,1),(6,3,11,1,1),(7,4,10,3,1),(8,5,9,5,1), +(9,2,8,6,1),(10,3,7,5,1),(11,4,6,3,1),(12,5,5,2,1), +(1,2,1,2,1), +(1,2,1,3,1), +(1,2,1,4,1), +(1,2,1,5,1); +create table r1 as select * from t1 +where a=1 and b=2 and c=1 and d in (1,4,3,2); +select * from r1 order by a,b,c,d; +a b c d e +1 2 1 1 1 +1 2 1 2 1 +1 2 1 3 1 +1 2 1 4 1 +drop table r1; +update t1 set e = 100 +where d in (12,6,7); +select * from t1 where d in (12,6,7) order by a,b,c,d; +a b c d e +4 5 4 7 100 +5 2 12 12 100 +9 2 8 6 100 +select * from t1 where d not in (12,6,7) and e = 100; +a b c d e +update t1 +set e = 101 +where a=1 and +b=2 and +c=1 and +d in (1,4,3,2); +select * +from t1 +where a=1 and b=2 and c=1 and d in (1,4,3,2) +order by a,b,c,d; +a b c d e +1 2 1 1 101 +1 2 1 2 101 +1 2 1 3 101 +1 2 1 4 101 +select * +from t1 +where not (a=1 and b=2 and c=1 and d in (1,4,3,2)) +and e=101; +a b c d e +update t1 +set e = +(case d +when 12 then 112 +when 6 then 106 +when 7 then 107 +end) +where d in (12,6,7); +select * from t1 where d in (12,6,7) order by a,b,c,d; +a b c d e +4 5 4 7 107 +5 2 12 12 112 +9 2 8 6 106 +update t1 +set e = +(case d +when 1 then 111 +when 4 then 444 +when 3 then 333 +when 2 then 222 +end) +where a=1 and +b=2 and +c=1 and +d in (1,4,3,2); +select * +from t1 +where a=1 and b=2 and c=1 and d in (1,4,3,2) +order by a,b,c,d; +a b c d e +1 2 1 1 111 +1 2 1 2 222 +1 2 1 3 333 +1 2 1 4 444 +delete from t1 where d in (12,6,7); +select * from t1 where d in (12,6,7); +a b c d e +drop table t1; diff --git a/mysql-test/t/ndb_read_multi_range.test b/mysql-test/t/ndb_read_multi_range.test new file mode 100644 index 00000000000..97bb8827907 --- /dev/null +++ b/mysql-test/t/ndb_read_multi_range.test @@ -0,0 +1,152 @@ +-- source include/have_ndb.inc + +--disable_warnings +DROP TABLE IF EXISTS t1, r1; +--enable_warnings + +# +# Basic test to see that batching is working +# + +create table t1 ( + a int primary key, + b int not null, + c int not null, + index(b), unique index using hash(c) +) engine = ndb; +insert into t1 values + (1,2,1),(2,3,2),(3,4,3),(4,5,4), + (5,2,12),(6,3,11),(7,4,10),(8,5,9), + (9,2,8),(10,3,7),(11,4,6),(12,5,5); + +# batch on primary key +create table r1 as select * from t1 where a in (2,8,12); +select * from r1 order by a; +drop table r1; + +# batch on ordered index +create table r1 as select * from t1 where b in (1,2,5); +select * from r1 order by a; +drop table r1; + +# batch on unique hash index +create table r1 as select * from t1 where c in (2,8,12); +select * from r1 order by a; +drop table r1; + +# batch on primary key, missing values +create table r1 as select * from t1 where a in (33,8,12); +select * from r1 order by a; +drop table r1; +select * from t1 where a in (33,34,35) order by a; +select * from t1 where a in (33,8,12) order by a; +create table r1 as select * from t1 where a in (2,33,8,12,34); +select * from r1 order by a; +drop table r1; + +# batch on ordered index, missing values +create table r1 as select * from t1 where b in (1,33,5); +select * from r1 order by a; +drop table r1; +select * from t1 where b in (1,33,5) order by a; +create table r1 as select * from t1 where b in (45,1,33,5,44); +select * from r1 order by a; +drop table r1; +select * from t1 where b in (45,22) order by a; + +# current bug in ndb, cannot handle missing values for unique indexes +# batch on unique hash index, missing values +#create table r1 as select * from t1 where c in (2,8,33); +#select * from r1 order by a; +#drop table r1; +#create table r1 as select * from t1 where c in (13,2,8,33,12); +#select * from r1 order by a; +#drop table r1; + +drop table t1; + +# +# Somewhat more complicated +# + +create table t1 ( + a int not null, + b int not null, + c int not null, + d int not null, + e int not null, + primary key (a,b,c,d), index (d) +) engine = ndb; + +insert into t1 values + (1,2,1,1,1),(2,3,2,3,1),(3,4,3,1,1),(4,5,4,7,1), + (5,2,12,12,1),(6,3,11,1,1),(7,4,10,3,1),(8,5,9,5,1), + (9,2,8,6,1),(10,3,7,5,1),(11,4,6,3,1),(12,5,5,2,1), + (1,2,1,2,1), + (1,2,1,3,1), + (1,2,1,4,1), + (1,2,1,5,1); + +# batch on primary key +create table r1 as select * from t1 + where a=1 and b=2 and c=1 and d in (1,4,3,2); +select * from r1 order by a,b,c,d; +drop table r1; + +# batched update ordered index, one value for all +update t1 set e = 100 + where d in (12,6,7); +select * from t1 where d in (12,6,7) order by a,b,c,d; +select * from t1 where d not in (12,6,7) and e = 100; + +# batched update primary key, one value for all +update t1 + set e = 101 + where a=1 and + b=2 and + c=1 and + d in (1,4,3,2); +select * + from t1 + where a=1 and b=2 and c=1 and d in (1,4,3,2) + order by a,b,c,d; +select * + from t1 + where not (a=1 and b=2 and c=1 and d in (1,4,3,2)) + and e=101; + + +# batched update ordered index, different values +update t1 + set e = + (case d + when 12 then 112 + when 6 then 106 + when 7 then 107 + end) + where d in (12,6,7); +select * from t1 where d in (12,6,7) order by a,b,c,d; + +# batched update primary key, different values +update t1 + set e = + (case d + when 1 then 111 + when 4 then 444 + when 3 then 333 + when 2 then 222 + end) + where a=1 and + b=2 and + c=1 and + d in (1,4,3,2); +select * + from t1 + where a=1 and b=2 and c=1 and d in (1,4,3,2) + order by a,b,c,d; + +# batched delete +delete from t1 where d in (12,6,7); +select * from t1 where d in (12,6,7); + +drop table t1; diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 06d6a032daa..f8a4ba8a418 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -4721,11 +4721,11 @@ ha_ndbcluster::read_multi_range_first(key_multi_range **found_range_p, * blobs can't be batched currently */ m_disable_multi_read= true; - return handler::read_multi_range_first(found_range_p, - ranges, - range_count, - sorted, - buffer); + DBUG_RETURN(handler::read_multi_range_first(found_range_p, + ranges, + range_count, + sorted, + buffer)); } switch(index_type){ @@ -4747,21 +4747,21 @@ ha_ndbcluster::read_multi_range_first(key_multi_range **found_range_p, * Mark that we using hander:: implementation */ m_disable_multi_read= true; - return handler::read_multi_range_first(found_range_p, - ranges, - range_count, - sorted, - buffer); + DBUG_RETURN(handler::read_multi_range_first(found_range_p, + ranges, + range_count, + sorted, + buffer)); } break; default: case ORDERED_INDEX: m_disable_multi_read= true; - return handler::read_multi_range_first(found_range_p, - ranges, - range_count, - sorted, - buffer); + DBUG_RETURN(handler::read_multi_range_first(found_range_p, + ranges, + range_count, + sorted, + buffer)); } m_disable_multi_read= false; @@ -4827,7 +4827,7 @@ ha_ndbcluster::read_multi_range_first(key_multi_range **found_range_p, { multi_range_curr= 0; m_multi_range_result_ptr= buffer->buffer; - return read_multi_range_next(); + DBUG_RETURN(read_multi_range_next()); } ERR_RETURN(m_active_trans->getNdbError()); }