func()

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
}