From be44df720b76a686a4e514e98aa2c5a36a6c36e9 Mon Sep 17 00:00:00 2001 From: Marcus Gartner Date: Thu, 4 Mar 2021 09:40:00 -0800 Subject: [PATCH] ccl: add tests for implicitly partitioned partial unqiue indexes Release justification: This is a test-only change. Release note: None --- .../testdata/logic_test/partitioning_implicit | 107 ++++++++++++++---- .../testdata/logic_test/regional_by_row | 89 +++++++++++++-- 2 files changed, 161 insertions(+), 35 deletions(-) diff --git a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_implicit b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_implicit index bb54d159f253..a0af6848aa8c 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/partitioning_implicit +++ b/pkg/ccl/logictestccl/testdata/logic_test/partitioning_implicit @@ -563,6 +563,7 @@ CREATE TABLE public.t ( d int, INDEX (a), UNIQUE (b), + UNIQUE (c) WHERE d > 100, INDEX (partition_by, c), FAMILY (pk, pk2, partition_by, a, b, c, d) ) PARTITION ALL BY RANGE (partition_by) ( @@ -592,6 +593,8 @@ t_a_idx a false t_a_idx partition_by true t_b_key b false t_b_key partition_by true +t_c_key c false +t_c_key partition_by true t_partition_by_c_idx c false t_partition_by_c_idx partition_by false @@ -609,6 +612,7 @@ CREATE TABLE public.t ( CONSTRAINT "primary" PRIMARY KEY (pk ASC), INDEX t_a_idx (a ASC), UNIQUE INDEX t_b_key (b ASC), + UNIQUE INDEX t_c_key (c ASC) WHERE d > 100:::INT8, INDEX t_partition_by_c_idx (partition_by ASC, c ASC), INDEX created_idx (c ASC), FAMILY fam_0_pk_pk2_partition_by_a_b_c_d (pk, pk2, partition_by, a, b, c, d) @@ -639,7 +643,7 @@ vectorized: true │ │ label: buffer 1 │ │ │ └── • values -│ size: 7 columns, 1 row +│ size: 8 columns, 1 row │ ├── • constraint-check │ │ @@ -658,22 +662,51 @@ vectorized: true │ └── • scan buffer │ label: buffer 1 │ +├── • constraint-check +│ │ +│ └── • error if rows +│ │ +│ └── • hash join (right semi) +│ │ equality: (b) = (column5) +│ │ right cols are key +│ │ pred: (column1 != pk) OR (column3 != partition_by) +│ │ +│ ├── • scan +│ │ missing stats +│ │ table: t@t_b_key +│ │ spans: FULL SCAN +│ │ +│ └── • scan buffer +│ label: buffer 1 +│ └── • constraint-check │ └── • error if rows │ - └── • hash join (right semi) - │ equality: (b) = (column5) - │ right cols are key - │ pred: (column1 != pk) OR (column3 != partition_by) - │ - ├── • scan - │ missing stats - │ table: t@t_b_key - │ spans: FULL SCAN + └── • limit + │ count: 1 │ - └── • scan buffer - label: buffer 1 + └── • lookup join + │ table: t@primary + │ equality: (partition_by, pk) = (partition_by,pk) + │ equality cols are key + │ + └── • hash join + │ equality: (c) = (column6) + │ right cols are key + │ pred: (column1 != pk) OR (column3 != partition_by) + │ + ├── • scan + │ missing stats + │ table: t@t_c_key (partial index) + │ spans: FULL SCAN + │ + └── • filter + │ estimated row count: 1 + │ filter: column7 > 100 + │ + └── • scan buffer + label: buffer 1 statement ok INSERT INTO t VALUES (1, 1, 1, 1, 1, 1, 1), (2, 2, 2, 2, 2, 2, 2) @@ -715,22 +748,50 @@ vectorized: true │ table: t@primary │ spans: FULL SCAN │ +├── • constraint-check +│ │ +│ └── • error if rows +│ │ +│ └── • hash join (right semi) +│ │ equality: (b) = (column5) +│ │ right cols are key +│ │ pred: (upsert_pk != pk) OR (column3 != partition_by) +│ │ +│ ├── • scan +│ │ missing stats +│ │ table: t@t_b_key +│ │ spans: FULL SCAN +│ │ +│ └── • scan buffer +│ label: buffer 1 +│ └── • constraint-check │ └── • error if rows │ - └── • hash join (right semi) - │ equality: (b) = (column5) - │ right cols are key - │ pred: (upsert_pk != pk) OR (column3 != partition_by) - │ - ├── • scan - │ missing stats - │ table: t@t_b_key - │ spans: FULL SCAN + └── • limit + │ count: 1 │ - └── • scan buffer - label: buffer 1 + └── • lookup join + │ table: t@primary + │ equality: (partition_by, pk) = (partition_by,pk) + │ equality cols are key + │ + └── • hash join + │ equality: (c) = (column6) + │ right cols are key + │ pred: (upsert_pk != pk) OR (column3 != partition_by) + │ + ├── • scan + │ missing stats + │ table: t@t_c_key (partial index) + │ spans: FULL SCAN + │ + └── • filter + │ filter: column7 > 100 + │ + └── • scan buffer + label: buffer 1 # One row already exists, one row is new. statement ok diff --git a/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row b/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row index eff870ad39f2..2198939f0d43 100644 --- a/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row +++ b/pkg/ccl/logictestccl/testdata/logic_test/regional_by_row @@ -517,10 +517,6 @@ statement ok DELETE FROM regional_by_row_table WHERE pk = 5; CREATE UNIQUE INDEX uniq_idx ON regional_by_row_table(a) WHERE b > 0 -statement ok -DELETE FROM regional_by_row_table WHERe pk = 6; -DROP INDEX uniq_idx - query TI INSERT INTO regional_by_row_table (crdb_region, pk, pk2, a, b) VALUES ('ca-central-1', 7, 7, 8, 9) @@ -555,6 +551,7 @@ ORDER BY pk ---- ap-southeast-2 1 1 2 3 ap-southeast-2 4 4 5 6 +ca-central-1 6 6 5 -5 ca-central-1 7 7 8 9 ca-central-1 10 10 11 12 us-east-1 20 20 21 22 @@ -566,6 +563,7 @@ SELECT * FROM regional_by_row_table ORDER BY pk pk pk2 a b j 1 1 2 3 {"a": "b"} 4 4 5 6 {"c": "d"} +6 6 5 -5 NULL 7 7 8 9 NULL 10 10 11 12 NULL 20 20 21 22 NULL @@ -703,7 +701,7 @@ vectorized: true │ │ label: buffer 1 │ │ │ └── • values -│ size: 7 columns, 1 row +│ size: 8 columns, 1 row │ ├── • constraint-check │ │ @@ -711,7 +709,7 @@ vectorized: true │ │ │ └── • lookup join (semi) │ │ table: regional_by_row_table@primary -│ │ equality: (lookup_join_const_col_@22, column1) = (crdb_region,pk) +│ │ equality: (lookup_join_const_col_@23, column1) = (crdb_region,pk) │ │ equality cols are key │ │ pred: column15 != crdb_region │ │ @@ -730,7 +728,7 @@ vectorized: true │ │ │ └── • lookup join (semi) │ │ table: regional_by_row_table@regional_by_row_table_b_key -│ │ equality: (lookup_join_const_col_@37, column4) = (crdb_region,b) +│ │ equality: (lookup_join_const_col_@38, column4) = (crdb_region,b) │ │ equality cols are key │ │ pred: (column1 != pk) OR (column15 != crdb_region) │ │ @@ -743,13 +741,35 @@ vectorized: true │ └── • scan buffer │ label: buffer 1 │ +├── • constraint-check +│ │ +│ └── • error if rows +│ │ +│ └── • lookup join (semi) +│ │ table: regional_by_row_table@uniq_idx (partial index) +│ │ equality: (lookup_join_const_col_@53, column3) = (crdb_region,a) +│ │ pred: (column1 != pk) OR (column15 != crdb_region) +│ │ +│ └── • cross join +│ │ estimated row count: 3 +│ │ +│ ├── • values +│ │ size: 1 column, 3 rows +│ │ +│ └── • filter +│ │ estimated row count: 1 +│ │ filter: column4 > 0 +│ │ +│ └── • scan buffer +│ label: buffer 1 +│ └── • constraint-check │ └── • error if rows │ └── • lookup join (semi) │ table: regional_by_row_table@new_idx - │ equality: (lookup_join_const_col_@52, column3, column4) = (crdb_region,a,b) + │ equality: (lookup_join_const_col_@68, column3, column4) = (crdb_region,a,b) │ equality cols are key │ pred: (column1 != pk) OR (column15 != crdb_region) │ @@ -808,7 +828,7 @@ vectorized: true │ │ │ └── • lookup join (semi) │ │ table: regional_by_row_table@regional_by_row_table_b_key -│ │ equality: (lookup_join_const_col_@33, column5) = (crdb_region,b) +│ │ equality: (lookup_join_const_col_@35, column5) = (crdb_region,b) │ │ equality cols are key │ │ pred: (upsert_pk != pk) OR (column1 != crdb_region) │ │ @@ -820,13 +840,33 @@ vectorized: true │ └── • scan buffer │ label: buffer 1 │ +├── • constraint-check +│ │ +│ └── • error if rows +│ │ +│ └── • lookup join (semi) +│ │ table: regional_by_row_table@uniq_idx (partial index) +│ │ equality: (lookup_join_const_col_@50, column4) = (crdb_region,a) +│ │ pred: (upsert_pk != pk) OR (column1 != crdb_region) +│ │ +│ └── • cross join +│ │ +│ ├── • values +│ │ size: 1 column, 3 rows +│ │ +│ └── • filter +│ │ filter: column5 > 0 +│ │ +│ └── • scan buffer +│ label: buffer 1 +│ └── • constraint-check │ └── • error if rows │ └── • lookup join (semi) │ table: regional_by_row_table@new_idx - │ equality: (lookup_join_const_col_@48, column4, column5) = (crdb_region,a,b) + │ equality: (lookup_join_const_col_@65, column4, column5) = (crdb_region,a,b) │ equality cols are key │ pred: (upsert_pk != pk) OR (column1 != crdb_region) │ @@ -874,7 +914,7 @@ vectorized: true │ │ │ └── • lookup join (semi) │ │ table: regional_by_row_table@regional_by_row_table_b_key -│ │ equality: (lookup_join_const_col_@33, column5) = (crdb_region,b) +│ │ equality: (lookup_join_const_col_@35, column5) = (crdb_region,b) │ │ equality cols are key │ │ pred: (upsert_pk != pk) OR (column1 != crdb_region) │ │ @@ -886,13 +926,33 @@ vectorized: true │ └── • scan buffer │ label: buffer 1 │ +├── • constraint-check +│ │ +│ └── • error if rows +│ │ +│ └── • lookup join (semi) +│ │ table: regional_by_row_table@uniq_idx (partial index) +│ │ equality: (lookup_join_const_col_@50, column4) = (crdb_region,a) +│ │ pred: (upsert_pk != pk) OR (column1 != crdb_region) +│ │ +│ └── • cross join +│ │ +│ ├── • values +│ │ size: 1 column, 3 rows +│ │ +│ └── • filter +│ │ filter: column5 > 0 +│ │ +│ └── • scan buffer +│ label: buffer 1 +│ └── • constraint-check │ └── • error if rows │ └── • lookup join (semi) │ table: regional_by_row_table@new_idx - │ equality: (lookup_join_const_col_@48, column4, column5) = (crdb_region,a,b) + │ equality: (lookup_join_const_col_@65, column4, column5) = (crdb_region,a,b) │ equality cols are key │ pred: (upsert_pk != pk) OR (column1 != crdb_region) │ @@ -924,6 +984,7 @@ ORDER BY pk crdb_region pk pk2 a b ap-southeast-2 1 1 2 3 ap-southeast-2 4 4 5 6 +ca-central-1 6 6 5 -5 ca-central-1 7 7 8 9 ca-central-1 10 10 11 12 us-east-1 20 20 21 22 @@ -944,6 +1005,7 @@ CREATE TABLE public.regional_by_row_table ( INDEX regional_by_row_table_a_idx (a ASC), UNIQUE INDEX regional_by_row_table_b_key (b ASC), INVERTED INDEX regional_by_row_table_j_idx (j), + UNIQUE INDEX uniq_idx (a ASC) WHERE b > 0:::INT8, INDEX new_idx (a ASC, b ASC), UNIQUE INDEX unique_b_a (b ASC, a ASC), FAMILY fam_0_pk_pk2_a_b_j_crdb_region (pk, pk2, a, b, j, crdb_region) @@ -967,6 +1029,8 @@ regional_by_row_table_b_key b false regional_by_row_table_b_key crdb_region true regional_by_row_table_j_idx crdb_region true regional_by_row_table_j_idx j false +uniq_idx a false +uniq_idx crdb_region true unique_b_a a false unique_b_a b false unique_b_a crdb_region true @@ -1003,6 +1067,7 @@ CREATE TABLE public.regional_by_row_table ( INDEX regional_by_row_table_a_idx (a ASC), UNIQUE INDEX regional_by_row_table_b_key (b ASC), INVERTED INDEX regional_by_row_table_j_idx (j), + UNIQUE INDEX uniq_idx (a ASC) WHERE b > 0:::INT8, INDEX new_idx (a ASC, b ASC), UNIQUE INDEX unique_b_a (b ASC, a ASC), FAMILY fam_0_pk_pk2_a_b_j_crdb_region (pk, pk2, a, b, j, crdb_region)