# LogicTest: 5node-dist-opt

# First, we set up two data tables:
#   - NumToSquare maps integers from 1 to 100 to their squares
#   - NumToStr maps integers from 1 to 100*100 to strings; this table is
#     split and distributed to all nodes.
statement ok
CREATE TABLE NumToSquare (x INT PRIMARY KEY, xsquared INT)

statement ok
INSERT INTO NumToSquare SELECT i, i*i FROM generate_series(1, 100) AS g(i)

statement ok
CREATE TABLE NumToStr (y INT PRIMARY KEY, str STRING)

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

# Split into five parts.
statement ok
ALTER TABLE NumToStr SPLIT AT SELECT (i * 100 * 100 / 5)::int FROM generate_series(1, 4) AS g(i)

# Relocate the five parts to the five nodes.
statement ok
ALTER TABLE NumToStr EXPERIMENTAL_RELOCATE
  SELECT ARRAY[i+1], (i * 100 * 100 / 5)::int FROM generate_series(0, 4) AS g(i)

# Verify data placement.
query TTTI colnames
SELECT start_key, end_key, replicas, lease_holder FROM [SHOW EXPERIMENTAL_RANGES FROM TABLE NumToSquare]
----
start_key  end_key  replicas  lease_holder
NULL       NULL     {1}       1

query TTTI colnames
SELECT start_key, end_key, replicas, lease_holder FROM [SHOW EXPERIMENTAL_RANGES FROM TABLE NumToStr]
----
start_key  end_key  replicas  lease_holder
NULL       /2000    {1}       1
/2000      /4000    {2}       2
/4000      /6000    {3}       3
/6000      /8000    {4}       4
/8000      NULL     {5}       5

#
# -- Basic tests --
#

# Query with a restricted span.

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT 5, 2+y, * FROM NumToStr WHERE y <= 10 ORDER BY str]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkEFLxDAUhO_-ijIe90mboiA59drLKt29SQ-xeSyFNikvKShL_7u0ObgrrOhxZjJfhneG85b3ZuQA_QaFljCJ7zgEL6uVHtT2A7og9G6a42q3hM4LQ58R-zgwNI7mfeCGjWXJCxAsR9MPG3aSfjTyWbl5jD5EAeEwGRd09pCrIr8HoWFnWXT2pLWu98dnyiq1Ky8EZVWJdiH4OX6PCNGcGFot9PehBy-RJVfXG6vH3U18-R98w2HyLvAV_ha5WFoC2xOnWwc_S8ev4rvtmyRftt5mWA4xpSqJ2qVoHXhZVr-Wyx_ldrn7CgAA__9wCqhG

# Query which requires a full table scan.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT 5, 2 + y, * FROM NumToStr WHERE y % 1000 = 0 ORDER BY str]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzElF9r2zAUxd_3KcSFwUYVLMmK6woGfhrkJRtp30YevOhSDIllJAU2Sr778J_RuiSySAp-s2Sde3R_R9wXqI3GdXlAB-oXcKAggEIKFCRQWMKWQmPNDp0ztj3SC1b6DyhGoaqbo2-3txR2xiKoF_CV3yMoeCp_73GDpUabMKCg0ZfVvrNpbHUo7d-iPh68cd4ChcemrJ0ii0Qw1p7-Xu09WkW-FJx8JpwxppRarZ_yr-Qb-f8NFDZY6_bcctiipOB34s2CkkLA9kTBHP3rZZ0vnxEUP9H4hh6N9WiT5biXQt5dLC8uln-taqxGi_pc0TN3WJuFaRI-5nnJPh3Z8_i4eGxcXVqLRM6X2URXQ2bZtZmJeGgiGprsoGXzQZvoaoB2fy20NB5aGg0t66Dl80Gb6GqAll8LTcZDk9HQWlyLmXhNNDTweviIaXqm_AZdY2qHUYOStaMW9TP2o9mZo93hT2t2nU2__NHpug2Nzvd_eb9Y1f2v9oJvxTwoFiMxfy8WYecJ6zSolmGxvOXey6A4CztntzjfB8V52Dm_xfkhnBWbeCbhR_bee3v69C8AAP__hSYJMQ==

