# LogicTest: 5node-dist

########################
#  LOOKUP JOIN FORCED  #
########################
statement ok
SET experimental_force_lookup_join = true;

statement ok
CREATE TABLE data (a INT, b INT, c INT, d INT, 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 TTITI colnames
SHOW EXPERIMENTAL_RANGES FROM TABLE data
----
start_key  end_key  range_id  replicas  lease_holder
NULL       /1       1         {1}       1
/1         /2       2         {2}       2
/2         /3       3         {3}       3
/3         /4       4         {4}       4
/4         /5       5         {5}       5
/5         /6       6         {1}       1
/6         /7       7         {2}       2
/7         /8       8         {3}       3
/8         /9       9         {4}       4
/9         NULL     10        {5}       5

statement ok
CREATE TABLE distsql_lookup_test_1 (a INT, b INT, c INT, PRIMARY KEY (a, c))

statement ok
CREATE TABLE distsql_lookup_test_2 (d INT, e INT, f INT, PRIMARY KEY (f, e))

# Ensure lookup join is planned.
query T rowsort
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM distsql_lookup_test_1 JOIN distsql_lookup_test_2 ON f = b]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkcFq8zAQhO__U5g9708sp-lBJ11TSlJCb8UY1VqCWkerSjK0BL97sVVoUoibHne0386gOYJjQxt9oAjyCQQgrKBG8IFbipHDKOeltXkHWSJY5_s0yjVCy4FAHiHZ1BFI2PB_9osKEAwlbbtpbUDgPn1DMek9gVwOeHJYzB9-1M8d7UgbCovy7Dz4YA86fChjY4pvXdMxv_a-SRRTI-CSu_iL-x1b92Uurjcfv-F-mosXtq5gJws1its-yUIJVBWqJaobVCtUtxejVmdRf2lgR9Gzi3RVBeVQI5DZU245ch9aegjcTjZ53E7cJBiKKb8u87B2-WkMeAqLWbiah6tZuPwB18O_zwAAAP__2Q3qzg==


query T rowsort
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM distsql_lookup_test_1 JOIN distsql_lookup_test_2 ON f = b WHERE a > 1 AND e > 1]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkkFr4zAQhe_7K8ScdmGWWPZmDzrpVHApSQm5tSa41pCqdTSuJENC8H8vtgtNCnHT47yZ7z2PR0dwbGhR7iiAegAJCHMoEBrPFYXAvpfHodzsQSUI1jVt7OUCoWJPoI4QbawJFCz4LzezFBAMxdLWw1iHwG38hEIstwQq6_DEWE4br8unmlZUGvKz5MweGm93pT9oY0MMb_WmZn5tm02kEDcSLqXLn6TfsnUf4fL68P433A21eGHrBDsldC_mztD-xtaRfK-IxzZJMhJSKZUv1uK3t9vnKII1JNjVhz-AsGyjElqiTlFnqP-hnqP-f3G79Gy7b462otCwC3TV1ZKuQCCzpfFhBG59RfeeqyFmLJcDNwiGQhy72Vjkbmz1H3gKy0k4nYbTSTj5Ahfdr_cAAAD__8vq-nE=


# Ensure lookup join is planned on a multi-node cluster.
query T rowsort
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM data JOIN data AS data2 on data.b = data2.a]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzElE-LnTAUxff9FHLXt4zx33NcZTulzJShu-IiNZfB9k2uJBFaBr97UQvje7yJgguXJjn-Ts4J9w0Ma3pUr-Sg-gECEBJASAEhA4QcaoTOckPOsR2PzIIH_QeqGKE1Xe_H5RqhYUtQvYFv_Zmggu_q55meSWmydzEgaPKqPU-Yzravyv6VWnkF9YDAvX__kfPqhaASA26HfeHW_GflARbCV-bffRf94tZEbKpIjtd96n0VSYEyQZmizFDmKAuUJ5Tlh_6SD_292-oNW02W9IWnerhxg0f-zN2diK9O3manF2yxvQixu4gV2KKI4pAiku1hJLvDWIEtwjgdEka6PYx0dxgrsEUY5SFhZNvDyHaHsQJbhHF_-Ly64e-ZXMfG0aZpFI_zjPQLzcPPcW8b-ma5mTDz59OkmxY0OT_vivnjwcxbo8GlWATFyYVYXIuTMHkFnQbVWVic7fGdB8VFmFzsIZ-C4jJMLveQ78NdxSvPJPzIrtn18OlfAAAA__8Afujr


