# LogicTest: 5node

statement ok
CREATE TABLE json_tab (
  a INT PRIMARY KEY,
  b JSONB,
  c INT NOT NULL DEFAULT 10 CHECK (c IN (10, 20)),
  FAMILY (a, b, c)
)

statement ok
CREATE INVERTED INDEX json_inv ON json_tab(c, b)

statement ok
CREATE TABLE array_tab (
  a INT PRIMARY KEY,
  b INT[],
  c INT NOT NULL DEFAULT 10 CHECK (c IN (10, 20)),
  FAMILY (a, b, c)
)

statement ok
CREATE INVERTED INDEX arr_inv ON array_tab(c, b)

statement ok
INSERT INTO json_tab VALUES
  (1, '{"a": "b"}'),
  (2, '[1,2,3,4, "foo"]'),
  (3, '{"a": {"b": "c"}}'),
  (4, '{"a": {"b": [1]}}'),
  (5, '{"a": {"b": [1, [2]]}}'),
  (6, '{"a": {"b": [[2]]}}'),
  (7, '{"a": "b", "c": "d"}'),
  (8, '{"a": {"b":true}}'),
  (9, '{"a": {"b":false}}'),
  (10, '"a"'),
  (11, 'null'),
  (12, 'true'),
  (13, 'false'),
  (14, '1'),
  (15, '1.23'),
  (16, '[{"a": {"b": [1, [2]]}}, "d"]'),
  (17, '{}'),
  (18, '[]'),
  (19, '["a", "a"]'),
  (20, '[{"a": "a"}, {"a": "a"}]'),
  (21, '[[[["a"]]], [[["a"]]]]'),
  (22, '[1,2,3,1]'),
  (23, '{"a": 123.123}'),
  (24, '{"a": 123.123000}'),
  (25, '{"a": [{}]}'),
  (26, '[[], {}]'),
  (27, '[true, false, null, 1.23, "a"]'),
  (28, '{"a": {}}'),
  (29, NULL),
  (30, '{"a": []}'),
  (31, '{"a": {"b": "c", "d": "e"}, "f": "g"}'),
  (32, '{"a": [1]}'),
  (33, '[1, "bar"]')

statement ok
ALTER INDEX json_inv SPLIT AT VALUES (10), (20)

statement ok
ALTER INDEX json_inv EXPERIMENTAL_RELOCATE VALUES (ARRAY[1], 1), (ARRAY[2], 10), (ARRAY[3], 20)

query TTTI colnames
SELECT start_key, end_key, replicas, lease_holder
FROM [SHOW EXPERIMENTAL_RANGES FROM INDEX json_inv WITH DETAILS] ORDER BY lease_holder
----
start_key     end_key       replicas  lease_holder
…/<IndexMin>  …/10          {1}       1
…/10          …/20          {2}       2
…/20          …/<IndexMax>  {3}       3

statement ok
ALTER TABLE json_tab VALIDATE CONSTRAINT check_c

# Filter with a scalar.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '1' ORDER BY a
----
distribution: full
vectorized: true
·
• sort
│ order: +a
│
└── • scan
      missing stats
      table: json_tab@json_inv
      spans: 2 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJykk1-PEjEUxd_9FM19WY0lM-3gS5_QZYwkLOAMiRolm0Iv7OjQjm3HXbPhu5spoEBYsmAfmv658zsnZ24fwf0sQUD6edR_2xuQl91ePs4_9l-RPO2n12MiyftseEO-O6NvvZySTx_SLCVT0vlWx3GC5IpdkWHWTTPy7guRQEEbhQO5RAfiKzCgwIFCAhMKlTUzdM7Y5uoxFPbUA4iYQqGr2q-PfeFLBAHGKrSogIJCL4sy8DrsNUxWEwozYxHEv-qBaZkqau9VT1YUTO035AkF5-UCQSQ7VnpdEO0V3XHDdtwcERrLaYkZSoU2ivfNbTPqhEWhfwGFa1PWS-1EiCavZLOMWByxVpijkcV58ZBqRaRWhBHj79DCU87ZgfP4HOe5sR5txI8lelyOH8jxPTn-_KDYhUHxEBT__6DYOc43QSWXB5XsycWn5TJ0ldEOn9W78YFSizWvAdUC16_HmdrOcGTNLNSut8MACgcKnV_fvllvenp75bxFufzbVrskdpLEzyDxk6R4j8R2SfyQlJwktZ_2xA5J7Us9JU3289Lc3xYKBMSb0ToybQc0H8iFaxogvzP3ATv-XTW_by5LhxRu5A_soke7LHThfDED4W2Nq9WLPwEAAP__YmPR7w==

