# LogicTest: 5node

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
# 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
# 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))

# 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,rowsort
SELECT start_key, end_key, replicas, lease_holder FROM [SHOW RANGES FROM TABLE data WITH DETAILS]
ORDER BY 1
----
start_key           end_key       replicas  lease_holder
<before:/Table/72>  …/1/1         {1}       1
…/1/1               …/1/2         {2}       2
…/1/2               …/1/3         {3}       3
…/1/3               …/1/4         {4}       4
…/1/4               …/1/5         {5}       5
…/1/5               …/1/6         {1}       1
…/1/6               …/1/7         {2}       2
…/1/7               …/1/8         {3}       3
…/1/8               …/1/9         {4}       4
…/1/9               <after:/Max>  {5}       5

query T
EXPLAIN (DISTSQL) CREATE STATISTICS s1 ON a FROM data
----
distribution: full
vectorized: false
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lV9vozgUxd_3U1j3pa1kBAbyj6dGbapFapJujLS7GkWVC7cpKsEZ26jtVPnuI5LJtGEalCDBAwKDz_2do2vdd9DfMwhg9N_d7TCckPPrkEf8n9sLcjUbDaMR4dEwCnkUXnGiGZlOiCA3s-mYJMII8m8Y_U2md1E4nXAy5GR6Q_j_PBqNSRSOR-TMYoU-Awq5THAilqgh-AYMKLhAwQMKPlDowJzCSskYtZaq_OV9syFMXiFwKKT5qjDl8pxCLBVC8A4mNRlCAJF4yHCGIkFlO0AhQSPSbFOmBLwsb_erZ3wDClcyK5a5DogACnwlykfLZkTkCWFEmidUQCHMY5nrVBvMDdGxyMn5UrwSo4lYIOksHX0B8zUFWZgPLG3EAiFgn3yE1xA4a3q8FS6WqwyV3dm3sV3m6Q8MCHMcp3TJjTABuWQHQdwKSOcgyEf9IpcqQYXJXv35-iDqcLFQuBBGKps5x0OTc9dxyEMRP6OpydKrWGD7YbLj-4I16AubWbbbYmewU8zsOqPbQmd090Dc41N1m6TqWrbXYqruKWZ2qfZaSLW3B-Idn6rXJFXPsv0WU_VOMbNLtd9Cqv09EP_4VP0mqfqW3WkxVf8UM7tUBy2kOjhlSM1Qr2SusTIjvq7kVCpZrBwmmCxwO3m0LFSMd0rGm3-3r9ON0GYhQW22X9n2Jcx3n7RRKJa_Z-xnJVar5O4psc9KnaqSW890CpRXK-UfVmJVJb-pvW5VqVOr1D3M5FaVuk2ZelWlXq1S_zCTV1XqN2XqV5UG9W3gHIby_-jN-javoRqUR-cxky_3aQIBOL8u64vb7oJyg1jo8vzyJ_mykY3eVuXpexSZRgpj8YzXaFAt0zzVJo0hMKrA9fqvnwEAAP__bD7lOg==

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
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 ON a FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsVtFuo8gSfb9fUaqXSSQcaMCOw9PkejJaa5Q4MmhWq1U06kANg4y72e5GSTbyZ-0P7JetgPHGZozXRLKUh-EBuauLqnNc57T6GfUfOQY4mV9dRlcQRpfRNIymkxA0g9kNcPg4n11Dwg2HX6fRLzC7jaazmxAuQ5h9hPC3MLq6hmh6fQXvBqzU79BCIRO64UvSGPyODC100UIPLfTRwiHeWVgoGZPWUlUpz_UH0-QRA8fCTBSlqcJ3FsZSEQbPaDKTEwYY8fuc5sQTUraDFiZkeJbXbSqA76vXl2JBT2jhROblUugAOFoYFrz6ObAZcJEAA2m-kUILpyKWQmfakDCgYy7gZMkfwWjgKcFw6ehTtPDTZ6gg6gAEa5aK0kxWJQ1p04RMtqQAnL__0s06lqKqmknxw5aSDxoSimVCSQDMcZrw_ZMhDYp4EsDYceD_TTid304g5nmuN3ILnql1rlsHrz9PJqANFRDLUhg4oUdjZ8KcBuDYLwlEi66EGpYsTVGaptPdysJm_X0g2vCUMGAbE5x-wMBZWYcPMeTLIidlD7cH2ITD7E-qe9eUQsNNAO9ZJxC3BWTYCeSlfymkSkhRstX_btUJ9TJNFaXcSGUz53DQcOI6DtyX8YKMPu2k4LUosO0_kx3uCPYKR9hsYLtv0BPuLk-wsxF8yna4wt3lCv8YrnB7uIL1GeTaFaMjuGK0BcQ9XFHuaxTlDmzvp6KOoii3zyDXijo_gqLOt4B4hyvKe42ivIHt_1TUURTl9RnkWlHjIyhqvAXEP1xR_msU5Q_s4RtUlLdLUe6Zt1tR3i5FjY6hKK-Hovw-g1wr6uIIirrocymdky6k0NS6E-7u5LQ6DVh1eaQkpeamqWWpYrpVMq5zm-WsLlQHEtKm2WXNYirWW9oo4st_79SbldjeSu5WJbZZadiu5O7H1AeUt7eU312JtSv5fenxeiooyDxItWicpEnUB2DlzfVG46Vm5-V0Xu8uSWueviRUSt_EOWrjHO7FOepm7LYrjd4m4_M2zvO9OMfdjL12pfHbZDxu47zYbxCnm7L_g2v3HwC9OHudnN0z_z84D1ucL6oj62suH75kCQbofH8GO17rB6sPeKqrczP8Jh9q0NFTUZ16X3muycJrvqAPZEgtM5Fpk8UYGFXSavW_fwIAAP__4lPbAw==