# Query with a restricted span + filter.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT str FROM NumToStr WHERE y < 10 AND str LIKE '%e%' ORDER BY y]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkDFLxEAQhXt_RXhyXLNyiZ1bXaMSlDvJXScp1uxwBJLdMDMB5dj_LskWYiFYvvdm3nzMFSF6OriRBPYdFVqDiWNHIpEXKw_U_hO2NOjDNOtitwZdZIK9QnsdCBZn9zFQQ84T70oYeFLXD2vtxP3o-Gsf5lGjKMPgNLkgtrjbPexuYfDUD0psi_198Vq_PBbbDW221trTuakPzzA4zrqkaJNBnPUHQ9RdCLZK5v-oDckUg9Avyr-ay9QakL9QfofEmTt649itZ7I8rnur4Uk0p1UWdchRatPNdwAAAP__t3t2hg==

# Query which requires a full table scan.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT str FROM NumToStr WHERE y % 1000 = 0 AND str LIKE '%i%' ORDER BY y]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlM-K2zAQh-99CjEQNktlLMlOWAQFF_oH0-It2dyKD641BINjGUmGluB3L5YPqUtSVHLI3ixpPn7zDYxP0GmFRXVEC_I7cKAggEICFFKgsIGSQm90jdZqM5XMQK5-gmQUmq4f3HRdUqi1QZAncI1rESTsqx8t7rBSaGIGFBS6qml9TG-aY2V-Zd1wdNo6AxRe-qqzkkSxYGyq_tS0Do0k63XGyYpwxpiUMi_2T4_kHTl_vy8-kHUmyNf8y0fysGpWD1LKl_0uLz4_AoXnwUmSCZpxKEcKenDnhq2rDgiSj_SK1NlFG4UG1dIiE2-hHC-YFzrSfbxZVF9LF4t0Hj5SHjpSP9EoTu87VxFuJoLNUm-2va9ZEm6WBJttvdnTfc3ScLM02Gxyil7Jgl-Q2qHtdWcxaHnZtP2oDjj_LaweTI3fjK59zHx89py_UGjd_MrnQ975J9_gnzD_J7xdwOxvWNySnNwCp7fAm_-Cy_HN7wAAAP__bVwL3A==

#
# -- Join tests --
#

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, str FROM NumToSquare JOIN NumToStr ON y = xsquared]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lU2L2zAQhu_9FWFOu6AQS7bzYSj42O1ht2x7Kz5o42liSCxXkqHLkv9ebBeydlJJXiU5-uPRzDwvaN6gFDk-8j0qSH4CBQIMCIRAIAICMWQEKinWqJSQzS8d8JD_gSQgUJRVrZvXGYG1kAjJG-hC7xAS-MFfdviMPEc5C4BAjpoXu7ZMJYs9l69pWe-1UL9rLhEIfK94qZLJFLIDAVHrf0cfT3x5nWy52vbPShlkh4yA0nyDkNAD-ViL1NSilu_6m7EgCEY2SXtNsv82eTynLoXMUWLeOylrSNsvZyb9wtX2qyhKlLN5v7Ud_tJ3Kbv_LIvNVt-l9B4IPNU6maSUpNFgzuMMoccMZxp8FFNRzSgdTnu2dtSrTd1DZq4htxlPZ9Flk6a3TXpxjaSZu-3Q2XbU2p5f1ja7re3lNWyH7rYjZ9vz1vbysrbD29peXcN25G47drbdeB6700yio9uKpsG198WZ-s-oKlEqdNoGQTMB5hvsjChRyzV-k2Ldluken1quvYFzVLr7yrqHh7L71DToDsc-8MIHXvnAlJppOsIYGwfHPvDCB175wANjJzQb0sF7OjTrDo0w7fsOhnTkE5YZtoRlhi1hmWFLWGbYFlbsE9bcR7cZtug2wxbdZtii2wzbdC98dC99dJthi24zbNFthi26zbBN98pHNx2zLE_v0DHbcixtu_zH7MuxtM05PdkeRunZ4dPfAAAA___jgMjJ