# Filter with fully-specified arrays.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '[1, 2]' OR b @> '[3, 4]' ORDER BY a
----
distribution: local
vectorized: true
·
• sort
│ order: +a
│
└── • inverted filter
    │ inverted column: b_inverted_key
    │ num spans: 4
    │
    └── • scan
          missing stats
          table: json_tab@json_inv
          spans: 4 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyUUlFv0zAQfudXnO5lG3hKnCBN8lPHmolI21qSSoDWaHKbaxdI7WA7W1HV_46S0LJWtDA_nO6-O3_ffZZXaH-UKDD6Mry5jO_gtB-no_TTzRmk0U10NQIJ18ngFr5ZrR6cnMDnj1ESwekEeuPa90OCk3vOIMhOzmCQ7OIhg_cd3o8S-PAVJDJUOqc7uSCL4h45Zgwro6dkrTYNtGoH4nyJwmdYqKp2DZwxnGpDKFboClcSChzJSUkJyZyM5yPDnJwsypZ2s2yvTQr1hAyvdFkvlBUgGUyQYVrJpvK4710a4_HzbeYNDc2KZaRykCqHC9DukYzFbM1Q1-7PRtbJOaHgLyzEfRT-mv2_i1g9kXGUXxelI0PG47tWNv1oWRnQCnpcgG1WB-ukcWKMF-Ox7_tNCLcZf9vEoKsRSOX_HuRjhNZwuDHMcFA7AT1-0HqwZ52_xnqqjSPjBbuGe_zdQblwTy54jVxCttLK0o7cISV_T-mcrzOGlM-p-6RW12ZKQ6On7WxXDlqiFsjJuq7LuyJWm5Z1huRi-1FeMvGjTMFhJr7PFBxlCo_tlDGclfr5ochRoP_7nP8lbA42F-TcNo-dPurnlnb0s2qeaiZLSwxv5XfqkyOzKFRhXTFF4UxN6_WbXwEAAP__n_9pnQ==

# Filter with a path ending in an empty object.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '{"a": {}}' ORDER BY a
----
distribution: full
vectorized: true
·
• sort
│ order: +a
│
└── • inverted filter
    │ inverted column: b_inverted_key
    │ num spans: 2
    │
    └── • scan
          missing stats
          table: json_tab@json_inv
          spans: 2 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVVFv0zAQfudXnO5lIDwlTloQfiqsmai0raOtBIhUk1vftkBqF9vZhqr8d5R0hTa0FZ14wA9Wznf5vvv0OZcFuu85Ckw-XZ697V3A825vOBp-OHsBw-QsORmBhNNB_xy-OqOvvJzAx_fJIIEJdNIiDGOCo0WKMkUBi7I8gv6gmwzg3WeQyFAbRRdyRg7FF-TIMEKGMY4Zzq2ZknPGVqlFXdhTDyhChpmeF3557DOfEwostLGKLClkqMjLLK_y43LMcGosofhd2s2cz_TUB62NWuxU9P3CC-hwHJcMTeEfecYMnZc3hCJea6zXRdEq2Y7etjAPjfVkg3aT9-VOulaDrr1Bx_fTjeQkpwFJRTYINzlXVnXqh0zfIcMTkxcz7QRIBhNkOJzLKgp4GNT2BYvyeD0ILi1dZw-JViC1Ag7G35LdKYU3pISHSOnpO7Ke1GmWe7Jkg2hTzyqfPMwtGA0dLsBV_YPz0nqR4muZpmEYVht_kyKQVo1TkSKsK3E7pUQNKdGGlOjvXeFPdyVadyX6Z67wQ6T84Ur8P7kSH_JpDsjNjXbUGB_bmcIG0zGv5gypG1oOJWcKO6VLa6Z17TLs10D1gSLnl1m-DHp6lXLekpz9mizrSHwv0qvdSGETKdqLFB-AFO9FCjeQ-DpS1ERq7UVq7-6JN5HaT-0prly8zs39VaZQYPi4jrdsq4XVC_LGVVdpeGvua9jRj3l1Ea5l7ojhufxGXfJkZ5mu_jxTFN4WVJbPfgYAAP__L_ZcSQ==

