# LogicTest: 5node-dist

# These tests are different from explain_analyze because they require manual
# data placement and are run without the optimizer.

statement ok
CREATE TABLE kv (k INT PRIMARY KEY, v INT)

statement ok
INSERT INTO kv SELECT i, i FROM generate_series(1,5) AS g(i);

statement ok
CREATE TABLE kw (k INT PRIMARY KEY, w INT)

statement ok
INSERT INTO kw SELECT i, i FROM generate_series(1,5) AS g(i)

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

# Split into 5 parts, each row from each table goes to one node.
statement ok
ALTER TABLE kv SPLIT AT SELECT i FROM generate_series(1,5) AS g(i)

statement ok
ALTER TABLE kw SPLIT AT SELECT i FROM generate_series(1,5) AS g(i)

statement ok
ALTER TABLE kv EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1, 5) as g(i)

statement ok
ALTER TABLE kw EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1, 5) as g(i)

# Verify that EXPLAIN ANALYZE (DISTSQL) annotates plans with collected
# statistics.

# Verify data placement.
query TTTI colnames
SELECT start_key, end_key, replicas, lease_holder from [SHOW EXPERIMENTAL_RANGES FROM TABLE kv]
----
start_key  end_key  replicas  lease_holder
NULL       /1       {1}       1
/1         /2       {1}       1
/2         /3       {2}       2
/3         /4       {3}       3
/4         /5       {4}       4
/5         NULL     {5}       5

# Verify data placement.
query TTTI colnames
SELECT start_key, end_key, replicas, lease_holder from [SHOW EXPERIMENTAL_RANGES FROM TABLE kw]
----
start_key  end_key  replicas  lease_holder
NULL       /1       {5}       5
/1         /2       {1}       1
/2         /3       {2}       2
/3         /4       {3}       3
/4         /5       {4}       4
/5         NULL     {5}       5

# This query verifies stat collection for the tableReader, mergeJoiner, and
# aggregator.
query T
SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT kv.k, avg(kw.k) FROM kv JOIN kw ON kv.k=kw.k GROUP BY kv.k]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzcWF1vo0YUfe-vGM1TqsWCGXDiIFVi26e0G7vKx0NVWREJUwetDdaAuxut8t8rsLu2wZ47E8YzbN4MhrnnHi6HM-cbzvKEjeMFK3D4NybYwRQ72McODrCDh3jq4CXPn1hR5Ly6ZH3DVfIVh56D02y5KqvTUwc_5Zzh8Bsu03LOcIjv4sc5u2FxwrjrYQcnrIzTeV1mydNFzF-iz_9iB98u46wI0cCtCk9WZYiiCgbPvxSIszgJUXVYlPF8jsp0wULkFXj66uB8VW6qb4s-vqDnuHjeLxcRPH2d1mvMGA7Jq_O2Ls6PdPFl24VLzPVBj_axXSfnCeMsaa7zoSosddUBSq4Zn7Hf8zRj3CWNJztn_5RnEfnw8y88nT2vf27pcKKKm-oa1KClPtfgxsH1Gs1L1ydb1y7ir2jBFjl_QauCJSGiHvoj_bXB8JY9X2UKPs5mnM3iMucuGbYeioMnawI3j_zj-K-H8eTuYXz_6dNZRCoCbu-vzyJa_fptcj--2_wWz8aBnsihntSmJug2NWJyqNeNnNv764erih6_OrphWcJ4PTgoom7ka6NsS8dQgo5VdoiQg1yM80G-dOmwceXh2ud7tYm8EBFYTl06cH0rgqrQx4WEoBrsgx7tw6Cgku6C6skLqqcgqB6SVVNgBHbV9PwkaupJSUO7oS5SqjwvgJQSg1L6Vr6O6SiV1wAqoWX-wA2saJlCHyMJLTPYBz3ah0Eto-9Ay4AR2NWyi3ejZcrzAmgZ_YG1zJfXAF9Cy4KBO7SiZQp9XEpomcE-6NE-DGqZ313LAnktC0610QWmYFfORieRs8DORld5agBF8w0qWgfKjolaIC8GgYSoDQdWJE2hiyEsaQOXoDhLEEF5-cy4FXEL7Ihb8A6MGjAMu8p2-W6MmvK8ALIW_MBGDchwb1ixzLOCSUVzXkUUS2ZsTWyRr_gT-5PnT3WZ9eGkvq_e-CesKNf_0vXBVfb_X0UZ12tvOs9XJdv03m51czJJi8_fT9WvuHz9ke76Dn58KVmBCpaVb8BD_L4BkmSImAJEzTNEFEaYnmCExfVHuut35KMxwj0AJMmQxhEGJsY8Q7QJyNsFtI_Ha97sC7sJdAtEC7y4PvGMCwIAaNgzQLRvDFHzDAXCF6CBp3nzUHgzPd9_fU7wBTg3a6JANsV4tJsqxfoWTBQAyLyJAibGPEMXZk1URzzaTZVifQsmCgBk3kQBE2OeoZHwM3ApNlGXOkyUxmbEePSbKlUA5i2CGJAFEwUAMs8QaW3NRS5qBxC0rsoO20ijKlvuHgDS73iUEZi3ONDUWAiKWttsyyYHAGQhOhID0m97lBFYCIuAqbGQp7W273s6TwKx1SGtzbZlrwMAspAgQYi0f9tVEViwOxAiC35HHPy83e_0Lc8BAFnwO71LeCBE2v2P8tRY4KRvoQ4AyILf6V3MAyHS7n-Up8YCJ-JkhwDRDulbtgMAsuF3epf2AIhk_U_Q4T3oXb5DT5TvUC35jsYtFwDIvN8BAFnwOxCi3nGk3_-0EWjJd3TOcd_yHQCQBb8DIeodR_r9TxuBON-hQL5D-5bvAIAs-B0IkYVve-_yHgjR6TMwqivfmb7-9F8AAAD__wP4iaQ=

