From 90cddbdf56577c7697ce717518184bf1dfe7134c Mon Sep 17 00:00:00 2001 From: Taylor Bantle Date: Tue, 24 Sep 2024 11:32:51 -0700 Subject: [PATCH 1/5] Fix dolt_clean for doltgres --- go/libraries/doltcore/env/actions/reset.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/go/libraries/doltcore/env/actions/reset.go b/go/libraries/doltcore/env/actions/reset.go index bec0a40027..ede2fca413 100644 --- a/go/libraries/doltcore/env/actions/reset.go +++ b/go/libraries/doltcore/env/actions/reset.go @@ -25,6 +25,7 @@ import ( "github.com/dolthub/dolt/go/libraries/doltcore/env" "github.com/dolthub/dolt/go/libraries/doltcore/ref" "github.com/dolthub/dolt/go/libraries/doltcore/schema" + "github.com/dolthub/dolt/go/libraries/doltcore/sqle/resolve" "github.com/dolthub/dolt/go/store/datas" ) @@ -271,7 +272,7 @@ func getUnionedTables(ctx context.Context, tables []doltdb.TableName, stagedRoot // CleanUntracked deletes untracked tables from the working root. // Evaluates untracked tables as: all working tables - all staged tables. -func CleanUntracked(ctx context.Context, roots doltdb.Roots, tables []string, dryrun bool, force bool) (doltdb.Roots, error) { +func CleanUntracked(ctx *sql.Context, roots doltdb.Roots, tables []string, dryrun bool, force bool) (doltdb.Roots, error) { untrackedTables := make(map[doltdb.TableName]struct{}) var err error @@ -284,21 +285,21 @@ func CleanUntracked(ctx context.Context, roots doltdb.Roots, tables []string, dr for i := range tables { name := tables[i] - _, _, err = roots.Working.GetTable(ctx, doltdb.TableName{Name: name}) + resolvedName, _, _, err := resolve.Table(ctx, roots.Working, name) if err != nil { return doltdb.Roots{}, err } - untrackedTables[doltdb.TableName{Name: name}] = struct{}{} + untrackedTables[resolvedName] = struct{}{} } // untracked tables = working tables - staged tables - headTblNames, err := roots.Staged.GetTableNames(ctx, doltdb.DefaultSchemaName) + headTblNames := GetAllTableNames(ctx, roots.Staged) if err != nil { return doltdb.Roots{}, err } for _, name := range headTblNames { - delete(untrackedTables, doltdb.TableName{Name: name}) + delete(untrackedTables, name) } newRoot := roots.Working From 38977f6a99aa798b52719ed1fa2fc45803288324 Mon Sep 17 00:00:00 2001 From: Taylor Bantle Date: Tue, 24 Sep 2024 11:46:54 -0700 Subject: [PATCH 2/5] Fix dolt_checkout(table) for doltgres --- .../doltcore/sqle/dprocedures/dolt_checkout.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go b/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go index 6a02fa4e92..b2600a8c80 100644 --- a/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go +++ b/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go @@ -28,6 +28,7 @@ import ( "github.com/dolthub/dolt/go/libraries/doltcore/env/actions" "github.com/dolthub/dolt/go/libraries/doltcore/ref" "github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess" + "github.com/dolthub/dolt/go/libraries/doltcore/sqle/resolve" "github.com/dolthub/dolt/go/libraries/utils/argparser" "github.com/dolthub/dolt/go/store/hash" ) @@ -476,9 +477,17 @@ func doGlobalCheckout(ctx *sql.Context, branchName string, isForce bool, isNewBr } func checkoutTables(ctx *sql.Context, roots doltdb.Roots, name string, tables []string) error { - // TODO: schema name - roots, err := actions.MoveTablesFromHeadToWorking(ctx, roots, doltdb.ToTableNames(tables, doltdb.DefaultSchemaName)) + var err error + tableNames := make([]doltdb.TableName, len(tables)) + for i, table := range tables { + tableNames[i], _, _, err = resolve.Table(ctx, roots.Working, table) + if err != nil { + return err + } + } + + roots, err = actions.MoveTablesFromHeadToWorking(ctx, roots, tableNames) if err != nil { if doltdb.IsRootValUnreachable(err) { rt := doltdb.GetUnreachableRootType(err) From fe058080deb24587a37a6e0a74f5dc7544507ce4 Mon Sep 17 00:00:00 2001 From: Taylor Bantle Date: Tue, 24 Sep 2024 12:30:00 -0700 Subject: [PATCH 3/5] Check for table in all roots for dolt_checkout --- go/libraries/doltcore/env/actions/checkout.go | 31 +++++++++++++++++++ .../sqle/dprocedures/dolt_checkout.go | 10 +++--- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/go/libraries/doltcore/env/actions/checkout.go b/go/libraries/doltcore/env/actions/checkout.go index 23bab107bd..9e83035659 100644 --- a/go/libraries/doltcore/env/actions/checkout.go +++ b/go/libraries/doltcore/env/actions/checkout.go @@ -24,6 +24,7 @@ import ( "github.com/dolthub/dolt/go/libraries/doltcore/env" "github.com/dolthub/dolt/go/libraries/doltcore/ref" "github.com/dolthub/dolt/go/libraries/doltcore/schema" + "github.com/dolthub/dolt/go/libraries/doltcore/sqle/resolve" "github.com/dolthub/dolt/go/libraries/utils/set" "github.com/dolthub/dolt/go/store/datas" "github.com/dolthub/dolt/go/store/hash" @@ -88,6 +89,36 @@ func MoveTablesFromHeadToWorking(ctx context.Context, roots doltdb.Roots, tbls [ return roots, nil } +// FindTableInRoots resolves a table by looking in all three roots (working, +// staged, head) in that order. +func FindTableInRoots(ctx *sql.Context, roots doltdb.Roots, name string) (doltdb.TableName, *doltdb.Table, bool, error) { + tbl, root, tblExists, err := resolve.Table(ctx, roots.Working, name) + if err != nil { + return doltdb.TableName{}, nil, false, err + } + if tblExists { + return tbl, root, true, nil + } + + tbl, root, tblExists, err = resolve.Table(ctx, roots.Staged, name) + if err != nil { + return doltdb.TableName{}, nil, false, err + } + if tblExists { + return tbl, root, true, nil + } + + tbl, root, tblExists, err = resolve.Table(ctx, roots.Head, name) + if err != nil { + return doltdb.TableName{}, nil, false, err + } + if tblExists { + return tbl, root, true, nil + } + + return doltdb.TableName{}, nil, false, nil +} + // RootsForBranch returns the roots needed for a branch checkout. |roots.Head| should be the pre-checkout head. The // returned roots struct has |Head| set to |branchRoot|. func RootsForBranch(ctx context.Context, roots doltdb.Roots, branchRoot doltdb.RootValue, force bool) (doltdb.Roots, error) { diff --git a/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go b/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go index b2600a8c80..097a9f54ff 100644 --- a/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go +++ b/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go @@ -28,7 +28,6 @@ import ( "github.com/dolthub/dolt/go/libraries/doltcore/env/actions" "github.com/dolthub/dolt/go/libraries/doltcore/ref" "github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess" - "github.com/dolthub/dolt/go/libraries/doltcore/sqle/resolve" "github.com/dolthub/dolt/go/libraries/utils/argparser" "github.com/dolthub/dolt/go/store/hash" ) @@ -477,17 +476,20 @@ func doGlobalCheckout(ctx *sql.Context, branchName string, isForce bool, isNewBr } func checkoutTables(ctx *sql.Context, roots doltdb.Roots, name string, tables []string) error { - var err error tableNames := make([]doltdb.TableName, len(tables)) for i, table := range tables { - tableNames[i], _, _, err = resolve.Table(ctx, roots.Working, table) + tbl, _, exists, err := actions.FindTableInRoots(ctx, roots, table) if err != nil { return err } + if !exists { + return fmt.Errorf("%w: '%s'", doltdb.ErrTableNotFound, table) + } + tableNames[i] = tbl } - roots, err = actions.MoveTablesFromHeadToWorking(ctx, roots, tableNames) + roots, err := actions.MoveTablesFromHeadToWorking(ctx, roots, tableNames) if err != nil { if doltdb.IsRootValUnreachable(err) { rt := doltdb.GetUnreachableRootType(err) From 710d4cb612d967ee3badf63bf0a9ef3371814663 Mon Sep 17 00:00:00 2001 From: Taylor Bantle Date: Tue, 24 Sep 2024 12:33:19 -0700 Subject: [PATCH 4/5] Fix bats --- go/libraries/doltcore/env/actions/reset.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/go/libraries/doltcore/env/actions/reset.go b/go/libraries/doltcore/env/actions/reset.go index ede2fca413..18fbf3c96f 100644 --- a/go/libraries/doltcore/env/actions/reset.go +++ b/go/libraries/doltcore/env/actions/reset.go @@ -285,10 +285,13 @@ func CleanUntracked(ctx *sql.Context, roots doltdb.Roots, tables []string, dryru for i := range tables { name := tables[i] - resolvedName, _, _, err := resolve.Table(ctx, roots.Working, name) + resolvedName, _, tblExists, err := resolve.Table(ctx, roots.Working, name) if err != nil { return doltdb.Roots{}, err } + if !tblExists { + return doltdb.Roots{}, fmt.Errorf("%w: '%s'", doltdb.ErrTableNotFound, name) + } untrackedTables[resolvedName] = struct{}{} } From be6d616a50a15a0b2aabeba67b90884a71c3838d Mon Sep 17 00:00:00 2001 From: Taylor Bantle Date: Tue, 24 Sep 2024 12:51:34 -0700 Subject: [PATCH 5/5] Fix error --- go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go b/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go index 097a9f54ff..57096997db 100644 --- a/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go +++ b/go/libraries/doltcore/sqle/dprocedures/dolt_checkout.go @@ -484,7 +484,7 @@ func checkoutTables(ctx *sql.Context, roots doltdb.Roots, name string, tables [] return err } if !exists { - return fmt.Errorf("%w: '%s'", doltdb.ErrTableNotFound, table) + return fmt.Errorf("error: given tables do not exist") } tableNames[i] = tbl }