Skip to content

Commit 9ed202a

Browse files
Track BeginResultSet state to prevent formatter lifecycle violations
Co-authored-by: dlevy-msft-sql <[email protected]>
1 parent 50e47a4 commit 9ed202a

1 file changed

Lines changed: 25 additions & 19 deletions

File tree

pkg/sqlcmd/sqlcmd.go

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,7 @@ func (s *Sqlcmd) runQuery(query string) (int, error) {
452452
var cols []*sql.ColumnType
453453
results := true
454454
first := true
455+
beganResultSet := false
455456
for qe == nil && results {
456457
msg := retmsg.Message(ctx)
457458
switch m := msg.(type) {
@@ -486,6 +487,7 @@ func (s *Sqlcmd) runQuery(query string) (int, error) {
486487
}
487488
if results {
488489
first = true
490+
beganResultSet = false
489491
}
490492
case sqlexp.MsgNext:
491493
if first {
@@ -495,31 +497,35 @@ func (s *Sqlcmd) runQuery(query string) (int, error) {
495497
retcode = -100
496498
qe = s.handleError(&retcode, err)
497499
s.Format.AddError(err)
498-
// Skip processing this result set since we cannot get column types
499-
continue
500+
beganResultSet = false
501+
} else {
502+
s.Format.BeginResultSet(cols)
503+
beganResultSet = true
500504
}
501-
s.Format.BeginResultSet(cols)
502505
}
503-
inresult := rows.Next()
504-
for inresult {
505-
col1 := s.Format.AddRow(rows)
506-
inresult = rows.Next()
507-
if !inresult {
508-
if col1 == "" {
509-
retcode = 0
510-
} else if _, cerr := fmt.Sscanf(col1, "%d", &retcode); cerr != nil {
511-
retcode = -102
506+
// Only process rows if BeginResultSet was successfully called
507+
if beganResultSet {
508+
inresult := rows.Next()
509+
for inresult {
510+
col1 := s.Format.AddRow(rows)
511+
inresult = rows.Next()
512+
if !inresult {
513+
if col1 == "" {
514+
retcode = 0
515+
} else if _, cerr := fmt.Sscanf(col1, "%d", &retcode); cerr != nil {
516+
retcode = -102
517+
}
512518
}
513519
}
514-
}
515-
if retcode != -102 {
516-
if err = rows.Err(); err != nil {
517-
retcode = -100
518-
qe = s.handleError(&retcode, err)
519-
s.Format.AddError(err)
520+
if retcode != -102 {
521+
if err = rows.Err(); err != nil {
522+
retcode = -100
523+
qe = s.handleError(&retcode, err)
524+
s.Format.AddError(err)
525+
}
520526
}
527+
s.Format.EndResultSet()
521528
}
522-
s.Format.EndResultSet()
523529
}
524530
}
525531
s.Format.EndBatch()

0 commit comments

Comments
 (0)