func()

in connection.go [131:169]


func (c *conn) exec(ctx context.Context, query string, args []namedValue) (driver.Result, error) {
	if c.connectionId == "" {
		return nil, driver.ErrBadConn
	}

	if len(args) != 0 {
		return nil, driver.ErrSkip
	}

	st, err := c.httpClient.post(ctx, message.CreateStatementRequest_builder{
		ConnectionId: c.connectionId,
	}.Build())

	if err != nil {
		return nil, c.avaticaErrorToResponseErrorOrError(err)
	}

	statementID := st.(*message.CreateStatementResponse).GetStatementId()
	defer c.closeStatement(ctx, statementID)

	res, err := c.httpClient.post(ctx, message.PrepareAndExecuteRequest_builder{
		ConnectionId:      c.connectionId,
		StatementId:       statementID,
		Sql:               query,
		MaxRowsTotal:      c.config.maxRowsTotal,
		FirstFrameMaxSize: c.config.frameMaxSize,
	}.Build())

	if err != nil {
		return nil, c.avaticaErrorToResponseErrorOrError(err)
	}

	// Currently there is only 1 ResultSet per response for exec
	changed := int64(res.(*message.ExecuteResponse).GetResults()[0].GetUpdateCount())

	return &result{
		affectedRows: changed,
	}, nil
}