# 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#eJyUkLFq9DAQhPv_Kcy0JzjL_GlUuXVzCc51wYViLYfB1prVGhIOv3uwVSQXuJAUAu2s5ptBV0QOdPITJbgXWHQGs3BPKbFsUn7QhDe40mCI86Kb3Bn0LAR3hQ46EhzO_nWklnwgOZYwCKR-GHfsLMPk5b2Oy6ScVGDQUgwkrnhwzjWnsymqfDnU1hT7qdCtBrzoZ2RSfyE4u5rf13pmUZKjvW1U_z_cxVd_wbeUZo6JbvD3yOXaGVC4UP7ZxIv09CTc7zF5fNx9uxAoad7aPDQxr7aCX832R3P1zdyt_z4CAAD___V0o_g=

# 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#eJzMlE-rozAUxffzKeTCwAzNUBO1fwIDrga66Qyd7h4ufOZSBGskifAepd_9oRH6LG2U9i1cCObPuefwu-GeoJQCt-kRNfAXoECAAYEACIRAIIKEQKVkhlpL1Vyxgo14A-4TyMuqNs12QiCTCoGfwOSmQOCwT18L3GEqUM19ICDQpHnR2lQqP6bqPS7ro5HaKCDwJy8MKu79iKn33aO-73PON9v9T--31_0CgR2WorkV2R3iMfsziynx2o9BciYga3MJpk16QOD0TMaH_y-VQTWP-rnjcHa3PLtb_lJVKoEKxa2iNzJs5S9ZzWmf3T37oGdPx7eGTq41A-G71iwebQ0bz4ZNjs1A-I7N8lE2wXg2weTYDITv2KweZROOZxNOjs1A-I7N-ivG3Y3yO9SVLDWOmmR-MwtRHNDOTi1rleE_JbPWxi7_trp2Q6A29pTaxaa0R03Az2LqFLOemF6Lmdt5wDpwqkO3OHwmd-QUL9zOi2ecl07xyu28esZ57e6VP_BM3I_s2js5f_sIAAD__2K37jY=

# 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#eJyMjzFrwzAUhPf-CnMQsghqd9SUpS2mJSlutqJBtR5BYEvm6Qlagv57sTWUDoWMd590d--KEB0d7UwJ-gMdjMLCcaSUIq9WfdC7L-hWwYcly2obhTEyQV8hXiaCxtl-TjSQdcT3LRQcifXTFruwny1_H0KeJSZhKDz5SYh1c3hoXvuXx2a_o91ea_1-HvrjMxROWVYKUxRilt_eJPZC0F1Rt28bKC0xJPoz67_kthgFcheq96eYeaQ3juNWU-Vp-7cZjpJU2lXRh4qKKXc_AQAA___YHXLQ

# 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#eJzMlE2rm0AYhff9FcOBkIROiTOaLgYKFvqBtJiSZldcWOclCMaRmRFagv-9RKG5Xm7u9ZKNO-fj4Zxn4PWM2mhK8xM5qF8Q4JDgCMERgWOLjKOxpiDnjL1cGYBE_4EKOMq6af1lO-MojCWoM3zpK4LCIf9d0Z5yTXYTgEOTz8uqj2lsecrt37huT944b8Hxpaw8WcVWq1iwBRNBECilkvSwZh_Y_8-P6Se2iiX7nnz7zJaLcrFUSv087JP06xocu9YrFkseC2Qdh2n9tZ7z-ZGgRMdvKFybG6vJkh53juVbZN0Tnql5Z5rNdnT7VrocpYvpDyhm-oByuoKcqUI4XSGcqUI0XSGaqcILP5M9ucbUjiZNWXAZU9JHGsbamdYW9MOaoo8Zlrue6zc0OT-cimGR1P1RX_AhLJ6F34_g4DEs70kO74Gje-Dtq-Cse_MvAAD__yjQ8xE=

#
# -- 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#eJy8lc9q20AQh-99ijCnBLZYs5LiWFDQsekhKaG3ooNiTW2BrVV3V9AQ_O5FVsGV7M5KXayj_nw7M98PZt-hUgU95XsykHwHBAESBIQgIAIBMWQCaq3WZIzS7S8d8Fj8giQQUFZ1Y9vXmYC10gTJO9jS7ggS-Ja_7uiF8oL0IgABBdm83B3L1Lrc5_otrZq9VeZnk2uC7CBANfbPeadjXt9utrnZ9g9IJWSHTICx-YYgwYP4v76Q68vqiU1hryn5z6ZO5zSV0gVpKnonZS3p-uXCZJ9zs_2iyor04r7f2o5-2NtU3n3S5WZrb1O8AwHPjU1uUhRpNJjzNEPoMcOFBp_UR1UvEIfTXqwd9Wrj-FDlbKHivKEurxGqHC82nE2snFfswzXEhuPFRrOJDecVu7qG2Gi82Hg2sdG8YjG49oK_UP-FTK0qQ6PWd9BOQMWGOiNGNXpNX7VaH8t0j89H7rhHCzK2-yq7h8eq-9Q2OB6OfeClD7zygRF5GicYk9Pg2Ade-sArH3hg7IyWQzr4mw553SELY993MKQjn7B42BEWDzvC4mFHWDzsCiv2CeveRzcPO3TzsEM3Dzt087BL99JH94OPbh526OZhh24edujmYZfulY9unHJZnu_QKbflVNq1_Kfcl1Npl3M8uz1Y6dnhw-8AAAD__3ZSr0E=