query TTTTT
EXPLAIN (VERBOSE) SELECT x, str FROM NumToSquare JOIN NumToStr ON x = y WHERE x % 2 = 0
----
render           ·               ·                    (x, str)     ·
 │               render 0        x                    ·            ·
 │               render 1        str                  ·            ·
 └── merge-join  ·               ·                    (x, y, str)  ·
      │          type            inner                ·            ·
      │          equality        (x) = (y)            ·            ·
      │          mergeJoinOrder  +"(x=y)"             ·            ·
      ├── scan   ·               ·                    (x)          +x
      │          table           numtosquare@primary  ·            ·
      │          spans           ALL                  ·            ·
      │          filter          (x % 2) = 0          ·            ·
      └── scan   ·               ·                    (y, str)     +y
·                table           numtostr@primary     ·            ·
·                spans           ALL                  ·            ·
·                filter          (y % 2) = 0          ·            ·

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT x, str FROM NumToSquare JOIN NumToStr ON x = y WHERE x % 2 = 0]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzElV1r2zAUhu_3K8yBQUsVYtnOl6Dgq0EGS0fXu-ELNz5LDInlSTKslPz3YbsjjZNJ8rQkd_7QY-m8z8HnFQqe4SLdogT2HSgQCIBACAQiIDCChEAp-BKl5KJe0gLz7Bcwn0BelJWqHycEllwgsFdQudogMHhKnzf4iGmGYugDgQxVmm-abUqRb1PxEhfVVnH5s0oFAoFvZVpI5g2AwKd8o1Aw7yam3kcvYIzNF0_TW-_e89-ugcBDpZgXU0h2BHil3k6yP8Dzi7dO5fpw62Z9QkCqdIXA6I78W0VUV5ES78oZBr7v29XkUknw10r236kKLjIUmB18KanJP0tOLYCY3rV7dRP5gmKFn3leoBiOD5kN_lA3Mb27vRf5at1e7qWROOxUu68kdKjkxBkXfMDLIaXdmk_uHR3sTe37IbDth6YdBsPoCk1BL98Uk_M0RWAvJrQWEzVixlcQE1xezPQ8YkJ7MZG1mHEjZnoFMeHlxczOIyayFzOyFlMrsRzX_89JdHkn1D__bDtxhEeUJS8kWk0uvy4CsxW2uUheiSV-FXzZbNPePjRcMwgylKp9G7Q386J9VR_QHh65wBMXeOYCU6qnaY_Egn7wyAWeuMAzF7iT2BEddGn_PR3q4w61MD3M2-_SkYssPWyQpYcNsvSwQZYeNskaucgau8Sthw1x62FD3HrYELceNsU9cYl76hK3HjbErYcNcethQ9x62BT3zCVu2mdYHv9D-0zLvrTp599nXvalTZnTo-mhDT3ZffgdAAD__0e8BAs=

#
# -- Aggregation tests --
#

# Sum the numbers in the NumToStr table.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT sum(y) FROM NumToStr]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyslD9vszAQxvf3U0Q3vZUcgYEQwpSOGdpUSTtVDC4-IaQEI9tIrSK-ewUMgSgxTujoP4-f53dn3QkKwfGVHVFB_AkUCHhAwAcCARBYQEKglCJFpYRsrnSCDf-G2CWQF2Wlm-2EQCokQnwCnesDQgzv7OuAO2QcpeMCAY6a5YfWppT5kcmfdVEdtVBaAoF9yQoVz-aO57rN7W2l49maQlITEJU-2yjNMoSY1sQ-ynOWScyYFtJZDJPsP17-r-nTTRvvps359aoQkqNEPng6qc1BqHtfEn-QhNrXntrWvi393AkeacBInh53OKUBnj22Z40dtNjhI9gjeXrYyynYvj22b40dttjRI9gjeXrY0RTswB47sMZugOd3E49E6RGv_mrAXLHZoSpFofBi0Fx_2W0GEPIMu2mlRCVTfJMibW265bbVtRscle5OabfYFN1RE7AvpkaxNxDTS7Fndh6x9o3qwCwOpuReGMWh2Tmc4rw0iiOzczTFeWXulTvyTcyf7NI7qf_9BgAA__9lhMex