query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT count(*) FROM data as d1 NATURAL JOIN data as d2]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lV9r2zAUxd_3KcJ96kDQXNtJEz957CljS0aasodhihZdjLdUMpIMGyXffTgeVDGN5KGSR_85Oke_e-A-g1SC1vyJDOTfAYFBAgxSYJABgxmUDBqt9mSM0t0vvWAlfkM-ZVDLprXd65LBXmmC_BlsbQ8EOez4jwNtiQvSt1NgIMjy-nCyaXT9xPWfQnDLoTwyUK19OchYXhHkeGTjzT6pWv7zmnm8GHxW6lfbTH6qWk6UzCcFsiJhRcqK7r6b1uaTtZJ0MVXyP6k-VJWmilulb3GA4OPmYb173G6-3d-8v2iWXjR78Wil0oI0ibPzy2MgzoDS_cOXx9V6d1Pg5TTZWRocP32Mnn7AzJn-_IrTD6RycWP09JPxvJNo3gEzh_fdFXkHUrm8k2je6XjeaTTvgJnDe3FF3oFULu80mnc2nncWzTtg5vBeXpF3IJXLO3vTbfKK2ZZMo6ShwVZ5_eRpt21IVNSvJqNavaevWu1PNv3j5qQ7vRBkbP8V-4eV7D91AV0xesWJX5x4xemZGIfi1B977rfOvOqZXzzzigPO85hL33nFC7_zwite-sXLmNgY6FioZP6WYaBmGNUzDBQtC5j7m4aBqqG_a8Ps5fHd3wAAAP__1CT_Hg==


statement ok
CREATE TABLE foo (a int, b int)

statement ok
CREATE TABLE bar (a int PRIMARY KEY, c int)

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM foo NATURAL JOIN bar]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkTFPwzAQhXd-RfXmQ01SWDxlLUItqthQBjc-KkPrs2xHAlX57ygxEi2iAUa_u--9p_MRTgyv9IEj1BNKEG7REHyQlmOUMMh5aWneoAqCdb5Lg9wQWgkMdUSyac9QWMm1-HkFguGk7X5c6wnSpS8oJr1jqEVPJ8bltPGj3u55w9pwmBdn9vDBHnR4r59FQFh3Sc3qkuoKl4LL_wTfiXWfueXPuVsdQLgXee387EWsm4kbKpyVofrmYp_qrM8vF95w9OIi_-nERd8Q2Ow4_2KULrT8EKQdY_JzPXKjYDimPF3kx9Ll0VDwFC4n4Woaribh4hvc9FcfAQAA__97bt0c


# Ensure lookup join is not planned when no index is available.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM bar NATURAL JOIN foo]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyckjFrwzAQhff-inJTCyqx7HQRFDw2HZISupUMinVJBI7OnGRoCf7vxdaQ2MRO20063XfvPXEncGRwqY_oQX2CBAHPsBFQMRXoPXFbjk0L8wUqEWBdVYe2vBFQECOoEwQbSgQFS3qiapaBAINB27JrawRQHc6QD3qPoOaNuBgspwd_6G2Ja9QGeZb0xkPF9qj5O99qhjEt-V8teV1rRwQCVnVQ97kUeToqnI4Kn_VqR2yQ0Qy_7XbLFfev2h_eyDrkWdo3X-IuPOTy8YXt_tCdehlEPh-NkfVi3FiCNfqKnMdfbUHSZkCzx_gnnmou8J2p6GTiddVxXcGgD_F1Hi8LF59ag5ewnISzHiyHcPoHOB3C2SScDGxvmrufAAAA___gtCho


statement ok
CREATE TABLE books (title STRING, edition INT, shelf INT, PRIMARY KEY (title, edition))

