Skip to content

Commit 0b044af

Browse files
committed
sql: add hidden column element
This introduces a new schema changer element to manage the visibility of columns. That attribute was previously a field in the `Column` element. Epic: CRDB-31283 Part of: #139605 Release note: None
1 parent 02c7429 commit 0b044af

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+3647
-198
lines changed

pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_add_column.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ func alterTableAddColumn(
118118
col: &scpb.Column{
119119
TableID: tbl.TableID,
120120
ColumnID: desc.ID,
121-
IsHidden: desc.Hidden,
122121
IsInaccessible: desc.Inaccessible,
123122
GeneratedAsIdentityType: desc.GeneratedAsIdentityType,
124123
},
@@ -290,6 +289,14 @@ func alterTableAddColumn(
290289
}
291290
b.IncrementSchemaChangeAddColumnQualificationCounter("on_update")
292291
}
292+
if d.Hidden {
293+
if spec.colType.ElementCreationMetadata.In_26_1OrLater {
294+
spec.hidden = true
295+
} else {
296+
spec.col.IsHidden = true
297+
}
298+
}
299+
293300
// Add secondary indexes for this column.
294301
backing := addColumn(b, spec, t)
295302
if idx != nil {
@@ -458,6 +465,7 @@ type addColumnSpec struct {
458465
compute *scpb.ColumnComputeExpression
459466
transientCompute *scpb.ColumnComputeExpression
460467
comment *scpb.ColumnComment
468+
hidden bool
461469
unique bool
462470
notNull bool
463471
}
@@ -494,6 +502,13 @@ func addColumn(b BuildCtx, spec addColumnSpec, n tree.NodeFormatter) (backing *s
494502
if spec.comment != nil {
495503
b.Add(spec.comment)
496504
}
505+
if spec.hidden {
506+
elm := scpb.ColumnHidden{
507+
TableID: spec.tbl.TableID,
508+
ColumnID: spec.col.ColumnID,
509+
}
510+
b.Add(&elm)
511+
}
497512
// Don't need to modify primary indexes for virtual columns.
498513
if spec.colType.IsVirtual {
499514
return getLatestPrimaryIndex(b, spec.tbl.TableID)

pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_alter_column_type.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -336,6 +336,8 @@ func handleGeneralColumnConversion(
336336
"old active version; ALTER COLUMN TYPE requires backfill. Reverting to legacy handling"))
337337
}
338338

339+
colHidden := retrieveColumnHidden(b, tbl.TableID, col.ColumnID)
340+
339341
colNotNull := retrieveColumnNotNull(b, tbl.TableID, col.ColumnID)
340342

341343
// Generate the ID of the new column we are adding.
@@ -381,6 +383,9 @@ func handleGeneralColumnConversion(
381383
if colNotNull != nil {
382384
b.Drop(colNotNull)
383385
}
386+
if colHidden != nil {
387+
b.Drop(colHidden)
388+
}
384389
if oldColComment != nil {
385390
b.Drop(oldColComment)
386391
}
@@ -429,6 +434,7 @@ func handleGeneralColumnConversion(
429434
Expression: *b.WrapExpression(tbl.TableID, expr),
430435
Usage: scpb.ColumnComputeExpression_ALTER_TYPE_USING,
431436
},
437+
hidden: colHidden != nil,
432438
notNull: retrieveColumnNotNull(b, tbl.TableID, col.ColumnID) != nil,
433439
// The new column will be placed in the same column family as the one
434440
// it's replacing, so there's no need to specify a family.

pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_alter_primary_key.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1063,7 +1063,7 @@ func getPrimaryIndexDefaultRowIDColumn(
10631063

10641064
// That one column should be hidden.
10651065
column = mustRetrieveColumnElem(b, tableID, columnID)
1066-
if !column.IsHidden {
1066+
if !(column.IsHidden || retrieveColumnHidden(b, tableID, column.ColumnID) != nil) {
10671067
return nil
10681068
}
10691069

pkg/sql/schemachanger/scbuild/internal/scbuildstmt/alter_table_drop_column.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ func walkColumnDependencies(
326326
*scpb.UniqueWithoutIndexConstraint, *scpb.CheckConstraint,
327327
*scpb.UniqueWithoutIndexConstraintUnvalidated, *scpb.CheckConstraintUnvalidated,
328328
*scpb.RowLevelTTL, *scpb.PolicyUsingExpr, *scpb.PolicyWithCheckExpr,
329-
*scpb.TriggerDeps:
329+
*scpb.TriggerDeps, *scpb.ColumnHidden:
330330
fn(e, op, objType)
331331
case *scpb.ColumnType:
332332
if elt.ColumnID == col.ColumnID {

pkg/sql/schemachanger/scbuild/internal/scbuildstmt/create_index.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,7 @@ func maybeCreateAndAddShardCol(
820820
}
821821
})
822822
scpb.ForEachColumn(elts, func(_ scpb.Status, _ scpb.TargetStatus, col *scpb.Column) {
823-
if col.ColumnID == existingShardColID && !col.IsHidden {
823+
if col.ColumnID == existingShardColID && !(col.IsHidden || retrieveColumnHidden(b, tbl.TableID, col.ColumnID) != nil) {
824824
// The user managed to reverse-engineer our crazy shard column name, so
825825
// we'll return an error here rather than try to be tricky.
826826
panic(pgerror.Newf(pgcode.DuplicateColumn,
@@ -841,7 +841,6 @@ func maybeCreateAndAddShardCol(
841841
col: &scpb.Column{
842842
TableID: tbl.TableID,
843843
ColumnID: shardColID,
844-
IsHidden: true,
845844
},
846845
name: &scpb.ColumnName{
847846
TableID: tbl.TableID,
@@ -868,6 +867,12 @@ func maybeCreateAndAddShardCol(
868867
spec.colType.ComputeExpr = wexpr
869868
}
870869

870+
if spec.colType.ElementCreationMetadata.In_26_1OrLater {
871+
spec.hidden = true
872+
} else {
873+
spec.col.IsHidden = true
874+
}
875+
871876
backing := addColumn(b, spec, n)
872877
// Create a new check constraint for the hash sharded index column.
873878
checkConstraintBucketValues := strings.Builder{}

pkg/sql/schemachanger/scbuild/internal/scbuildstmt/helpers.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2122,6 +2122,14 @@ func retrieveColumnNotNull(
21222122
MustGetZeroOrOneElement()
21232123
}
21242124

2125+
func retrieveColumnHidden(
2126+
b BuildCtx, tableID catid.DescID, columnID catid.ColumnID,
2127+
) *scpb.ColumnHidden {
2128+
return b.QueryByID(tableID).FilterColumnHidden().
2129+
Filter(func(_ scpb.Status, _ scpb.TargetStatus, e *scpb.ColumnHidden) bool { return e.ColumnID == columnID }).
2130+
MustGetZeroOrOneElement()
2131+
}
2132+
21252133
func retrieveColumnComment(
21262134
b BuildCtx, tableID catid.DescID, columnID catid.ColumnID,
21272135
) *scpb.ColumnComment {

pkg/sql/schemachanger/scbuild/testdata/alter_table_add_primary_key

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ build
77
ALTER TABLE defaultdb.bar ADD PRIMARY KEY (i)
88
----
99
- [[Column:{DescID: 105, ColumnID: 2}, ABSENT], PUBLIC]
10-
{columnId: 2, isHidden: true, tableId: 105}
10+
{columnId: 2, tableId: 105}
1111
- [[ColumnName:{DescID: 105, Name: rowid, ColumnID: 2}, ABSENT], PUBLIC]
1212
{columnId: 2, name: rowid, tableId: 105}
1313
- [[ColumnType:{DescID: 105, ColumnFamilyID: 0, ColumnID: 2, TypeName: INT8}, ABSENT], PUBLIC]
1414
{columnId: 2, elementCreationMetadata: {in243OrLater: true, in261OrLater: true}, tableId: 105, type: {family: IntFamily, oid: 20, width: 64}, typeName: INT8}
15+
- [[ColumnHidden:{DescID: 105, ColumnID: 2}, ABSENT], PUBLIC]
16+
{columnId: 2, tableId: 105}
1517
- [[ColumnNotNull:{DescID: 105, ColumnID: 2, IndexID: 0}, ABSENT], PUBLIC]
1618
{columnId: 2, tableId: 105}
1719
- [[ColumnDefaultExpression:{DescID: 105, ColumnID: 2, Expr: unique_rowid()}, ABSENT], PUBLIC]

pkg/sql/schemachanger/scbuild/testdata/alter_table_alter_primary_key

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,13 @@ build
6969
ALTER TABLE defaultdb.bar ALTER PRIMARY KEY USING COLUMNS (i)
7070
----
7171
- [[Column:{DescID: 105, ColumnID: 2}, ABSENT], PUBLIC]
72-
{columnId: 2, isHidden: true, tableId: 105}
72+
{columnId: 2, tableId: 105}
7373
- [[ColumnName:{DescID: 105, Name: rowid, ColumnID: 2}, ABSENT], PUBLIC]
7474
{columnId: 2, name: rowid, tableId: 105}
7575
- [[ColumnType:{DescID: 105, ColumnFamilyID: 0, ColumnID: 2, TypeName: INT8}, ABSENT], PUBLIC]
7676
{columnId: 2, elementCreationMetadata: {in243OrLater: true, in261OrLater: true}, tableId: 105, type: {family: IntFamily, oid: 20, width: 64}, typeName: INT8}
77+
- [[ColumnHidden:{DescID: 105, ColumnID: 2}, ABSENT], PUBLIC]
78+
{columnId: 2, tableId: 105}
7779
- [[ColumnNotNull:{DescID: 105, ColumnID: 2, IndexID: 0}, ABSENT], PUBLIC]
7880
{columnId: 2, tableId: 105}
7981
- [[ColumnDefaultExpression:{DescID: 105, ColumnID: 2, Expr: unique_rowid()}, ABSENT], PUBLIC]

pkg/sql/schemachanger/scbuild/testdata/create_index

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,15 @@ CREATE INDEX id4
106106
- [[TableData:{DescID: 104, ReferencedDescID: 100}, PUBLIC], PUBLIC]
107107
{databaseId: 100, tableId: 104}
108108
- [[Column:{DescID: 104, ColumnID: 4}, PUBLIC], ABSENT]
109-
{columnId: 4, isHidden: true, tableId: 104}
109+
{columnId: 4, tableId: 104}
110110
- [[ColumnName:{DescID: 104, Name: crdb_internal_id_name_shard_8, ColumnID: 4}, PUBLIC], ABSENT]
111111
{columnId: 4, name: crdb_internal_id_name_shard_8, tableId: 104}
112112
- [[ColumnType:{DescID: 104, ColumnFamilyID: 0, ColumnID: 4, TypeName: INT8}, PUBLIC], ABSENT]
113113
{columnId: 4, elementCreationMetadata: {in243OrLater: true, in261OrLater: true}, isVirtual: true, tableId: 104, type: {family: IntFamily, oid: 20, width: 64}, typeName: INT8}
114114
- [[ColumnComputeExpression:{DescID: 104, ColumnID: 4, ReferencedColumnIDs: [1 2], Usage: REGULAR}, PUBLIC], ABSENT]
115115
{columnId: 4, expr: 'mod(fnv32(md5(crdb_internal.datums_to_bytes(id, name))), 8:::INT8)', referencedColumnIds: [1, 2], tableId: 104}
116+
- [[ColumnHidden:{DescID: 104, ColumnID: 4}, PUBLIC], ABSENT]
117+
{columnId: 4, tableId: 104}
116118
- [[ColumnNotNull:{DescID: 104, ColumnID: 4, IndexID: 1}, PUBLIC], ABSENT]
117119
{columnId: 4, indexIdForValidation: 1, tableId: 104}
118120
- [[CheckConstraint:{DescID: 104, IndexID: 1, ConstraintID: 2, ReferencedColumnIDs: [4]}, PUBLIC], ABSENT]

0 commit comments

Comments
 (0)