# Filter with a path ending in an empty array.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '{"a": []}' ORDER BY a
----
distribution: full
vectorized: true
·
• sort
│ order: +a
│
└── • inverted filter
    │ inverted column: b_inverted_key
    │ num spans: 2
    │
    └── • scan
          missing stats
          table: json_tab@json_inv
          spans: 2 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzMVV9v2j4Uff99iqv70t80V9gJ7I-f2EqqIbWlA6RtaqLKkNs2W7CZ7bSdUL77lFBWyAoa3cv8YOX63pxzj45zs0D3PUeJ0efzk3f9M_i_1x-NRx9PXsAoOomOxqDgeDg4ha_O6EuvJvDpQzSMYALduOA8JDhYxKhilHCRlAcwGPaiIbz_AgoZapPSmZqRQ3mBAhkGyDDEhOHcmik5Z2yVWtSF_fQeJWeY6Xnhl8c-8zmhxEIbm5KlFBmm5FWWV_mkTBhOjSWUj6W9zPlMT32rvVGL3Yp-UHgJXYFJydAU_oEnYei8uiaU4Vpj_R7Kdsm29PYE88hYT7bVafK-3ErXbtB1NujEbrqxmuQ0JJWSbfFNzpVV3foh07fI8MjkxUw7CYrBBBmO5qqKWoK3avtaF8nhY7AoQekUBBh_Q3arANEQwPcR0Ne3ZD2lx1nuyZJtBZsqVvnofm7BaOgKCa7qGpxX1ssYX6s45pxXm3gTI5BOG6dvY4R1JW6rlKAhJdiQEvy5F-L5XgTrXgR_6YXYR8BvXoT_khfhPp_hkNzcaEeNUfE0E28wHYpqplB6TcsB5Exhp3RuzbSuXYaDGqg-SMn5ZVYsg75epZy3pGa_psg6ktiJ9Go7Em8iBTuRwj2Qwp1IfANJrCMFTaT2TqTO9p5EE6nz3J7CysWr3NxdZilK5A_r8IlttbB6QV276iqNbsxdDTv-Ma8uwpXKHTE8Vd-oR57sLNPVX2aK0tuCyvK_nwEAAP__NY9UHQ==

# Filter with a nested array. This index expression is not tight.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '[[1, 2]]' OR b @> '[[3, 4]]' ORDER BY a
----
distribution: local
vectorized: true
·
• filter
│ filter: (b @> '[[1, 2]]') OR (b @> '[[3, 4]]')
│
└── • index join
    │ table: json_tab@json_tab_pkey
    │
    └── • sort
        │ order: +a
        │
        └── • inverted filter
            │ inverted column: b_inverted_key
            │ num spans: 4
            │
            └── • scan
                  missing stats
                  table: json_tab@json_inv
                  spans: 4 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyUVG1P2z4Qf___FKd7A_xn1DgpQvKrAg1aEVDWVNomGiG3OSAjtTPb4UGo331K0jKakYpaiuV78O_ufr7LK9rfGQoMf1ydHw0uYbc_iMbRt_M9iMLz8GQMEk5Hwwv4ZbW6cXIK37-GoxB2p9CbFJ4XEOxcX3MGfhzv7MFw1LAEDLpLSz8cwfFPkMhQ6YQu5ZwsimvkGDPMjZ6RtdqUqtfKYZA8o_AYpiovXKmOGc60IRSv6FKXEQocy2lGI5IJmY6HDBNyMs0q2FXCveqQqkdkeKKzYq6sAMlgigyjXJZSh3udI2Oqj--vSZ0rQ7fpc6gSkCqBQ9DunozFeMFQF-5vZtbJO0LB35Uy6KPwFuzz1QzUIxlHyWmaOTJkOny9pJU9fM4NaAU9LsCWJYB10jgxwcPJxPO8cgs-OPH_y92vZQRSyTZX-AShIiFYkcBwWDgBPd5Kh9-gg29DR6SNI9Px10no8S-t4YJGOH-bcGc6VctWCja1kpPTm_yBXv7pp7asuo2sgm2yeuuF7npOtV7Abs__YBKFEGfR8PK4nsh1l-VIvrl84hkPGhV0t6lgRDbXytJa_m2RvEakfb6IGVJyR_WPwerCzOjK6FnlW4vDCqhSJGRdbeW1MFArk3WG5PxtKN8j8Y1IfjsSbyL5G5GCdiS_iRRsROq2IwVNpO5GpINNPMUMbzP9dJMmKNBbrv0PttXC8oK8s2UDRPf6qYIdv-Tl893KzBLDC_lAfXJk5qlKrUtnKJwpaLH4708AAAD__8ZXD3A=

