@@ -182,28 +182,34 @@ func exitCommand(s *Sqlcmd, args []string, line uint) error {
182182 if ! strings .HasPrefix (params , "(" ) || ! strings .HasSuffix (params , ")" ) {
183183 return InvalidCommandError ("EXIT" , line )
184184 }
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 ))
197199 _ , _ , err := s .batch .Next ()
198200 if err != nil {
199201 return err
200202 }
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 )
205206 }
206207 }
208+
209+ if len (query1 ) > 0 || len (query2 ) > 0 {
210+ query := query1 + SqlcmdEol + query2
211+ s .Exitcode , _ = s .runQuery (query )
212+ }
207213 return ErrExitRequested
208214}
209215
0 commit comments