nurse/protocols/sql/rows.go

43 lines
718 B
Go

package sql
import (
"database/sql"
"fmt"
"code.1533b4dc0.de/prskr/nurse/grammar"
"code.1533b4dc0.de/prskr/nurse/validation"
)
var _ validation.FromCall[*sql.Rows] = (*RowsValidator)(nil)
type RowsValidator struct {
Want int
}
func (r *RowsValidator) Validate(in *sql.Rows) error {
readRows := 0
for in.Next() {
readRows++
}
if err := in.Err(); err != nil {
return err
}
if readRows != r.Want {
return fmt.Errorf("expected %d rows but got %d", r.Want, readRows)
}
return nil
}
func (r *RowsValidator) UnmarshalCall(c grammar.Call) error {
if err := grammar.ValidateParameterCount(c.Params, 1); err != nil {
return err
}
var err error
r.Want, err = c.Params[0].AsInt()
return err
}