Skip to content

Commit 1b77558

Browse files
authored
fix -h switch (#73)
* fix -h switch * validate Headers correctly * fix test
1 parent 9016e39 commit 1b77558

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

cmd/sqlcmd/main.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,19 @@ type SQLCmdArguments struct {
4949
ErrorLevel int `short:"m" help:"Controls which error messages are sent to stdout. Messages that have severity level greater than or equal to this level are sent."`
5050
Format string `short:"F" help:"Specifies the formatting for results." default:"horiz" enum:"horiz,horizontal,vert,vertical"`
5151
ErrorsToStderr int `short:"r" help:"Redirects the error message output to the screen (stderr). A value of 0 means messages with severity >= 11 will b redirected. A value of 1 means all error message output including PRINT is redirected." enum:"-1,0,1" default:"-1"`
52+
Help bool `short:"?" help:"Show syntax summary."`
53+
Headers int `short:"h" help:"Specifies the number of rows to print between the column headings. Use -h-1 to specify that headers not be printed."`
5254
}
5355

5456
// Validate accounts for settings not described by Kong attributes
5557
func (a *SQLCmdArguments) Validate() error {
5658
if a.PacketSize != 0 && (a.PacketSize < 512 || a.PacketSize > 32767) {
5759
return fmt.Errorf(`'-a %d': Packet size has to be a number between 512 and 32767.`, a.PacketSize)
5860
}
59-
61+
// Ignore 0 even though it's technically an invalid input
62+
if a.Headers < -1 {
63+
return fmt.Errorf(`'-h %d': header value must be either -1 or a value between 1 and 2147483647`, a.Headers)
64+
}
6065
return nil
6166
}
6267

@@ -96,7 +101,11 @@ func (a SQLCmdArguments) authenticationMethod(hasPassword bool) string {
96101
}
97102

98103
func main() {
99-
kong.Parse(&args)
104+
ctx := kong.Parse(&args, kong.NoDefaultHelp())
105+
if args.Help {
106+
_ = ctx.PrintUsage(false)
107+
os.Exit(0)
108+
}
100109
vars := sqlcmd.InitializeVariables(!args.DisableCmdAndWarn)
101110
setVars(vars, &args)
102111

@@ -138,7 +147,7 @@ func setVars(vars *sqlcmd.Variables, args *SQLCmdArguments) {
138147
},
139148
sqlcmd.SQLCMDUSER: func(a *SQLCmdArguments) string { return a.UserName },
140149
sqlcmd.SQLCMDSTATTIMEOUT: func(a *SQLCmdArguments) string { return "" },
141-
sqlcmd.SQLCMDHEADERS: func(a *SQLCmdArguments) string { return "" },
150+
sqlcmd.SQLCMDHEADERS: func(a *SQLCmdArguments) string { return fmt.Sprint(a.Headers) },
142151
sqlcmd.SQLCMDCOLSEP: func(a *SQLCmdArguments) string { return "" },
143152
sqlcmd.SQLCMDCOLWIDTH: func(a *SQLCmdArguments) string { return "" },
144153
sqlcmd.SQLCMDMAXVARTYPEWIDTH: func(a *SQLCmdArguments) string { return "" },

cmd/sqlcmd/main_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ func newKong(t *testing.T, cli interface{}, options ...kong.Option) *kong.Kong {
1919
t.Helper()
2020
options = append([]kong.Option{
2121
kong.Name("test"),
22+
kong.NoDefaultHelp(),
2223
kong.Exit(func(int) {
2324
t.Helper()
2425
t.Fatalf("unexpected exit()")
@@ -76,6 +77,9 @@ func TestValidCommandLineToArgsConversion(t *testing.T) {
7677
{[]string{"-r", "1"}, func(args SQLCmdArguments) bool {
7778
return args.ErrorsToStderr == 1
7879
}},
80+
{[]string{"-h", "2", "-?"}, func(args SQLCmdArguments) bool {
81+
return args.Help && args.Headers == 2
82+
}},
7983
}
8084

8185
for _, test := range commands {
@@ -104,6 +108,7 @@ func TestInvalidCommandLine(t *testing.T) {
104108
{[]string{"-a", "100"}, "test: '-a 100': Packet size has to be a number between 512 and 32767."},
105109
{[]string{"-F", "what"}, "--format must be one of \"horiz\",\"horizontal\",\"vert\",\"vertical\" but got \"what\""},
106110
{[]string{"-r", "5"}, `--errors-to-stderr must be one of "-1","0","1" but got '\x05'`},
111+
{[]string{"-h-4"}, "test: '-h -4': header value must be either -1 or a value between 1 and 2147483647"},
107112
}
108113

109114
for _, test := range commands {

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ module github.com/microsoft/go-sqlcmd
33
go 1.16
44

55
require (
6-
github.com/alecthomas/kong v0.2.18-0.20210621093454-54558f65e86f
6+
github.com/alecthomas/kong v0.5.0
77
github.com/denisenkom/go-mssqldb v0.12.0
88
github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188
99
github.com/google/uuid v1.3.0
1010
github.com/peterh/liner v1.2.2
11-
github.com/stretchr/testify v1.7.0
11+
github.com/stretchr/testify v1.7.1
1212
)
1313

1414
replace github.com/denisenkom/go-mssqldb => github.com/shueybubbles/go-mssqldb v0.10.1-0.20220317022252-fafb9d92e469

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0 h1:v9p9TfTbf7AwNb5NYQt7hI4
66
github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
77
github.com/alecthomas/kong v0.2.18-0.20210621093454-54558f65e86f h1:VgRM6/wqZIB1D9W3XMllm/wplTmPgI5yvCHUXEsmKps=
88
github.com/alecthomas/kong v0.2.18-0.20210621093454-54558f65e86f/go.mod h1:ka3VZ8GZNPXv9Ov+j4YNLkI8mTuhXyr/0ktSlqIydQQ=
9+
github.com/alecthomas/kong v0.5.0 h1:u8Kdw+eeml93qtMZ04iei0CFYve/WPcA5IFh+9wSskE=
10+
github.com/alecthomas/kong v0.5.0/go.mod h1:uzxf/HUh0tj43x1AyJROl3JT7SgsZ5m+icOv1csRhc0=
11+
github.com/alecthomas/repr v0.0.0-20210801044451-80ca428c5142/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8=
912
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1013
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1114
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -29,9 +32,12 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
2932
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
3033
github.com/shueybubbles/go-mssqldb v0.10.1-0.20220317022252-fafb9d92e469 h1:BuUMqsxB86i1QEBf0q+dkQYfNLVpD1nH1fRJPKvXWSg=
3134
github.com/shueybubbles/go-mssqldb v0.10.1-0.20220317022252-fafb9d92e469/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU=
35+
github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4=
3236
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
3337
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
3438
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
39+
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
40+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
3541
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
3642
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897 h1:pLI5jrR7OSLijeIDcmRxNmw2api+jEfxLoykJVice/E=
3743
golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=

0 commit comments

Comments
 (0)