# Combine predicates with OR.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '[1]' OR b @> '[2]' ORDER BY a
----
distribution: full
vectorized: true
·
• sort
│ order: +a
│
└── • inverted filter
    │ inverted column: b_inverted_key
    │ num spans: 2
    │
    └── • scan
          missing stats
          table: json_tab@json_inv
          spans: 2 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJzUVV1v2jAUfd-vsO5L281V7AQ2yU90JdWQ2tIB0jYVVBl822YLNrOdtlPFf59MCiNZYaPay_Jg-X5wzj064eYR3PccBKSfL06POudkv93pD_ofTw9IPz1NjwdEkpNe94x8dUZfeTkmnz6kvZTsj0lrWDCWINm75KO9A9LtVZNxmWynPfL-C5FAQRuF53KKDsQlcKAQA4UERhRm1kzQOWND6XHR2FEPIBiFTM8KX6Z95nMEAYU2VqFFBRQUepnloT6ajyhMjEUQv1rbmfOZnvioUemFVqDvFl6QFofRnIIp_BPPiILz8gZBJGuDddogGnO6YbZnmPvGerRRs877ZiNdo0bXrNDx7XQDOc6xh1KhjViVc-lca3HJ9B1QODZ5MdVOEEnJGCj0ZzJEEWfRkbURP1zdoguL19lDqhWRWhFOjL9Fu1EEr4lgu4jo6Du0HtVJlnu0aKO4qmRZTx9mlhhNWlwQFyYnzkvrxRDeDYeMsXAkqxt_Hc64jIGgVn9u5EMg63rdRsFxTXBcERz_vWv85a7FK9fif-Ma30XEb64l_59ryS5_7R66mdEOa-vneSZWYzrkYU-husFyqTlT2AleWDNZ9JZhdwG0SCh0vqzyMujoZcl5i3K62kzrSHwr0tvNSKyOFG9FSnZASrYisQoSX0eK60iNrUjNzTPxOlLzpTMlwcXr3NxfZQoEsKfn8Jlj-UD4gbxx4VXq35r7Bezgxyy8CNcyd0jhTH7DNnq000yHL9cEhLcFzuevfgYAAP__02FtyQ==

# Combine predicates with OR.
query T
EXPLAIN (DISTSQL)
SELECT * FROM json_tab WHERE b @> '[3]' OR b @> '[[1, 2]]' ORDER BY a
----
distribution: local
vectorized: true
·
• filter
│ filter: (b @> '[3]') OR (b @> '[[1, 2]]')
│
└── • index join
    │ table: json_tab@json_tab_pkey
    │
    └── • sort
        │ order: +a
        │
        └── • inverted filter
            │ inverted column: b_inverted_key
            │ num spans: 3
            │
            └── • scan
                  missing stats
                  table: json_tab@json_inv
                  spans: 3 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyUU21P2zAQ_r5fcbovvMyocVI2yZ8KNGhFQFlbaZtohNzmgIzUzmyHF6H-9ykJ7Ui0dKs_WPeW554nvntF-ytFgeH3q_OjwSXs9gfjyfjr-R6Mw_PwZAL7cDoaXsBPq9WNkzP49iUchbA7g94097yAYOc6iHb2YDiqB685Az-qMv1wBMc_QCJDpWO6lAuyKK6RY8QwM3pO1mpThF7LgkH8jMJjmKgsd0U4YjjXhlC8oktcSihwImcpjUjGZDoeMozJySQtYVdce6WRqEdkeKLTfKGsAMlghgzHmSy8Dvc6R8Z0goO11bkydJs8hyoGqWI4BO3uyViMlgx17v4wsk7eEQr-TsKgj8Jbsv9XMVCPZBzFp0nqyJDp8LqUVT58zgxoBT0uwBbUwTppnJji5-nU87ziCtYW3y_uT5WPQCr-dyGfIpSC_ZVghsPcCejxVul-QzrfRvpYG0em49cF9_jH1nZBo52_Tbsznai3cQk2jYuTs5vsgV6aM8Ng3kqs2yAWbENs_fTdOq0qLmC359d3TQhxNh5eHlc7V8uulm5d0kr5sEG5uw3lEdlMK0s1wm2dvEanA76MGFJ8R9XCW52bOV0ZPS9rK3dYApWBmKyrsrxyBmqVss6QXKyX7j0S34jktyPxJpK_ESloR_KbSMFGpG47UtBE6m5EOtz0nyKGt6l-ukliFOi9nYO_XKuDxQfyzhYDML7XTyXs5CUrnu9WppYYXsgH6pMjs0hUYl0yR-FMTsvlh98BAAD__z7dA0A=

