# LogicTest: default

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

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

# Verify the EXPLAIN (DISTSQL) schema.
query BTT colnames
SELECT * FROM [EXPLAIN (DISTSQL) SELECT * FROM kv] WHERE false
----
Automatic URL 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 - don't distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv LIMIT 1]
----
false

# Soft limit in scan - don't distribute.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT * FROM kv WHERE v=1 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
