go/doltcore/schema: Set primary key ordinals on schema migration

This commit is contained in:
Andy Arthur
2022-10-26 11:39:21 -07:00
parent 4157c40061
commit 75c6eb5fcc
2 changed files with 31 additions and 3 deletions

View File

@@ -481,10 +481,19 @@ func migrateSchema(ctx context.Context, tableName string, existing schema.Schema
}
}
if patched {
return schema.SchemaFromCols(schema.NewColCollection(cols...))
if !patched {
return existing, nil
}
return existing, nil
sch, err := schema.SchemaFromCols(schema.NewColCollection(cols...))
if err != nil {
return nil, err
}
if err = sch.SetPkOrdinals(existing.GetPkOrdinals()); err != nil {
return nil, err
}
return sch, nil
}
func migrateIndexSet(

View File

@@ -229,3 +229,22 @@ SQL
run dolt sql -q "SELECT * FROM t ORDER BY a LIMIT 1" -r csv
[[ "$output" =~ "h&a,B" ]] || false
}
@test "migrate: database with inverted primary key order" {
dolt sql <<SQL
CREATE TABLE t (
pk2 varchar(20) NOT NULL,
pk1 varchar(20) NOT NULL,
PRIMARY KEY (pk1, pk2));
INSERT INTO t (pk2, pk1) VALUES ("z","a"),("y","b"),("x","c");
SQL
dolt commit -Am "added table t"
run dolt schema show t
[[ "$output" =~ "PRIMARY KEY (\`pk1\`,\`pk2\`)" ]] || false
dolt migrate
run dolt schema show t
[[ "$output" =~ "PRIMARY KEY (\`pk1\`,\`pk2\`)" ]] || false
}