# More complex combination.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab
WHERE (b @> '[1]'::json OR b @> '[2]'::json) AND (b @> '3'::json OR b @> '"bar"'::json)
ORDER BY a
----
distribution: local
vectorized: true
·
• sort
│ order: +a
│
└── • inverted filter
    │ inverted column: b_inverted_key
    │ num spans: 6
    │
    └── • scan
          missing stats
          table: json_tab@json_inv
          spans: 6 spans
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkl9P2zwUxu_fT3F0bgC9RrFTTZN8VaBBywQNSyptE4mQ2xwgW2pntgNMqN99SkpHW63d8IVlnz_Pc36Wn9H9qFFi9OXq4iQew-EozibZp4sjyKKL6GwCCs7T5BK-OaNvvJrC5w9RGsHh4RSGecv5gODgWhQHUn7MkvHpESQpbOTC19wRnIxHm62DnY05TpXNca05SUdRCqdfQSFDbUoaqzk5lNcosGDYWDMj54ztQs99QVw-oeQMK920vgsXDGfGEspn9JWvCSVO1LSmlFRJNuDIsCSvqrqXXTEP-0OlH5DhmanbuXYSFIMpMswa1d0CwYOXiY_XzsGVpdvqKdIlKF2CEGD8PVmHxYKhaf3rWM6rO0Ip1jjiEUq-YP-OEusHsp7K86r2ZMkGYpNnlY-eGgtGw1BIcN384LyyXub4Ps85590m8pyHYQfxGkEgXf6lKswRetZ3K1SGSeslDMVO6HALWrwFOjPWkw3CTdSh-H-n3WDLLnyLXUquMdrRht0uJ77ldCwWBUMq72j5R51p7YyurJn1tctr0gv1gZKcX2bF8hLrVcp5S2r--4usK4m9SuFuJbGtFO5VGuybqWB4W5vHm6pEifxlHf9hWy3sGtSd6x47uzePvezkZ9M91a2qHTG8VN9pRJ7svNKV89UMpbctLRb__QoAAP__2Jd89w==

# Combined with non-JSON predicates.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '[1]' AND a % 2 = 0 ORDER BY a
----
distribution: full
vectorized: true
·
• sort
│ order: +a
│
└── • filter
    │ filter: (a % 2) = 0
    │
    └── • scan
          missing stats
          table: json_tab@json_inv
          spans: 1 span
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lOFq2zAUhf_vKcSF0YQp2LKTbAgG6RqXBdq0swPb6ExR49vOm2N5krx2lLz7sJ1ksUlME5h_hGvp5jvHOpKeQf9KgIP35fridDIlnfEkmAWfLrok8C68sxkR5Ny_uiQ_tExvjbgjnz96vkc6d2T0LbdtF8nJDQtPuuR0OiadjiCvidMl74ndJVf-2PPJh69EAIVURjgVC9TAb4ABBQcouBBSyJSco9ZSFVPPZeMkegJuU4jTLDfVsIlNgsBBqggVRkAhQiPipOSN2BsIlyGFuVQI_F_3VPZkZg1r3eGSgszNihxS0EY8IPD-lpXJGPhwSbfcsC03O4Rm4i5BH0WEyrLr5tYrNyqLOP0NFM5kki9SzculCTJRlBazrVOlLNbbVNa1wvv4yUsj2OeaNVzbh7g-jxODCpXl1C1X45x0RqzIk3M-mc7elbGu6r1-nIYf5xA_gVQGldXfle5uObch16_JOS8PjR0ZmrMJzTk-NHaI601o7n8LzT3Ezyq0wfGhDWpydrucjzqTqcYXnWm7odRjxS2B0QNWt4qWuZrjtZLzsrd6vSpB5UCE2lSzb6uXSbqe0kahWGyO3DaJtZKcA0hOK8ndT3KaJLeVZNdIbJvUb5L6raTBfk-sSRq0kob7SW6TNDz26wbFfrhP5ONtHAEHe_X0dvysHyj-IB50sSmD7_KxxM7-ZMWWuheJRgqX4ieO0aBaxGmsTTwHblSOy-WrvwEAAP__mSldmQ==