query T retry
EXPLAIN (DISTSQL, TYPES) SELECT * FROM data
----
distribution: full
vectorized: true
·
• scan
  columns: (a int, b int, c float, d decimal)
  estimated row count: 1,000 (100% of the table; stats collected <hidden> ago)
  table: data@data_pkey
  spans: FULL SCAN
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyklEFvmz4UwO__T2G903-TERjIDpw2NZmElKZZ4LBpiioXv6aogJlt1FUR330ydGtBSYWID5bs5_zeLw8_H0H_KiCC1fft-ku8If8v4yRNvq0pSX9sV8kHkqzWq6uUfCRfdzfXRHDDgUIlBW54iRqin8CAgg8UAqAQAoUF7CnUSmaotVT2yLH7QSx-Q-RRyKu6MXZ7TyGTCiE6gslNgRBByu8K3CEXqFwPKAg0PC-6NDb1Zzvd1o_4DBSuZNGUlY4Ip-SOkowSARSSmts9x2WEV4IwIs0DKti3FGRjXjNrww8IEXujGi8h8lp6xvZVsqmkEqhQDAXzygB9me8LyU0XzvKSF7BvT_zZjXRk7S4GlHOe_shzMfBk06vKLqmqyxzXn1VXNvD1p_v6F_n6jhvM8vUHvsF03-Ai38Bxw1m-wcA3nO4bXuQbOu5ilm94ts9O-O5Q17LSOKlTvFEmh9neQ3HAvou1bFSGWyWz7my_vOlA3YZAbfoo6xdx1YWYzaCQl_-eibck9i7p04DkvUvy5zqxMSmYS_LHpHAuKRiTFnNJof2K94V8us0FROC9DOfE9Hd07zA_aHuVkgf51GHT59peBKMapHDNH3GJBlWZV7k2edYH2va_PwEAAP__DBRFDg==

# Check that we properly render virtual computed columns when collecting stats.
statement ok
ALTER TABLE data ADD COLUMN e INT AS (b + 1) VIRTUAL

statement ok
CREATE INDEX ON data (e)

