func()

in qldbdriver/transaction.go [44:89]


func (txn *transaction) execute(ctx context.Context, statement string, parameters ...interface{}) (*result, error) {
	executeHash, err := toQLDBHash(statement)
	if err != nil {
		return nil, err
	}
	valueHolders := make([]*qldbsession.ValueHolder, len(parameters))
	for i, parameter := range parameters {
		parameterHash, err := toQLDBHash(parameter)
		if err != nil {
			return nil, err
		}
		executeHash, err = executeHash.dot(parameterHash)
		if err != nil {
			return nil, err
		}

		// Can ignore error here since toQLDBHash calls MarshalBinary already
		ionBinary, _ := ion.MarshalBinary(parameter)
		valueHolder := qldbsession.ValueHolder{IonBinary: ionBinary}
		valueHolders[i] = &valueHolder
	}
	commitHash, err := txn.commitHash.dot(executeHash)
	if err != nil {
		return nil, err
	}
	txn.commitHash = commitHash

	executeResult, err := txn.communicator.executeStatement(ctx, &statement, valueHolders, txn.id)
	if err != nil {
		return nil, err
	}

	// create IOUsage and copy the values returned in executeResult.ConsumedIOs
	var ioUsage = &IOUsage{new(int64), new(int64)}
	if executeResult.ConsumedIOs != nil {
		*ioUsage.readIOs += *executeResult.ConsumedIOs.ReadIOs
		*ioUsage.writeIOs += *executeResult.ConsumedIOs.WriteIOs
	}
	// create TimingInformation and copy the values returned in executeResult.TimingInformation
	var timingInfo = &TimingInformation{new(int64)}
	if executeResult.TimingInformation != nil {
		*timingInfo.processingTimeMilliseconds = *executeResult.TimingInformation.ProcessingTimeMilliseconds
	}

	return &result{ctx, txn.communicator, txn.id, executeResult.FirstPage.Values, executeResult.FirstPage.NextPageToken, 0, txn.logger, nil, ioUsage, timingInfo, nil}, nil
}