# LogicTest: local-opt

statement ok
CREATE TABLE kv (
  k INT PRIMARY KEY,
  v INT,
  UNIQUE INDEX foo (v),
  INDEX bar (k, v)
)

statement ok
CREATE TABLE unindexed (
  k INT PRIMARY KEY,
  v INT
)

statement ok
CREATE TABLE indexed (id int primary key, value int, other int, index (value))

statement count 4
INSERT INTO kv VALUES (1, 2), (3, 4), (5, 6), (7, 8)

statement count 2
DELETE FROM kv WHERE k=3 OR v=6

query II
DELETE FROM kv RETURNING k, v
----
1 2
7 8

statement ok
SET tracing = on,kv,results; SELECT * FROM kv; SET tracing = off

query T
SELECT message FROM [SHOW KV TRACE FOR SESSION]
 WHERE message LIKE 'fetched:%' OR message LIKE 'output row%'
----

statement ok
SET tracing = on,kv,results; SELECT * FROM kv@foo; SET tracing = off

query T
SELECT message FROM [SHOW KV TRACE FOR SESSION]
 WHERE message LIKE 'fetched:%' OR message LIKE 'output row%'
----

statement ok
SET tracing = on,kv,results; SELECT * FROM kv@bar; SET tracing = off

query T
SELECT message FROM [SHOW KV TRACE FOR SESSION]
 WHERE message LIKE 'fetched:%' OR message LIKE 'output row%'
----

# Check that EXPLAIN does not destroy data (#6613)
query TTT colnames
EXPLAIN DELETE FROM unindexed
----
tree                 field  description
count                ·      ·
 └── delete          ·      ·
      │              from   unindexed
      └── render     ·      ·
           └── scan  ·      ·
·                    table  unindexed@primary
·                    spans  ALL

query TTT
EXPLAIN DELETE FROM unindexed WHERE v = 7 ORDER BY v
----
count                ·       ·
 └── delete          ·       ·
      │              from    unindexed
      └── nosort     ·       ·
           │         order   +v
           └── scan  ·       ·
·                    table   unindexed@primary
·                    spans   ALL
·                    filter  v = 7

# Check DELETE with LIMIT clause (MySQL extension)
query TTT
EXPLAIN DELETE FROM unindexed WHERE v = 5 LIMIT 10
----
count                     ·       ·
 └── delete               ·       ·
      │                   from    unindexed
      └── limit           ·       ·
           │              count   10
           └── render     ·       ·
                └── scan  ·       ·
·                         table   unindexed@primary
·                         spans   ALL
·                         filter  v = 5

query TTT
EXPLAIN DELETE FROM indexed WHERE value = 5 LIMIT 10
----
count                     ·      ·
 └── delete               ·      ·
      │                   from   indexed
      └── limit           ·      ·
           │              count  10
           └── render     ·      ·
                └── scan  ·      ·
·                         table  indexed@indexed_value_idx
·                         spans  /5-/6
·                         limit  10

query TTT
EXPLAIN DELETE FROM indexed LIMIT 10
----
count                     ·      ·
 └── delete               ·      ·
      │                   from   indexed
      └── limit           ·      ·
           │              count  10
           └── render     ·      ·
                └── scan  ·      ·
·                         table  indexed@primary
·                         spans  ALL
·                         limit  10

query TTT
EXPLAIN DELETE FROM indexed WHERE value = 5 LIMIT 10 RETURNING id
----
render                          ·      ·
 └── run                        ·      ·
      └── delete                ·      ·
           │                    from   indexed
           └── limit            ·      ·
                │               count  10
                └── index-join  ·      ·
                     ├── scan   ·      ·
                     │          table  indexed@indexed_value_idx
                     │          spans  /5-/6
                     │          limit  10
                     └── scan   ·      ·
·                               table  indexed@primary