statement ok
CREATE TABLE authors (name STRING, book STRING)

query T rowsort
SELECT url FROM [EXPLAIN (DISTSQL) SELECT DISTINCT(authors.name) FROM authors, books AS b1, books AS b2 WHERE b1.title = b2.title AND authors.book = b1.title AND b1.shelf <> b2.shelf]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyck8-K2zAQh-99CndOu6Biy3_2YFjwoYduKUkJvZUcFGuaqHE0RpKhJeTdi-xCYhMryR4tzTffb8boCJokLsQBLZQ_gQODAtYMWkM1WkvGHw9Fb_IPlAkDpdvO-eM1g5oMQnkEp1yDUMKCPlEbF8BAohOq6ctODKhzZ8g6sUUoX07sojEPN_4hNg2uUEg0cTJqD61RB2H-VqJzO5-XwbJzZVRxVqUwJ-fvlfPr8g3RfqTOZtXpI-qvpPR_cxo2fyPad230m5SOSPsQPs4iqtLo42tUFedws8my2WTnQJ0mI9GgnP7j2yVXxvsi7M6PiCbOxuM1-Ms9Venzq1HbnXuq-PMdA-SPrPazsk7p2sX52BzoX4z633gLK7QtaYt3PYbEbwflFodtW-pMjd8N1b1m-Fz2XH8g0brh9mX4eNPDlQ94CfMgnI9gPoXTIJyFzdkD5nQK50G4CJuLIJxM4PXpw78AAAD__xhmpWg=

query TTTTT colnames
EXPLAIN (VERBOSE) SELECT DISTINCT(authors.name) FROM authors, books AS b1, books AS b2 WHERE b1.title = b2.title AND authors.book = b1.title AND b1.shelf <> b2.shelf
----
tree                      field           description               columns                                                                                                                                           ordering
distinct                  ·               ·                         (name)                                                                                                                                            weak-key(name)
 └── render               ·               ·                         (name)                                                                                                                                            ·
      │                   render 0        test.public.authors.name  ·                                                                                                                                                 ·
      └── join            ·               ·                         (name, book[omitted], rowid[hidden,omitted], title[omitted], edition[omitted], shelf[omitted], title[omitted], edition[omitted], shelf[omitted])  ·
           │              type            inner                     ·                                                                                                                                                 ·
           │              equality        (book) = (title)          ·                                                                                                                                                 ·
           ├── scan       ·               ·                         (name, book, rowid[hidden,omitted])                                                                                                               rowid!=NULL; key(rowid)
           │              table           authors@primary           ·                                                                                                                                                 ·
           │              spans           ALL                       ·                                                                                                                                                 ·
           └── join       ·               ·                         (title, edition[omitted], shelf[omitted], title[omitted], edition[omitted], shelf[omitted])                                                       title=title; title!=NULL
                │         type            inner                     ·                                                                                                                                                 ·
                │         equality        (title) = (title)         ·                                                                                                                                                 ·
                │         mergeJoinOrder  +"(title=title)"          ·                                                                                                                                                 ·
                │         pred            b1.shelf != b2.shelf      ·                                                                                                                                                 ·
                ├── scan  ·               ·                         (title, edition[omitted], shelf)                                                                                                                  title!=NULL; edition!=NULL; key(title,edition); +title
                │         table           books@primary             ·                                                                                                                                                 ·
                │         spans           ALL                       ·                                                                                                                                                 ·
                └── scan  ·               ·                         (title, edition[omitted], shelf)                                                                                                                  title!=NULL; edition!=NULL; key(title,edition); +title
·                         table           books@primary             ·                                                                                                                                                 ·
·                         spans           ALL                       ·                                                                                                                                                 ·