# The split disjunction rule allows us to use the index for this query.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '[1]' OR a = 44 ORDER BY a
----
distribution: full
vectorized: true
·
• distinct
│ distinct on: a
│ order key: a
│
└── • union all
    │
    ├── • index join
    │   │ table: json_tab@json_tab_pkey
    │   │
    │   └── • sort
    │       │ order: +a
    │       │
    │       └── • scan
    │             missing stats
    │             table: json_tab@json_inv
    │             spans: 1 span
    │
    └── • scan
          missing stats
          table: json_tab@json_tab_pkey
          spans: [/44 - /44]
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lV9P4zgUxd_3U1j3BdCmSpyk_yKtVJZ2tR0BZdpKMyOmQm5zgQxt3LHdAYT63Udp6Z84xDSFoQ9VHDu_e3x1jv0E8ucYAmh9vTg9bp-Tw2a71-99Pj0ivdZp66RPGPmv2zkjPySPrxQbki__t7otcjgkje8zx_GQHFzSwcER6XTJISP_EN9PnputLvn3G2FgQcxDPGcTlBBcAgULXLDAg4EFU8FHKCUXydTTYmE7fIDAsSCKpzOVvB5YMOICIXgCFakxQgB9NhxjF1mIwnbAghAVi8YL_EplY_VwNb3DR7DghI9nk1gGhFlkCBb0piwZ2b5vOzCYW8BnalNRKnaDENAtie0mBM7c2l1lM5IqikfKrqclNpIWdESIAsOANKhWfQMYPpJbJm8zXw_mG4VlTWE9V-GGy5e1de7fS3DuNqhbaB8bjRVNI3XfXeQ5L_GpTb308s5MGYVVdWFeShjd3YXU5MIo_pUy4Jb7qGMfC2HT0vrJvhB4HT204jBXtqvLLqK6x4VCYXsvNfblcp5WrlCTPvEofu5Rea-k5qnyNVXlIqrWnq5-YDSruQrfHk3nvaKZPuHc3RPg7pkAd50Ad_8EuEVUPyfA3z8BfpFyWwmo_NEEVIqoWlun9oEJqOUqfHsC6HslgBa547sopzyWmCqeV8rRSpVosiUMb3DZAslnYoQXgo8Wa5fDzgK0eBGiVMtZuhy049WUVALZZO2CbRLVSXSbVEuR6DapXoxEvXzU8sbfneUaUGUd5RpbZVJV01Geuet-ftsdHeUbUeUCpLKRVMknZZpeMZKq-SRfJ1X3NVW1GMloqkynzCyTqTwdVdvbVJkA1s2mcvLbTjOpeeVYMJwLmR3STATTLDeflYkgzWRwVz9kIvgKymiIbL_MMJMjMpan5sPBpKuanPPXY35_FYUQgPP8K73wt_pB8gG7kcll07vl9wtu_3GaXBXXbCzRgjN2h01UKCZRnFyDIwiUmOF8_tfvAAAA__9LYx8-

# We cannot use the index for this query.
query T
EXPLAIN (DISTSQL)
SELECT a FROM json_tab WHERE b @> '[1]' OR sqrt(a::decimal) = 2 ORDER BY a
----
distribution: local
vectorized: true
·
• filter
│ filter: (b @> '[1]') OR (sqrt(a::DECIMAL) = 2)
│
└── • scan
      missing stats
      table: json_tab@json_tab_pkey
      spans: FULL SCAN
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyUkdFvmzAQxt_3V5zupURyVJy9WZpEG6jGlIQOIm1ThyIHrhkrwdQ26qqI_30CljVUa7X6AXHfHd_9-HxAc1-iwODr9eIiXIHjh8k6-byYQBIsgvkaJFzF0RJ-GlVtrNzCl49BHICzBe9747rvCc5ueHo2gSgGx9xr60gh_GAeLi8WE_gAs67jBzFcfgOJDCuV00ruyaC4QY4pw1qrjIxRupMO_UCY_0LhMiyqurGdnDLMlCYUB7SFLQkFruW2pJhkTvrcRYY5WVmUve2R1Tu-bOo7ekSGc1U2-8oIkAy2yDCpZVdNMW0ZqsY-bTNW7ggFP8ELfRRuy_6f8KooLWnS53yMN-gCHG82DlEI8SmJVpcnYXp8nKZ4KpFh1FgBHn8Rf_YMn78FPyZTq8rQCP6lTe6zTVPepgwp39Fwq0Y1OqNrrbJ-diij3qgXcjJ26PKhCKtjy1hNcv83_VMn_qrT7DWnlOFtqR42RY4C3T9n-o_H8WD3gdyZLqLkh3robdePdfeDt7I0xHAp78gnS3pfVIWxRYbC6oba9t3vAAAA___Ayg8k

statement ok
INSERT INTO array_tab VALUES
  (1, '{}'),
  (2, '{1}'),
  (3, '{1, 2}'),
  (4, '{1, 3}'),
  (5, '{1, 2, 3, 4}')

statement ok
ALTER TABLE array_tab VALIDATE CONSTRAINT check_c

statement ok
ALTER INDEX arr_inv SPLIT AT VALUES (10), (20)

statement ok
ALTER INDEX arr_inv EXPERIMENTAL_RELOCATE VALUES (ARRAY[1], 1), (ARRAY[2], 10), (ARRAY[3], 20)

query TTTI colnames
SELECT start_key, end_key, replicas, lease_holder
FROM [SHOW EXPERIMENTAL_RANGES FROM INDEX arr_inv WITH DETAILS] ORDER BY lease_holder
----
start_key     end_key       replicas  lease_holder
…/<IndexMin>  …/10          {1}       1
…/10          …/20          {2}       2
…/20          …/<IndexMax>  {3}       3