# This query verifies stats collection for the hashJoiner, distinct and sorter.
query T
SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT DISTINCT(kw.w) FROM kv JOIN kw ON kv.k = kw.w ORDER BY kw.w]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzkWNGOozYUfe9XWPepVYnABrIZpEqjVR-6rdSpdvtW5YEJ7gRtApHtdHe0mn-vIIkYSMbXnjA20r5NAHPPvRyf4zPfoKoL_me-5RKyf4BCAAwCiCGABAJIYRnATtQrLmUtmkcOCz4UXyGLAiir3V41l5cBrGrBIfsGqlQbDhn8nd9v-EeeF1yEEQRQcJWXm7bMTpTbXDzefv4PAvi0yyuZkVnYFL7bq4zcNjBE_UUSwfMiI81PqfLNhqhyyzMSSVg-BVDv1bF6V_T-kaxzue6Xu6WwfFq273jgkNGn4HVdzF_o4kvXRUif98HetA_2Yh_de_ZVLQoueNF707JZiT1yYRi_5XL9e11WXIR08Ek3_F_14y396RdRPqzbv3pTaG6TwSjaa4N5BNCuHz56uHj2rFS14AWRZcEz0j4DAWzzr2TLt7V4JHvJi4ywiPxRvj_eKUr5-Xg9Iu8H8-9mG9tw5FMtVDOSdPi5fka__wW49BVwExu4v5ZSldVKhSw641cAdwcyGO3CC-h1KFMDwl7iYjvJi4TsWjmbva6V9OpW5r1WqLmGUFwJQzYLYy9aaNHHOwMt7PXhUgupYy2kV2lhZK6FkaEWNq97idJX6CDCj5MOzhEdjIy33xUiiGDtlIPaKIc5dDMRZOY7jhkoRzwLEy_KYdHHwkA5en24VA7mWDnYd6IcCD9OyvFuCsqBYO2Ug_lUjth8x8UGypHMwtSLclj0cWOgHL0-XCpH7Fg54quUIzFXjsR__kI4clKPBaIeiaP8hcDtBCS2ERAz9OYCkphvvMRAQNKZF_mw6CLF5WMWUpJXBaGkVmsuvAhJ4lhIku_kCIIw5SQiN1M4giBYOwVJfB5BkP8zfeRyV1eSDxl78c1RQ1NePPAD7WW9Fyv-l6hXbZnDz7t2XRvtCi7V4S47_PhQnW5JlbfvPnZe7xU_9n7e6oVvBO2eMq-_GLt-APePiksieaVegYfGUwNkOCHqChBzPyFqQWH2BhTW11-MXf_KeQwoPAFAhhMakcIIY9xPiA0BRc8B9fFEw8WxdnGiX5xoF6f9zTxcnGoXs3m_9Btsvblb90K_ox7P6G5mWd-DeyGA3LsXwhj3E3rn1r2uxDO6m1nW9-BeCCD37oUwxv2EFlobuNEb0I12MY30q-nZaVTnX89mgZ0QbA6VTg65NqfMCQAa32usEbg3F4w1HrLR2cnSs70ggDykJT2g8Q3HGoGHfISwxkOE1IcciqQcqo85NEWW64PO611mavkFAeTBZSaXaDBEo7uONWs8zGRqIQYB5MFlJhdrMESju441azzMRJ9kKBJlqD7LMCTLsDfKMmyULDPi8QIB5N5lEEAeXAZDNLkZje865whGyTJj8nhqWQYB5MFlMESTm9H4rnOOQJ9lGJJlmD7LMCTLsLGyzPLph_8DAAD___0pxVo=