# Cross joins should not be planned as lookup joins.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM books as b1 CROSS JOIN books as b2]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyckTFvszAQhvfvV3y6-apgIB08eWw6JFXUrWJw8ClFJT5kG6lVxH-vwEMCKqTN6PM99z66O4NlQ1t9Ig_yDQQgrKFAaByX5D27vhybNuYTZIJQ2aYNfblAKNkRyDOEKtQEErb8wM0qAwRDQVf10NYhcBsukA_6SCDzDq8Gi-XBr_pQ0560IbdKRuOhcdVJuy91YP7wMJcm7k0T96Sls2mXkNayM-TITLd1u-UH5Sft35-5suRW6dh41wb5XwlUKaoMVY5qjepxVj0bqd-49558w9bTrw6e9N5kjhT34Ll1Jb04LoeY-NwN3FAw5EP8zeNjY-NXL3gNi0U4G8FiCqd_gNMpnC3CyUS76P59BwAA__9upyMC


query T rowsort
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM authors INNER JOIN books ON books.edition = 1 WHERE books.title = authors.book]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkUFLAzEQhe_-ijAnhUg3W3sJCDkJK9JK6U32kG6GNnabWZIstJT975JdwVbsqse8mW_eTN4JHBmc6z0GkG8ggMMMSg6NpwpDIJ_koakwB5AZB-uaNia55FCRR5AniDbWCBLmdE_NJAcOBqO2dd_WcaA2fkEh6g2CnHb8bLAYH7zS6xqXqA36SXYxHhpv99oflW7jNu3LYdFGyZTgKodr5uI_5s9k3ae3-Nl7TbRLzi9Eu7Zh72QdIyeZSl9ROIOHJ1tH9Elhj0xIKYv5it16u9lGFqxBRq4-3l0sz9WUqweuZlevyC-u-CWbJYaGXMA_hZN1JQc0GxzyD9T6Cl89Vb3N8Fz0XC8YDHGoTodH4YZSWvAcFqNwPg7no3D2DS67m48AAAD__5V27x8=


statement ok
CREATE TABLE players (id DECIMAL PRIMARY KEY, name STRING, team INT)


##########################
#  LOOKUP JOIN DISABLED  #
##########################

statement ok
SET experimental_force_lookup_join = false;


# Simple joins should no longer be planned as lookup joins.
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT * FROM foo JOIN bar USING(a)]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJycksFqwzAMhu97iqHTBh6Nk-5iGOS47tCOstvowY3V1pBaQXZgo-TdR-JDm9Ck2262pE__L6ETODK41Ef0oD5BgoBn2AiomAr0nrgNx6KF-QKVCLCuqkMb3ggoiBHUCYINJYKCJT1RNctAgMGgbdmVNQKoDmfIB71HUPNGXDSW040_9LbENWqDPEt67aFie9T8ne-IQMCqDuo-lyJPYUxY_ldYXhfeah7VSke1zhK1IzbIaIZru11yxfCr9oc3sg55lvb9lrgLD7l8fGG7P3Sv3r5EPh8dI-uNceMI1ugrch5_dQVJOwOaPcadeKq5wHemopOJ31XHdQGDPsTsPH4WLqZag5ewnISzHiyHcPoHOB3C2SScDGxvmrufAAAA__9feSho


####################################
#  LOOKUP JOIN ON SECONDARY INDEX  #
####################################
statement ok
SET experimental_force_lookup_join = true

# Create a table with a secondary index which stores another column.
statement ok
CREATE TABLE multiples (a INT, b INT, c INT, d INT, PRIMARY KEY (a, b), INDEX bc (b) STORING (c))

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

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

# Verify data placement.
query TTITI colnames
SHOW EXPERIMENTAL_RANGES FROM TABLE multiples
----
start_key  end_key  range_id  replicas  lease_holder
NULL       /1       10        {1}       1
/1         /2       21        {2}       2
/2         /3       22        {3}       3
/3         /4       23        {4}       4
/4         /5       24        {5}       5
/5         /6       25        {1}       1
/6         /7       26        {2}       2
/7         /8       27        {3}       3
/8         /9       28        {4}       4
/9         NULL     29        {5}       5

# Lookup join on covering secondary index
query TTT colnames
EXPLAIN SELECT t1.a, t2.c FROM multiples t1 JOIN multiples@bc t2 ON t1.a = t2.b
----
tree            field           description
render          ·               ·
 └── join       ·               ·
      │         type            inner
      │         equality        (a) = (b)
      │         mergeJoinOrder  +"(a=b)"
      ├── scan  ·               ·
      │         table           multiples@primary
      │         spans           ALL
      └── scan  ·               ·
