Skip to content

Commit 602d77c

Browse files
authored
Merge pull request #152744 from spilchen/backport24.1-152670
release-24.1: sql/catalog: exempt views from crdb_region validation
2 parents 8eefe17 + a35c9b1 commit 602d77c

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

pkg/ccl/logictestccl/testdata/logic_test/multi_region

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,5 +1627,30 @@ CREATE TABLE drop_region_126549.t1 (n string PRIMARY KEY, INDEX((lower(n)))) LOC
16271627
statement ok
16281628
ALTER DATABASE drop_region_126549 DROP REGION "us-east-1";
16291629

1630+
# Regression test for issue #151216
1631+
# Tests that CREATE VIEW with references to crdb_region column in expressions
1632+
# (but not directly returned) should not trigger validation assertion errors.
1633+
subtest issue_151216_view_crdb_region_reference
1634+
1635+
statement ok
1636+
CREATE DATABASE bank_151216 PRIMARY REGION "us-east-1" REGIONS "us-east-1", "ca-central-1", "ap-southeast-2" SURVIVE REGION FAILURE;
1637+
1638+
statement ok
1639+
USE bank_151216;
1640+
1641+
statement ok
1642+
CREATE TABLE t1 (c1 INT) LOCALITY REGIONAL BY ROW;
1643+
1644+
statement ok
1645+
CREATE MATERIALIZED VIEW mv1 AS SELECT c1, CASE WHEN crdb_region = 'us-east-1' THEN 'east' ELSE 'other' END AS region_type FROM t1;
1646+
1647+
statement ok
1648+
CREATE VIEW v2 AS SELECT c1, crdb_region = 'us-east-1' AS is_us_east1 FROM t1;
1649+
1650+
statement ok
1651+
SET sql_safe_updates = false;
1652+
DROP DATABASE bank_151216;
1653+
SET sql_safe_updates = true
1654+
16301655
subtest end
16311656

pkg/sql/catalog/multiregion/validate_table.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ func ValidateTableLocalityConfig(
121121
switch lc := lc.Locality.(type) {
122122
case *catpb.LocalityConfig_Global_:
123123
if regionEnumIDReferenced {
124-
if !columnTypesTypeIDs.Contains(regionsEnumID) {
124+
// Omit views since they may reference the multi-region enum type of the base table.
125+
if !columnTypesTypeIDs.Contains(regionsEnumID) && !desc.IsView() {
125126
return errors.AssertionFailedf(
126127
"expected no region Enum ID to be referenced by a GLOBAL TABLE: %q"+
127128
" but found: %d",
@@ -233,8 +234,9 @@ func ValidateTableLocalityConfig(
233234
if regionEnumIDReferenced {
234235
// It may be the case that the multi-region type descriptor is used
235236
// as the type of the table column. Validations should only fail if
236-
// that is not the case.
237-
if !columnTypesTypeIDs.Contains(regionsEnumID) {
237+
// that is not the case. We omit views since they may reference the
238+
// multi-region enum type of the base table.
239+
if !columnTypesTypeIDs.Contains(regionsEnumID) && !desc.IsView() {
238240
return errors.AssertionFailedf(
239241
"expected no region Enum ID to be referenced by a REGIONAL BY TABLE: %q homed in the "+
240242
"primary region, but found: %d",

0 commit comments

Comments
 (0)