@@ -182,28 +182,34 @@ func exitCommand(s *Sqlcmd, args []string, line uint) error {
182
182
if ! strings .HasPrefix (params , "(" ) || ! strings .HasSuffix (params , ")" ) {
183
183
return InvalidCommandError ("EXIT" , line )
184
184
}
185
- // First we run the current batch
186
- query := s .batch .String ()
187
- if query != "" {
188
- query = s .getRunnableQuery (query )
189
- if exitCode , err := s .runQuery (query ); err != nil {
190
- s .Exitcode = exitCode
191
- return ErrExitRequested
192
- }
193
- }
194
- query = strings .TrimSpace (params [1 : len (params )- 1 ])
195
- if len (query ) > 0 {
196
- s .batch .Reset ([]rune (query ))
185
+ // First we save the current batch
186
+ query1 := s .batch .String ()
187
+ if len (query1 ) > 0 {
188
+ query1 = s .getRunnableQuery (query1 )
189
+ }
190
+ // Now parse the params of EXIT as a batch without commands
191
+ cmd := s .batch .cmd
192
+ s .batch .cmd = nil
193
+ defer func () {
194
+ s .batch .cmd = cmd
195
+ }()
196
+ query2 := strings .TrimSpace (params [1 : len (params )- 1 ])
197
+ if len (query2 ) > 0 {
198
+ s .batch .Reset ([]rune (query2 ))
197
199
_ , _ , err := s .batch .Next ()
198
200
if err != nil {
199
201
return err
200
202
}
201
- query = s .batch .String ()
202
- if s .batch .String () != "" {
203
- query = s .getRunnableQuery (query )
204
- s .Exitcode , _ = s .runQuery (query )
203
+ query2 = s .batch .String ()
204
+ if len (query2 ) > 0 {
205
+ query2 = s .getRunnableQuery (query2 )
205
206
}
206
207
}
208
+
209
+ if len (query1 ) > 0 || len (query2 ) > 0 {
210
+ query := query1 + SqlcmdEol + query2
211
+ s .Exitcode , _ = s .runQuery (query )
212
+ }
207
213
return ErrExitRequested
208
214
}
209
215
0 commit comments