# Count the rows in the NumToStr table.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT count(*) FROM NumToStr]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyslM-Lm0AUx-_9K5Z32sKEOGrcrKctPeVQLUmWHoosU-chQjIjMyO0LP7vRT2sSjIOukd_fP18P77hvYOQHBN2RQ3xb6BAwAcCARAIgcAOMgKVkjlqLVX7Sh848L8QewRKUdWmvZ0RyKVCiN_BlOaCEMOZ_bngERlHtfWAAEfDykuHqVR5Zerfi6ivRmqjgMCpYkLHD5ut73nt22lt4odECoSsISBr8wHShhUIMW2Ie5lvRaGwYEaq7W7c5Xv6mpzfjumv0-PXuyz_LusDUQupOCrko-9njb0Nnfya0-uPt0Nyfnyh99sEozbUfQzUdQzdFDbbcNksZhoN7KPVs_Dd7X1n-7Czj5bZzzQa2D-ttg_c7QNn-6iz3y-zn2k0sN-vtg_d7UNn-9Z7s0B8psxA_PlTF9AN1hF1JYXGySK6_WWvXVDIC-y3mZa1yvGnknmH6S_TLtfd4KhN_5T2FwfRP2oLDsPUGvZHYToN-3byDDqwpkN7OFzTe2cNR3ZytIb8ZA3v7eT9GvKzfVbezDGxH7IpO2u-_A8AAP__tnPXlw==

# Count how many numbers contain the digit 5.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT count(*) FROM NumToStr WHERE str LIKE '%five%']
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lF9r2zAUxd_3KcyF0g4UYtmOm-opY2zDbHNGkrKHYYoX3RlDIhlJHhsl333YfqgTGlng-VF_js7hd8R9BiE5pvkRNbAfQIFAAARCIBABgQVkBCol96i1VM2VTpDwP8B8AqWoatNsZwT2UiGwZzClOSAw2OU_D7jBnKOa-0CAo8nLQ2tTqfKYq78rUR-N1EYBgW2VC8282Tzw_eb2x_JgUDFvFXhfks8fvNubX-VvvLlljG13myT9BATWtWFeKgVCdiIga_MSRpu8QGD0RNwDvysKhUVupJovzvO-Xz-mu6fN-vv27u1Vr-Cq14tFLaTiqJCfvZ-d7GnoBb7t49enJN3drej1NOFZGupeFXWtqm1qNo-m62sgdY9QPLqvwJ1Q4EwoagnF0xEaSN0jdD-aUOhOKHQmFLeEltMRGkjdI7QcTShyJxQ5E2rYzCaCMxC4B-fhvw7EV7w2qCspNF4Mxtdf9puBibzAbrpqWas9flNy39p0y3Wrazc4atOd0m6RiO6oCdgXU6s4OBPTS3Fgdx6wDq3qyC6OxuReWMWx3Tke43xvFS_tzssxzg_2rvyBb2L_ZJfe2enNvwAAAP__VPQIrA==

#
# -- Limit tests --
#

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr LIMIT 5]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBDEQhXt_xfLqEXcLm1TXHognp51sETfDEdhNwswElCP_XW5TiIVg-b6XvPfmipQDP_uNFe4dE2ZCkbywapYb6g-O4RNuJMRUqt3wTFiyMNwVFm1lOLz5j5XP7APLwwhCYPNx3WOLxM3L1yHVzbKagPBafFI33INwquaGwwTCU9yiDY-YGyFX--lS8xeGmxr9f8-ZteSk_GvKX8ljmwkcLtxv1lxl4RfJy17T5Wn_t4PAat2dujimbrW53X0HAAD__2zZcAY=

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr ORDER BY y LIMIT 5]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBDEQhXt_xfLqEXcLm1TXHognp51sETfDEdhNwswElCP_XW5TiIVg-b6XvPfmipQDP_uNFe4dE2ZCkbywapYb6g-O4RNuJMRUqt3wTFiyMNwVFm1lOLz5j5XP7APLwwhCYPNx3WOLxM3L1yHVzbKagPBafFI33INwquaGwwTCU9yiDY-YGyFX--lS8xeGmxr9f8-ZteSk_GvKX8ljmwkcLtxv1lxl4RfJy17T5Wn_t4PAat2dujimbrW53X0HAAD__2zZcAY=