query T
EXPLAIN (DISTSQL)
SELECT a FROM array_tab WHERE b @> '{}' ORDER BY a
----
distribution: full
vectorized: true
·
• sort
│ order: +a
│
└── • inverted filter
    │ inverted column: b_inverted_key
    │ num spans: 1
    │
    └── • scan
          missing stats
          table: array_tab@arr_inv
          spans: 1 span
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lN9v0zAQx9_5K6x7GQhXsZOWSX4qrJmo1K2jKQJEq8lNbiMitYPt7Iem_O8oyTaWsFR0D-TB0vkun-9XZ5_vwP7KQED49Wz2fnpKXk-m0TL6NHtDonAWHi2JJMeL-QmRxsjbcyc35MvHcBGSDRmvCsYCJAd35QGZLybhgnz4RiRQUDrBU7lFC-I7cKDgA4UA1hRyo2O0VpsqdVcXTpMbEIxCqvLCNdsudRmCgEJpk6DBBCgk6GSaVfl1uaYQa4Mg_pROUutSFTtv2KqFcSU_L5wgYw7rkoIu3L3OmoJ18hJBBE-MTScghiXt8faMcqSNQ-ONurpve-WGHblRS47vllvKTYYLlAkaj7U1H49oLI05T9UVUDjSWbFVVhBJyQYoRLmsIo-zgceZd_p5NquXXrO8Y5btY3aqrtA4TI7TzKFB4_ltxw_58CY3RCsy5oLYyiFBlYgVrFbB4WGzAOm16Hcs-i2L_r_3k7-8nz4beP5L-sn3MftXP4P_0c9gn3FYoM21stgZ2eeVWEdpwKvZxuQSm4fA6sLEeGZ0XNc24bwG1RsJWtdkeRNM1UPKOoNy-zjNT0l8J-ldP4l1Sf5OUrAHKdhJYi0Sf0ryu6ThTtKo3xPvkkYv9RRUp3iR6evzNAEB7P4bPLM8fFD9IC9tdZWiH_q6xi5v8-oiXMjMIoUT-RMn6NBsU1W99jEIZwosy1e_AwAA___h0C2n

# Combined with non-Array predicates.
query T
EXPLAIN (DISTSQL)
SELECT a FROM array_tab WHERE b @> '{1}' AND a % 2 = 0 ORDER BY a
----
distribution: full
vectorized: true
·
• sort
│ order: +a
│
└── • filter
    │ filter: (a % 2) = 0
    │
    └── • scan
          missing stats
          table: array_tab@arr_inv
          spans: 1 span
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJy0lO9q2zAUxb_vKcSF0YQpxJKTbAgG6ZqUGdq0swPb2EJR49vOzLE8SV5Xit992E672CSmLswfhP7c_M6JjqQHML9iEDD_cnl27C1Ib-YFy-DTWZ8E87P5yZJIcupfnBOptby_svKafP449-ekd02m3zPHcZEcPbD8qE-OFzPS60nymvA-eU-cPrnwZ3OffPhKJFBIVIgLuUED4hswoMCBggsrCqlWazRG6WLpoSz0wj8gHApRkma2mraRjREEKB2ixhAohGhlFJe8KXsDq3xFYa00gvhXvVADlQ4ntepVTkFldkteUTBW3iKI0Y4VbwZiktMdN2zHzR6hpbyO0UcZoh46dXNPWzeVWl9FyW-gcKLibJMYUW5NkMqiO2TOkA2KlsMhj6zh0eni8TSKLWrUQ143WM0L0puyIj0hhLdYvitD3PYP-uENP7yLn0Bpi3o42pflfjm3ITeqyfHnR8ReGBEvI-JdImJdPD5F5P63iNwufrYRjV8e0bgm57TL-WhSlRh81n11GkoDVrwAGN5i9WIYlek1Xmq1Lmur4UUJKidCNLZafVsNvORxyViNcvN0wXZJrJXEO5B4K8k9TOJNkttKcmoktksaNUmjVtL4sCfWJI1bSZPDJLdJmrz0342L83ATq7urKAQBzvYb7GkePyh-IG9NcSiDH-quxC7v0-JI3cjYIIVz-RNnaFFvoiQyNlqDsDrDPH_1NwAA___hR1Fo

