Skip to content

Commit 9163027

Browse files
committed
sql: add element for hidden column
TODO:
1 parent d640d90 commit 9163027

File tree

8 files changed

+129
-5
lines changed

8 files changed

+129
-5
lines changed

pkg/sql/schemachanger/scdecomp/decomp.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,6 @@ func (w *walkCtx) walkColumn(tbl catalog.TableDescriptor, col catalog.Column) {
543543
column := &scpb.Column{
544544
TableID: tbl.GetID(),
545545
ColumnID: col.GetID(),
546-
IsHidden: col.IsHidden(),
547546
IsInaccessible: col.IsInaccessible(),
548547
GeneratedAsIdentityType: col.GetGeneratedAsIdentityType(),
549548
GeneratedAsIdentitySequenceOption: col.GetGeneratedAsIdentitySequenceOptionStr(),
@@ -591,6 +590,18 @@ func (w *walkCtx) walkColumn(tbl catalog.TableDescriptor, col catalog.Column) {
591590
}
592591
}
593592
w.ev(scpb.Status_PUBLIC, columnType)
593+
594+
if col.IsHidden() {
595+
if columnType.ElementCreationMetadata.In_26_1OrLater {
596+
w.ev(scpb.Status_PUBLIC, &scpb.ColumnHidden{
597+
TableID: tbl.GetID(),
598+
ColumnID: col.GetID(),
599+
})
600+
} else {
601+
column.IsHidden = true
602+
}
603+
}
604+
594605
}
595606
if !col.IsNullable() {
596607
w.ev(scpb.Status_PUBLIC, &scpb.ColumnNotNull{
@@ -633,6 +644,7 @@ func (w *walkCtx) walkColumn(tbl catalog.TableDescriptor, col catalog.Column) {
633644
ColumnID: col.GetID(),
634645
})
635646
})
647+
636648
}
637649

