# LogicTest: 5node-dist-opt

statement ok
CREATE TABLE xyz (
  id INT PRIMARY KEY,
  x INT,
  y INT,
  z INT
)

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

# Prevent the merge queue from immediately discarding our splits.
statement ok
SET CLUSTER SETTING kv.range_merge.queue_enabled = false;

statement ok
ALTER TABLE xyz SPLIT AT VALUES (2), (4), (6), (7)

statement ok
ALTER TABLE xyz EXPERIMENTAL_RELOCATE VALUES
  (ARRAY[1], 0),
  (ARRAY[2], 2),
  (ARRAY[3], 4),
  (ARRAY[4], 6),
  (ARRAY[5], 7)

statement ok
ALTER TABLE abc SPLIT AT VALUES
  (NULL, NULL, NULL),
  ('1', '1', '2'),
  ('1', '2', '2'),
  ('2', '3', '4'),
  ('3', '4', '5')

statement ok
ALTER TABLE abc EXPERIMENTAL_RELOCATE VALUES
  (ARRAY[1], NULL, NULL, NULL),
  (ARRAY[2], '1', '1', '2'),
  (ARRAY[3], '1', '2', '2'),
  (ARRAY[4], '2', '3', '4'),
  (ARRAY[5], '3', '4', '5')

query TTITI colnames
SHOW EXPERIMENTAL_RANGES FROM TABLE xyz
----
start_key  end_key  range_id  replicas  lease_holder
NULL       /2       1         {1}       1
/2         /4       2         {2}       2
/4         /6       3         {3}       3
/6         /7       4         {4}       4
/7         NULL     5         {5}       5

query TTITI colnames
SHOW EXPERIMENTAL_RANGES FROM TABLE abc
----
start_key        end_key          range_id  replicas  lease_holder
NULL             /NULL/NULL/NULL  5         {5}       5
/NULL/NULL/NULL  /"1"/"1"/"2"     21        {1}       1
/"1"/"1"/"2"     /"1"/"2"/"2"     22        {2}       2
/"1"/"2"/"2"     /"2"/"3"/"4"     23        {3}       3
/"2"/"3"/"4"     /"3"/"4"/"5"     24        {4}       4
/"3"/"4"/"5"     NULL             25        {5}       5

query TTTTT
EXPLAIN (VERBOSE) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz
----
distinct   ·            ·            (x, y, z)  weak-key(x,y,z)
 │         distinct on  x, y, z      ·          ·
 └── scan  ·            ·            (x, y, z)  ·
·          table        xyz@primary  ·          ·
·          spans        ALL          ·          ·

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyslE2LqzAUhvf3V1zedaAm2i9XLu6mm9uhzG5w4ZhDEVojSYR2iv99UMGOpY0Oukzie57zxHBuyJWk_8mZDMIPcDAIMPhgCMCwRMxQaJWSMUrXn7SBnbwg9BiyvChtvR0zpEoTwhtsZk-EEO_J54kOlEjSCw8MkmySnRpMobNzoq_R5foFhn1pw7-RYJHPogBxxaBKe69rbHIkhLxi49n_MmOzPLWLZR8ccdaAXlLES8q9eJkrLUmT7NWOK1cf3PtlI36vET7-qvncVz3A7hRXk65ajDcUcxsOsDvD9SRDf7yhP7fhALsz3EwyDMYbBnMbDrA7w-1sA-EJ5UCmULmhh8HwvLJXDwySR2qni1GlTulNq7TBtMt9k2s2JBnbnvJ2scvbo7rBn2HuDItemD-GhZs8gPad6cAdDqb0vXSGV27yagp57Qxv3OTNFPLW_a-8gWfifmSP7Lj68x0AAP__pp2oBA==

# Ensure that ordering propagates past local DISTINCT processors.
query TTTTT
EXPLAIN (VERBOSE) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz ORDER BY x
----
distinct        ·            ·            (x, y, z)  weak-key(x,y,z); +x
 │              distinct on  x, y, z      ·          ·
 │              order key    x            ·          ·
 └── sort       ·            ·            (x, y, z)  +x
      │         order        +x           ·          ·
      └── scan  ·            ·            (x, y, z)  ·
·               table        xyz@primary  ·          ·
·               spans        ALL          ·          ·

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (x,y,z) x, y, z FROM xyz ORDER BY x]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lb9u2zAQh_c-RXBrCdhH0o6tSUOXLE2Rdis8qOIhEOCIBkkBSQO_e6E_gCo3OsqyOkry777jdwf6HUpr6Gv2Qh6Sn4AgQIIABQI0CNjAQcDJ2Zy8t67-SRt4MK-QrAUU5akK9euDgNw6guQdQhGOBAn8yH4d6YkyQ261BgGGQlYcG8zJFS-Ze0tf336DgMcqJHepFKkSqYbDWYCtQl_Xh-yZIMGzmM7-bl0gt9oMsSl-Hi0vryn_pfChKPOwwvUlQTQHqU_lDDkyyV2Ko1A1Cu1Ztq3z0UnYzv45-1Wd6UFnOH3SuPSkI-xu0tu5k46U733igpOW033KpX1G2J3P-7k-I-V7n3JBn2q6T7W0zwi787mb6zNSvvepFvSpp_vUS_uMsDuf-7k-I-V7n_o_3ewfQJ_In2zpaUAcq7yur30yz9T-TXhbuZy-OZs3mPbxsck1Lwz50H7F9uGhbD_VDf4dRjYs-bBkw2oQxsuw4tve8mjNpjd8eMOGI-TtLYe-Z8M7nrxjw3s-vL-lbYzsWGzJ-C3DyJrhTXuGkUXTETi_aRhZNeR37bL3w_nTnwAAAP__eVbBtQ==

