--source include/have_rocksdb.inc

#
# Range access test for RocksDB storage engine
#
select * from information_schema.engines where engine = 'rocksdb';

--disable_warnings
drop table if exists t0,t1,t2,t3,t4,t5;
--enable_warnings
create table t0 (a int) engine=myisam;
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

create table t1(a int) engine=myisam;
insert into t1 select A.a + B.a* 10 + C.a * 100 from t0 A, t0 B, t0 C;

create table t2 (
  pk int not null,
  a  int not null,
  b  int not null,
  primary key(pk),
  key(a) comment 'rev:cf1'
) engine=rocksdb;

# 10 pk values for each value of a...
insert into t2 select A.a, FLOOR(A.a/10), A.a from t1 A;

--echo #
--echo # HA_READ_KEY_EXACT tests
--echo #

--echo # Original failure was here:
--replace_column 9 #
explain
select * from t2 force index (a) where a=0;
select * from t2 force index (a) where a=0;

--echo # The rest are for code coverage:
--replace_column 9 #
explain
select * from t2 force index (a) where a=2;
select * from t2 force index (a) where a=2;

--replace_column 9 #
explain 
select * from t2 force index (a) where a=3 and pk=33;
select * from t2 force index (a) where a=3 and pk=33;

select * from t2 force index (a) where a=99 and pk=99;
select * from t2 force index (a) where a=0 and pk=0;
select * from t2 force index (a) where a=-1;
select * from t2 force index (a) where a=-1 and pk in (101,102);
select * from t2 force index (a) where a=100 and pk in (101,102);


--echo #
--echo # #36: Range in form tbl.key >= const doesn't work in reverse column family
--echo #
--replace_column 9 #
explain
select count(*) from t2 force index (a) where a>=0 and a <=1;
select count(*) from t2 force index (a) where a>=0 and a <=1;

--replace_column 9 #
explain
select count(*) from t2 force index (a) where a>=-1 and a <=1;
select count(*) from t2 force index (a) where a>=-1 and a <=1;

--replace_column 9 #
explain
select * from t2 force index (a) where a=0 and pk>=3;
select * from t2 force index (a) where a=0 and pk>=3;

--echo # Try edge cases where we fall over the end of the table
create table t3 like t2;
insert into t3 select * from t2;

select * from t3 where pk>=1000000;
select * from t2 where pk>=1000000;

--echo #
--echo # #42: Range in form tbl.key > const doesn't work in reverse column family
--echo #
--replace_column 9 #
explain
select count(*) from t2 force index (a) where a>0;
select count(*) from t2 force index (a) where a>0;

--replace_column 9 #
explain
select count(*) from t2 force index (a) where a>99;
select count(*) from t2 force index (a) where a>99;

select * from t2 where pk>1000000;
select * from t3 where pk>1000000;

--replace_column 9 #
explain
select count(*) from t2 force index (a) where a=2 and pk>25;
select count(*) from t2 force index (a) where a=2 and pk>25;


select * from t2 force index (a) where a>-10 and a < 1;
select * from t3 force index (a) where a>-10 and a < 1;


--echo # 
--echo # #46: index_read_map(HA_READ_BEFORE_KEY) does not work in reverse column family
--echo #
select max(a) from t2 where a < 2;
select max(a) from t2 where a < -1;

select max(pk) from t2 where a=3 and pk < 6;

select max(pk) from t2 where pk < 200000;
select max(pk) from t2 where pk < 20;

select max(a) from t3 where a < 2;
select max(a) from t3 where a < -1;
select max(pk) from t3 where pk < 200000;
select max(pk) from t3 where pk < 20;

select max(pk) from t2 where a=3 and pk < 33;
select max(pk) from t3 where a=3 and pk < 33;

--echo #
--echo # #48: index_read_map(HA_READ_PREFIX_LAST) does not work in reverse CF
--echo #

--echo # Tests for search_flag=HA_READ_PREFIX_LAST_OR_PREV
--echo # Note: the next explain has "Using index condition" in fb/mysql-5.6
--echo #       but "Using where" in MariaDB because the latter does not 
--echo #       support ICP over reverse scans.
--replace_column 9 #
explain
select * from t2 where a between 99 and 2000 order by a desc;
select * from t2 where a between 99 and 2000 order by a desc;

select max(a) from t2 where a <=10;
select max(a) from t2 where a <=-4;

select max(pk) from t2 where a=5 and pk <=55;
select max(pk) from t2 where a=5 and pk <=55555;
select max(pk) from t2 where a=5 and pk <=0;

select max(pk) from t2 where pk <=-1;
select max(pk) from t2 where pk <=999999;
select max(pk) from t3 where pk <=-1;
select max(pk) from t3 where pk <=999999;

--echo #
--echo # Tests for search_flag=HA_READ_PREFIX_LAST
--echo #

create table t4 (
  pk int primary key,
  a int, 
  b int,
  c int,
  key(a,b,c)
) engine=rocksdb;

insert into t4 select pk,pk,pk,pk from t2 where pk < 100;

--replace_column 9 #
explain 
select * from t4 where a=1 and b in (1) order by c desc;
select * from t4 where a=1 and b in (1) order by c desc;

--replace_column 9 #
explain 
select * from t4 where a=5 and b in (4) order by c desc;
select * from t4 where a=5 and b in (4) order by c desc;

--echo # HA_READ_PREFIX_LAST for reverse-ordered CF
create table t5 (
  pk int primary key,
  a int, 
  b int,
  c int,
  key(a,b,c) comment 'rev:cf2'
) engine=rocksdb;

insert into t5 select pk,pk,pk,pk from t2 where pk < 100;

--replace_column 9 #
explain 
select * from t5 where a=1 and b in (1) order by c desc;
select * from t5 where a=1 and b in (1) order by c desc;

--replace_column 9 #
explain 
select * from t5 where a=5 and b in (4) order by c desc;
select * from t5 where a=5 and b in (4) order by c desc;

drop table t0,t1,t2,t3,t4,t5;