query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsV-9u2zYQ_76nONyXphgdiZLsOPqUzE0xo8gfWEKHYQgKRrq6QmzSI2kkWZDH2gvsyQZJVW0plmshKFoD9QdBvDsd73f348_gI5q_ZxjiaHJ2Gp9BFJ_G4ygejyIwHN5OLs8hFVbAH-P4d7i8iseXFxGcRnD5FqI_o_jsHOLx-Rm86vGleYUMpUrpQszJYPgXcmToIUMfGQbIsI_XDBdaJWSM0nnIY_HBOL3H0GWYycXS5uZrhonShOEj2szOCEOMxc2MJiRS0o6LDFOyIpsV2-QFnuSPD4tbekCGIzVbzqUJQTC4YZAwSJFhtBC5redwEDIFDsp-Io0MxzJR0mTGkrRgEiHhYC7uwRoQU4L-3DWvkeGEZEo6hBPO4MRjcOIzOAny9195GIbji3iIDN-9hxyRCUHycqlpmql8Y0vGliabzSkE979_TblOlMz3zpR85tLqzkBKiUopDYG7bmm-ebBkQJNIQxi6LvxWmqeTqxEkYjYza7ELkekq1iuM5-9HIzCWFpCopbRwQPfWyaR9HYLrrAKIbtsCirLU0i6Wttzp-olhuf48P2PFlDDkawMfv8HQfWK7zzwS88WMtNOvz7s0R9k_VOxdQIqssPlsVq_empWtr_y6g60bgmc-tm7rt-L0Gjj7rThX8JZS6ZQ0pTV410-tnTidTjVNhVXa4e7uPYEDz3XhZpncki2oXHWozdHo17aweve-ElnvZSO4rbN-o7O8TiG-u2zwl8iGw3uOt7fC4W0SDn44gHfZBunwNklH8C2kw-sgHbzL3CvpGOyfdAxqOL3d-e29iN9ez_F_8vs78tvrMveK30f7x--jGk5_d377L-K333OCn_z-jvz2u8y94vdw__g9rOEMdud38CJ-Bz2nv7f89jfx2zv0N_Pb38Tvwbfgt9-B30GXuVf8Pt4_fh93ucJNyCyUNNS44mzeyW3s1OP5XYjSKZUXJ6OWOqErrZIitlxeFokKQ0rGll5eLsaychmrScy_3EDXM_GtmbxaJr6eqd_M5G2vqUtR_tZUQXsm3swUdIUniqmgJHun9G15UA3JQu1zJagc5VEtPau_oso7J2PEdBXgBni9XuegWWd_a52DdsReM9Pgx0R81KzzaGudw3bEfjPT8MdEPGzWebz9gLjtkINnp3a7AHTC7Ldi9g6Dr2DuNzAf55L1cabuPmQphuh-_vU2PKof5h-Iqcl1M_qk7oqi44dFrnofxcwQw3NxS2_Ikp5nMjM2SzC0eklPT7_8HwAA__-heK4y

query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 ON c, e, a FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsV1Fu20YQ_e8pBvOTBF2FXJKSZX7JVRyUCGwFIpGiKIxgTU4YwtQuu7uC7Ro6Vi_QkxUkrURiJEEyqiYBwg8COzucecP3HrF8QPNniSGOp-dnyTnEyVkSxUk0jsFwmFxCyoAYCHg9nVxAJqyA36LkV5i8TaLJZQxnMUxeQ_x7nJxfQBJdnMOzHp-bZ8hQqowuxYwMhn8gR4YeMvSRYYAM-3jFsNIqJWOUrlMemgei7A5Dl2Ehq7mtw1cMU6UJwwe0hS0JQ0zEdUlTEhlpx0WGGVlRlE2bGuCovr2vbugeGY5VOZ9JE4Jg9SjXyDCuRB3oORyEzICDsh9JI8NIpkqawliSFkwqJDyfiTuwBkRO0J-55gUynJLMSIcw4gxGHoOR_zMPwzC6TIbI8M07qMcwIUjeLjXlhaobWjK2DdliRiG4__xt2nWqZN2zUPKLLa1uDWSUqoyyELjrtuHre0sGNIkshKHrwi9tOJ--HUMqytKs5Fai0MtcrwlevBuPwViqIFVzaeE53VmnkPZFCK7zOYHoZltCA0vNbTW3baerBcN2_UiasSInDPkKy9ErDN0F25_oWMyqkrTTXye5DcfFX_Wbqgm1wjZ8jDw28rdC8TpQ-luhfEYwl0pnpClbQ3C12Ar2LM815cIq7XD3P4Htd2Dz9VfI9_cKf7JXHN5zvO_OLd4mt_CXA3hTbPCLt8kvwTH84h3gF34I2Uu_DI7il8EaFG9_3XlP153Xc_wfuvsKuvMOIXupu5Oj6O5kDYq_v-78p-vO7znBD919Bd35h5C91N3wKLobrkEJ9tdd8HTdBT2n_93pzt-kO--lv1l3_ibdDY6hO_8A3QWHkL3U3elRdHd6yBF5SqZS0lDnfLq5k9vp1OP1QZaynNpTr1FzndJbrdImt11OmkJNICNj213eLiK53DJWk5h9OuGvVuI7K3lrlfhqpX63krcb0yGg_J2lgu2VeLdScOh4omEFJdlbpW9aLxmS9Y9U_df8GG691MaHzf_dcmdGxoj806aLV6v4Bl18_Z34Btsn9bqVBt_WpCddfCc78Q23T-p3Kw2_rUmHXXynu43gbh81-MKdu43-v896Wn-SPpTq9n2RYYju49XbcFteWD8gclN_F-OP6rYBm9xX9VftgygNMbwQN_SKLOlZIQtjixRDq-e0WPz0bwAAAP__cWn_DA==

