Skip to content

Commit 5997528

Browse files
committed
fix EOF on proc
1 parent 2be75e4 commit 5997528

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

sql/procedures/interpreter_logic.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -965,6 +965,11 @@ func Call(ctx *sql.Context, iNode InterpreterNode) (sql.RowIter, *InterpreterSta
965965
rowIters = append(rowIters, sql.RowsToRowIter(sql.Row{types.NewOkResult(0)}))
966966
} else if retSch != nil {
967967
iNode.SetSchema(retSch)
968+
} else {
969+
// If we have rowIters but no meaningful schema, return OkResult
970+
// This ensures CALL statements always return proper result sets for MySQL protocol compatibility
971+
iNode.SetSchema(types.OkResultSchema)
972+
rowIters = []sql.RowIter{sql.RowsToRowIter(sql.Row{types.NewOkResult(0)})}
968973
}
969974

970975
return rowIters[len(rowIters)-1], stack, nil

sql/rowexec/proc_iters.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,14 +121,20 @@ var _ sql.MutableRowIter = (*callIter)(nil)
121121

122122
// Next implements the sql.RowIter interface.
123123
func (ci *callIter) Next(ctx *sql.Context) (sql.Row, error) {
124+
if ci.innerIter == nil {
125+
return nil, io.EOF
126+
}
124127
return ci.innerIter.Next(ctx)
125128
}
126129

127130
// Close implements the sql.RowIter interface.
128131
func (ci *callIter) Close(ctx *sql.Context) error {
129-
err := ci.innerIter.Close(ctx)
130-
if err != nil {
131-
return err
132+
var err error
133+
if ci.innerIter != nil {
134+
err = ci.innerIter.Close(ctx)
135+
if err != nil {
136+
return err
137+
}
132138
}
133139
err = ci.call.Pref.CloseAllCursors(ctx)
134140
if err != nil {

0 commit comments

Comments
 (0)