Skip to content

Commit 237a7fb

Browse files
authored
Merge pull request #152680 from spilchen/blathers/backport-release-25.3-152670
release-25.3: sql/catalog: exempt views from crdb_region validation
2 parents c814938 + 7478503 commit 237a7fb

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
@@ -1690,4 +1690,29 @@ SELECT * FROM chgme ORDER BY C1;
16901690
statement ok
16911691
DROP TABLE chgme;
16921692

1693+
# Regression test for issue #151216
1694+
# Tests that CREATE VIEW with references to crdb_region column in expressions
1695+
# (but not directly returned) should not trigger validation assertion errors.
1696+
subtest issue_151216_view_crdb_region_reference
1697+
1698+
statement ok
1699+
CREATE DATABASE bank_151216 PRIMARY REGION "us-east-1" REGIONS "us-east-1", "ca-central-1", "ap-southeast-2" SURVIVE REGION FAILURE;
1700+
1701+
statement ok
1702+
USE bank_151216;
1703+
1704+
statement ok
1705+
CREATE TABLE t1 (c1 INT) LOCALITY REGIONAL BY ROW;
1706+
1707+
statement ok
1708+
CREATE MATERIALIZED VIEW mv1 AS SELECT c1, CASE WHEN crdb_region = 'us-east-1' THEN 'east' ELSE 'other' END AS region_type FROM t1;
1709+
1710+
statement ok
1711+
CREATE VIEW v2 AS SELECT c1, crdb_region = 'us-east-1' AS is_us_east1 FROM t1;
1712+
1713+
statement ok
1714+
SET sql_safe_updates = false;
1715+
DROP DATABASE bank_151216;
1716+
SET sql_safe_updates = true
1717+
16931718
subtest end

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)