# LogicTest: default parallel-stmts distsql

statement ok
CREATE TABLE t (
  a INT PRIMARY KEY,
  b INT,
  c INT,
  d INT,
  INDEX b_idx (b) STORING (c, d),
  UNIQUE INDEX c_idx (c) STORING (a, b, d)
)

query TTBITTBB colnames
SHOW INDEXES FROM t
----
Table  Name     Unique  Seq  Column  Direction  Storing  Implicit
t      primary  true    1    a       ASC        false    false
t      b_idx    false   1    b       ASC        false    false
t      b_idx    false   2    c       N/A        true     false
t      b_idx    false   3    d       N/A        true     false
t      b_idx    false   4    a       ASC        false    true
t      c_idx    true    1    c       ASC        false    false
t      c_idx    true    2    a       N/A        true     false
t      c_idx    true    3    b       N/A        true     false
t      c_idx    true    4    d       N/A        true     false

statement ok
INSERT INTO t VALUES (1, 2, 3, 4)

query ITTT
EXPLAIN (DEBUG) SELECT * FROM t@b_idx
----
0  /t/b_idx/2/1/c/d  /3/4  ROW

query IIII
SELECT a, b, c, d FROM t@b_idx
----
1 2 3 4

query ITTT
EXPLAIN (DEBUG) SELECT * FROM t@c_idx
----
0  /t/c_idx/3  /1/2/4  ROW

query IIII
SELECT a, b, c, d FROM t@c_idx
----
1 2 3 4

# Test index backfill for UNIQUE and non-UNIQUE indexes with STORING columns.

statement ok
CREATE INDEX d_idx ON t (d) STORING (a, b)

query ITTT
EXPLAIN (DEBUG) SELECT a, b, d FROM t@d_idx
----
0  /t/d_idx/4/1/b  /2  ROW

query III
SELECT a, b, d FROM t@d_idx
----
1 2 4

statement error index "error" already contains column "d"
CREATE INDEX error ON t (d) STORING (d)

statement ok
CREATE UNIQUE INDEX a_idx ON t (a) STORING (b)

query ITTT
EXPLAIN (DEBUG) SELECT a, b FROM t@a_idx
----
0  /t/a_idx/1/b  /2  ROW

# Regression test for #14601.

statement ok
CREATE TABLE t14601 (a STRING, b BOOL)

statement ok
CREATE INDEX i14601 ON t14601 (a) STORING (b)

statement ok
INSERT INTO t14601 VALUES
  ('a', FALSE),
  ('b', FALSE),
  ('c', FALSE)

statement ok
DELETE FROM t14601 WHERE a > 'a' AND a < 'c'

query ITTT
EXPLAIN SELECT a FROM t14601 ORDER BY a
----
0  render
1  scan
1          table  t14601@i14601
1          spans  ALL

query T
SELECT a FROM t14601 ORDER BY a
----
a
c

statement ok
DROP INDEX i14601

query T
SELECT a FROM t14601 ORDER BY a
----
a
c

# Updates were broken too.

statement ok
CREATE TABLE t14601a (
  a STRING,
  b BOOL,
  c INT,
  FAMILY f1 (a),
  FAMILY f2 (b),
  FAMILY f3 (c)
)

statement ok
CREATE INDEX i14601a ON t14601a (a) STORING (b, c)

statement ok
INSERT INTO t14601a VALUES
  ('a', FALSE, 1),
  ('b', TRUE, 2),
  ('c', FALSE, 3)

statement ok
UPDATE t14601a SET b = NOT b WHERE a > 'a' AND a < 'c'

query ITTT
EXPLAIN SELECT a, b FROM t14601a ORDER BY a
----
0  render
1  scan
1          table  t14601a@i14601a
1          spans  ALL

query TB
SELECT a, b FROM t14601a ORDER BY a
----
a  false
b  false
c  false

statement ok
DROP INDEX i14601a

query TB
SELECT a, b FROM t14601a ORDER BY a
----
a  false
b  false
c  false

statement ok
DELETE FROM t14601a

statement ok
CREATE UNIQUE INDEX i14601a ON t14601a (a) STORING (b)

statement ok
INSERT INTO t14601a VALUES
  ('a', FALSE),
  ('b', TRUE),
  ('c', FALSE)

statement ok
UPDATE t14601a SET b = NOT b WHERE a > 'a' AND a < 'c'

query ITTT
EXPLAIN SELECT a, b FROM t14601a ORDER BY a
----
0  render
1  scan
1          table  t14601a@i14601a
1          spans  ALL

query TB
SELECT a, b FROM t14601a ORDER BY a
----
a  false
b  false
c  false

statement ok
DROP INDEX i14601a

query TB
SELECT a, b FROM t14601a ORDER BY a
----
a  false
b  false
c  false