# The split disjunction rule allows us to use the index for this query.
query T
EXPLAIN (DISTSQL)
SELECT a FROM array_tab WHERE b @> '{1}' OR a = 1 ORDER BY a
----
distribution: full
vectorized: true
·
• distinct
│ distinct on: a
│ order key: a
│
└── • union all
    │
    ├── • index join
    │   │ table: array_tab@array_tab_pkey
    │   │
    │   └── • sort
    │       │ order: +a
    │       │
    │       └── • scan
    │             missing stats
    │             table: array_tab@arr_inv
    │             spans: 1 span
    │
    └── • scan
          missing stats
          table: array_tab@array_tab_pkey
          spans: [/1 - /1]
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJy8lVFv2joUx9_vp7DOS1vdIOIECES6EvcWrsbUlg6QtmlDyBC3jRrizHbWIcR3n5K0QJzGJbQrD4iQ5Hf-Pvodew3iRwAu9L9cX_w7uEKnvcF4Mv50cYbG_Yv--QQR9P9oeIkI52Q1k2SOPn_oj_rodI6632PTtCk6WePNyRkajtApQf8gnPzs9Ufov6-IgAEh8-gVWVIB7jfAYIAFBtgwNSDibEGFYDy5tU4fHHi_wDUN8MMolsnfUwMWjFNw1yB9GVBwYULmAR1R4lFeN8EAj0riByl-m7K7_TWL7ukKDDhnQbwMhYuIgeZgwDgiyVUd102YbgxgsdyVFJLcUnDxXsZBD1xzYxwes-cL6YcLWe_kM3aTHgy5Rzn1XNTFSvUdYL5Cd0TcFd6ebnYJm0rCTmnCHZdltVXu3xm4dBnYqrSOXcaWkhFbbx7yitVYVMd2_vFhLLXBHDWYnQuGD9cQazSc-eHPnH_78pl1XEu-rdKQlhqySsYx45Lyuv1cG58vZyvlKrXkI_PDx440jxzMslwNJVezSq6tw847jqJTmvD1o2i-1SjmdzTrcOOtI423UuOtKsZbVTI-Gt843vhGlXJ7xrf-sPGtKrm2qrTf0fh2acLXG4_fynhc5QwfURGxUNBc8bJSplKqhpMlUe-WZi0QLOYLes3ZIn02uxymoPQPjwqZ3cXZxSB8uiUkp2S5tWCfhFUS3ie1cyS8T-pUI2G7HJWd6IezLA2qqaIsbat0qdoqytZ3vVHedlNFNbSoZgVSU0tqlZMKTW9pSU45qaGSnGOlcqqRtFIVOqVn6aSyVVT7aKkKA9jRS2WWtx0XpuaFbUGzLxRWiAsjmGdZ5azCCOLCDB7qQ2EEX0BphSj2Sw_TGVFQHus3B10uJ9nnbwL2MPM9cMF8_NSe-Xr6QPICuRXJYTO-Yw8pd7KKkqPihgSCGnBJ7mmPSsqXfpgcgwtwJY_pZvPX7wAAAP__pMkU_Q==

# We cannot use the index for this query.
query T
EXPLAIN (DISTSQL)
SELECT a FROM array_tab WHERE (b @> '{2}' AND a = 3) OR b[0] = a ORDER BY a
----
distribution: local
vectorized: true
·
• filter
│ filter: ((b @> ARRAY[2]) AND (a = 3)) OR (a = b[0])
│
└── • scan
      missing stats
      table: array_tab@array_tab_pkey
      spans: FULL SCAN
·
Diagram: https://cockroachdb.github.io/distsqlplan/decode.html#eJyUUWFrnEAQ_d5fMcyXeLBH1HwpCwGv0VDhcpeq0IarHKtOrhLPtbsr6XH434t6sUloQrsfxHk7--a9N0fUPyvkGHy7XS7CFVh-GCfxl-UM4mAZXCUg4Dpa34BQShy2RmTw9XMQBWBZGXjfW9u-IDg7ut3ZDBYrHywBl3Axm8E6Aivb2ClcgugrP4jg0x0IZFjLglZiTxr5Bh1MGTZK5qS1VD10HBrC4hdym2FZN63p4ZRhLhUhP6IpTUXIMRFZRRGJgtS5jQwLMqKsBtpJrjf9bZsHOiDDK1m1-1pzEAwyZBg3oq_mmHYMZWv-zNNG7Ai580xg6CO3O_bvGq_LypAide68FDjiHCzLc6cgF1G0uNu4nPNwlXxMT5F6Tp_pCTxFO2Ceu7GnXmS4bg0Hz3nTiPvKiPM_RiLSjaw1vbDx1iT71aS506UMqdjRuGEtW5XTrZL50DuW64FoAArSZrx1xiKsn660UST20x6eMznvMrnvMaUM7yv5uC0L5Gifzvwvn6eD_QOx031E8Q_5ONAmh6Y3eC8qTQxvxAP5ZEjty7rUpsyRG9VS1334HQAA__8XkRFS