# Verify that EXPLAIN ANALYZE on an unsupported query doesn't return an error.
statement ok
EXPLAIN ANALYZE (DISTSQL) SHOW QUERIES;

statement ok
EXPLAIN ANALYZE (DISTSQL) EXPLAIN SELECT 1

# This query verifies support for zeroNode in DistSQL.
query B
SELECT automatic FROM [EXPLAIN (DISTSQL) SELECT sum(k) FROM kv WHERE FALSE]
----
true

# This query verifies stat collection for the tableReader and windower.
query T
SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT avg(k) OVER () FROM kv]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy0k79O8zAUxffvKaw7fUiO8p_BU2FBFRJFBcGAMrjxVRWR2JHt0FZV3h3FGUpKC0FKR9s55_zOVe4epBL4wCs0wN4gBAoRUIiBQgIUUsgo1FrlaIzS3Se9YC62wAIKhawb211nFHKlEdgebGFLBAbPfFXiErlA7QdAQaDlRelial1UXO9m7x9A4anm0jDi-V3worGMzDoMrTaGaOSCke5oLC9LYosKGQkMZC0F1dhDurF8jcDClp4hPIA1UmmBGsUAKmtPdHgtpFAb1H46LHDzcvd_Fl4NMdPvmBQqviUVVkrvSGNQMBIH5L64PVsgGhQIx484_H3EfuT58eRDjsYzRiMYY89PJmeMxzPGIxgTz_0Q0zIm4xmTEYypd9F1OkG4RFMrafBorU47B926oVhjv5tGNTrHR61yF9MfF07nLgQa27-G_WEu3ZMD_CoOfxRfD8TBsTj6S7Kr4lrBamfREIPSMhJ0wxzaxpexTS5jm05km7X_PgMAAP__qSEMvQ==

# Very simple query to make it easier to spot regressions when rewriting results
# in test files.
query T
SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT k FROM kv WHERE k = 0];
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkL1OxEAMhHueYjW0Rtm0W117DYcOOpRiyVqniCQb2Q4_Ou27o2QLRIF05czY40--Ys6JH-PEivCKFh1hkdyzapbNqgPH9IXgCcO8rLbZHaHPwghX2GAjI-Alvo185phYGg9CYovDuNcuMkxRvg_vHyA8L3HW4Br_0PjmHoTTasEdWhAkf6oTjim4rUEtjqOzYeLgvKIrhLzaL4FavDBCW-h2yjPrkmflP4D_NfvSEThduH5C8yo9P0nu9zNVnva93UisVtO2iuNco9KVu58AAAD__6_vdYQ=
