# LogicTest: 5node-dist

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 TTTI colnames
SELECT start_key, end_key, replicas, lease_holder from [SHOW EXPERIMENTAL_RANGES FROM TABLE xyz]
----
start_key  end_key  replicas  lease_holder
NULL       /2       {1}       1
/2         /4       {2}       2
/4         /6       {3}       3
/6         /7       {4}       4
/7         NULL     {5}       5

query TTTI colnames
SELECT start_key, end_key, replicas, lease_holder from [SHOW EXPERIMENTAL_RANGES FROM TABLE abc]
----
start_key        end_key          replicas  lease_holder
NULL             /NULL/NULL/NULL  {5}       5
/NULL/NULL/NULL  /"1"/"1"/"2"     {1}       1
/"1"/"1"/"2"     /"1"/"2"/"2"     {2}       2
/"1"/"2"/"2"     /"2"/"3"/"4"     {3}       3
/"2"/"3"/"4"     /"3"/"4"/"5"     {4}       4
/"3"/"4"/"5"     NULL             {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            ·                       ·
 └── render     ·            ·                  (x, y, z)               ·
      │         render 0     test.public.xyz.x  ·                       ·
      │         render 1     test.public.xyz.y  ·                       ·
      │         render 2     test.public.xyz.z  ·                       ·
      └── scan  ·            ·                  (id[omitted], x, y, z)  id!=NULL; key(id)
·               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#eJyslMGuojAUhvfzFOasS6ClorJiMRs348SZ3YQFQ08MiVLSlkTH8O4TIMGL0dILdwn49_u_Y3PuUEqBP7ILaoj_AAUCDAiEQIADgTWkBColc9RaqvYnfWAvrhAHBIqyqk37OiWQS4UQ38EU5owQw-_s7xmPmAlUfgAEBJqsOHeYShWXTN2S6-0fEPhVZaWOV57fkg-1iVcJI0lIEg5pQ0DW5gHRJjshxLQh7kW-F9oUZW789bhFQkkHekthbymPw-tSKoEKxejstLH1oMEni4SjItR97tRh7j7zfD5z8hNVBuNo0eSZuzBzEeZeV2iO8ESVQXizSDh0Fw5dhCOvKzRHeKLKILxdJMzdhbmL8MabqTtRZNDdfdkqeUE5oq5kqfFppbw-OWhXDYoT9ntJy1rl-FPJvMP0j4cu170QqE3_lfYP-7L_1Bb8GKbWMBuF6XOY2ckT6NCa5vYwX9J7bQ1HdnK0hLyxhrd28nYJeWf_r4KJa2K_ZM_stPn2PwAA__8GTroO

# 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                 ·                       ·
      └── render     ·            ·                  (x, y, z)               ·
           │         render 0     test.public.xyz.x  ·                       ·
           │         render 1     test.public.xyz.y  ·                       ·
           │         render 2     test.public.xyz.z  ·                       ·
           └── scan  ·            ·                  (id[omitted], x, y, z)  id!=NULL; key(id)
·                    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#eJy0lT9v2zAQxfd-CuPWUpCPov9p0tAlS1Mk3QoPqnQIBDiiQNJA0sDfvZBkQLUbHxnaGfXn3Xv83QP4Bq2u6Xv5TBbyX4AgQIKADAQoELCArYDO6Iqs1ab_ZRTc1S-QzwU0bbd3_eutgEobgvwNXON2BDn8LH_v6IHKmkw6BwE1ubLZDTadaZ5L81q8vP4BAY9d2dp8lqS98_3e5bNCiiIThYLtQYDeu8nEuvKJIMeDCA_yqI0jky5OMxT49eJ4-ZHx3xrrmrZyKc7PHcRwkP5UpiZDdT4r8KJpdtF08tLjnPdOwib77-wfSqZOkmH42jFg7alMUhW5eE-U4-KXsYv3jJ_w4g0XL8PxyhC8KhkAxOD1RDniXcXi9Yyf8Mob4s3C8WYheJfJACAGryfKEe86Fq9n_IQ3uyFeFY5XheBdJZFwPUGOcDexcD3jJ7jqk-6Ed0wfyHa6tXTieGnyvL8wqH6i8YKxem8q-mF0NdiMj_eDbnhRk3XjVxwf7trxUx_wXzGyYsmLJSvOTsR4Ls742EveWrHqBS9esGKP8_KaQ69Y8Zp3XrPiDS_eXBMbPR3zlYxvGXpqhlf1DD1FUx5zvmnoqRryXTvPvj18-RsAAP__agfTvw==

# 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
----
distinct             ·            ·                  (x, y)                           weak-key(y); +y,+x
 │                   distinct on  y                  ·                                ·
 │                   order key    y                  ·                                ·
 └── sort            ·            ·                  (x, y)                           +y,+x
      │              order        +y,+x              ·                                ·
      └── render     ·            ·                  (x, y)                           ·
           │         render 0     test.public.xyz.x  ·                                ·
           │         render 1     test.public.xyz.y  ·                                ·
           └── scan  ·            ·                  (id[omitted], x, y, z[omitted])  id!=NULL; key(id)
·                    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#eJyslU1vm0AQhu_9FdFcswjPsv7ixKGXXJoq6a3ygbKjCMlh0e5aShr5v1eAJWq3zK6Dj4BfnneeHZkPaIymb-UrOch_AoIACQIyEKBAwBJ2AlprKnLO2O4nQ-BBv0G-EFA37cF3t3cCKmMJ8g_wtd8T5PCj_LWnJyo12XQBAjT5st73mNbWr6V9L97ef4OA57ZsXH6XpB358eDzu0KKIoPdUYA5-JHgfPlCkONRxLd4NtaTTZfnBQp5Lwq8n0TIaxBfa-frpvIpLi4p3UBWkyXdDTWJyyZxI8UM75mag-31z_SRvdRZL4w_b4w471QmqfrMiQd6nE58NefEA4jRLN7kxGW8WRljViX9-FebDfQ4mV3PMRtAjGblTcxm8WazGLOrpB__arOBHiezmzlmA4jRbHYTsyrerIoxu04-4zXQ4uR1O8drADF6VTf_9_8P7olcaxpHZ6ypNy-6zwLpFxo-Jc4cbEXfral6zHD52Of6G5qcH57icPHQDI-6gn-HkQ1LPizZcHYWxstwxtde8WjFppd8eMmGA-TVnKHXbHjDkzdseMuHt3NqY2DHQkvGbxkG1gxn7RkGFk0F4PymYWDVkN-1y-6745c_AQAA__9DNc3z

# 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)  a!=NULL; b!=NULL; c!=NULL; key(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#eJykk01r4zAQhu_7K8x7lvH3HnzaayBkS9qeah8Ua0gNiWQkGVqC_3uxDI3jpkVpLgMj6fH7MIxPkErQhh_JoHxBAoYUDBkYcjAUqBk6rRoyRunxyQSsxBvKmKGVXW_H45qhUZpQnmBbeyCUeOK7A22JC9LR-F1BlrcHF9Pp9sj1-z--a8Dw2HFpyiDaPK_X5xJGFZIKnzWtgHpgUL09ZxrL94QyGdg3XmedXiotSJO4UKmHK-YbFaouKhYPr0enF9GJ_0hSn5F8GUE4b26aSuqvlt2ils7VpiZzNfdWy_zVcj-1hUc4b6IKhbda7q8We6iFiyUPuBRBEij7SvoX233FaEumU9KQ1_LG4_aT2NP0qxjV64YetGpczNT-d5w7EGTsdJtMzUq6Kyc4h5Mf4b8XcLyE03uSs3vg_B64uAmuhz8fAQAA__9FDr-I

query TTTTT
EXPLAIN (VERBOSE) SELECT DISTINCT ON (a, b) a, b FROM abc ORDER BY a, b, c
----
distinct        ·            ·            (a, b)     a!=NULL; b!=NULL; key(a,b); +a,+b
 │              distinct on  a, b         ·          ·
 │              order key    a, b         ·          ·
 └── nosort     ·            ·            (a, b)     a!=NULL; b!=NULL; +a,+b
      │         order        +a,+b,+c     ·          ·
      └── scan  ·            ·            (a, b, c)  a!=NULL; b!=NULL; c!=NULL; key(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#eJy0lEFvmzAYhu_7Fei7xhHYJmnKicMulap26rbTwsHFnzqkFCPbkTZF-e8TeCKBLcYL2cWSgdfPq-dDPkCtJD6JdzSQfQMKBBgQ4EAgBQIrKAg0WpVojNLtJy7wIH9AlhCo6mZv28cFgVJphOwAtrI7hAy-iNcdvqCQqOP2XIlWVLsO0-jqXeifuXgtgcDnRtQmi-Knr4-Pp2UZb4FuoV_ZFoDA895mUU5JzkjOoTgSUHt76mCseEPI6JGE9_xYGVvVpY3Xw5IdpUVqiRrlb-xFJrvIPKGUO2rMWZCcLUjOF1AcfQVpMqshHzSk4dNjIdP7Y1rL882sAU5U7f3c3XCALFwP_xc97FyP2_BuTa_WM1G117O5oR4ericN0zNysTzfxFtYXa1nomqv5_6GetJwPUmAnuXoboxELSMaKfsd9ZVWJhr2Vlb_6VL8C_MFTaNqgwPipZOT9qZE-YbuhjVqr0v8pFXZYdz2uct1DyQa695St3mo3au24HmYesNsEKbjMPOTJ9Dcm0794XRO75U3vPaT13PId97wxk_ezCHf-2eVTPwm_p9szC6OH34FAAD__6vp-Bs=
