From c4437c0da36c6e9e142f1ceb9409522ecf7eac40 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Tue, 17 Nov 2020 16:32:21 -0500 Subject: [PATCH 01/13] Working --- go/cmd/dolt/commands/schcmds/tags.go | 65 ++++++++++++++++++---------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index cd0aa74f4f..dfbf1c5703 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -16,8 +16,6 @@ package schcmds import ( "context" - "fmt" - "strings" "github.com/dolthub/dolt/go/cmd/dolt/cli" "github.com/dolthub/dolt/go/cmd/dolt/commands" @@ -25,6 +23,7 @@ import ( "github.com/dolthub/dolt/go/libraries/doltcore/env" "github.com/dolthub/dolt/go/libraries/utils/argparser" "github.com/dolthub/dolt/go/libraries/utils/filesys" + "github.com/dolthub/dolt/go/libraries/doltcore/schema" ) //SELECT table_name AS 'table', column_name AS 'column', SUBSTR(extra, 5) AS tag FROM information_schema.columns WHERE table_name = 'XXX'; @@ -69,11 +68,14 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d apr := cli.ParseArgs(ap, args, help) tables := apr.Args() + + root, verr := commands.GetWorkingWithVErr(dEnv) + + if verr != nil { + return commands.HandleVErrAndExitCode(verr, usage) + } + if len(tables) == 0 { - root, verr := commands.GetWorkingWithVErr(dEnv) - if verr != nil { - return commands.HandleVErrAndExitCode(verr, usage) - } var err error tables, err = root.GetTableNames(ctx) @@ -87,24 +89,41 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d return 0 } } - for i := 0; i < len(tables); i++ { - tables[i] = fmt.Sprintf("'%s'", tables[i]) - } - //TODO: implement REGEXP_SUBSTR in go-mysql-server and use it here instead of SUBSTR, as this will eventually break - queryStr := fmt.Sprintf("SELECT table_name AS 'table', column_name AS 'column', "+ - "SUBSTR(extra, 5) AS tag FROM information_schema.columns WHERE table_name IN (%s)", strings.Join(tables, ",")) + for _, tableName := range tables { + table, _, err := root.GetTable(ctx, tableName) + + if err != nil { + cli.PrintErr(err) + return -1 + } + + sch, err := table.GetSchema(ctx) + + sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { + cli.Printf("%s | %s | %d \n", tableName, col.Name, tag) + return false, nil + }) + + if err != nil { + return -1 + } + - if formatStr, ok := apr.GetValue(commands.FormatFlag); ok { - return commands.SqlCmd{}.Exec(ctx, "", []string{ - fmt.Sprintf(`--%s=%s`, commands.FormatFlag, formatStr), - fmt.Sprintf(`--%s`, commands.QueryFlag), - queryStr + ";", - }, dEnv) - } else { - return commands.SqlCmd{}.Exec(ctx, "", []string{ - fmt.Sprintf(`--%s`, commands.QueryFlag), - queryStr + ";", - }, dEnv) } + //err = root.IterTables(ctx, func(name string, table *doltdb.Table, sch schema.Schema) (stop bool, err error) { + // + // sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { + // cli.Printf("%s | %s | %d \n", name, col.Name, tag) + // return false, nil + // }) + // + // if err != nil { + // return true, err + // } + // + // return false, nil + //}) + + return 0 } From cdcae7a866be5c75acbada6133e03fa7f089d4e4 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Tue, 17 Nov 2020 16:35:01 -0500 Subject: [PATCH 02/13] tiny change --- go/cmd/dolt/commands/schcmds/tags.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index dfbf1c5703..9349d4601c 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -70,7 +70,6 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d tables := apr.Args() root, verr := commands.GetWorkingWithVErr(dEnv) - if verr != nil { return commands.HandleVErrAndExitCode(verr, usage) } @@ -108,8 +107,6 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d if err != nil { return -1 } - - } //err = root.IterTables(ctx, func(name string, table *doltdb.Table, sch schema.Schema) (stop bool, err error) { // From 40c56e4f9b7ba9bf78b95cf631041c9332295c84 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Tue, 17 Nov 2020 19:55:39 -0500 Subject: [PATCH 03/13] fixed with tabular --- go/cmd/dolt/commands/schcmds/tags.go | 93 +++++++++++++------ .../table/untyped/tabular/tablewriter.go | 1 - 2 files changed, 66 insertions(+), 28 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index 9349d4601c..f472049908 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -16,18 +16,22 @@ package schcmds import ( "context" + "strconv" + "strings" "github.com/dolthub/dolt/go/cmd/dolt/cli" "github.com/dolthub/dolt/go/cmd/dolt/commands" "github.com/dolthub/dolt/go/cmd/dolt/errhand" "github.com/dolthub/dolt/go/libraries/doltcore/env" + "github.com/dolthub/dolt/go/libraries/doltcore/row" + "github.com/dolthub/dolt/go/libraries/doltcore/schema" + "github.com/dolthub/dolt/go/libraries/doltcore/table/untyped" + "github.com/dolthub/dolt/go/libraries/doltcore/table/untyped/tabular" "github.com/dolthub/dolt/go/libraries/utils/argparser" "github.com/dolthub/dolt/go/libraries/utils/filesys" - "github.com/dolthub/dolt/go/libraries/doltcore/schema" + "github.com/dolthub/dolt/go/store/types" ) -//SELECT table_name AS 'table', column_name AS 'column', SUBSTR(extra, 5) AS tag FROM information_schema.columns WHERE table_name = 'XXX'; - var tblTagsDocs = cli.CommandDocumentationContent{ ShortDesc: "Shows the column tags of one or more tables.", LongDesc: `{{.EmphasisLeft}}dolt schema tags{{.EmphasisRight}} displays the column tags of tables on the working set. @@ -38,6 +42,14 @@ A list of tables can optionally be provided. If it is omitted then all tables w }, } +// WriterCloser type for the tabular writer +type StringBuilderCloser struct { + strings.Builder +} + +func (*StringBuilderCloser) Close() error { + return nil +} type TagsCmd struct{} var _ cli.Command = TagsCmd{} @@ -89,38 +101,65 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d } } - for _, tableName := range tables { - table, _, err := root.GetTable(ctx, tableName) + // Define a schema and table writer for output + var inCols = []schema.Column{ + {Name: "table", Tag: 0, Kind: types.StringKind, IsPartOfPK: false, Constraints: nil}, + {Name: "column", Tag: 1, Kind: types.StringKind, IsPartOfPK: false, Constraints: nil}, + {Name: "tag", Tag: 2, Kind: types.StringKind, IsPartOfPK: false, Constraints: nil}, + } + colColl, _ := schema.NewColCollection(inCols...) + rowSch := schema.UnkeyedSchemaFromCols(colColl) - if err != nil { - cli.PrintErr(err) - return -1 + _, outSch := untyped.NewUntypedSchema("table", "column", "tag") + var stringWr StringBuilderCloser + tableWr, err := tabular.NewTextTableWriter(&stringWr, outSch) + + if err != nil { + return 1 + } + + // Write the header row + header, err := row.New(types.Format_LD_1, rowSch, row.TaggedValues{ + 0: types.String("table"), + 1: types.String("column"), + 2: types.String("tag"), + }) + + err = tableWr.WriteRow(ctx, header) + + for _, tableName := range tables { + table, ok, err := root.GetTable(ctx, tableName) // TODO: Handle case + + if !ok { + return commands.HandleVErrAndExitCode(errhand.BuildDError("unable to find table given in args.").AddCause(err).Build(), usage) } sch, err := table.GetSchema(ctx) - sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { - cli.Printf("%s | %s | %d \n", tableName, col.Name, tag) - return false, nil - }) - if err != nil { - return -1 + return 1 } + + _ = sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { + currRow, err := row.New(types.Format_7_18, rowSch, row.TaggedValues{ + 0: types.String(tableName), + 1: types.String(col.Name), + 2: types.String(strconv.FormatUint(tag, 10)), + }) + + err = tableWr.WriteRow(ctx, currRow) + + return false, err + }) } - //err = root.IterTables(ctx, func(name string, table *doltdb.Table, sch schema.Schema) (stop bool, err error) { - // - // sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { - // cli.Printf("%s | %s | %d \n", name, col.Name, tag) - // return false, nil - // }) - // - // if err != nil { - // return true, err - // } - // - // return false, nil - //}) + + err = tableWr.Close(ctx) + + if err != nil { + return 1 + } + + cli.Printf(stringWr.String()) return 0 } diff --git a/go/libraries/doltcore/table/untyped/tabular/tablewriter.go b/go/libraries/doltcore/table/untyped/tabular/tablewriter.go index 03dacfed8f..2a795f7504 100644 --- a/go/libraries/doltcore/table/untyped/tabular/tablewriter.go +++ b/go/libraries/doltcore/table/untyped/tabular/tablewriter.go @@ -174,7 +174,6 @@ func (ttw *TextTableWriter) WriteRow(ctx context.Context, r row.Row) error { } allCols := ttw.sch.GetAllCols() - var rowVals strings.Builder rowVals.WriteString("|") err := allCols.Iter(func(tag uint64, col schema.Column) (stop bool, err error) { From 2944973b6a3ab4fed3be6447e3358ce182fe3b39 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 13:12:06 -0500 Subject: [PATCH 04/13] Remove EXTRA, edits tests, change format --- go/cmd/dolt/commands/schcmds/tags.go | 69 ++++++------------- .../sqle/enginetest/dolt_engine_test.go | 2 - go/libraries/doltcore/sqle/sqlutil/convert.go | 1 - 3 files changed, 22 insertions(+), 50 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index f472049908..6dd1c2aa08 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -16,20 +16,16 @@ package schcmds import ( "context" - "strconv" + "github.com/dolthub/go-mysql-server/sql" "strings" "github.com/dolthub/dolt/go/cmd/dolt/cli" "github.com/dolthub/dolt/go/cmd/dolt/commands" "github.com/dolthub/dolt/go/cmd/dolt/errhand" "github.com/dolthub/dolt/go/libraries/doltcore/env" - "github.com/dolthub/dolt/go/libraries/doltcore/row" "github.com/dolthub/dolt/go/libraries/doltcore/schema" - "github.com/dolthub/dolt/go/libraries/doltcore/table/untyped" - "github.com/dolthub/dolt/go/libraries/doltcore/table/untyped/tabular" "github.com/dolthub/dolt/go/libraries/utils/argparser" "github.com/dolthub/dolt/go/libraries/utils/filesys" - "github.com/dolthub/dolt/go/store/types" ) var tblTagsDocs = cli.CommandDocumentationContent{ @@ -101,65 +97,44 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d } } - // Define a schema and table writer for output - var inCols = []schema.Column{ - {Name: "table", Tag: 0, Kind: types.StringKind, IsPartOfPK: false, Constraints: nil}, - {Name: "column", Tag: 1, Kind: types.StringKind, IsPartOfPK: false, Constraints: nil}, - {Name: "tag", Tag: 2, Kind: types.StringKind, IsPartOfPK: false, Constraints: nil}, - } - colColl, _ := schema.NewColCollection(inCols...) - rowSch := schema.UnkeyedSchemaFromCols(colColl) - - _, outSch := untyped.NewUntypedSchema("table", "column", "tag") - var stringWr StringBuilderCloser - tableWr, err := tabular.NewTextTableWriter(&stringWr, outSch) - - if err != nil { - return 1 + var headerSchema = sql.Schema{ + {Name: "table", Type: sql.Text, Default: nil}, + {Name: "column", Type: sql.Text, Default: nil}, + {Name: "tag", Type: sql.Uint64, Default: nil}, } - // Write the header row - header, err := row.New(types.Format_LD_1, rowSch, row.TaggedValues{ - 0: types.String("table"), - 1: types.String("column"), - 2: types.String("tag"), - }) - - err = tableWr.WriteRow(ctx, header) + rows := make([]sql.Row, 0) for _, tableName := range tables { table, ok, err := root.GetTable(ctx, tableName) // TODO: Handle case - if !ok { - return commands.HandleVErrAndExitCode(errhand.BuildDError("unable to find table given in args.").AddCause(err).Build(), usage) - } - - sch, err := table.GetSchema(ctx) - if err != nil { return 1 } - _ = sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { - currRow, err := row.New(types.Format_7_18, rowSch, row.TaggedValues{ - 0: types.String(tableName), - 1: types.String(col.Name), - 2: types.String(strconv.FormatUint(tag, 10)), + if ok { + sch, err := table.GetSchema(ctx) + + if err != nil { + return 1 + } + + _ = sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { + currRow := sql.NewRow(tableName, col.Name, tag) + + rows = append(rows, currRow) + + return false, err }) - - err = tableWr.WriteRow(ctx, currRow) - - return false, err - }) + } } - err = tableWr.Close(ctx) + // Print the results in a SQL Tabular format. + err := commands.PrettyPrintResults(ctx, 0, headerSchema, sql.RowsToRowIter(rows...)) if err != nil { return 1 } - cli.Printf(stringWr.String()) - return 0 } diff --git a/go/libraries/doltcore/sqle/enginetest/dolt_engine_test.go b/go/libraries/doltcore/sqle/enginetest/dolt_engine_test.go index f6c8389c66..d97e7c7e92 100644 --- a/go/libraries/doltcore/sqle/enginetest/dolt_engine_test.go +++ b/go/libraries/doltcore/sqle/enginetest/dolt_engine_test.go @@ -70,7 +70,6 @@ func TestQueryErrors(t *testing.T) { } func TestInfoSchema(t *testing.T) { - t.Skip("Info schema is broken by presence of tags in EXTRA") enginetest.TestInfoSchema(t, newDoltHarness(t)) } @@ -195,7 +194,6 @@ func TestInnerNestedInNaturalJoins(t *testing.T) { } func TestColumnDefaults(t *testing.T) { - t.Skip("Broken by tag info in EXTRA") enginetest.TestColumnDefaults(t, newDoltHarness(t)) } diff --git a/go/libraries/doltcore/sqle/sqlutil/convert.go b/go/libraries/doltcore/sqle/sqlutil/convert.go index b59c226edf..59f50e413e 100644 --- a/go/libraries/doltcore/sqle/sqlutil/convert.go +++ b/go/libraries/doltcore/sqle/sqlutil/convert.go @@ -107,7 +107,6 @@ func FromDoltSchema(tableName string, sch schema.Schema) (sql.Schema, error) { PrimaryKey: col.IsPartOfPK, AutoIncrement: col.AutoIncrement, Comment: col.Comment, - Extra: fmt.Sprintf("tag:%d", tag), }, Default: col.Default, } From ac0885b6d98be0110b3a880253f4b323f0ab865c Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 13:13:57 -0500 Subject: [PATCH 05/13] add loweR --- go/cmd/dolt/commands/schcmds/tags.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index 6dd1c2aa08..b0dc880f07 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -106,7 +106,7 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d rows := make([]sql.Row, 0) for _, tableName := range tables { - table, ok, err := root.GetTable(ctx, tableName) // TODO: Handle case + table, ok, err := root.GetTable(ctx, strings.ToLower(tableName)) // TODO: Handle case if err != nil { return 1 @@ -120,7 +120,7 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d } _ = sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { - currRow := sql.NewRow(tableName, col.Name, tag) + currRow := sql.NewRow(strings.ToLower(tableName), col.Name, tag) rows = append(rows, currRow) From 3315a186f886fbd4a476ff4e9f0706c7d912bb47 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 13:23:11 -0500 Subject: [PATCH 06/13] formatting.... --- go/cmd/dolt/commands/schcmds/tags.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index b0dc880f07..10df40c4b1 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -16,9 +16,10 @@ package schcmds import ( "context" - "github.com/dolthub/go-mysql-server/sql" "strings" + "github.com/dolthub/go-mysql-server/sql" + "github.com/dolthub/dolt/go/cmd/dolt/cli" "github.com/dolthub/dolt/go/cmd/dolt/commands" "github.com/dolthub/dolt/go/cmd/dolt/errhand" @@ -46,6 +47,7 @@ type StringBuilderCloser struct { func (*StringBuilderCloser) Close() error { return nil } + type TagsCmd struct{} var _ cli.Command = TagsCmd{} From 3e868af4ff8f779a6f5000d25c22148c4bb2501c Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 13:55:28 -0500 Subject: [PATCH 07/13] temp --- go/cmd/dolt/commands/schcmds/tags.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index 10df40c4b1..dad8331cbe 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -131,6 +131,10 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d } } + formatStr, ok := apr.GetValue(commands.FormatFlag) + + cli.Println(formatStr, ok) + // Print the results in a SQL Tabular format. err := commands.PrettyPrintResults(ctx, 0, headerSchema, sql.RowsToRowIter(rows...)) From 7da4c5fda1ee3b9a4d57da076e38f2a2e5137702 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 14:36:34 -0500 Subject: [PATCH 08/13] Update to fix formats --- go/cmd/dolt/commands/schcmds/tags.go | 17 +++++++++++++---- go/cmd/dolt/commands/sql.go | 4 ++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index dad8331cbe..f3464b11ee 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -131,12 +131,21 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d } } - formatStr, ok := apr.GetValue(commands.FormatFlag) + formatSr, ok := apr.GetValue(commands.FormatFlag) - cli.Println(formatStr, ok) + var err error + if ok { + resultFormat, verr := commands.GetFormat(formatSr) - // Print the results in a SQL Tabular format. - err := commands.PrettyPrintResults(ctx, 0, headerSchema, sql.RowsToRowIter(rows...)) + if verr != nil { + return commands.HandleVErrAndExitCode(errhand.VerboseErrorFromError(verr), usage) + } + + err = commands.PrettyPrintResults(ctx, resultFormat , headerSchema, sql.RowsToRowIter(rows...)) + } else { + // Default to tabular. + err = commands.PrettyPrintResults(ctx, 0, headerSchema, sql.RowsToRowIter(rows...)) + } if err != nil { return 1 diff --git a/go/cmd/dolt/commands/sql.go b/go/cmd/dolt/commands/sql.go index f1a64092a7..a19fcaa032 100644 --- a/go/cmd/dolt/commands/sql.go +++ b/go/cmd/dolt/commands/sql.go @@ -164,7 +164,7 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE var verr errhand.VerboseError format := formatTabular if formatSr, ok := apr.GetValue(FormatFlag); ok { - format, verr = getFormat(formatSr) + format, verr = GetFormat(formatSr) if verr != nil { return HandleVErrAndExitCode(errhand.VerboseErrorFromError(verr), usage) } @@ -487,7 +487,7 @@ func formatQueryError(message string, err error) errhand.VerboseError { } } -func getFormat(format string) (resultFormat, errhand.VerboseError) { +func GetFormat(format string) (resultFormat, errhand.VerboseError) { switch strings.ToLower(format) { case "tabular": return formatTabular, nil From 5ad3a5c01ec038bec3112ac417a0f5e0681e1436 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 14:39:11 -0500 Subject: [PATCH 09/13] Formatting --- go/cmd/dolt/commands/schcmds/tags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index f3464b11ee..22fa1d2fcc 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -141,7 +141,7 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d return commands.HandleVErrAndExitCode(errhand.VerboseErrorFromError(verr), usage) } - err = commands.PrettyPrintResults(ctx, resultFormat , headerSchema, sql.RowsToRowIter(rows...)) + err = commands.PrettyPrintResults(ctx, resultFormat, headerSchema, sql.RowsToRowIter(rows...)) } else { // Default to tabular. err = commands.PrettyPrintResults(ctx, 0, headerSchema, sql.RowsToRowIter(rows...)) From 893898f177477e2055135cdef4405618a2e0b95c Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 15:06:48 -0500 Subject: [PATCH 10/13] Fix formatting --- go/cmd/dolt/commands/schcmds/tags.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index 22fa1d2fcc..dda0dfc7ab 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -39,15 +39,6 @@ A list of tables can optionally be provided. If it is omitted then all tables w }, } -// WriterCloser type for the tabular writer -type StringBuilderCloser struct { - strings.Builder -} - -func (*StringBuilderCloser) Close() error { - return nil -} - type TagsCmd struct{} var _ cli.Command = TagsCmd{} From cd9f98cc6ed788570f9d937efd850b2c8979cc06 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 15:09:25 -0500 Subject: [PATCH 11/13] Remove todo --- go/cmd/dolt/commands/schcmds/tags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index dda0dfc7ab..9938af41dd 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -99,7 +99,7 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d rows := make([]sql.Row, 0) for _, tableName := range tables { - table, ok, err := root.GetTable(ctx, strings.ToLower(tableName)) // TODO: Handle case + table, ok, err := root.GetTable(ctx, strings.ToLower(tableName)) if err != nil { return 1 From 88abf5434171773be64db104db5c35e9cf316367 Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 16:03:56 -0500 Subject: [PATCH 12/13] Made change and restores tablewriter --- go/cmd/dolt/commands/schcmds/tags.go | 49 ++++++++++--------- go/cmd/dolt/commands/sql.go | 4 +- .../table/untyped/tabular/tablewriter.go | 1 + 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/go/cmd/dolt/commands/schcmds/tags.go b/go/cmd/dolt/commands/schcmds/tags.go index 9938af41dd..dfa50dd816 100644 --- a/go/cmd/dolt/commands/schcmds/tags.go +++ b/go/cmd/dolt/commands/schcmds/tags.go @@ -16,8 +16,6 @@ package schcmds import ( "context" - "strings" - "github.com/dolthub/go-mysql-server/sql" "github.com/dolthub/dolt/go/cmd/dolt/cli" @@ -99,47 +97,52 @@ func (cmd TagsCmd) Exec(ctx context.Context, commandStr string, args []string, d rows := make([]sql.Row, 0) for _, tableName := range tables { - table, ok, err := root.GetTable(ctx, strings.ToLower(tableName)) + table, foundTableKey, ok, err := root.GetTableInsensitive(ctx, tableName) + + // Return an error if table is not found + if !ok { + return commands.HandleVErrAndExitCode(errhand.BuildDError("Can't find table %s.", tableName).AddCause(err).Build(), usage) + } if err != nil { return 1 } - if ok { - sch, err := table.GetSchema(ctx) + sch, err := table.GetSchema(ctx) - if err != nil { - return 1 - } - - _ = sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { - currRow := sql.NewRow(strings.ToLower(tableName), col.Name, tag) - - rows = append(rows, currRow) - - return false, err - }) + if err != nil { + return 1 } + + _ = sch.GetAllCols().Iter(func(tag uint64, col schema.Column) (stop bool, err error) { + rows = append(rows, sql.NewRow(foundTableKey, col.Name, tag)) + + return false, err + }) + + } + + outputFmt, verr := commands.GetResultFormat("tabular") + + if verr != nil { + return commands.HandleVErrAndExitCode(errhand.VerboseErrorFromError(verr), usage) } formatSr, ok := apr.GetValue(commands.FormatFlag) var err error if ok { - resultFormat, verr := commands.GetFormat(formatSr) + outputFmt, verr = commands.GetResultFormat(formatSr) if verr != nil { return commands.HandleVErrAndExitCode(errhand.VerboseErrorFromError(verr), usage) } - - err = commands.PrettyPrintResults(ctx, resultFormat, headerSchema, sql.RowsToRowIter(rows...)) - } else { - // Default to tabular. - err = commands.PrettyPrintResults(ctx, 0, headerSchema, sql.RowsToRowIter(rows...)) } + err = commands.PrettyPrintResults(ctx, outputFmt, headerSchema, sql.RowsToRowIter(rows...)) + if err != nil { - return 1 + return commands.HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) } return 0 diff --git a/go/cmd/dolt/commands/sql.go b/go/cmd/dolt/commands/sql.go index a19fcaa032..3c0f94c0d6 100644 --- a/go/cmd/dolt/commands/sql.go +++ b/go/cmd/dolt/commands/sql.go @@ -164,7 +164,7 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE var verr errhand.VerboseError format := formatTabular if formatSr, ok := apr.GetValue(FormatFlag); ok { - format, verr = GetFormat(formatSr) + format, verr = GetResultFormat(formatSr) if verr != nil { return HandleVErrAndExitCode(errhand.VerboseErrorFromError(verr), usage) } @@ -487,7 +487,7 @@ func formatQueryError(message string, err error) errhand.VerboseError { } } -func GetFormat(format string) (resultFormat, errhand.VerboseError) { +func GetResultFormat(format string) (resultFormat, errhand.VerboseError) { switch strings.ToLower(format) { case "tabular": return formatTabular, nil diff --git a/go/libraries/doltcore/table/untyped/tabular/tablewriter.go b/go/libraries/doltcore/table/untyped/tabular/tablewriter.go index 2a795f7504..03dacfed8f 100644 --- a/go/libraries/doltcore/table/untyped/tabular/tablewriter.go +++ b/go/libraries/doltcore/table/untyped/tabular/tablewriter.go @@ -174,6 +174,7 @@ func (ttw *TextTableWriter) WriteRow(ctx context.Context, r row.Row) error { } allCols := ttw.sch.GetAllCols() + var rowVals strings.Builder rowVals.WriteString("|") err := allCols.Iter(func(tag uint64, col schema.Column) (stop bool, err error) { From 4bbf8e9b76c4d0041a9df520a1c70d35300b5d4a Mon Sep 17 00:00:00 2001 From: VinaiRachakonda Date: Wed, 18 Nov 2020 16:16:03 -0500 Subject: [PATCH 13/13] Add test case and update error msg --- bats/column_tags.bats | 14 ++++++++++++++ go/cmd/dolt/commands/schcmds/tags.go | 5 +++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/bats/column_tags.bats b/bats/column_tags.bats index effb8f91d0..f055617d21 100644 --- a/bats/column_tags.bats +++ b/bats/column_tags.bats @@ -43,6 +43,20 @@ SQL [[ "$output" =~ "new_name,c1,8201" ]] || false } +@test "Schema tags should be case insensitive to tables" { + dolt sql <