# LogicTest: local local-opt local-parallel-stmts fakedist fakedist-opt fakedist-metadata

statement ok
CREATE TABLE abcd (
  a INT PRIMARY KEY,
  b INT,
  c INT,
  d INT,
  INDEX b (b),
  INDEX cd (c,d),
  UNIQUE INDEX bcd (b,c,d)
)

statement ok
INSERT INTO abcd VALUES (10, 11, 12, 13), (20, 21, 22, 23), (30, 31, 32, 33), (40, 41, 42, 43)

# No hint
query IIII rowsort
SELECT * FROM abcd WHERE a >= 20 AND a <= 30
----
20 21 22 23
30 31 32 33

# Force primary
query IIII rowsort
SELECT * FROM abcd@primary WHERE a >= 20 AND a <= 30
----
20 21 22 23
30 31 32 33

# Force primary, reverse scan.
query IIII rowsort
SELECT * FROM abcd@{FORCE_INDEX=primary,DESC} WHERE a >= 20 AND a <= 30
----
20 21 22 23
30 31 32 33

# Force index b
query IIII rowsort
SELECT * FROM abcd@b WHERE a >= 20 AND a <= 30
----
20 21 22 23
30 31 32 33

# Force index b, reverse scan.
query IIII rowsort
SELECT * FROM abcd@{FORCE_INDEX=b,DESC} WHERE a >= 20 AND a <= 30
----
20 21 22 23
30 31 32 33

# Force index cd
query IIII rowsort
SELECT * FROM abcd@cd WHERE a >= 20 AND a <= 30
----
20 21 22 23
30 31 32 33

# Force index bcd
query IIII rowsort
SELECT * FROM abcd@bcd WHERE a >= 20 AND a <= 30
----
20 21 22 23
30 31 32 33

# Force index b (covering)
query I rowsort
SELECT b FROM abcd@b WHERE a >= 20 AND a <= 30
----
21
31

# Force index b (non-covering due to WHERE clause)
query I rowsort
SELECT b FROM abcd@b WHERE c >= 20 AND c <= 30
----
21

# No hint, should be using index cd
query II rowsort
SELECT c, d FROM abcd WHERE c >= 20 AND c < 40
----
22 23
32 33

# Force primary index
query II rowsort
SELECT c, d FROM abcd@primary WHERE c >= 20 AND c < 40
----
22 23
32 33

# Force index b
query II rowsort
SELECT c, d FROM abcd@b WHERE c >= 20 AND c < 40
----
22 23
32 33

query error index \"badidx\" not found
SELECT * FROM abcd@badidx

query error index \"badidx\" not found
SELECT * FROM abcd@{FORCE_INDEX=badidx}