# 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   ·                                        ·
 └── 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#eJzMlV9r2zwUh-_fT2EOvNBSjVj-0zSCgq8GGSwdpXfDF258lhgcy5NkWCn57sPWRmYnk-yJhNzFsR6fc34P6LxDxXNcZTuUwL4CBQIBEAiBQAQEYkgJ1IKvUUou2iMaWOY_gPkEiqpuVPt3SmDNBQJ7B1WoEoHBS_Za4jNmOYqZDwRyVFlRdmVqUewy8ZZUzU5x-b3JBAKBj0WpUDDvJqHe_17AGFuuXm69R8_XP4HAU6OYl1BI9wR4o34VP9R8ffO2mdz2q3XnUwJSZRsERvfk34agpiGUGDOBS9_BX_s-fKepuMhRYN77UtqSv4-cOgAJvdO1hvN_RrHBT7yoUMzu-0yJ39RNQu9uH0Wx2eqfB0UkCQfTHiYJHSY50eOKf-D1jNLhzCdrR73adLz94Jrs08vbn5_HfjDeQHhNBoLLG3g4j4FwvIHomgyElzewOI-BaLyB-JoMRJc3QP3zL6ETLTyjrHklcdSK8dshMN-gzkXyRqzxi-Drrox-fOq47iLPUSr9NtAPy0q_ahscD8cu8NwFXrjAlJppOiGxYBocu8BzF3jhAg8SO6KDIe3_SYfmuEMjTPt5-0M6cpFlhi2yzLBFlhm2yDLDNlmxi6x7l7jNsCVuM2yJ2wxb4jbDtrjnLnE_uMRthi1xm2FL3GbYErcZtsW9cImbTlmWx3folG05lbZd_lP25VTaljk92h7G0NP9fz8DAAD___Wz59Q=

#
# -- 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#eJyslE1vozAQhu_7K1bvaVeyFAzki1P2mMM2VdqeKg4uHiGkBCPbSK0i_nsFHAJRYqjgaJt3nnmMNRfkStKTOJNB9A4OBh8MARhCMCwRMxRaJWSM0vUnbWAvPxF5DFlelLbejhkSpQnRBTazJ0KEV_FxoiMJSXrhgUGSFdmpwRQ6Owv9tcvLs1XGajAcShv93nHEFYMq7bWssSIlRLxi49H_0lRTKqzSi2Wf_PL2_8-O_32I8R9irtXLXGlJmmSvdFy5G-HezzoJep3w8XfNZ77rAXRHcTXlrv3xhv7MhgPojuF6imEw3jCY2XAA3THcTDEMxxuGMxsOoDuG27kmwh3MkUyhckM3k-F-Za-eGCRTaseLUaVO6FmrpMG0y0OTazYkGdue8naxz9ujusFumDvDfi_Mb8O-mzyADpzp0B0Op_S9dIZXbvJqCnntDG_c5M0U8tb9r7yBZ-J-ZLfsuPr1HQAA__8CqbEl

# 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#eJyslE2LszAQx-_Pp3iYUxcCNWrfPHXZUw-rS1_YwyLFNYMIbSJJhF2K331RD1Vpo6DHJP7zm98Y5gZcMPSjKyrwvoACARsIOEDABQILCAlkUsSolJDlJ3Vgx37AswikPMt1uR0SiIVE8G6gU31B8OAYfV9wjxFDObeAAEMdpZcKk8n0GsnfLc-vWigtgUCQa--_LzhCWBAQub5frHSUIHi0IMPhr0kiMYm0kPNFm_0WnPzjeR98HmYvT1n2U9YdkXMhGUpkrfvDwlwN7bTicHo_7_zjbEufV-O0qqHD204nb3sPvCG6HN12e7ioPbloD7whuhot6gwXdSYX7YE3RNejRd3hou7koj3whuhm0onxgLVHlQmusDM5Ht9slRMFWYL1-FEilzF-SBFXmHoZVLlqg6HS9SmtFzteH5UFNsPUGLZbYdoN22ZyD9oxpl1z2B1T98IYXprJyzHklTG8NpPXY8gb87-yep6J-ZF12WHx7y8AAP__2avBCw==

