From 631f902cb86306d07302feee71eebd4fb2c57dc4 Mon Sep 17 00:00:00 2001 From: Nathan Gabrielson Date: Fri, 11 Jul 2025 14:27:09 -0700 Subject: [PATCH 1/6] First pass --system flag for dolt diff --- go/cmd/dolt/commands/diff.go | 18 ++++++++++++++++-- go/libraries/doltcore/doltdb/system_table.go | 2 +- go/libraries/doltcore/sqle/database.go | 14 ++++++-------- integration-tests/bats/ci.bats | 6 +++--- integration-tests/bats/diff.bats | 16 +++++++++++++++- 5 files changed, 41 insertions(+), 15 deletions(-) diff --git a/go/cmd/dolt/commands/diff.go b/go/cmd/dolt/commands/diff.go index 74f05f45f6..5d5ee2885c 100644 --- a/go/cmd/dolt/commands/diff.go +++ b/go/cmd/dolt/commands/diff.go @@ -179,6 +179,7 @@ func (cmd DiffCmd) ArgParser() *argparser.ArgParser { ap.SupportsString(DiffMode, "", "diff mode", "Determines how to display modified rows with tabular output. Valid values are row, line, in-place, context. Defaults to context.") ap.SupportsFlag(ReverseFlag, "R", "Reverses the direction of the diff.") ap.SupportsFlag(NameOnlyFlag, "", "Only shows table names.") + ap.SupportsFlag(cli.SystemFlag, "", "Show system tables in addition to user tables") return ap } @@ -199,8 +200,7 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ return HandleVErrAndExitCode(verr, usage) } - queryist, oldSqlCtx, closeFunc, err := cliCtx.QueryEngine(ctx) - sqlCtx := doltdb.ContextWithDoltCICreateBypassKey(oldSqlCtx) + queryist, sqlCtx, closeFunc, err := cliCtx.QueryEngine(ctx) if err != nil { return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) } @@ -208,12 +208,26 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ defer closeFunc() } + if apr.Contains(cli.SystemFlag) { + _, _, _, err = queryist.Query(sqlCtx, "SET @@dolt_show_system_tables = 1") + if err != nil { + return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) + } + } + dArgs, err := parseDiffArgs(queryist, sqlCtx, apr) if err != nil { return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) } verr = diffUserTables(queryist, sqlCtx, dArgs) + + if apr.Contains(cli.SystemFlag) { + _, _, _, err = queryist.Query(sqlCtx, "SET @@dolt_show_system_tables = 0") + if err != nil { + return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) + } + } return HandleVErrAndExitCode(verr, usage) } diff --git a/go/libraries/doltcore/doltdb/system_table.go b/go/libraries/doltcore/doltdb/system_table.go index ed13b11b9d..4fb712f651 100644 --- a/go/libraries/doltcore/doltdb/system_table.go +++ b/go/libraries/doltcore/doltdb/system_table.go @@ -82,7 +82,7 @@ func DoltCICanBypass(ctx context.Context) bool { // HasDoltPrefix returns a boolean whether or not the provided string is prefixed with the DoltNamespace. Users should // not be able to create tables in this reserved namespace. func HasDoltPrefix(s string) bool { - return strings.HasPrefix(strings.ToLower(s), DoltNamespace) && !HasDoltCIPrefix(s) + return strings.HasPrefix(strings.ToLower(s), DoltNamespace) } // HasDoltCIPrefix returns a boolean whether or not the provided string is prefixed with the DoltCINamespace. Users should diff --git a/go/libraries/doltcore/sqle/database.go b/go/libraries/doltcore/sqle/database.go index 583b74a7ae..7dcc4769dc 100644 --- a/go/libraries/doltcore/sqle/database.go +++ b/go/libraries/doltcore/sqle/database.go @@ -976,7 +976,7 @@ func (db Database) GetTableNamesAsOf(ctx *sql.Context, time interface{}) ([]stri return nil, err } - return filterDoltInternalTables(ctx, tblNames, db.schemaName), nil + return filterDoltInternalTables(tblNames, db.schemaName, showSystemTables), nil } // getTable returns the user table with the given baseName from the root given @@ -1194,7 +1194,7 @@ func (db Database) GetTableNames(ctx *sql.Context) ([]string, error) { } // TODO: Figure out way to remove filterDoltInternalTables - return filterDoltInternalTables(ctx, tblNames, db.schemaName), nil + return filterDoltInternalTables(tblNames, db.schemaName, showSystemTables), nil } func (db Database) SchemaName() string { @@ -1245,14 +1245,12 @@ func (db Database) getAllTableNames(ctx *sql.Context, root doltdb.RootValue, inc return result, nil } -func filterDoltInternalTables(ctx *sql.Context, tblNames []string, schemaName string) []string { +func filterDoltInternalTables(tblNames []string, schemaName string, includeWriteable bool) []string { result := []string{} for _, tbl := range tblNames { - if doltdb.IsDoltCITable(tbl) { - if doltdb.DoltCICanBypass(ctx) { - result = append(result, tbl) - } + if includeWriteable && !doltdb.IsReadOnlySystemTable(doltdb.TableName{Name: tbl, Schema: schemaName}) { + result = append(result, tbl) } else if !doltdb.IsSystemTable(doltdb.TableName{Name: tbl, Schema: schemaName}) { result = append(result, tbl) } @@ -1435,7 +1433,7 @@ func (db Database) CreateTable(ctx *sql.Context, tableName string, sch sql.Prima return err } - if doltdb.IsSystemTable(doltdb.TableName{Name: tableName, Schema: db.schemaName}) && !doltdb.IsFullTextTable(tableName) { + if doltdb.IsSystemTable(doltdb.TableName{Name: tableName, Schema: db.schemaName}) && !doltdb.IsFullTextTable(tableName) && !doltdb.HasDoltCIPrefix(tableName) { return ErrReservedTableName.New(tableName) } diff --git a/integration-tests/bats/ci.bats b/integration-tests/bats/ci.bats index c8e3330af1..5871803f1b 100644 --- a/integration-tests/bats/ci.bats +++ b/integration-tests/bats/ci.bats @@ -117,8 +117,8 @@ get_commit_hash() { dolt ci init last=$(get_commit_hash 1) - dolt diff "$first" "$last" - run dolt diff "$first" "$last" + dolt diff "$first" "$last" --system + run dolt diff "$first" "$last" --system [ "$status" -eq 0 ] [[ ${output} == *"dolt_ci"* ]] || false } @@ -224,7 +224,7 @@ jobs: EOF dolt ci import ./workflow_1_updated.yaml updated=$(get_commit_hash 1) - run dolt diff "$original" "$updated" + run dolt diff "$original" "$updated" --system [ "$status" -eq 0 ] [[ ${output} == *"(new)"* ]] || false [[ ${output} == *"dolt_ci_workflow_steps"* ]] || false diff --git a/integration-tests/bats/diff.bats b/integration-tests/bats/diff.bats index e54d785763..c2052f321f 100644 --- a/integration-tests/bats/diff.bats +++ b/integration-tests/bats/diff.bats @@ -2183,4 +2183,18 @@ EOF [[ "$output" =~ "$EXPECTED" ]] || false # Count the line numbers to make sure there are no schema changes output [ "${#lines[@]}" -eq 3 ] -} \ No newline at end of file +} + +@test "diff: --system shows system tables" { + dolt sql -q "insert into dolt_ignore values ('test', 1)" + dolt add . + dolt commit -m "added row to dolt_ignore" + + run dolt diff HEAD HEAD~1 + [ "$status" -eq 0 ] + ! [[ "$output" =~ "dolt_ignore" ]] || false + + run dolt diff HEAD HEAD~1 --system + [ "$status" -eq 0 ] + [[ "$output" =~ "dolt_ignore" ]] || false +} From df3c153312bbde1c7af21d3fefbb08d29d8f675c Mon Sep 17 00:00:00 2001 From: Nathan Gabrielson Date: Fri, 11 Jul 2025 16:37:51 -0700 Subject: [PATCH 2/6] Test cleanup --- integration-tests/bats/ci.bats | 1 - integration-tests/bats/diff.bats | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/integration-tests/bats/ci.bats b/integration-tests/bats/ci.bats index 5871803f1b..6bbf27a97c 100644 --- a/integration-tests/bats/ci.bats +++ b/integration-tests/bats/ci.bats @@ -117,7 +117,6 @@ get_commit_hash() { dolt ci init last=$(get_commit_hash 1) - dolt diff "$first" "$last" --system run dolt diff "$first" "$last" --system [ "$status" -eq 0 ] [[ ${output} == *"dolt_ci"* ]] || false diff --git a/integration-tests/bats/diff.bats b/integration-tests/bats/diff.bats index c2052f321f..f569cfd9e5 100644 --- a/integration-tests/bats/diff.bats +++ b/integration-tests/bats/diff.bats @@ -2185,7 +2185,7 @@ EOF [ "${#lines[@]}" -eq 3 ] } -@test "diff: --system shows system tables" { +@test "diff: diff only shows system tables with --system flag" { dolt sql -q "insert into dolt_ignore values ('test', 1)" dolt add . dolt commit -m "added row to dolt_ignore" From c6aadadadb095d7b849f7c12e1f1e9267f881658 Mon Sep 17 00:00:00 2001 From: Nathan Gabrielson Date: Mon, 14 Jul 2025 11:36:16 -0700 Subject: [PATCH 3/6] Expect script showed mercy towards me today --- go/cmd/dolt/commands/diff.go | 38 ++++++++++++++++------- integration-tests/bats/diff-system.expect | 30 ++++++++++++++++++ integration-tests/bats/diff.bats | 9 ++++++ 3 files changed, 66 insertions(+), 11 deletions(-) create mode 100755 integration-tests/bats/diff-system.expect diff --git a/go/cmd/dolt/commands/diff.go b/go/cmd/dolt/commands/diff.go index 5d5ee2885c..37d5e0c139 100644 --- a/go/cmd/dolt/commands/diff.go +++ b/go/cmd/dolt/commands/diff.go @@ -208,12 +208,7 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ defer closeFunc() } - if apr.Contains(cli.SystemFlag) { - _, _, _, err = queryist.Query(sqlCtx, "SET @@dolt_show_system_tables = 1") - if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) - } - } + systemVarVal, err := setSystemVar(queryist, sqlCtx, apr.Contains(cli.SystemFlag)) dArgs, err := parseDiffArgs(queryist, sqlCtx, apr) if err != nil { @@ -222,15 +217,36 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ verr = diffUserTables(queryist, sqlCtx, dArgs) - if apr.Contains(cli.SystemFlag) { - _, _, _, err = queryist.Query(sqlCtx, "SET @@dolt_show_system_tables = 0") - if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) - } + query := fmt.Sprintf("SET @@dolt_show_system_tables = %d", systemVarVal) + _, _, _, err = queryist.Query(sqlCtx, query) + if err != nil { + return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) } + return HandleVErrAndExitCode(verr, usage) } +func setSystemVar(queryist cli.Queryist, sqlCtx *sql.Context, showSystem bool) (int8, error) { + _, rowIter, _, err := queryist.Query(sqlCtx, "SHOW VARIABLES WHERE VARIABLE_NAME='dolt_show_system_tables'") + if err != nil { + return 0, err + } + + row, err := sql.RowIterToRows(sqlCtx, rowIter) + if err != nil { + return 0, err + } + prevVal := row[0][1].(int8) + + newVal := 0 + if showSystem { + newVal = 1 + } + query := fmt.Sprintf("SET @@dolt_show_system_tables = %d", newVal) + _, _, _, err = queryist.Query(sqlCtx, query) + return prevVal, err +} + func (cmd DiffCmd) validateArgs(apr *argparser.ArgParseResults) errhand.VerboseError { if apr.Contains(StatFlag) || apr.Contains(SummaryFlag) { if apr.Contains(SchemaFlag) || apr.Contains(DataFlag) { diff --git a/integration-tests/bats/diff-system.expect b/integration-tests/bats/diff-system.expect new file mode 100755 index 0000000000..4e8d88bdff --- /dev/null +++ b/integration-tests/bats/diff-system.expect @@ -0,0 +1,30 @@ +#!/usr/bin/expect + +set timeout 5 +set env(NO_COLOR) 1 + +source "$env(BATS_CWD)/helper/common_expect_functions.tcl" + +spawn dolt sql + +expect_with_defaults {dolt-repo-.*>} { send "\\diff HEAD HEAD~1 --system\r"; } + +expect_with_defaults {dolt-repo-.*>} { send "show tables;\r"; } + +expect { + -re {dolt_log} { + puts "\diff did not maintain system tables variables" + exit 1 + } +} + +expect_with_defaults {dolt-repo-.*>} { send "SET @@dolt_show_system_tables = 1;\r"; } + +expect_with_defaults {dolt-repo-.*>} { send "\\diff HEAD HEAD~1 \r"; } + +expect_with_defaults {dolt-repo-.*>} { send "show tables;\r"; } + +expect_with_defaults_2 {dolt_log} {dolt-repo-.*>} { send "quit;\r"; } + +expect eof +exit \ No newline at end of file diff --git a/integration-tests/bats/diff.bats b/integration-tests/bats/diff.bats index f569cfd9e5..d540d2f3ba 100644 --- a/integration-tests/bats/diff.bats +++ b/integration-tests/bats/diff.bats @@ -2198,3 +2198,12 @@ EOF [ "$status" -eq 0 ] [[ "$output" =~ "dolt_ignore" ]] || false } + +# bats test_tags=no_lambda +@test "diff: --system preserves dolt_show_system_tables value in sql-shell" { + skiponwindows "Need to install expect and make this script work on windows." + dolt commit --allow-empty -m "Commit" + + run $BATS_TEST_DIRNAME/diff-system.expect + [ "$status" -eq 0 ] +} \ No newline at end of file From c2b4f497f38061b0ea6a8e4f4f81197d6e180117 Mon Sep 17 00:00:00 2001 From: Nathan Gabrielson Date: Mon, 14 Jul 2025 14:26:43 -0700 Subject: [PATCH 4/6] Requested changes --- go/cmd/dolt/commands/diff.go | 40 +++++++++++++++-------- go/cmd/dolt/commands/utils.go | 12 +++++++ integration-tests/bats/diff-system.expect | 2 +- 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/go/cmd/dolt/commands/diff.go b/go/cmd/dolt/commands/diff.go index 37d5e0c139..4e7faaa36e 100644 --- a/go/cmd/dolt/commands/diff.go +++ b/go/cmd/dolt/commands/diff.go @@ -208,7 +208,7 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ defer closeFunc() } - systemVarVal, err := setSystemVar(queryist, sqlCtx, apr.Contains(cli.SystemFlag)) + updateSystemVar, systemVarVal, err := setSystemVar(queryist, sqlCtx, apr.Contains(cli.SystemFlag)) dArgs, err := parseDiffArgs(queryist, sqlCtx, apr) if err != nil { @@ -217,34 +217,46 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ verr = diffUserTables(queryist, sqlCtx, dArgs) - query := fmt.Sprintf("SET @@dolt_show_system_tables = %d", systemVarVal) - _, _, _, err = queryist.Query(sqlCtx, query) - if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) + if updateSystemVar { + query := fmt.Sprintf("SET @@dolt_show_system_tables = %t", systemVarVal) + _, _, _, err = queryist.Query(sqlCtx, query) + if err != nil { + return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) + } } return HandleVErrAndExitCode(verr, usage) } -func setSystemVar(queryist cli.Queryist, sqlCtx *sql.Context, showSystem bool) (int8, error) { +// setSystemVar sets the @@dolt_show_system_tables variable if necessary, and returns the value it must be +// set to after the commands completion, if necessary. +func setSystemVar(queryist cli.Queryist, sqlCtx *sql.Context, showSystem bool) (bool, bool, error) { _, rowIter, _, err := queryist.Query(sqlCtx, "SHOW VARIABLES WHERE VARIABLE_NAME='dolt_show_system_tables'") + updateSystemVar := false if err != nil { - return 0, err + return false, false, err } row, err := sql.RowIterToRows(sqlCtx, rowIter) if err != nil { - return 0, err + return false, false, err + } + prevVal, err := GetInt8ColAsBool(row[0][1]) + if err != nil { + return false, false, err } - prevVal := row[0][1].(int8) - newVal := 0 + newVal := false if showSystem { - newVal = 1 + newVal = true } - query := fmt.Sprintf("SET @@dolt_show_system_tables = %d", newVal) - _, _, _, err = queryist.Query(sqlCtx, query) - return prevVal, err + if newVal != prevVal { + query := fmt.Sprintf("SET @@dolt_show_system_tables = %t", newVal) + _, _, _, err = queryist.Query(sqlCtx, query) + updateSystemVar = true + } + + return updateSystemVar, prevVal, err } func (cmd DiffCmd) validateArgs(apr *argparser.ArgParseResults) errhand.VerboseError { diff --git a/go/cmd/dolt/commands/utils.go b/go/cmd/dolt/commands/utils.go index 8c3c47e19b..cdf2639a0f 100644 --- a/go/cmd/dolt/commands/utils.go +++ b/go/cmd/dolt/commands/utils.go @@ -363,6 +363,18 @@ func GetTinyIntColAsBool(col interface{}) (bool, error) { } } +// GetInt8ColAsBool returns the value of an int8 column as a bool +// This is necessary because Queryist may return an int8 column as a bool (when using SQLEngine) +// or as a string (when using ConnectionQueryist). +func GetInt8ColAsBool(col interface{}) (bool, error) { + switch v := col.(type) { + case int8: + return v == 1, nil + default: + return false, fmt.Errorf("unexpected type %T, was expecting int8", v) + } +} + // getInt64ColAsInt64 returns the value of an int64 column as a string // This is necessary because Queryist may return an int64 column as an int64 (when using SQLEngine) // or as a string (when using ConnectionQueryist). diff --git a/integration-tests/bats/diff-system.expect b/integration-tests/bats/diff-system.expect index 4e8d88bdff..1a80d6d0cb 100755 --- a/integration-tests/bats/diff-system.expect +++ b/integration-tests/bats/diff-system.expect @@ -13,7 +13,7 @@ expect_with_defaults {dolt-rep expect { -re {dolt_log} { - puts "\diff did not maintain system tables variables" + puts "\diff did not preserve existing session variable @@dolt_show_system_tables" exit 1 } } From e768b99fd0d30e2264f9c9cd7df9d3670d739c00 Mon Sep 17 00:00:00 2001 From: Nathan Gabrielson Date: Mon, 14 Jul 2025 15:10:13 -0700 Subject: [PATCH 5/6] small changes --- go/cmd/dolt/commands/diff.go | 36 +++++++++++++++++++---------------- go/cmd/dolt/commands/utils.go | 2 +- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/go/cmd/dolt/commands/diff.go b/go/cmd/dolt/commands/diff.go index 4e7faaa36e..19ae61c4ca 100644 --- a/go/cmd/dolt/commands/diff.go +++ b/go/cmd/dolt/commands/diff.go @@ -208,7 +208,7 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ defer closeFunc() } - updateSystemVar, systemVarVal, err := setSystemVar(queryist, sqlCtx, apr.Contains(cli.SystemFlag)) + updateSystemVar, err := setSystemVar(queryist, sqlCtx, apr.Contains(cli.SystemFlag)) dArgs, err := parseDiffArgs(queryist, sqlCtx, apr) if err != nil { @@ -216,47 +216,51 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ } verr = diffUserTables(queryist, sqlCtx, dArgs) - - if updateSystemVar { - query := fmt.Sprintf("SET @@dolt_show_system_tables = %t", systemVarVal) - _, _, _, err = queryist.Query(sqlCtx, query) - if err != nil { - return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) - } + if verr != nil { + return HandleVErrAndExitCode(verr, usage) } - return HandleVErrAndExitCode(verr, usage) + if updateSystemVar != nil { + err = updateSystemVar() + } + + return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) } // setSystemVar sets the @@dolt_show_system_tables variable if necessary, and returns the value it must be // set to after the commands completion, if necessary. -func setSystemVar(queryist cli.Queryist, sqlCtx *sql.Context, showSystem bool) (bool, bool, error) { +func setSystemVar(queryist cli.Queryist, sqlCtx *sql.Context, showSystem bool) (func() error, error) { _, rowIter, _, err := queryist.Query(sqlCtx, "SHOW VARIABLES WHERE VARIABLE_NAME='dolt_show_system_tables'") - updateSystemVar := false if err != nil { - return false, false, err + return nil, err } row, err := sql.RowIterToRows(sqlCtx, rowIter) if err != nil { - return false, false, err + return nil, err } prevVal, err := GetInt8ColAsBool(row[0][1]) if err != nil { - return false, false, err + return nil, err } newVal := false + var update func() error + if showSystem { newVal = true } if newVal != prevVal { query := fmt.Sprintf("SET @@dolt_show_system_tables = %t", newVal) _, _, _, err = queryist.Query(sqlCtx, query) - updateSystemVar = true + update = func() error { + query := fmt.Sprintf("SET @@dolt_show_system_tables = %t", prevVal) + _, _, _, err := queryist.Query(sqlCtx, query) + return err + } } - return updateSystemVar, prevVal, err + return update, err } func (cmd DiffCmd) validateArgs(apr *argparser.ArgParseResults) errhand.VerboseError { diff --git a/go/cmd/dolt/commands/utils.go b/go/cmd/dolt/commands/utils.go index cdf2639a0f..0d8c1fae00 100644 --- a/go/cmd/dolt/commands/utils.go +++ b/go/cmd/dolt/commands/utils.go @@ -369,7 +369,7 @@ func GetTinyIntColAsBool(col interface{}) (bool, error) { func GetInt8ColAsBool(col interface{}) (bool, error) { switch v := col.(type) { case int8: - return v == 1, nil + return v != 0, nil default: return false, fmt.Errorf("unexpected type %T, was expecting int8", v) } From af0d2aff8540a13760d6590470d2ef354ffa6970 Mon Sep 17 00:00:00 2001 From: Nathan Gabrielson Date: Mon, 14 Jul 2025 15:35:11 -0700 Subject: [PATCH 6/6] whoops missed string case for int8 to bool, err handling somewhere --- go/cmd/dolt/commands/diff.go | 3 +++ go/cmd/dolt/commands/utils.go | 2 ++ 2 files changed, 5 insertions(+) diff --git a/go/cmd/dolt/commands/diff.go b/go/cmd/dolt/commands/diff.go index 19ae61c4ca..b14f56b0e6 100644 --- a/go/cmd/dolt/commands/diff.go +++ b/go/cmd/dolt/commands/diff.go @@ -209,6 +209,9 @@ func (cmd DiffCmd) Exec(ctx context.Context, commandStr string, args []string, _ } updateSystemVar, err := setSystemVar(queryist, sqlCtx, apr.Contains(cli.SystemFlag)) + if err != nil { + return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage) + } dArgs, err := parseDiffArgs(queryist, sqlCtx, apr) if err != nil { diff --git a/go/cmd/dolt/commands/utils.go b/go/cmd/dolt/commands/utils.go index 0d8c1fae00..44c4db94da 100644 --- a/go/cmd/dolt/commands/utils.go +++ b/go/cmd/dolt/commands/utils.go @@ -370,6 +370,8 @@ func GetInt8ColAsBool(col interface{}) (bool, error) { switch v := col.(type) { case int8: return v != 0, nil + case string: + return v != "0", nil default: return false, fmt.Errorf("unexpected type %T, was expecting int8", v) }