Handle removed tables in //.../doltcore/migrate (#4647)

* handle removed tables in //.../doltcore/migrate

* fix migration-integration.bats

* [ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/update.sh

Co-authored-by: druvv <druvv@users.noreply.github.com>
This commit is contained in:
Dhruv Sringari
2022-10-27 19:25:29 -07:00
committed by GitHub
parent 7f3d52317e
commit 8ca1183110
3 changed files with 50 additions and 6 deletions
@@ -27,6 +27,7 @@ import (
"github.com/dolthub/dolt/go/libraries/doltcore/ref"
"github.com/dolthub/dolt/go/libraries/doltcore/schema"
"github.com/dolthub/dolt/go/libraries/doltcore/schema/typeinfo"
"github.com/dolthub/dolt/go/libraries/utils/set"
"github.com/dolthub/dolt/go/store/chunks"
"github.com/dolthub/dolt/go/store/datas"
"github.com/dolthub/dolt/go/store/hash"
@@ -277,6 +278,16 @@ func migrateRoot(ctx context.Context, oldParent, oldRoot, newParent *doltdb.Root
return nil, err
}
removedTables, err := getRemovedTableNames(ctx, oldParent, oldRoot)
if err != nil {
return nil, err
}
migrated, err = migrated.RemoveTables(ctx, true, false, removedTables...)
if err != nil {
return nil, err
}
err = oldRoot.IterTables(ctx, func(name string, oldTbl *doltdb.Table, sch schema.Schema) (bool, error) {
ok, err := oldTbl.HasConflicts(ctx)
if err != nil {
@@ -345,6 +356,21 @@ func migrateRoot(ctx context.Context, oldParent, oldRoot, newParent *doltdb.Root
return migrated, nil
}
// renames also get returned here
func getRemovedTableNames(ctx context.Context, prev, curr *doltdb.RootValue) ([]string, error) {
prevNames, err := prev.GetTableNames(ctx)
if err != nil {
return nil, err
}
tblNameSet := set.NewStrSet(prevNames)
currNames, err := curr.GetTableNames(ctx)
if err != nil {
return nil, err
}
tblNameSet.Remove(currNames...)
return tblNameSet.AsSlice(), nil
}
func migrateTable(ctx context.Context, newSch schema.Schema, oldParentTbl, oldTbl, newParentTbl *doltdb.Table) (*doltdb.Table, error) {
idx, err := oldParentTbl.GetRowData(ctx)
if err != nil {
+18
View File
@@ -248,3 +248,21 @@ SQL
run dolt schema show t
[[ "$output" =~ "PRIMARY KEY (\`pk1\`,\`pk2\`)" ]] || false
}
@test "migrate: removed tables stay removed" {
dolt sql -q "create table alpha (pk int primary key);"
dolt sql -q "create table beta (pk int primary key);"
dolt commit -Am "create tables"
dolt sql -q "alter table alpha rename to zulu;"
dolt sql -q "drop table beta"
dolt commit -Am "rename table alpha to zeta, drop table beta"
dolt migrate
run dolt ls
[ $status -eq 0 ]
[[ "$output" =~ "zulu" ]] || false
[[ ! "$output" =~ "alpha" ]] || false
[[ ! "$output" =~ "beta" ]] || false
}
@@ -14,8 +14,8 @@ teardown() {
}
@test "migration-integration: first-hour-db" {
dolt clone dolthub/first-hour-db
cd first-hour-db
dolt clone https://doltremoteapi.dolthub.com/dolthub/first-hour-db-migration-int
cd first-hour-db-migration-int
dolt tag -v
run dolt tag -v
@@ -39,8 +39,8 @@ teardown() {
}
@test "migration-integration: first-hour-db after garbage collection" {
dolt clone dolthub/first-hour-db
cd first-hour-db
dolt clone https://doltremoteapi.dolthub.com/dolthub/first-hour-db-migration-int
cd first-hour-db-migration-int
dolt gc
dolt tag -v
@@ -65,8 +65,8 @@ teardown() {
}
@test "migration-integration: us-jails" {
dolt clone dolthub/us-jails
cd us-jails
dolt clone https://doltremoteapi.dolthub.com/dolthub/us-jails-migration-integration
cd us-jails-migration-integration
dolt tag -v
run dolt tag -v