# 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#eJzElF2LnDAUhu_7K4YDy24hsBN1ZmdzNaW0RdpqcVx6UWSx5lQEx0gSS8vify_qxarMRMGCl368eV6eE84LFIKjF59RAfsBFAhYQMAGAg4Q2EFEoJQiQaWEbH7pAi7_A2xLICvKSjevIwKJkAjsBXSmcwQGYfwzxwBjjvJ-CwQ46jjLW0wps3Ms_x6L6qyF0hIIfMxyjZJtjtbmi_v5w-b25lf2G29uGWOnMHC9T0DArzTbeKJAiGoCotKvcKXjFIHRmswv-C5NJaaxFvJ-N-z33n_ywufA_366e3uVZV1lvSKqQkiOEvng_Kg2t6EjXaenr8-uF94d6fU29qANnT8auspoJgr2ZOwXj8aaL8NaRcZEwZ6Mh8Uy7Pky7FVkTBTsyTgsluHMl-GsImOiYE_G43_dYBdYAapSFApHm-zyydtmwyFPsVuHSlQywW9SJC2me_TbXPuCo9LdV9o9uEX3qSnYD1Nj2BqE6ThsmckTaNuYdsxhZ0nvnTG8N5P3S8gPxvDBTD4sIT-aZ7WduCbmSzZmR_WbfwEAAP__sAnyEQ==

#
# -- Limit tests --
#

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr LIMIT 5]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBEEMhXt_xfHqgLuFzVTXHognh51sMe6EY2B3siQZUI7573I7hVgIlu-95H3JDUUSv8SVDeEdIybCpjKzmejd6gOn9IkwEHLZqt_tiTCLMsINnn1hBLzFj4UvHBPr4wBCYo952Ws3zWvUr2Opq4u5gnCuHg7HEYTnvGY_PGFqBKn-AzCPV0YYG_3_iAvbJsX4F_-v5qFNBE5X7o-aVJ35VWXeMV2e973dSGze07GLU-lRm9rDdwAAAP__KwVtCg==

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT y FROM NumToStr ORDER BY y LIMIT 5]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMjzFLBEEMhXt_xfHqgLuFzVTXHognh51sMe6EY2B3siQZUI7573I7hVgIlu-95H3JDUUSv8SVDeEdIybCpjKzmejd6gOn9IkwEHLZqt_tiTCLMsINnn1hBLzFj4UvHBPr4wBCYo952Ws3zWvUr2Opq4u5gnCuHg7HEYTnvGY_PGFqBKn-AzCPV0YYG_3_iAvbJsX4F_-v5qFNBE5X7o-aVJ35VWXeMV2e973dSGze07GLU-lRm9rDdwAAAP__KwVtCg==

# 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-ivBmldiBLJqyBkpSQrfiQbWOILB9QneCluD_XmQNTQpNM967-57e0wUTezq4kQT2HS0MtugMYuKeRDgVuR7t_SdsYxCmmLXInUHPiWAv0KADweLAzxzXxcWTujAsZ7MBZ_2BRN2ZYDezuTJu7xu_uY-BTuQ8pXVzY4-YwujS127Ko7JogsExq13tSoyXMAZdbfFXiPYmxD_tTiSRJ6GH6jVzZ0D-TPUHhXPq6TVxvzxTx-PCLYIn0brd1GE_1VUJeA23d-HmF9zNT98BAAD___cAnxU=

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#eJyMj7FqxDAQRPt8RZhaELtVde01uXCkCyoUazgMtuTsriDh0L8HW0VIEUg5M9J77B25JD7HlQr_hhHBYZMyUbXIXvUH5_QJPzjMeau218FhKkL4O2y2hfB4je8Lr4yJ8jTAIdHivBzYTeY1ytcp19WKftQohMOlmn88jQjNoVT7IavFG-HH5v5vv1K3kpW_xH-RhxYcmG7sF2qpMvFFynRoerwc_44iUa2vYw_n3KcW2sN3AAAA___R0mt-

# 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#eJyUkcFKAzEQhu8-RZmTYqCb7S2niqeCdKWteJBF4mZYAt3MOpmAUvbdZTeIVmixx_kn3_8F5gCBHK5thxHMC2ioFfRMDcZIPEb5wcp9gCkU-NAnGeNaQUOMYA4gXvYIBnb2bY8btA55XoACh2L9fqrt2XeWP5chdULxPVlGUFAlMbNlCfWggJL8NEexLYLRg_q_fUssyHN9LF7q22_RmsIoffCdl5kuTlrLS6x3bcvYWiGel8fm--ppvXvdVM_b65uTrsUlrg3GnkLEI8-p5mKoFaBrMd8wUuIGH5maSZPHauKmwGGUvNV5WIW8Gj_4G9Zn4fI8XJ6FF3_gerj6CgAA__9GENxp
