Skip to content

Commit

Permalink
Merge #24776
Browse files Browse the repository at this point in the history
24776: sql: fix ALTER INDEX RENAME on primary index r=knz a=knz

Fixes #24774.

ALTER INDEX ... RENAME would crash if issued on the primary index.

Release note (bug fix): `ALTER INDEX ... RENAME` can now be used on
the primary index.

Co-authored-by: Raphael 'kena' Poss <knz@cockroachlabs.com>
  • Loading branch information
craig[bot] and knz committed Apr 16, 2018
2 parents b49e034 + 266c831 commit ee1117e
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 5 deletions.
4 changes: 4 additions & 0 deletions pkg/sql/logictest/testdata/logic_test/rename_index
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,7 @@ ALTER INDEX users@ufo RENAME TO foo

statement ok
ALTER INDEX users@rar RENAME TO bar

# Regression test for #24774
statement ok
ALTER INDEX users@"primary" RENAME TO pk
4 changes: 3 additions & 1 deletion pkg/sql/rename_index.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,9 @@ func (p *planner) RenameIndex(ctx context.Context, n *tree.RenameIndex) (planNod
return nil, fmt.Errorf("index name %q already exists", string(n.NewName))
}

tableDesc.RenameIndexDescriptor(idx, string(n.NewName))
if err := tableDesc.RenameIndexDescriptor(idx, string(n.NewName)); err != nil {
return nil, err
}

if err := tableDesc.SetUpVersion(); err != nil {
return nil, err
Expand Down
12 changes: 8 additions & 4 deletions pkg/sql/sqlbase/structured.go
Original file line number Diff line number Diff line change
Expand Up @@ -1896,21 +1896,25 @@ func (desc *TableDescriptor) FindIndexByName(name string) (IndexDescriptor, bool
}

// RenameIndexDescriptor renames an index descriptor.
func (desc *TableDescriptor) RenameIndexDescriptor(index IndexDescriptor, name string) {
func (desc *TableDescriptor) RenameIndexDescriptor(index IndexDescriptor, name string) error {
id := index.ID
if id == desc.PrimaryIndex.ID {
desc.PrimaryIndex.Name = name
return nil
}
for i := range desc.Indexes {
if desc.Indexes[i].ID == id {
desc.Indexes[i].Name = name
return
return nil
}
}
for _, m := range desc.Mutations {
if idx := m.GetIndex(); idx != nil && idx.ID == id {
idx.Name = name
return
return nil
}
}
panic(fmt.Sprintf("index with id = %d does not exist", id))
return fmt.Errorf("index with id = %d does not exist", id)
}

// FindIndexByID finds an index (active or inactive) with the specified ID.
Expand Down

0 comments on commit ee1117e

Please sign in to comment.