# LogicTest: fakedist

#
# 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) VALUES (1)
----
automatic  url
false       https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFrwzAQhff-CvOmFgS1O2rs5qUtHbIEDUI6HBNHZ3QSBIz-e7A0hAyBjO896fu4DYE9_dgLCfQRA4zCGtmRCMe9ag9Gf4XuFeaw5rTXRsFxJOgNaU4LQeNgl0zy2UPBU7LzUolf3Xf3PnTulMNZPmCKAud0p0iyE0H3Rb1u-idZOQg9mJ6TjQL5ido1wjk6-ovsqqbF3_qvFp4ktXVoYQxtKqa83QIAAP__QkpjGQ==

# 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

# OID cast - don't distribute (#22249).
query BT
EXPLAIN (DISTSQL) SELECT t1.a FROM abc t1 INNER JOIN abc t2 on t1.a::REGCLASS = t2.a::REGCLASS;
----
false  https://cockroachdb.github.io/distsqlplan/decode.html#eJykkc1qwzAMgO97iqCzobF7Mwwyxtg6RjPS3UYObiy6QGoF2YGNkncfcQ5ZSvfT9ShZnz5JPoAji2uzRw_6FSSUAlqmCr0nHlJjwcq-g04F1K7twpAuBVTECPoAoQ4NgoYXs22wQGORFykIsBhM3cS2Ldd7wx-Z2VYgIO-CTjIJZS-AujB19MHsELTsxf-s8hKr-tY6yTpHbJHRzkTlQP5WcmL0B-PfHql2yAs1nzxfJ5nUuri7v3262WyS6yRTU_iHZZbnnLBA35LzeLzUyc7psAnaHY6X8dRxhc9MVdSMYR65mLDow_iqxmDl4lP846-wPANWx7D6EV7O4LQv-6vPAAAA___WlPjR

# Query with OID expression - don't distribute (#24423).
query BT
EXPLAIN (DISTSQL) SELECT 246::REGTYPE FROM abc
----
false  https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBDEQhXt_hbw64K6IxVQ2h1yjx3KNSIpc8jgW9pJlkgXlyH-X3RRiIVz53pv53swVMQW-uQsz5BM9rMGsyTPnpKvVBvbhC9IZjHFeympbA5-UkCvKWCZCcHSniQNdoD50MAgsbpw27Kzjxen3izt5GAyMgSr3j0_PIjLsXo8fhx1sNUhL-eXn4s6E9NXcfsPAPKeY-af-P3JXrQHDme3PnBb1PGjyW02T79veZgTm0tK-iX1sUbX17icAAP__JLhsAQ==