query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 ON e FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsVuFum0gQ_n9PMZo_TXQ4sIAdh1_NuakOVYkjg3o6naJqA1OKgne53UVJLspj3Qvck52A-hJT4zORXLVS-YG8s8PM93m-b7UPqP8sMMDZ4uw0PoMoPo3DKA5nEWgG8wsgeLuYn0PKDYffwvhXmF_G4fwigtMI5m8h-j2Kz84hDs_P4NWIVfoVWihkShd8SRqDP5ChhS5a6KGFPlo4xisLSyUT0lqqOuWh-SBM7zBwLMxFWZk6fGVhIhVh8IAmNwVhgDG_LmhBPCVlO2hhSobnRdOmBvi6fn0ob-geLZzJoloKHcA1WhiVvP45shlwkQIDaT6RQgtDkUihc21IGNAJF3Cw5HdgNPCMYLx09CFauCCRkgrgNfuZBUEQXsRTtPDde6iB6wAEa5eKslzWjQxp04ZMvqQAnH_-1u06kaLulUvxxZaStxpSSmRKaQDMcdrw9b0hDYp4GsDUceCXNpwtLmeQ8KLQz3JLnqtVrtsEz9_PZqANlZDIShg4oDtj58IcBuDYTwlEN30JDSxZmbIybaerRwvb9ecxacMzwoA9m2v4BgPn0dp9tBFflgUpe7w-1jYc5X9R07uhFBlu6ln0AnE7QMa9QJ76V0KqlBSla_2vHnuhnmaZoowbqWzm7A4aDlzHgesquSGjD3speB0KbP3PZLv7hL3AJzYb2e534xR3k1PY0QTe5Ru84m7yir8Pr7gDvMKGjHfllckevDJZA-LurjP3JTpzR7b3Q2dfUWfukPGudHa8B50drwHxdteZ9xKdeSPb_6Gzr6gzb8h4Vzqb7kFn0zUg_u4681-iM39kj78bnXmbdOYeeZt15m3S2WQfOvMG6MwfMt6Vzk72oLOTIZfdBelSCk2du-bmTk6n04jVl1JKM2pvsFpWKqFLJZMmt13Om0JNICVt2l3WLkKx2tJGEV_-d1d_XoltreSuVWLPK427ldztmIaA8raW8vsrsW4lfyg93kwFBZlbqW5aJ2kSzbFYe3O10Xqp3Xk6s1e7S9KaZ08JtdKf45x0cY634pz0M3a7lSbfJuPjLs7jrTin_Yy9bqXpt8l42sV5st0gTj9l_wvXbj8ABnH2ejm7R_7_cB53OJ_UR9bHQt5-yFMM0Pn8jDa8Vg_WH_BM1-dm9EneNqDj-7I-9T7yQpOF5_yG3pAhtcxFrk2eYGBURY-PP_0bAAD__zu89_Q=

statement ok
ALTER TABLE data ADD COLUMN f FLOAT AS (atan2d(c, d::float)) VIRTUAL