·               table           multiples@bc
·               spans           ALL

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.a, t2.c FROM multiples t1 JOIN multiples@bc t2 ON t1.a = t2.b]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lM1qg0AUhfd9inDXU-Ko-XOVbUpJSuiuuDDOJdiauTIzQkvw3YtaGg3JKERczs-Z73DOcM8gSeA2OqGG4AM4MHCBgQcMfGAwg5BBpihGrUmVV2rBRnxD4DBIZJabcjtkEJNCCM5gEpMiBPAeHVLcYyRQTR1gINBESVphMpWcIvWzPuWpSbIUNTDY5SaYrDmEBQPKzeVdbaIjQsAL1p_9Qon8Q8_a6EPcor4SfeXZ5JMSOSFZGfi3wtb-XTfuXTcXE7kkJVChaDkIixt-t_RM2ZQ7Vzdvs70Wm_dvgQ_dQge70cJ8hBbc_km4QyfRwW4ksRghCa9_Et7QSXSwG0ksR0jC75-EP3QSHexGEquRZ9QNN3vUGUmNvSaQU84wFEesB56mXMX4piiuMPVyV-mqDYHa1Ke8XmxkfVQabIq5Vey2xPxa7NrJHWjPqvbtYv8R3zOreG4nzx8hL6zipZ28fIS8snfldHwT-ye7ZofF028AAAD__2gv7bk=

# Lookup join on non-covering secondary index
# The index join should be subsumed by joinreader, which takes care of the
# primary index lookups.
query TTT colnames
EXPLAIN SELECT t1.a, t2.d FROM multiples t1 JOIN multiples@bc t2 ON t1.a = t2.b
----
tree                  field           description
render                ·               ·
 └── join             ·               ·
      │               type            inner
      │               equality        (a) = (b)
      │               mergeJoinOrder  +"(a=b)"
      ├── scan        ·               ·
      │               table           multiples@primary
      │               spans           ALL
      └── index-join  ·               ·
           ├── scan   ·               ·
           │          table           multiples@bc
           │          spans           ALL
           └── scan   ·               ·
·                     table           multiples@primary

query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.a, t2.d FROM multiples t1 JOIN multiples@bc t2 ON t1.a = t2.b]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lM2LqzAUxffvryh3nUeNH_1w1W0fj3YosxtcWHMpzthcSSLMUPzfB3WYammjUHGZj5Pf4ZxwLyBJ4C4-o4bwDTgwcIGBBwx8YBBAxCBXlKDWpKorjWArPiF0GKQyL0y1HTFISCGEFzCpyRBCeI2PGR4wFqjmDjAQaOI0qzG5Ss-x-tqci8ykeYYaGOwLE842HKKSARXm-q428Qkh5CUbzv5HqfxBB130MelQ_xN9FPnsnVI5I1kb-LXCNsFDN-5DN1cThSQlUKHoOIjKO3539JfyOXdubt5nex02H94CH7uFHnarhcUELbjDk3DHTqKH3UpiOUES3vAkvLGT6GG3klhNkIQ_PAl_7CR62K0k1hPPqDtuDqhzkhoHTSCnmmEoTtgMPE2FSvBFUVJjmuW-1tUbArVpTnmz2MrmqDLYFnOr2O2I-a3YtZN70J5V7dvF_jO-A6t4YScvniEvreKVnbx6hry2d-X0fBP7J7tlR-Wf7wAAAP__gsjtvg==

