# LogicTest: 5node 5node-disk

statement ok
CREATE TABLE kv (k INT PRIMARY KEY, v INT)

statement ok
INSERT INTO kv SELECT i, i FROM generate_series(1,5) AS g(i)

statement ok
CREATE TABLE kw (k INT PRIMARY KEY, w INT)

statement ok
INSERT INTO kw SELECT i, i FROM generate_series(1,5) AS g(i)

# Split into 5 parts, each row from each table goes to one node.
statement ok
ALTER TABLE kv SPLIT AT SELECT i FROM generate_series(1,5) AS g(i)

statement ok
ALTER TABLE kw SPLIT AT SELECT i FROM generate_series(1,5) AS g(i)

statement ok
ALTER TABLE kv EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1, 5) as g(i)

statement ok
ALTER TABLE kw EXPERIMENTAL_RELOCATE SELECT ARRAY[i], i FROM generate_series(1, 5) as g(i)

# Verify data placement.
query TTTI rowsort
SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE kv WITH DETAILS]
ORDER by 1
----
<before:/Table/72>  …/1/1                   {1}  1
…/1/1               …/1/2                   {1}  1
…/1/2               …/1/3                   {2}  2
…/1/3               …/1/4                   {3}  3
…/1/4               …/1/5                   {4}  4
…/1/5               <after:/Table/107/1/1>  {5}  5

# Verify data placement.
query TTTI rowsort
SELECT start_key, end_key, replicas, lease_holder from [SHOW RANGES FROM TABLE kw WITH DETAILS]
----
<before:/Table/106/1/5>  …/1/1         {5}  5
…/1/1                    …/1/2         {1}  1
…/1/2                    …/1/3         {2}  2
…/1/3                    …/1/4         {3}  3
…/1/4                    …/1/5         {4}  4
…/1/5                    <after:/Max>  {5}  5

# Verify execution.
statement ok
SET vectorize = experimental_always

query I rowsort
SELECT kv.k FROM kv JOIN kw ON kv.k = kw.k
----
1
2
3
4
5

statement ok
RESET vectorize

# Regression test for #38919.
query B
SELECT EXISTS(SELECT * FROM kv WHERE k > 2)
----
true

# Test that SelOnDest flag of coldata.SliceArgs is respected when setting
# nulls.
statement ok
CREATE TABLE t1(a INT PRIMARY KEY, b INT)

statement ok
INSERT INTO t1 VALUES (1, NULL), (2, NULL)

query I rowsort
SELECT CASE WHEN a>1 THEN b*2 ELSE b*10 END FROM t1
----
NULL
NULL

# Regression test for the wrapped row-execution processor not satisfying the
# width of an integer column during a cast and the vectorized engine not
# performing the cast to the integer of the desired width (#66306).
statement ok
CREATE TABLE t66306 (s STRING);
INSERT INTO t66306 VALUES ('foo');
ALTER TABLE t66306 EXPERIMENTAL_RELOCATE VALUES (ARRAY[2], 1);

query IT
SELECT 1::INT2, s COLLATE en FROM t66306;
----
1  foo

# Always enable the direct columnar scans to make the output below
# deterministic.
statement ok
SET direct_columnar_scans_enabled = true

# Sanity check that the wrapped processor is planned for the query above. If it
# no longer is, we should adjust the query here and above.
query T
EXPLAIN (VEC) SELECT 1::INT2, s COLLATE en FROM t66306;
----
│
├ Node 1
│ └ *colrpc.Inbox
└ Node 2
  └ *colrpc.Outbox
    └ *colexecbase.castIntInt2Op
      └ *rowexec.noopProcessor
        └ *colfetcher.ColBatchDirectScan

statement ok
RESET direct_columnar_scans_enabled