query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 ON f, e, d FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsl9Fu2zYXx--_pzg4N03x0ZUo2Y7DK2dughld4sASOgxDUDDSiSpEJjWSRpIFeay9wJ5skBS3sWobdjAPQVFfGOAhdfg7Ov-_QD6g_aNAgaPpyXF8AlF8HI-jeDyKwHKYnMM1A2KQwul0cgapdBJ-Hcc_w-QiHk_OIziOYHIK0W9RfHIG8fjsBN50-Ny-QYZKp3QuZ2RR_I4cGQbIMESGXWTYw0uGpdEJWatNteShfmCc3qHwGeaqnLsqfMkw0YZQPKDLXUEoMJZXBU1JpmQ8Hxmm5GRe1NtUgMPq71N5Q_fIcKSL-UxZASmDKwYJMoxKWQU6HgepUuCg3WcyyHCsEq1sbh0pBzaRCg5m8g6cBZkR9Ga-fYsMp6RSMgKGnMEw-D8XQozP4wED6aQK0oNhyIZciNNfJsfxoHrgw0eoKrMCFG-GhrJcVwyOrGtCLp-RAP_vv2wzTrSqMHKtvpky-tZCSolOKRXAfb8JX907smBIpgIGvg8_NeFsejGCRBaFfba2lLlZrA3q4NnH0QisoxISPVcODujOeblybwX43tcFRDfrFtRYeu7KuWt2unxk2Iyf-midzAgFf9b48XsU_iPbvveRnJUFGa-33PcmHOV_Vm-q6rGTrm7RMGDDcC1K0ELprUX5SjBX2qRkKF0iuHxcC3ucZYYy6bTxuP-vYIctbL78Cvn29uEvto_HO17wPRgoWGUg_q4PH_IVFgpWWai7DwsFO1iI79L_hYX6e7FQfwkl2F6KwculGHS88IcUX4cUg136v5Di4V6keLiEEm4vxfDlUgw7XveHFF-HFMNd-r-Q4mAvUhwsoXS3l2L35VLsdrze9yDFcJUUg3fhaimGq6TY34cUwx2k2N2l_wspHu1Fike7HLenZEutLLXOuqt38ls7dXh1KKY0o-YEbfXcJHRhdFKvbYaTOlEdSMm6ZpY3g7FaTFlnSM6-3BaeZ-IbMwVLmfjzTL12pmAz0y5Q4cZU3fWZeDtTd9fyZN0VVORutblpvGRJVZey6lL-FG681MQH9V1xMTMja2X2ZdLHy-d8_TZfbyNff32lQTtT_3VVetjmO9zIN1hfadjONHhdlQ7afEebjeCvL7X7jTs3G_0_r_Wo-iRdF_r2U56iQP_p11nxt_hh9YDMbPVdjD7r2xo2vi-rr9q1LCwxPJM39J4cmVmucuvyBIUzc3p8_N8_AQAA__-jQhmi

statement ok
CREATE TYPE gh AS (g INT, h INT)

# Try a virtual computed column whose expression cannot be distributed.
statement ok
ALTER TABLE data ADD COLUMN g gh[] AS (array_cat(ARRAY[(1, 2)], ARRAY[(a, b)])::gh[]) VIRTUAL

# Error if we specify the problematic virtual computed column directly.
statement error cannot be executed with distsql
CREATE STATISTICS s1 ON g FROM data

# We should skip the problematic virtual computed column when using defaults.
query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsV-Fu2zYQ_r-nONyfphgdiZLsOPzlzE0wo0scWEKHYQgKRrq6QmzSI2kkWZDH2gvsyQZJ9WwrlmsjKJAU1Q9BvDsd7zvd9wl8QPvXBAX2R6cnySnEyUkyiJNBPwbL4Ww0PIdMOgm_D5JfYXiZDIYXMZzEMDyD-I84OT2HZHB-Cm9afG7fIEOlM7qQU7Io_kSODANkGCLDCBm28YrhzOiUrNWmCHkoXxhkdyh8hrmazV1hvmKYakMoHtDlbkIoMJHXExqRzMh4PjLMyMl8Um5TFNgrbh9nN3SPDPt6Mp8qK0AyuGaQMsiQYTyTha3lcZAqAw7afSaDDAcq1crm1pFyYFOp4GAq78BZkGOC9tS3b5HhiFRGRkCPM-gFDHohg15UPP_MhRCDi6TLQDqpguygF7JeJMTZb8OTpFu8_P4DFECtAMWrpaFxrot6HFlXmVw-JQH-v__Yap1qVZSUa_XEZfSthYxSnVEmgPt-Zb6-d2TBkMwEdH0ffqnM49FlH1I5mdiV2JnMzSI2KI3nH_p9sI5mkOq5cnBAd87LlXsrwPeWAUQ3TQFlWXruZnNX7XT1yLBaf_ms1skxoeArczB4h8J_ZLuPQiynswkZr70-BpU5zv-mcu8SUuykKz7Z8jFYsbLVVbjuYKuG6ImPrdray8dOI-SgBrndCHmJdK60ychQtob06rGxKSfjsaGxdNp43N-9PXAQ-D5cz9MbcuWwL5rV5Ki1blvYeiO_Erne1qbgDhwES3NTw8Naw_n6kPHd9YY_R2883vKC701xgk2Kww878D7foDnBJs2JvoXmBHtoDt9nHBaa03nVmtNZgxzszoDgWQwIWl74gwEvjwHBPuOwYMDRq2bA0RrkcHcGhM9iQNjyoh8MeHkMCPcZhwUDuq-aAd01yNHuDIiexYCo5bW_NwaEmxgQHIabGRBuYkDnWzAg3IMB0T7jsGDA8atmwPE-h80R2ZlWlmonsM07-bWdWrw4qlE2pupcZ_XcpHRpdFrGVsthmag0ZGRd5eXVYqAWLusMyen_Z-XVTHxrpmAtE1_N1K5nCrbXtE9R4dZUUXMmXs8U7QtPll8FFblbbW4qzlpS5a-hmNyFo2Jt5Vn-txbeKVkrx8sAP8Kr1To79TrbW-vsNCMO6pk6LxPxUb3Oo611dpsRh_VM3ZeJuFuv83g7QfxmyNET1m4XgL0wh42Yg8PoK5jbNczHhWR9mujbj3mGAv0vV2vDbXFh8YIc20I348_6tiw6uZ8VqvdJTiwxPJc39I4cmWmucuvyFIUzc3p8_Om_AAAA___V9eFO

