# LogicTest: 5node-default-configs

statement ok
CREATE TABLE t (k INT, v INT)

statement ok
INSERT INTO t VALUES (1, 10), (2, 20), (3, 30)

statement ok
ALTER TABLE t EXPERIMENTAL_RELOCATE VALUES (ARRAY[3], 1)

statement ok
CREATE TABLE xy (x INT PRIMARY KEY, y INT)

statement ok
INSERT INTO xy VALUES (2, 200), (3, 300), (4, 400)

statement ok
ALTER TABLE t SPLIT AT VALUES (3), (4)

statement ok
ALTER TABLE t EXPERIMENTAL_RELOCATE VALUES (ARRAY[1], 2), (ARRAY[2], 3), (ARRAY[3], 4)

# Test that LEFT SEMI hash join outputs batches only with the columns from the
# left side.
query II rowsort
SELECT * FROM t WHERE EXISTS(SELECT * FROM xy WHERE x=t.k)
----
2  20
3  30

# Regression test for #39303.
statement ok
CREATE TABLE small (a INT PRIMARY KEY, b INT)

statement ok
CREATE TABLE large (c INT, d INT)

statement ok
INSERT INTO small SELECT x, 3*x FROM
  generate_series(1, 10) AS a(x)

statement ok
INSERT INTO large SELECT 2*x, 4*x FROM
  generate_series(1, 10) AS a(x)

statement ok
ALTER TABLE small SPLIT AT SELECT a FROM small

statement ok
ALTER TABLE small EXPERIMENTAL_RELOCATE SELECT ARRAY[mod(i, 3) + 1], i FROM generate_series(1, 10) AS g(i)

statement ok
ALTER TABLE large SPLIT AT SELECT 2*i FROM generate_series(1, 10) AS g(i)

statement ok
ALTER TABLE large EXPERIMENTAL_RELOCATE SELECT ARRAY[mod(i, 3) + 1], 2*i FROM generate_series(1, 10) as g(i)

# Test that RIGHT OUTER hash join correctly sets probeRowUnmatched on
# subsequent batches.
query II rowsort
SELECT small.b, large.d FROM large RIGHT HASH JOIN small ON small.b = large.c AND large.d < 30 ORDER BY 1 LIMIT 5
----
3   NULL
6   12
9   NULL
12  24
15  NULL

query T
SELECT feature_name FROM crdb_internal.feature_usage WHERE feature_name='sql.exec.query.is-distributed' AND usage_count > 0
----
sql.exec.query.is-distributed

# Regression test for an error of seeking to /Min key for a Get request issued
# for the reverse scan (#83618). Placement of the ranges here doesn't matter.
statement ok
CREATE TABLE a (id TEXT PRIMARY KEY);
CREATE TABLE b (
  id TEXT PRIMARY KEY,
  a_id TEXT,
  status INT,
  INDEX b_a_id (a_id ASC),
  INDEX b_status_idx (status ASC)
);
SELECT a.id FROM a
LEFT JOIN b AS b2 ON (a.id = b2.a_id AND b2.status = 2)
WHERE (a.id IN ('3f90e30a-c87a-4017-b9a0-8f964b91c4af', '3adaf3da-0368-461a-8437-ee448724b78d', 'd0c13b06-5368-4522-8126-105b0a9513cd'))
ORDER BY id DESC
LIMIT 2;

# Some tests with OID types in the equality columns.

statement ok
CREATE TABLE t86075 (k INT PRIMARY KEY, c REGPROCEDURE, a REGPROCEDURE[]);
INSERT INTO t86075 VALUES (1, 1, ARRAY[1]), (2, 2, ARRAY[2]), (3, 3, ARRAY[3]);
CREATE TABLE t86075_2 (k INT PRIMARY KEY, c REGPROCEDURE, a REGPROCEDURE[]);
INSERT INTO t86075_2 VALUES (1, 1, ARRAY[1]), (2, 2, ARRAY[2]), (3, 3, ARRAY[3]);

statement ok
ALTER TABLE t86075 SPLIT AT VALUES (2), (3)

statement ok
ALTER TABLE t86075 SCATTER

statement ok
ALTER TABLE t86075_2 SPLIT AT VALUES (2), (3)

statement ok
ALTER TABLE t86075_2 SCATTER

query I rowsort
SELECT t1.k FROM t86075 AS t1, t86075_2 AS t2 WHERE t1.c = t2.c
----
1
2
3

query I rowsort
SELECT t1.k FROM t86075 AS t1, t86075_2 AS t2 WHERE t1.a = t2.a
----
1
2
3
