# LogicTest: 5node

# This test file makes sure that experimental DistSQL planning actually plans
# processors and other components correctly. In order to make the output
# deterministic we place the data manually.

statement ok
CREATE TABLE kv (k INT PRIMARY KEY, v INT, FAMILY (k, v));
INSERT INTO kv SELECT i, i FROM generate_series(1,5) AS g(i);
CREATE TABLE kw (k INT PRIMARY KEY, w INT, FAMILY (k, w));
INSERT INTO kw SELECT i, i FROM generate_series(1,5) AS g(i)

# Split into 5 parts, each row from each table goes to one node.
statement ok
ALTER TABLE kv SPLIT AT SELECT i FROM generate_series(1,5) AS g(i);
ALTER TABLE kw SPLIT AT SELECT i FROM generate_series(1,5) AS g(i);
ALTER TABLE kv EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1, 5) as g(i);
ALTER TABLE kw EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1, 5) as g(i)

# Verify data placement.
query TTTI colnames,rowsort
SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE kv WITH DETAILS]
ORDER BY 1
----
start_key           end_key                 replicas  lease_holder
<before:/Table/72>  …/1/1                   {1}       1
…/1/1               …/1/2                   {1}       1
…/1/2               …/1/3                   {2}       2
…/1/3               …/1/4                   {3}       3
…/1/4               …/1/5                   {4}       4
…/1/5               <after:/Table/107/1/1>  {5}       5

# Verify data placement.
query TTTI colnames,rowsort
SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE kw WITH DETAILS]
----
start_key                end_key       replicas  lease_holder
<before:/Table/106/1/5>  …/1/1         {5}       5
…/1/1                    …/1/2         {1}       1
…/1/2                    …/1/3         {2}       2
…/1/3                    …/1/4         {3}       3
…/1/4                    …/1/5         {4}       4
…/1/5                    <after:/Max>  {5}       5

statement ok
SET experimental_distsql_planning = always

# Check that hash join is supported by the new factory.
query II rowsort
SELECT kv.k, v FROM kv, kw WHERE v = w
----
1  1
2  2
3  3
4  4
5  5

# Check that merge join is supported by the new factory.
query I
SELECT kv.k FROM kv, kw WHERE kv.k = kw.k ORDER BY 1
----
1
2
3
4
5

# Ensure that the new factory can materialize system columns.
# TODO (rohany): The factory can't plan lookup joins yet. Add a test when it can.
query B
SELECT crdb_internal_mvcc_timestamp IS NOT NULL FROM kv LIMIT 1
----
true