# Check that we also collect stats on the hidden expression index virt column.
statement ok
CREATE INDEX ON data ((a * b))

query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsWO9u2zYQ_76nONyXphsdi5L8J_zkzE0wo0scWEKHYQgKRrq6QmzSI2kkWZDH2gvsyQZJdW0rlmsjKBAY9QeBvDsd70fe7yfQj2j_nqDA_ujsND6DKD6NB1E86EdgOZyPhheQSifhj0H8Gwyv4sHwMoLTCIbnEP0ZxWcXEA8uzuBNg8_tG2SodEqXckoWxV_IkaGPDANkGCLDFl4znBmdkLXa5CGPxQuD9B6FxzBTs7nLzdcME20IxSO6zE0IBcbyZkIjkimZpocMU3IymxTL5AX28sfH2S09IMO-nsynygqQDG4YJAxSZBjNZG5rNDlIlQIH7T6TQYYDlWhlM-tIObCJVHA0lffgLMgxQWvq2bfIcEQqJSOgxxn0fAa9gEEvzMe_cCHE4DLuMujxn3OfdFL56VEvYL1QiPPfh6dxN8_x_gPkeK0AxcupoXGm87IcWVeaXDYlAd5__9pynmiVV5Zp9cxl9J2FlBKdUiqAe15pvnlwZMGQTAV0PQ9-Lc3j0VUfEjmZ2JXYmczMItYvjBcf-n2wjmaQ6LlycET3rpkp91aA11wGEN3WBRRl6bmbzV250vUTw3L-5XStk2NCwVfaYfAOhffEdu-ISE5nEzLN1no3lOYo-4eKtQtIkZMuP7nl0F-xstVZsO5gq4bwmY-t2lrLYXs57NSi9yvoW7Xol6DnSpuUDKVroK-favfndDw2NJZOmyb3dt8pOPI9D27myS25ov0X-1bnqOzitrD1Pf1G5PoO1wW36xwdOPKX5rqTCConwdcbke8uTfwl0tTkjaZ_oOLkbxInftyG99kGefI3yVP4PeTJ30Oe-D5dsZCn9qHIU3sNvb87J_wXccJvNIMfnHi1nPD36YoFJzqHwonOGvpgd04EL-JE0GiGPzjxajkR7NMVC050D4UT3TX04e6cCF_EibDRbB0oJ4JNnPCPg82cCDZxov09OBHswYlwn65YcOLkUDhxss_FdkR2ppWlyhVv80peZaUGz--ClI6pvDhaPTcJXRmdFLHldFgkKgwpWVd6eTkZqIXLOkNy-vVevpqJb83kr2Xiq5la1Uz-9pr2KSrYmiqsz8SrmcJ94cniVFCRu9PmtqSvJZV_N4pb98JRErj0LD9qC--UrJXjZYBX_GG2rLNdrbO1tc52PWK_mqn9OhF3qnV2ttbZrUccVDN1XyfibrXOk-0E8eohh89Yu10A9sIc1GL2j8NvYG5VMJ_kkvVpou8-ZikK9L78Ghseix_mL8ixzXUz-qzviqLjh1muep_kxBLDC3lL78iRmWYqsy5LUDgzp6enn_4PAAD__5Fs_TE=

# Check that we also collect stats on other hidden columns.
statement ok
ALTER TABLE data ALTER COLUMN c SET NOT VISIBLE

statement ok
ALTER TABLE data ALTER COLUMN c SET NOT VISIBLE