# Ensure that even with more ordering columns, ordering propagates past local
# DISTINCT processors.
query TTTTT
EXPLAIN (VERBOSE) SELECT DISTINCT ON (y) x, y FROM xyz ORDER BY y, x
----
sort                 ·            ·            (x, y)  weak-key(y); +y
 │                   order        +y           ·       ·
 └── distinct        ·            ·            (x, y)  weak-key(y); +x
      │              distinct on  y            ·       ·
      └── sort       ·            ·            (x, y)  +x
           │         order        +x           ·       ·
           └── scan  ·            ·            (x, y)  ·
·                    table        xyz@primary  ·       ·
·                    spans        ALL          ·       ·

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (y) x, y FROM xyz ORDER BY y, x]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyslUFvm0AQhe_9FdVcu5I9u2DHnDj0kktTpb1VPlB2FCE5rLW7lpJG_u-VAYmCwgwlHGH93pv5_LS8Qe0sfSueKUD2CxAUaFBgQEECClI4Kjh7V1IIzt9-0gru7QtkWwVVfb7E2-ujgtJ5guwNYhVPBBn8LH6f6JEKS36zBQWWYlGdmpizr54L_5q_vP4BBQ-XmH3OtcoNHK8K3CX2piEWTwQZXtX84B_OR_KbdJiZ45dJe_0_9l-rEKu6jBscbZXryQAzGdD7Om_Jk31vanaK8Z7TUyQLKOJubD-NMR344_x64Kr1EIK7xcZ7za6HYN__MbiwHno-OL0qOCG4A7dfCk6w78HpheDMfHBmVXBCcAfubik4wb4HZxaCS-aDS1YFJwR34A5LwQn2PbhkhZv8nYBHCmdXBxq4Tzlvb9c82SdqPwvBXXxJ370rm5j28aHRNS8shdieYvtwX7dHtwH_FSMr1rxYs2IzEONYbFhxwicn_M57Xp2y6h0v3rFiIXn_EWJ3rPjAJx94YluhJnzJhMGRbxkKNUO-Z2gEOd80aXahaqkQzncNhbIh37bx7Mfrp78BAAD__06g0ss=

# Distinct processors elided becaue of strong key.
query TTTTT
EXPLAIN (VERBOSE) SELECT DISTINCT ON (a,b,c) a, b, c FROM abc
----
scan  ·      ·            (a, b, c)  ·
·     table  abc@primary  ·          ·
·     spans  ALL          ·          ·

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (a,b,c) a, b, c FROM abc]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyskj1rwzAQhvf-jHdWiT87eOqaJS2hW_GgWEcwOD5zkqEl-L8Xy0Pq4BYVdZTunnvu4L2iZ0MHfSGL6h0pFDIo5FAooFCiVhiEG7KWZW5ZgL35QJUotP0wuvm7VmhYCNUVrnUdocKbPnV0JG1IdvNcQ063ndcM0l60fD7rU4N6UuDR3eZYp8-EKp3UD66bYuxZDAmZ1fh62tjmwI887Mq7xm11tlKn4WdmsWdm4a481pWHu4pYVxHuSv4zKhuuI9mBe0tBSUjmKJE505I7y6M09CrceM3yfPGc_zBk3VJNl8e-9yW_4Hc4_RV-WsHJPZzFmPMYuIiByz_B9fTwFQAA__97QoeT

query TTTTT
EXPLAIN (VERBOSE) SELECT DISTINCT ON (a, b) a, b FROM abc ORDER BY a, b, c
----
distinct        ·            ·            (a, b)     weak-key(a,b); +a,+b
 │              distinct on  a, b         ·          ·
 │              order key    a, b         ·          ·
 └── render     ·            ·            (a, b)     +a,+b
      │         render 0     a            ·          ·
      │         render 1     b            ·          ·
      └── scan  ·            ·            (a, b, c)  +a,+b,+c
·               table        abc@primary  ·          ·
·               spans        ALL          ·          ·

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT ON (a, b) a, b FROM abc ORDER BY a, b, c]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lM-LqzAQx-_vr3jMtQM10f7y5OFdenldyt4WD9YMRWiNJBF2Kf7vi2axa9lGwezRxO985sOEuUEpBf3PrqQhfgMGCBwQQkCIAGEFKUKlZE5aS9X-YgN78Q5xgFCUVW3a4xQhl4ogvoEpzIUghtfsdKEjZYLUsq0ryGTFpcNUqrhm6iPJTjkgHGoT_00YJhyTENIGQdbmXleb7EwQswans_8V2hRlbpbrIbijtEglSJH4wj5l8qfMO0raUo-cBSZ8gUm4gLRxNciCWR2Ggw7Z9Ilw3xMZYffCG48T4dN9Q9--I-zed-vRN5zuG_n2HWH3vjuPvtF038C37wi791390ob5gXkkXclS04D4rHLQrh0SZ7LrSsta5fSiZN5h7Oehy3UHgrSxt8x-7Et71Tb4PcycYT4Is8cwd5NH0KEzHbnD0Zy-V87w2k1ezyFvnOGtm7ydQ965ZxWMPBP3I3tkp82fzwAAAP__G57AJg==
