# LogicTest: default parallel-stmts distsql

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

query ITTT
EXPLAIN SELECT * FROM abcd WHERE a >= 20 AND a <= 30
----
0  scan
0        table  abcd@primary
0        spans  /20-/31

# Force primary

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

query ITTT
EXPLAIN SELECT * FROM abcd@primary WHERE a >= 20 AND a <= 30
----
0  scan
0        table  abcd@primary
0        spans  /20-/31

# Force index b

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

query ITTT
EXPLAIN SELECT * FROM abcd@b WHERE a >= 20 AND a <= 30
----
0  index-join
1  scan
1              table  abcd@b
1              spans  ALL
1  scan
1              table  abcd@primary

# Force index cd

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

query ITTT
EXPLAIN SELECT * FROM abcd@cd WHERE a >= 20 AND a <= 30
----
0  index-join
1  scan
1              table  abcd@cd
1              spans  ALL
1  scan
1              table  abcd@primary

# Force index bcd

query ITTT
EXPLAIN SELECT * FROM abcd@bcd WHERE a >= 20 AND a <= 30
----
0  scan
0        table  abcd@bcd
0        spans  ALL

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 ITTT
EXPLAIN SELECT b FROM abcd@b WHERE a >= 20 AND a <= 30
----
0  render
1  scan
1        table  abcd@b
1        spans  ALL

# Force index b (non-covering due to WHERE clause)

query ITTT
EXPLAIN SELECT b FROM abcd@b WHERE c >= 20 AND c <= 30
----
0  render
1  index-join
2  scan
2              table  abcd@b
2              spans  ALL
2  scan
2              table  abcd@primary

# 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

query ITTT
EXPLAIN SELECT c, d FROM abcd WHERE c >= 20 AND c < 40
----
0  render
1  scan
1        table  abcd@cd
1        spans  /20-/40

# Force no index

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

query ITTT
EXPLAIN SELECT c, d FROM abcd@primary WHERE c >= 20 AND c < 40
----
0  render
1  scan
1        table  abcd@primary
1        spans  ALL

# Force index b

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

query ITTT
EXPLAIN SELECT c, d FROM abcd@b WHERE c >= 20 AND c < 40
----
0  render
1  index-join
2  scan
2              table  abcd@b
2              spans  ALL
2  scan
2              table  abcd@primary

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

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

query ITTT
EXPLAIN SELECT * FROM abcd@{FORCE_INDEX=b} WHERE a >= 20 AND a <= 30
----
0  index-join
1  scan
1              table  abcd@b
1              spans  ALL
1  scan
1              table  abcd@primary

query ITTT
EXPLAIN SELECT b, c, d FROM abcd WHERE c = 10
----
0  render
1  index-join
2  scan
2              table  abcd@cd
2              spans  /10-/11
2  scan
2              table  abcd@primary

query ITTT
EXPLAIN SELECT b, c, d FROM abcd@{NO_INDEX_JOIN} WHERE c = 10
----
0  render
1  scan
1        table  abcd@bcd
1        hint   no index join
1        spans  ALL

query ITTT
EXPLAIN SELECT b, c, d FROM abcd@{FORCE_INDEX=bcd,NO_INDEX_JOIN} WHERE c = 10
----
0  render
1  scan
1        table  abcd@bcd
1        hint   no index join
1        spans  ALL

query ITTT
EXPLAIN SELECT b, c, d FROM abcd@{FORCE_INDEX=primary,NO_INDEX_JOIN} WHERE c = 10
----
0  render
1  scan
1        table  abcd@primary
1        hint   no index join
1        spans  ALL

query error index \"cd\" is not covering and NO_INDEX_JOIN was specified
EXPLAIN SELECT b, c, d FROM abcd@{FORCE_INDEX=cd,NO_INDEX_JOIN} WHERE c = 10