############################
#  LEFT OUTER LOOKUP JOIN  #
############################
# Left join against primary index
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.b, t2.a FROM multiples t1 LEFT JOIN multiples t2 ON t1.b = t2.a]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzElF-Lm0AUxd_7KeQ-T1lHTTY7T3nZQpYlKSF9Kj5Y57LYmrnDzAhdFr97UUujIR2FCD7On-PveM5wP0CRxH12RgviO3BgEAGDGBgkwGAFKQNtKEdryTRXOsFO_gYRMiiUrlyznTLIySCID3CFKxEEnLIfJR4xk2geQmAg0WVF2WK0Kc6Zed-eq9IVukQLDA6VE8E2grRmQJW7fNe67A1B8JpNZ79Qof6iV0P06V2jCF6fv5yCw7fT8zF4Oez2wG5aeiX6VengJxUqICWCLf_nkzOP1ei_Vi8OK0VGokE5sJfWN35mT59JP_Dw6uZtdjxg8-kV8bkrGmH3KlovXVE0PaZo7phG2L2YHpeOKZ4eUzx3TCPsXkybpWNKpseUzB3TCLsX09PSMY2M8CNaTcripKkXNnMT5Rt2Q9ZSZXL8aihvMd3y0OraDYnWdae8W-xUd9QY7Iu5VxwNxPxaHPnJI-jYq0784uQe3yuveO0nr-8hP3rFGz95cw_5yd9VOPJM_I_smp3Wn_4EAAD__6ZdGew=

# Left join against covering secondary index
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.c, t2.c FROM multiples t1 LEFT JOIN multiples@bc t2 ON t1.c = t2.b]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlF9r2zAUxd_3Kcx91qhlO2mqp7x0kFKSEbKn4QfXuhRvjq6QZFgp_u7D9ljtkMiGGNJH_Tn-HZ8j7jsokrjNjmhB_AQODCJgEAODBBgsIGWgDeVoLZnmSifYyD8gQgaF0pVrtlMGORkE8Q6ucCWCgEP2UuIeM4nmLgQGEl1WlC1Gm-KYmbf1sSpdoUu0wGBXORGsY0hrBlS5j-9al70iCF6z6ewnKtQ_9GKIPrxpFMHz47dDsPtxeNwHT7vNFhi85AM3z0S_Kx38okIFpESw5v8tcrZOLrqMLrr8MFcpMhINyoGztD7zH1v6SvqOhyc3z7PjAZtPb4fP3c4Iu9fO8obtRNMTiuZOaITdS-j-hgnF0xOK505ohN1LaHXDhJLpCSVzJzTC7iX08Elm4BmXe7SalMVJEy5sZiTKV-wGqqXK5PjdUN5iuuWu1bUbEq3rTnm32KjuqDHYF3OvOBqI-ak48pNH0LFXnfjFyTW-F17x0k9eXkO-94pXfvLqGvKDv6tw5Jn4H9kpO62__A0AAP__DxgOwA==

# Verify stats for covering secondary index do not include extra primary index lookups.
query T
SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT t1.c, t2.c FROM multiples t1 LEFT JOIN multiples@bc t2 ON t1.c = t2.b]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzclU-L2zAQxe_9FGLOKmvZTjarUy5byLIkJaSn4oNjDYtaR2MkmW5Y8t2L7cLaYSO7h80hR_15er_RG5g3MKRwnR_QgfwJAjjEwCEBDilwmEHGobJUoHNkmyudYKVeQUYctKlq32xnHAqyCPINvPYlgoRdvi9xi7lCexcBB4U-12VrU1l9yO1xeahLr6sSHXCw9Mcxi7mSrLntfF6WzOsDShY155vaS7ZMIDtxoNq_-zqfvyBIceLT2Z5Im39osyHa7lihZM-P33Zs82P3uGVPm9UaOOyLAe0z0e-6Yr9IG0ZGsqWYUII2Cl_Z2a1u80K5gi_TixXHFyt-L7Q2ZBVaVIMqs9MHf7Kmr1Tdiejs5sfeycBbTO8Ece1OGGHrdcL8Rjohnp5GfO00Rth6adzfSBrJ9DSSa6cxwtZLY3EjaaTT00ivncYIWy-NhxtJY2RKb9FVZBxOmkhRM9NQvWA3AB3VtsDvlorWpltuWl27odD57lR0i5XpjhrAvlgExfFALM7Fcdh5xDoJqtOwOP0f7vYX2w-F_dGjYw6Nb7LOzp-dBZ-dh5nmn8N0H3x2EWZafA7TQzj5aKTpwi07nSo7ffkbAAD__zpP2mM=

