Skip to content

Commit

Permalink
ddl: fix rename index for expression indexes (pingcap#51984)
Browse files Browse the repository at this point in the history
  • Loading branch information
ywqzzy authored Apr 8, 2024
1 parent c39d79f commit 23f6237
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 0 deletions.
9 changes: 9 additions & 0 deletions pkg/ddl/column.go
Original file line number Diff line number Diff line change
Expand Up @@ -2050,3 +2050,12 @@ func getChangingColumnOriginName(changingColumn *model.ColumnInfo) string {
}
return columnName[:pos]
}

func getExpressionIndexOriginName(expressionIdx *model.ColumnInfo) string {
columnName := strings.TrimPrefix(expressionIdx.Name.O, expressionIndexPrefix+"_")
var pos int
if pos = strings.LastIndex(columnName, "_"); pos == -1 {
return columnName
}
return columnName[:pos]
}
11 changes: 11 additions & 0 deletions pkg/ddl/index.go
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,8 @@ func onRenameIndex(d *ddlCtx, t *meta.Meta, job *model.Job) (ver int64, _ error)
}

renameIndexes(tblInfo, from, to)
renameHiddenColumns(tblInfo, from, to)

if ver, err = updateVersionAndTableInfo(d, t, job, tblInfo, true); err != nil {
job.State = model.JobStateCancelled
return ver, errors.Trace(err)
Expand Down Expand Up @@ -2668,3 +2670,12 @@ func renameIndexes(tblInfo *model.TableInfo, from, to model.CIStr) {
}
}
}

func renameHiddenColumns(tblInfo *model.TableInfo, from, to model.CIStr) {
for _, col := range tblInfo.Columns {
if col.Hidden && getExpressionIndexOriginName(col) == from.O {
col.Name.L = strings.Replace(col.Name.L, from.L, to.L, 1)
col.Name.O = strings.Replace(col.Name.O, from.O, to.O, 1)
}
}
}
14 changes: 14 additions & 0 deletions tests/integrationtest/r/ddl/db_rename.result
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,17 @@ Error 1061 (42000): Duplicate key name 'k2'
alter table t rename index k2 to K2;
alter table t rename key k3 to K2;
Error 1061 (42000): Duplicate key name 'K2'
drop table t;
create table t(j json);
alter table t add index idx1((cast(j as char(10) array)));
alter table t rename index idx1 to idx2;
alter table t add index idx1((cast(j as char(10) array)));
insert into t values ('["1"]');
alter table t add index IDX3((cast(j as char(10) array)));
alter table t rename index IDX3 to IDX4;
alter table t add index IDX3((cast(j as char(10) array)));
insert into t values ('["2"]');
select * from t;
j
["1"]
["2"]
12 changes: 12 additions & 0 deletions tests/integrationtest/t/ddl/db_rename.test
Original file line number Diff line number Diff line change
Expand Up @@ -13,3 +13,15 @@ alter table t rename index k2 to K2;
-- error 1061
alter table t rename key k3 to K2;

# TestIssue51431
drop table t;
create table t(j json);
alter table t add index idx1((cast(j as char(10) array)));
alter table t rename index idx1 to idx2;
alter table t add index idx1((cast(j as char(10) array)));
insert into t values ('["1"]');
alter table t add index IDX3((cast(j as char(10) array)));
alter table t rename index IDX3 to IDX4;
alter table t add index IDX3((cast(j as char(10) array)));
insert into t values ('["2"]');
select * from t;

0 comments on commit 23f6237

Please sign in to comment.