query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsWO9u2zYQ_76nONyXphsdi5L8J_zkzE0wo0scWEKHYQgKRrq6QmzSI2kkWZDH2gvsyQZJdW0rlmsjKBAY9QeBvDsd70fe7yfQj2j_nqDA_ujsND6DKD6NB1E86EdgOZyPhheQSifhj0H8Gwyv4sHwMoLTCIbnEP0ZxWcXEA8uzuBNg8_tG2SodEqXckoWxV_IkaGPDANkGCLDFl4znBmdkLXa5CGPxQuD9B6FxzBTs7nLzdcME20IxSO6zE0IBcbyZkIjkimZpocMU3IymxTL5AX28sfH2S09IMO-nsynygqQDG4YJAxSZBjNZG5rNDlIlQIH7T6TQYYDlWhlM-tIObCJVHA0lffgLMgxQWvq2bfIcEQqJSOgxxn0fAa9gEEvzMe_cCHE4DLuMujxn3OfdFL56VEvYL1QiPPfh6dxN8_x_gPkeK0AxcupoXGm87IcWVeaXDYlAd5__9pynmiVV5Zp9cxl9J2FlBKdUiqAe15pvnlwZMGQTAV0PQ9-Lc3j0VUfEjmZ2JXYmczMItYvjBcf-n2wjmaQ6LlycET3rpkp91aA11wGEN3WBRRl6bmbzV250vUTw3L-5XStk2NCwVfaYfAOhffEdu-ISE5nEzLN1no3lOYo-4eKtQtIkZMuP7nl0F-xstVZsO5gq4bwmY-t2lrLYXs57NSi9yvoW7Xol6DnSpuUDKVroK-favfndDw2NJZOmyb3dt8pOPI9D27myS25ov0X-1bnqOzitrD1Pf1G5PoO1wW36xwdOPKX5rqTCConwdcbke8uTfwl0tTkjaZ_oOLkbxInftyG99kGefI3yVP4PeTJ30Oe-D5dsZCn9qHIU3sNvb87J_wXccJvNIMfnHi1nPD36YoFJzqHwonOGvpgd04EL-JE0GiGPzjxajkR7NMVC050D4UT3TX04e6cCF_EibDRbB0oJ4JNnPCPg82cCDZxov09OBHswYlwn65YcOLkUDhxss_FdkR2ppWlyhVv80peZaUGz--ClI6pvDhaPTcJXRmdFLHldFgkKgwpWVd6eTkZqIXLOkNy-vVevpqJb83kr2Xiq5la1Uz-9pr2KSrYmiqsz8SrmcJ94cniVFCRu9PmtqSvJZV_N4pb98JRErj0LD9qC--UrJXjZYBX_GG2rLNdrbO1tc52PWK_mqn9OhF3qnV2ttbZrUccVDN1XyfibrXOk-0E8eohh89Yu10A9sIc1GL2j8NvYG5VMJ_kkvVpou8-ZikK9L78Ghseix_mL8ixzXUz-qzviqLjh1muep_kxBLDC3lL78iRmWYqsy5LUDgzp6enn_4PAAD__5Fs_TE=

# Check that we can disable stats collection on virtual computed columns.
statement ok
SET CLUSTER SETTING sql.stats.virtual_computed_columns.enabled = false

statement error cannot create statistics on virtual column
CREATE STATISTICS s1 ON e FROM data