# Left join against non-covering secondary index
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.c, t2.d FROM multiples t1 LEFT JOIN multiples@bc t2 ON t1.c = t2.b]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlF9r2zAUxd_3Kcx91qhlO2mqp7x0kFKSEbKn4QfXuhRvjq6QZFgp_u7D9ljtkMiGGNJH_Tn-HZ8j7jsokrjNjmhB_AQODCJgEAODBBgsIGWgDeVoLZnmSifYyD8gQgaF0pVrtlMGORkE8Q6ucCWCgEP2UuIeM4nmLgQGEl1WlC1Gm-KYmbf1sSpdoUu0wGBXORGsY0hrBlS5j-9al70iCF6z6ewnKtQ_9GKIPrxpFMHz47dDsPtxeNwHT7vNFhi85AM3z0S_Kx38okIFpESw5v8tcrZeXHQZXXT5Ya5SZCQalANnaX3mP7b0lfQdD09unmfHAzaf3g6fu50Rdq-d5Q3biaYnFM2d0Ai7l9D9DROKpycUz53QCLuX0OqGCSXTE0rmTmiE3Uvo4ZPMwDMu92g1KYuTJlzYzEiUr9gNVEuVyfG7obzFdMtdq2s3JFrXnfJusVHdUWOwL-ZecTQQ81Nx5CePoGOvOvGLk2t8L7zipZ-8vIZ87xWv_OTVNeQHf1fhyDPxP7JTdlp_-RsAAP__KqEOxQ==

# Verify stats for non-covering secondary index include primary index lookups.
query T
SELECT url FROM [EXPLAIN ANALYZE (DISTSQL) SELECT t1.c, t2.d FROM multiples t1 LEFT JOIN multiples@bc t2 ON t1.c = t2.b]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzslkGP2jAQhe_9FdacXW2cAMv6xGUrsVpBheipyiHEo5Xb4IlsR1204r9XSVbahIKTHpYTx3jmeT7eG8m8gSGFq2yPDuRPEMAhBg4JcJgAhymkHEpLOTpHtm5pBUv1CjLioE1Z-fo45ZCTRZBv4LUvECRss12BG8wU2rsIOCj0mS6aMaXV-8weFvuq8Los0AEHS38cs5gpyepu57OiYF7vUbKorq8rL9kigfTIgSr_Mdf57AVBiiMfz_ZE2ryjTfto20OJkj0_ftuy9Y_t44Y9rZcr4LDLe7TPRL-rkv0ibRgZyRZixE_QRuErO-lqD__pfbeIndX0ixesEnwxvehWfNGtD5MqQ1ahRdVzKD2e8XNFX6m8E9FJ5_nZSW-2GL9F4tpbNMDW2aLZbYtkPD7J-NpJDrB1kry_JSmT8Ukm105ygK2T5PyWpJyMT3Jy7SQH2DpJPtySHPpHs0FXknE46gWO6jcc1Qu2D76jyub43VLejGk_142uOVDofFsV7cfStKUasCsWQXHcE4tTcRyePDA6CaonYfHkf7gbFxtDYXfw6JhD4-vM09Nrp8FrZ2Gm2ecw3QevnYeZ5p_D9BBOPhpYuvDKjqdKj1_-BgAA__-RkEFg

# Left join with ON filter on covering index
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.c, t2.c FROM multiples t1 LEFT JOIN multiples@bc t2 ON t1.c = t2.b AND t2.c < 20]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzUlc9r2zAUx-_7K8Q7baBR_0qa6pRLCy4lGcE7bT641iPT5ugZSYaGkv99OB6rHVrZkFxytK2vP-99npBeQZPEVbFDC-IHhMAhAg4xcEiAwwxyDrWhEq0l0y7pAql8ARFwULpuXPs651CSQRCv4JSrEARkxXOFGywkmpsAOEh0haqOmNqoXWH2y11TOVVXaIHDunGCLWPIDxyocW__ta7YIojwwKezH0npf-jZEJ3taxTs6f4hY-vv2f2GPa7TFXB4LgfVPBH9aWr2m5RmpAVbtmZSLfHlQVUOTVsq-9kEQVyyKBBCpKuMfTZq-8sxqyQy0tX-y_-2Qr5MPuws-rCzt4YaTUaiQTnoJj-80_uKvlJ9EwYnK99nxwN2OH2i4aUnOsLuTXR-ZRONpluNLm11hN2zentlVuPpVuNLWx1h96wursxqMt1qcmmrI-ye1bsrszpyW23Q1qQtTjqxg_bMR7nF7oKw1JgSvxkqj5jucX3MHV9ItK77GnYPqe4-tQX2w6E3HA3C4Wk48pNH0LE3nfjDyTl1z7zhuZ88P4d86w0v_OTFOeQ7_6yCkW3i32Sn7Pzw6W8AAAD__16RXd8=

