# LogicTest: local

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

query TTT
SELECT tree, field, description FROM [
EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv
]
----
count           ·         ·
 └── insert     ·         ·
      │         into      kv(k, v)
      │         strategy  inserter
      └── scan  ·         ·
·               table     kv@primary
·               spans     ALL

query TTT
SELECT tree, field, description FROM [
EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv ON CONFLICT DO NOTHING
]
----
count           ·         ·
 └── upsert     ·         ·
      │         into      kv(k, v)
      │         strategy  strict upserter
      └── scan  ·         ·
·               table     kv@primary
·               spans     ALL

query TTT
SELECT tree, field, description FROM [
EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv ON CONFLICT(k) DO NOTHING
]
----
count           ·         ·
 └── upsert     ·         ·
      │         into      kv(k, v)
      │         strategy  upserter
      └── scan  ·         ·
·               table     kv@primary
·               spans     ALL

query TTT
SELECT tree, field, description FROM [
EXPLAIN (VERBOSE) INSERT INTO kv TABLE kv ON CONFLICT(k) DO UPDATE SET v = excluded.v + 1
]
----
count           ·         ·
 └── upsert     ·         ·
      │         into      kv(k, v)
      │         strategy  upserter
      │         eval 0    excluded.v + 1
      └── scan  ·         ·
·               table     kv@primary
·               spans     ALL

query TTT
SELECT tree, field, description FROM [
EXPLAIN (VERBOSE) UPSERT INTO kv TABLE kv
]
----
count           ·         ·
 └── upsert     ·         ·
      │         into      kv(k, v)
      │         strategy  fast upserter
      └── scan  ·         ·
·               table     kv@primary
·               spans     ALL

statement ok
CREATE UNIQUE INDEX ON kv(v)

query TTT
SELECT tree, field, description FROM [
EXPLAIN (VERBOSE) UPSERT INTO kv TABLE kv
]
----
count           ·         ·
 └── upsert     ·         ·
      │         into      kv(k, v)
      │         strategy  upserter
      │         eval 0    excluded.v
      └── scan  ·         ·
·               table     kv@primary
·               spans     ALL
