# LogicTest: 5node-dist

# 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#eJyUkEFLxDAQhe_-ivI87kiboiA59drLKt29SQ-xGZZCm5RJCsrS_y5tBF1hRQ-BzHt5Xx5zhvOW92bkAP0ChZYwie84BC-rlB7U9g26IPRumuMqt4TOC0OfEfs4MDSO5nXgho1lyQsQLEfTDxt2kn408l65eYw-RAHhMBkXdHaXqyK_BaFhZ1l09qC1rvfHR8rKz9uuUpRtp0S7EPwcv0qEaE4MrRb6e9GDl8iSq8uO1f3uKr78D77hMHkX-AJ_jVwsLYHtidOug5-l42fx3fZNGp-23CZYDjG5Kg21S9Za8HtY_Rouf4Tb5eYjAAD__3EYqEY=

# 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#eJzElM-K2zAQxu99CjFQaFkFS7Li9QoKORVySUt2byUHNxoWQ2IZSYGWJe9eLLtsExJZJAUfDNafb76Z34h5g8ZoXFV7dKB-AAcKAijkQEEChTlsKLTWbNE5Y7srvWCpf4FiFOqmPfhue0NhayyCegNf-x2Cgpfq5w7XWGm0GQMKGn1V74JNa-t9ZX8vmsPeG-ctUHhuq8YpMssEY93tr_XOo1Xk04KTj4QzxpRSy9VL-Zl8IX__gcIaG93dmw9blIjh72HBKQmfgM2Rgjn492Sdr14RFD_S9IKejfVos_lpLQv5cDW8uBr-PaqxGi3qS0Ev5LAyM9Nm_JTnNfv8xJ6nt4untit0a5bJ6Xo2UtXQs-LWnol0aCIZmgzQiumgjVQ1QHu8FVqeDi1PhlYEaOV00EaqGqCVt0KT6dBkMrQO12wiXiMFDbye_sc0vRB-ja41jcOkQcm6UYv6FfvR7MzBbvG7Ndtg0y-_BV3Y0Oh8f8r7xbLpj7oE_xXzqFiciPm5WMSdR6zzqFrGxfKevOdRcRF3Lu5xfoyKy7hzeY_zU7xXbOSZxB_Zuffm-OFPAAAA__-KbAkx

# 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

# Merge join.
query TTTTT
EXPLAIN (VERBOSE) SELECT x, str FROM NumToSquare JOIN NumToStr ON x = y WHERE x % 2 = 0
----
render           ·               ·                          (x, str)                                 x!=NULL; key(x)
 │               render 0        test.public.numtosquare.x  ·                                        ·
 │               render 1        test.public.numtostr.str   ·                                        ·
 └── merge-join  ·               ·                          (x, xsquared[omitted], y[omitted], str)  x=y; x!=NULL; key(x)
      │          type            inner                      ·                                        ·
      │          equality        (x) = (y)                  ·                                        ·
      │          mergeJoinOrder  +"(x=y)"                   ·                                        ·
      ├── scan   ·               ·                          (x, xsquared[omitted])                   x!=NULL; key(x); +x
      │          table           numtosquare@primary        ·                                        ·
      │          spans           ALL                        ·                                        ·
      │          filter          (x % 2) = 0                ·                                        ·
      └── scan   ·               ·                          (y, str)                                 y!=NULL; key(y); +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 AS y, x+1 AS z FROM NumToSquare)
----
render          ·         ·                          (x)                          x!=NULL; key(x)
 │              render 0  x                          ·                            ·
 └── render     ·         ·                          (x, y[omitted], z[omitted])  x!=NULL; key(x)
      │         render 0  test.public.numtosquare.x  ·                            ·
      │         render 1  NULL                       ·                            ·
      │         render 2  NULL                       ·                            ·
      └── scan  ·         ·                          (x, xsquared[omitted])       x!=NULL; key(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=

# 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#eJyUkUFL80AQhu_fryhz-sSVZNPbniqeCtJIW_EgQdZkCAvNTpydBaXkv0uyiFZosMd5Z595XtgjeGpwYzsMYJ5BQ6WgZ6oxBOIxSg_WzTuYXIHzfZQxrhTUxAjmCOLkgGBgb18PuEXbIGc5KGhQrDtMZ3t2neWPlY-dUHiLlhEU7Hrrg1lkWt-AgjKKWawKqAYFFOXbE8S2CEYP6u9ddsSCnOnTGit9_SXakB8r3LvOyULnZ63FJdbbtmVsrRBnxan5rnzc7F-25dPu_9VZ1_IS1xZDTz7giefc5XyoFGDTYvrRQJFrfGCqJ00ay4mbggaDpK1Ow9qn1VjwJ6xn4WIeLmbh5S-4Gv59BgAA__9Dyt_2