# Left join with ON filter on non-covering index
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.c, t2.d FROM multiples t1 LEFT JOIN multiples@bc t2 ON t1.c = t2.b AND t2.d < 30]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzUlUFvmzAUx-_7FNY7bZKnYiBp6hOXVqKqkilip40DxU-ZN2Ij20iNqnz3iTCtELUGKblwxPafn9_vWfYrKC1wXezRAv8BDCiEQCECCjFQWEBOoTa6RGu1aZd0gVS8AA8oSFU3rh3OKZTaIPBXcNJVCByy4rnCLRYCzU0AFAS6QlYnTG3kvjCHZN9UTtYVWqCwaRwnSQT5kYJu3Nt_rSt2CJwd6XT2o5bqH3oxRGeHGjl5un_IyOZ7dr8lj5t0DRSey8FunrT-09Tkt5aKaMVJ0ppJlcCXB1k5NJwkMfnZBEFUkijgnKfrjHw2cvfLESsFEq2qw5f_ZTGaLD6sLPywsreCGqWNQINiUE1-fKf2tf6q6xsWnK18nx0N2Gx6R9m1OzrC7nV0ObOOhtOthte2OsLuWb2dmdVoutXo2lZH2D2rq5lZjadbja9tdYTds3o3M6sjr9UWba2VxUk3dtDe-Sh22D0QVjemxG9GlydM97k55U4DAq3rZln3kapuqt1gP8y84XAQZufh0E8eQUfedOwPx5fse-ENL_3k5SXkW2945SevLiHf-XsVjBwT_yE7Z-fHT38DAAD__7jtXe4=

# Left join with ON filter and WHERE clause
query T
SELECT url FROM [EXPLAIN (DISTSQL) SELECT t1.c, t2.d FROM multiples t1 LEFT JOIN multiples@bc t2 ON t1.c = t2.b WHERE t2.d < 30]
----
https://cockroachdb.github.io/distsqlplan/decode.html#eJzMlUtr20AQx-_9FMuct0Srh-PsSZcEHIJdjHpqdVCkIaiVNcs-oCH4uxdZpZFMshLYBx338ddv9jfL6g1aqnBbHNCA_AECOITAIQIOMXBIIOegNJVoDOluSx_YVH9ABhzqVjnbTeccStII8g1sbRsECVnx3OAeiwr1TQAcKrRF3ZwwSteHQr-mB9fYWjVogMPOWcnSCPIjB3L2_bvGFi8IUhz5fPYj1e0_dDJGZ68KJXu6f8jY7nt2v2ePu80WODyXo2qeiH47xX5R3TJqJUs7Mw91Y1FLlibspwuCqGRRIKXcbLP_9QueJp8eIfz0CO-Vu5Z0hRqrUdn58YNDbukrqRsRnO38mB2N2GJ-68S1WzfBHrRutdTWhfP1hdfWN8Ee6Ltdqr5ovr7o2vom2AN966Xqi-fri6-tb4I90He3VH0Tv449GkWtwVmvatC9y1i9YP-IG3K6xG-ayhOmH-5OudNEhcb2q6IfbNp-qStwGBbecDgKi_Nw6CdPoCNvOvaH40vqTrzhlZ-8uoR86w2v_eT1JeQ7f6-CiWviv2Tn7Pz45W8AAAD__4bONQ0=
