# LogicTest: 5node-dist-opt

subtest scrub

# TODO(radu): rework or remove these tests (the inner ORDER BY is ignored by
# the optimizer).
#
# # Verify the index check execution plan uses a merge join.
# 
# statement ok
# CREATE TABLE test (k INT PRIMARY KEY, v INT, data INT, INDEX secondary (v) STORING (data))
# 
# query T
# SELECT url FROM [EXPLAIN (DISTSQL)
#     SELECT leftside.v, leftside.k, leftside.data, rightside.v, rightside.k, rightside.data
#     FROM
#       (SELECT v,k,data FROM test@{FORCE_INDEX=[1]} ORDER BY v,k,data) AS leftside
#     FULL OUTER JOIN
#       (SELECT v,k,data FROM test@{FORCE_INDEX=[2]} ORDER BY v,k,data) AS rightside
#       ON leftside.v = rightside.v AND leftside.k = rightside.k AND leftside.data = rightside.data
#     WHERE (leftside.k IS NULL) OR
#           (rightside.k IS NULL)
# ]
# ----
# https://cockroachdb.github.io/distsqlplan/decode.html#eJyckc2K2zAQgO99CjGnLBlIJDs9CAq6dCFLGpdscio-uNY0a3AkM5Khy5J3L45hNw5x2vQ4I33zzc8bOG9pXRwogP4BEnKEhn1JIXjuUv2Hpf0Neo5QuaaNXTpHKD0T6DeIVawJNGyLnzVtqLDEszkgWIpFVZ_KNlwdCn41kUIEhKyNWhiFRqJJID8i-DZ-FA6x2BNoecR_lz97jsQzOfQaOUWjpmiS6ahG3aM5n1ENXYFK7-zdUyb_MWUyPiXCoYjli6jJaaFGremo9UPWOs-WmOzAlnfk375caf0b8Z6efOWIZ-mw_-1rQ1o87lYrke22XzfiKVuuAaGmX3FyNtzDF672L8MUIDxWdSTWYmKUWD6L9W61ehDZRkzM4j1-P4fE7iIJmhTNAs3n0Q0t7rnLhkLjXaDLTV2tPO_WQ3ZP_bqDb7mk7-zLk6YPsxN3SlgKsX-VfbB0_VPX4Dksb8LpAJaXsLoJJ7fNyR1mdQmnN-HFhTk_fvoTAAD__3P7gDg=
# 
# # Verify the foreign key check execution plan uses a merge join.
# 
# statement ok
# CREATE TABLE parent (
#   id INT PRIMARY KEY,
#   id2 INT,
#   UNIQUE INDEX (id, id2)
# )
# 
# statement ok
# CREATE TABLE child (
#   child_id INT PRIMARY KEY,
#   id INT,
#   id2 INT,
#   FOREIGN KEY (id, id2) REFERENCES parent (id, id2)
# )
# 
# query T
# SELECT url FROM [EXPLAIN (DISTSQL)
#     SELECT p.child_id, p.id, p.id2
#     FROM
#       (SELECT child_id, id, id2 FROM child@{NO_INDEX_JOIN} ORDER BY id, id2) AS p
#     FULL OUTER JOIN
#       (SELECT id, id2 FROM parent@{FORCE_INDEX=[2]} ORDER BY id, id2) AS c
#       ON p.id = c.id AND p.id2 = c.id2
#     WHERE (p.id IS NOT NULL OR p.id2 IS NOT NULL) AND
#           c.id IS NULL AND c.id2 IS NULL
# ]
# ----
# https://cockroachdb.github.io/distsqlplan/decode.html#eJycklFrnTAUx9_3KcJ58nID1bi9BAYZbAWL0-G8T0PEmXNtqEskidBS_O7DCGstvRvdY345__wO5-QRtJFYdL_QAf8BCTQUJmt6dM7YFW0FmbwHHlNQepr9ihsKvbEI_BG88iMCh7r7OWKFnUR7FQMFib5TY3i2v1WjbLvZm1Zpifft-a5VsrV4bqfOovYiVECzUDCzf3I43w0IPFno__WR7PvYZKtaSdbe4YPYyEUxuyh-8s3aWIkW5c7VrMl_lbzS_Ve0A94YpdFesX339cOEnFyf8pyUp_pLRW7KrAAKI559JNiRivR4-GjVcOsjkRypYMcDULhWo0fLSRRFgpHsOynKmhSnPD-QsiKRSHfsQD4Vn0kk3gf6nHz4Q4BCOXtOREIFoyK9OL70LXur0E1GO3w5xldfjtfZoRxw24Uzs-3xmzV90GzHMuQCkOj8dsu2Q6bDVfhYz8PJG8LsZZj9NZzuwvHSLO9-BwAA__9_viDb

