diff --git a/pkg/sqlcmd/commands.go b/pkg/sqlcmd/commands.go index bd7d7fbb..47749265 100644 --- a/pkg/sqlcmd/commands.go +++ b/pkg/sqlcmd/commands.go @@ -103,9 +103,9 @@ func newCommands() Commands { isSystem: true, }, "ONERROR": { - regex: regexp.MustCompile(`(?im)^[\t ]*?:?ONERROR(?:[ \t]+(.*$)|$)`), - action: onerrorCommand, - name: "ONERROR", + regex: regexp.MustCompile(`(?im)^[\t ]*?:?ONERROR(?:[ \t]+(.*$)|$)`), + action: onerrorCommand, + name: "ONERROR", }, } } @@ -474,6 +474,7 @@ func onerrorCommand(s *Sqlcmd, args []string, line uint) error { s.Connect.ExitOnError = true } else if strings.EqualFold(strings.ToLower(params), "ignore") { s.Connect.IgnoreError = true + s.Connect.ExitOnError = false } else { return InvalidCommandError("ON ERROR", line) } diff --git a/pkg/sqlcmd/commands_test.go b/pkg/sqlcmd/commands_test.go index 3e0af957..56abb4ec 100644 --- a/pkg/sqlcmd/commands_test.go +++ b/pkg/sqlcmd/commands_test.go @@ -240,6 +240,16 @@ func TestOnErrorCommand(t *testing.T) { err = runSqlCmd(t, s, []string{":ONERROR exit", "printtgit N'message'", "SELECT @@versionn", "GO"}) assert.NoError(t, err, "runSqlCmd") assert.Equal(t, 1, s.Exitcode, "ExitCode") + // -b sets ExitOnError true + s.Connect.ExitOnError = true + err = runSqlCmd(t, s, []string{":ONERROR ignore", "printtgit N'message'", "SELECT @@versionn", "GO"}) + // when ignore is set along with -b command , ignore takes precedence and resets ExitOnError + assert.Equal(t, false, s.Connect.ExitOnError, "ExitOnError") + assert.NoError(t, err, "runSqlCmd") + // checking ExitonError with Exit option + err = runSqlCmd(t, s, []string{":ONERROR exit", "printtgit N'message'", "SELECT @@versionn", "GO"}) + assert.Equal(t, true, s.Connect.ExitOnError, "ExitOnError") + assert.NoError(t, err, "runSqlCmd") } func TestResolveArgumentVariables(t *testing.T) { type argTest struct {