in statement.go [90:141]
func (s *stmt) exec(ctx context.Context, args []namedValue) (driver.Result, error) {
if s.conn.connectionId == "" {
return nil, driver.ErrBadConn
}
values := s.parametersToTypedValues(args)
if s.conn.config.batching {
s.Lock()
defer s.Unlock()
s.batchUpdates = append(s.batchUpdates, message.UpdateBatch_builder{
ParameterValues: values,
}.Build())
return &result{
affectedRows: -1,
}, nil
}
msg := message.ExecuteRequest_builder{
StatementHandle: s.handle,
ParameterValues: values,
FirstFrameMaxSize: s.conn.config.frameMaxSize,
HasParameterValues: true,
}.Build()
if s.conn.config.frameMaxSize <= -1 {
msg.SetFirstFrameMaxSize(math.MaxInt32)
} else {
msg.SetFirstFrameMaxSize(s.conn.config.frameMaxSize)
}
res, err := s.conn.httpClient.post(ctx, msg)
if err != nil {
return nil, s.conn.avaticaErrorToResponseErrorOrError(err)
}
results := res.(*message.ExecuteResponse).GetResults()
if len(results) <= 0 {
return nil, errors.New("empty ResultSet in ExecuteResponse")
}
// Currently there is only 1 ResultSet per response
changed := int64(results[0].GetUpdateCount())
return &result{
affectedRows: changed,
}, nil
}