638650
func (w *walkCtx) walkIndex(tbl catalog.TableDescriptor, idx catalog.Index) {

pkg/sql/schemachanger/scdecomp/helpers.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,6 @@ func NewElementCreationMetadata(
142142
return &scpb.ElementCreationMetadata{
143143
In_23_1OrLater: true,
144144
In_24_3OrLater: true,
145+
In_26_1OrLater: clusterVersion.IsActive(clusterversion.V25_4), // FIXME: need 26.1
145146
}
146147
}

pkg/sql/schemachanger/scpb/elements.proto

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
//
33
// Use of this software is governed by the CockroachDB Software License
44
// included in the /LICENSE file.
5+
//
6+
// This file is used by `element_generator.go` to build `elements_generated.go`.
7+
// It's sensitive to formatting; tools such as `buf format` aren't recommended.
58

69
syntax = "proto3";
710
package cockroach.sql.schemachanger.scpb;
@@ -109,6 +112,7 @@ message ElementProto {
109112
ColumnComment column_comment = 35 [(gogoproto.moretags) = "parent:\"Column\""];
110113
ColumnNotNull column_not_null = 36 [(gogoproto.moretags) = "parent:\"Column\""];
111114
ColumnComputeExpression column_compute_expression = 190 [(gogoproto.moretags) = "parent:\"Column\""];
115+
ColumnHidden column_hidden = 191 [(gogoproto.moretags) = "parent:\"Column\""];
112116

113117
// Sequence elements.
114118
SequenceOption sequence_option = 37 [(gogoproto.moretags) = "parent:\"Sequence\""];
@@ -217,7 +221,9 @@ message Expression {
217221
message Column {
218222
uint32 table_id = 1 [(gogoproto.customname) = "TableID", (gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/sem/catid.DescID"];
219223
uint32 column_id = 2 [(gogoproto.customname) = "ColumnID", (gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/sem/catid.ColumnID"];
220-
bool is_hidden = 3;
224+
// Deprecated.
225+
// The hidden attribute is now handled as a separate element (see ColumnHidden).
226+
bool is_hidden = 3 [deprecated = true];
221227
bool is_inaccessible = 4;
222228
uint32 generated_as_identity_type = 5 [(gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/catalog/catpb.GeneratedAsIdentityType"];
223229
string generated_as_identity_sequence_option = 6;
@@ -274,6 +280,12 @@ message ColumnComputeExpression {
274280
Usage usage = 5;
275281
}
276282

283+
message ColumnHidden {
284+
uint32 table_id = 1 [(gogoproto.customname) = "TableID", (gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/sem/catid.DescID"];
285+
uint32 column_id = 2 [(gogoproto.customname) = "ColumnID", (gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/sem/catid.ColumnID"];
286+
}
287+
288+
277289
message ColumnFamily {
278290
uint32 table_id = 1 [(gogoproto.customname) = "TableID", (gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/sem/catid.DescID"];
279291
uint32 family_id = 2 [(gogoproto.customname) = "FamilyID", (gogoproto.casttype) = "github.com/cockroachdb/cockroach/pkg/sql/sem/catid.FamilyID"];
@@ -1013,4 +1025,5 @@ message FunctionSecurity {
10131025
message ElementCreationMetadata {
10141026
bool in_23_1_or_later = 1;
10151027
bool in_24_3_or_later = 2;
1028+
bool in_26_1_or_later = 3;
10161029
}

pkg/sql/schemachanger/scpb/elements_generated.go

Lines changed: 41 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/sql/schemachanger/scpb/migration.go

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ func migrateDeprecatedFields(
5858
}
5959
}
6060

61-
// Migrate ComputeExpr field to separate ColumnComputeExpression target.
61+
// Migrate ComputeExpr field to separate ColumnComputeExpression target.
6262
if columnType := target.GetColumnType(); columnType != nil {
6363
if columnType.ComputeExpr != nil {
6464
newTarget := MakeTarget(
@@ -75,7 +75,24 @@ func migrateDeprecatedFields(
7575
migrated = true
7676
}
7777
}
78-
return
78+
79+
if column := target.GetColumn(); column != nil {
80+
if column.IsHidden && version.IsActive(clusterversion.V25_4) { // FIXME: need clusterversion.V26_1 from release engineering
81+
newTarget := MakeTarget(
82+
AsTargetStatus(target.TargetStatus),
83+
&ColumnHidden{
84+
TableID: column.TableID,
85+
ColumnID: column.ColumnID,
86+
},
87+
&target.Metadata,
88+
)
89+
newTargets = append(newTargets, newTarget)
90+
column.IsHidden = false
91+
migrated = true
92+
}
93+
}
94+
95+
return migrated, newTargets
7996
}
8097

8198
// migrateTargetElement migrates an individual target at a given index.

pkg/sql/schemachanger/scpb/migration_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,3 +137,40 @@ func TestDeprecatedTriggerDeps(t *testing.T) {
137137
require.Equal(t, catid.DescID(112), triggerDeps.UsesRelations[0].ID)
138138
require.Equal(t, catid.DescID(113), triggerDeps.UsesRelations[1].ID)
139139
}
140+
141+
func TestDeprecatedColumnHiddenMigration(t *testing.T) {
142+
state := DescriptorState{
143+
Targets: []Target{
144+
MakeTarget(ToPublic,
145+
&Column{
146+
TableID: 100,
147+
ColumnID: 105,
148+
IsHidden: true,
149+
},
150+
nil,
151+
),
152+
},
153+
CurrentStatuses: []Status{Status_PUBLIC},
154+
TargetRanks: []uint32{1},
155+
}
156+
migrationOccurred := MigrateDescriptorState(
157+
clusterversion.ClusterVersion{Version: clusterversion.Latest.Version()},
158+
1,
159+
&state,
160+
)
161+
require.True(t, migrationOccurred)
162+
require.Len(t, state.CurrentStatuses, 2)
163+
require.Len(t, state.Targets, 2)
164+
165+
column := state.Targets[0].GetColumn()
166+
require.NotNil(t, column)
167+
require.False(t, column.IsHidden)
168+
169+
columnHidden := state.Targets[1].GetColumnHidden()
170+
require.NotNil(t, columnHidden)
171+
172+
require.Equal(t, column.TableID, columnHidden.TableID)
173+
require.Equal(t, column.TableID, columnHidden.TableID)
174+
require.Equal(t, state.CurrentStatuses[1], Status_PUBLIC)
175+
require.Equal(t, state.TargetRanks[1], uint32(2))
176+
}

pkg/sql/schemachanger/scplan/internal/rules/current/helpers.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ func isColumnDependent(e scpb.Element) bool {
251251
switch e.(type) {
252252
case *scpb.ColumnType, *scpb.ColumnNotNull:
253253
return true
254-
case *scpb.ColumnName, *scpb.ColumnComment, *scpb.IndexColumn:
254+
case *scpb.ColumnName, *scpb.ColumnComment, *scpb.IndexColumn, *scpb.ColumnHidden:
255255
return true
256256
}
257257
return isColumnTypeDependent(e)
@@ -272,6 +272,7 @@ func isColumnNotNull(e scpb.Element) bool {
272272
}
273273
return false
274274
}
275+
275276
func isColumnTypeDependent(e scpb.Element) bool {
276277
switch e.(type) {
277278
case *scpb.SequenceOwner, *scpb.ColumnDefaultExpression, *scpb.ColumnOnUpdateExpression, *scpb.ColumnComputeExpression:

pkg/sql/schemachanger/screl/scalars.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,8 @@ func VersionSupportsElementUse(el scpb.Element, version clusterversion.ClusterVe
136136
return version.IsActive(clusterversion.V25_2)
137137
case *scpb.TableLocalityRegionalByRowUsingConstraint:
138138
return version.IsActive(clusterversion.V25_3)
139+
case *scpb.ColumnHidden:
140+
return version.IsActive(clusterversion.V25_4) // FIXME: need clusterversion.V26_1 from release engineering
139141
default:
140142
panic(errors.AssertionFailedf("unknown element %T", el))
141143
}

0 commit comments

Comments
 (0)