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
}