# Test that the correct node is chosen in a reverse scan with multiple spans.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr WHERE y < 1000 OR y > 9000 ORDER BY y DESC LIMIT 5]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkDFrwzAQhff-CnFdFWwHMlhT1kBJStqteFCtIxXYOqE7Q0vwfy-yhiaFphnvvfue3ukMgRzu7YgM5g0a0LCBTkNM1CMzpSyXpZ37BFNr8CFOkuVOQ08JwZxBvAwIBva0oljlFIdi_bCszRpokh-IxZ4QzHrWF8HN7eBX-z7gEa3DVNVX8RCTH2362oZpFGJJoOEl2sBGraq2batHZYNTjSL5wGweJjFqmzs--dGL2sBfDZurhv-cfkSOFBjvur2eOw3oTli-l2lKPT4n6pdnynhYuEVwyFLcdRl2oVi54CXc3ITrX3A3P3wHAAD__9mfpyM=

query TTTTT
EXPLAIN (VERBOSE) SELECT x FROM (SELECT x, 2*x, x+1 FROM NumToSquare)
----
scan  ·      ·                    (x)  ·
·     table  numtosquare@primary  ·    ·
·     spans  ALL                  ·    ·

# Verifies that unused renders don't cause us to do rendering instead of a
# simple projection.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT x FROM (SELECT x, 2*x, x+1 FROM NumToSquare)]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMj7FOAzEQRHu-IpraiLvWVdo0BAU65MKcV9FJd16zu5ZAkf8d3blAFEgp5409M3tD5kTPcSWFf8eI4FCEJ1Jl2VB_cEpf8IPDnEu1DQeHiYXgb7DZFoLHW_xY6EIxkTwNcEhkcV722CLzGuX7mOtqrJ81CsHhtcSs_vAIh3M1fziOCM2Bq_2WqMUrwY_N3T_kQlo4K_3Z8F_y0IIDpSv1Y5WrTPQiPO01XZ73fztIpNbdsYtT7lYL7eEnAAD__wNFbno=

query TTTTT
EXPLAIN (VERBOSE) SELECT y, str, repeat('test', y) AS res FROM NumToStr ORDER BY res
----
render               ·         ·                  (y, str, res)  ·
 │                   render 0  y                  ·              ·
 │                   render 1  str                ·              ·
 │                   render 2  res                ·              ·
 └── sort            ·         ·                  (res, y, str)  +res
      │              order     +res               ·              ·
      └── render     ·         ·                  (res, y, str)  ·
           │         render 0  repeat('test', y)  ·              ·
           │         render 1  y                  ·              ·
           │         render 2  str                ·              ·
           └── scan  ·         ·                  (y, str)       ·
·                    table     numtostr@primary   ·              ·
·                    spans     ALL                ·              ·

query TTTTT
EXPLAIN (VERBOSE) SELECT y, str, repeat('test', y) AS res FROM NumToStr ORDER BY res LIMIT 10
----
render                    ·         ·                  (y, str, res)  ·
 │                        render 0  y                  ·              ·
 │                        render 1  str                ·              ·
 │                        render 2  res                ·              ·
 └── limit                ·         ·                  (res, y, str)  +res
      │                   count     10                 ·              ·
      └── sort            ·         ·                  (res, y, str)  +res
           │              order     +res               ·              ·
           └── render     ·         ·                  (res, y, str)  ·
                │         render 0  repeat('test', y)  ·              ·
                │         render 1  y                  ·              ·
                │         render 2  str                ·              ·
                └── scan  ·         ·                  (y, str)       ·
·                         table     numtostr@primary   ·              ·
·                         spans     ALL                ·              ·

# Regression test for #20481.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT count(*) FROM (SELECT 1 AS one FROM NumToSquare WHERE x > 10 ORDER BY xsquared LIMIT 10)]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkcFKw0AQhu8-RZmT4kqy6W1PFU8FaaSteJAgazKEhWYnzs6CUvLukuxBKzTY4_yz3_8N7BE8NbixHQYwr6ChUtAz1RgC8RilB-vmE0yuwPk-yhhXCmpiBHMEcXJAMLC37wfcom2QsxwUNCjWHabanl1n-WvlYycUPqJlBAW73vpgFpnWd1ANCijKT3sQ2yIYPaj_X7AjFuRMn8pXxS0oKKOYxYb8KH50nZOFzs9ai0us923L2FohzopT80P5vNm_bcuX3fXNWdfyEtcWQ08-4InnXHM-VAqwaTH9Y6DINT4x1ZMmjeXETUGDQdJWp2Ht02o88DesZ-FiHi5m4eUfuBquvgMAAP__S87dgw==
