# LogicTest: local-opt

#
# Tests that verify DistSQL support and auto mode determination.
# The cluster size or distsql mode aren't important for these tests.
#

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

# Verify that EXPLAIN (DISTSQL) hides the JSON column by default (#21089)
query BT colnames
EXPLAIN (DISTSQL) SELECT 1
----
automatic  url
false      https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj7GKwzAQRPv7CjO14ORWf-DmLqQNKoS0GIOiNVopBIz-PVgq0rqcNzM77IHEgf7ckwTmgRlWYc_sSYTziUZgCW8YrbClvZYTWwXPmWAOlK1EgkFk7-L0crGSTPpXQyFQcVvs-abAtXzbUtxKMHNT1xfuJDsnoUuXdbMKFFYaXwjX7OmW2feZIf97r4NAUoY7D7GkYTXbfj4BAAD__xM4YY8=

# Check the JSON column is still there, albeit hidden.
query T colnames
SELECT json FROM [EXPLAIN (DISTSQL) SELECT * FROM kv] WHERE false
----
json

# Full table scan - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv]
----
true

# Partial scan - don't distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k=1]
----
false

# Partial scan - don't distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1]
----
false

# Partial scan with filter - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1 AND v=1]
----
true

# Sort - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1 ORDER BY v]
----
true

# Aggregation - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT k, sum(v) FROM kv WHERE k>1 GROUP BY k]
----
true

# Hard limit in scan - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv LIMIT 1]
----
true

# Soft limit in scan - don't distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv UNION SELECT * FROM kv LIMIT 1]
----
false

# Limit after sort - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE k>1 ORDER BY v LIMIT 1]
----
true

# Limit after aggregation - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT k, sum(v) FROM kv WHERE k>1 GROUP BY k LIMIT 1]
----
true

statement ok
CREATE TABLE kw (k INT PRIMARY KEY, w INT)

# Join - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv NATURAL JOIN kw]
----
true

# Join with span - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv NATURAL JOIN kw WHERE k=1]
----
true

statement ok
CREATE TABLE abc (a INT PRIMARY KEY, b INT, c INT, INDEX b (b))

# Index join - don't distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM abc WHERE b=1]
----
false

# Index join with filter on result - don't distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM abc WHERE b=1 AND c%2=0]
----
false

# Index join with filter on index scan - distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM abc WHERE b=1 AND a%2=0]
----
true