subtest stats

statement ok
CREATE TABLE data (a INT, b INT, c FLOAT, d DECIMAL, PRIMARY KEY (a, b, c, d))

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

# Split into ten parts.
statement ok
ALTER TABLE data SPLIT AT SELECT i FROM generate_series(1, 9) AS g(i)

# Relocate the ten parts to the five nodes.
statement ok
ALTER TABLE data EXPERIMENTAL_RELOCATE
  SELECT ARRAY[i%5+1], i FROM generate_series(0, 9) AS g(i)

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

query T
SELECT url FROM [EXPLAIN (DISTSQL) CREATE STATISTICS s1 ON a FROM data]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lMGOmzAQhu99CjRnI2NDslmftse9dKtNbxUHF48oEsHINlLbFe9eAUJboo2x5PSInT_fr2-seYNOK_wiL2hBfAcGBDgQyIFAAQQOUBLoja7QWm2mnyyBZ_ULREag6frBTcclgUobBPEGrnEtgoBv8keLrygVGpoBAYVONu2M6U1zkeb3k5JOAoFzLzsrkpSyRHYqYYl2P9EAgZfBieSJQTkS0IN7Z1knawTBRhLe5ywvfYuGHrZdluNz8wdFMtU8O-mH8pvQd9bQaaPQoNqwyvFmrc91bbCWThvKssiC-aYgC58SC5kSZSnlUXPaabTO6XjXOfFwDTxIA09pHqVhp9Gq4eGuGvJwDXmQhjylRZSGnUarhtNdNRThGoogDUVKD1EadhqtGh7_2_L6APqKttedxasl9vE_Z9NyQ1XjsgmtHkyFX42uZszy-TLn5gOF1i23bPl47parqeC_YeYN802YXYe5n7yDzr3pwh8uYnofvOGjn3yMIT94wyc_-RRDfvTPKtt5Jv5Hds0ux09_AwAA___WSOum

statement ok
INSERT INTO data SELECT a, b, c::FLOAT, 1
FROM generate_series(1,10) AS a, generate_series(1,10) AS b, generate_series(1,10) AS c;

query T
SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 ON a FROM data]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lEFvmzAUx-_7FNY7GxkbkqY-dcde1qnZbeLgxk8MiWBkG21dle8-GRR1iRrjZeGI4b3_T78_8ht0RuMXtUcH8jtwoCCAQgEUSqCwgopCb80OnTM2fDINPOpfIHMKTdcPPhxXFHbGIsg38I1vESR8Uy8tPqPSaFkOFDR61bRjTG-bvbKvD1p5BRS2veqcJBnjRHWacGL8D7RA4WnwkjwEKGt-OmJRaUl4HrY5r9qW-GaPkuQOqgMFM_h3GudVjSD5gaYTb9W-b9Gy1SntdLxtfoeogOvVhHUpVFwMfc8aOmM1WtQnWdXhItbnurZYK28s4_l_AhYngDy9R57SI-MZEylNiuubnGE-Nrm-aZMiXZRIEiUyViwsaob5KOrupqKKdFFFkqgiY-XComaYj6I2NxVVposqk0SVGVuliCquFzXDfBR1v9gl-kHoM7redA7PLtOPN-fhkkVd43QjOzPYHX61ZjfGTI9P49x4oNH56S2fHh676VUA_HuYR4fFyTA_Hxbx5JnoIjpdxofLf-EeLY5C4eXVoyMOOx8qrc7XrqJr13Gm9TJMd9G1mzjTZhmm-3jz-cxPF_9l06mqw6c_AQAA__9MtUBw