query T
EXPLAIN ANALYZE (DISTSQL) CREATE STATISTICS s1 FROM data
----
planning time: 10µs
execution time: 100µs
distribution: <hidden>
vectorized: <hidden>
plan type: custom
rows decoded from KV: 1,000 (7.8 KiB, 2,000 KVs, 1,000 gRPC calls)
maximum memory usage: <hidden>
network usage: <hidden>
regions: <hidden>
isolation level: serializable
priority: normal
quality of service: regular
·
• create statistics
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzsV-Fum0gQ_n9PMZo_baV1YAE7Dr-Sc1OdVaWJAurpdIqqDUwpCma53UVJLvJj3Qvck52AcraJcY2iSIlUfqDszDA738z3bbwPqP_K0MfZ5elJeApBeBLOg3A-C0Bz-HB5fgaxMAJ-n4e_wflFOD__FMBJAOcfIPgjCE_PIJyfncKbES_1G2SYy5g-iQVp9P9EjgwdZOgiQw8ZjvGKYaFkRFpLVYU81B_M4zv0bYZpXpSmMl8xjKQi9B_QpCYj9DEU1xldkohJWTYyjMmINKu3qQo8rl5fihu6R4YzmZWLXPsgGFwziBjEyDAoRGUbWRxEHgMHab6RQobzPJK5TrWh3ICORA5vF-IOjAaREIwXtn6HDD9-hqpW7UPOm6WiJJVVSkPaNCaTLsgH-99_dLOOZF5lTWX-yKXkrYaYIhlT7AO37cZ8fW9IgyIR-zC1bfi1MSeXFzOIRJbptdhCpKqNdWrj2efZDLShAiJZ5gbe0p2x0ty888G2VgFEN30BdVmyNEVpmp2ulgyb9ffJaCMSQp-vjXL-Hn17yfafZiAWRUbKGm9OsjEH6d9U711DCowwPhzz1Z_OmpWtr9xNB1s3eI987NjrBed0wI17wa0wlblUMSmKNzBdLXvhnySJokQYqSxu798IeOvYNlyX0Q2ZmpltW_ocnSbtCtts2Q8idzXQ7TSQb9KD7y92_hSxW3xkOS9Q7s42ufODCXxMtwje2SZ47zkE7wwQPB8y0Vbwk1ci-MkGOGd_ujpPoqszstyfdH0WujpDJtrS9fCV0PVwA5y7P13dJ9HVHVneT7o-C13dIRNt6Tp9JXSdboDz9qer9yS6eiNr_ALp6m6jq3Pgbqeru42uk-egqzuArt6QibZ0PXoldD0acrW5JF3IXFPnFrB9J7uz04hX1wWKE2ruFlqWKqILJaM6tlme14lqQ0zaNF7eLOZ569JGkVj8fzNbz8R3ZnI2MvH1TONuJmd3TUOKcnem8voz8W4mbyg8UU8FczK3Ut006tSU1yd29QugdTT6bDyrfyetd0Fai2QVYLt4tV7npFvneGedk37ETjfT5GUiPuzWebizzmk_YrebafoyEU-7dR7tFojdD9l7pNrdB8AgzG4vZufA-wHmcQfzUXVkfc3k7Zc0Rh_t789oy6t9sPpAJLo6N4Nv8rYuOrwvqlPvq8g0MTwTN_SeDKlFmqfapBH6RpW0XP7yXwAAAP__FtptJQ==

statement ok
RESET CLUSTER SETTING sql.stats.virtual_computed_columns.enabled

subtest regression_98373

statement ok
CREATE TABLE IF NOT EXISTS t98373 AS
        SELECT
                g::INT2 AS _int2,
                g::INT4 AS _int4,
                g::INT8 AS _int8,
                g::FLOAT8 AS _float8,
                '2001-01-01'::DATE + g AS _date,
                '2001-01-01'::TIMESTAMP + g * '1 day'::INTERVAL AS _timestamp
        FROM
                generate_series(1, 5) AS g;

statement OK
SET vectorize = off

statement OK
SET distsql = always

# These query plans should be disallowed from executing in a distributed
# fashion, even with distsql = always. Check different flavors of EXPLAIN.

query T
EXPLAIN SELECT
        regproc(_int2::INT8)::REGPROC AS col865
FROM
        t98373@[0]
----
distribution: local
vectorized: false
·
• render
│
└── • scan
      missing stats
      table: t98373@t98373_pkey
      spans: FULL SCAN

query T
EXPLAIN(DISTSQL) SELECT
        regproc(_int2::INT8)::REGPROC AS col865
FROM
        t98373@[0]
----
distribution: local
vectorized: false
·
• render
│
└── • scan
      missing stats
      table: t98373@t98373_pkey
      spans: FULL SCAN
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyMkF9r2zAUxd_3KcR5akFh9sq2TE8tSTYMaZLZfhgUEzTr1hOVJU-S6Urwdx-20_1jg90HiftH5_6OTghfDQQ2nw7bm2zHLtZZURYft5es2Gw3q5J5ajrv6oujtvGVENmuXF4KkW8-HPL9it0UrHZm-eY1e5_vb1l8t7x6e3V9l1TgsE7RTrYUIO6QouIYhSgE58fSaRrI1DeIhEPbro9jueKonSeIE6KOhiBQys-GcpKK_MsEHIqi1GaSPS-cr2P3QE_gWDnTtzYINjGDo-jkmC7AkZNV5MUPW9fp2ROqgcP18SdGiLIhiPQX7mwNkQz8_9FzCp2zgX6j_tem5I9Ni3SoOEg1NP9XcL2v6eBdPc3O6X4SmgqKQpy76Zxk9rkVoifZzvgVx71xj0etIJCcY_GX4zkwPpBNGI0VX9zjJFs-dSPWvTSBOG7lA60pkm-11SHqGiL6nobhxfcAAAD__wgUvrk=

statement OK
RESET vectorize

statement OK
RESET distsql
