MCPcopy Index your code
hub / github.com/cloudspannerecosystem/spanner-cli / Execute

Method Execute

statement.go:841–889  ·  view source on GitHub ↗
(ctx context.Context, session *Session)

Source from the content-addressed store, hash-verified

839}
840
841func (s *DmlStatement) Execute(ctx context.Context, session *Session) (*Result, error) {
842 stmt := spanner.NewStatement(s.Dml)
843
844 result := &Result{IsMutation: true}
845
846 var rows []Row
847 var columnNames []string
848 var numRows int64
849 var metadata *pb.ResultSetMetadata
850 var err error
851 if session.InReadWriteTransaction() {
852 rows, columnNames, numRows, metadata, err = session.RunUpdate(ctx, stmt, false)
853 if err != nil {
854 // Need to call rollback to free the acquired session in underlying google-cloud-go/spanner.
855 rollback := &RollbackStatement{}
856 rollback.Execute(ctx, session)
857 return nil, fmt.Errorf("transaction was aborted: %v", err)
858 }
859 } else {
860 // Start implicit transaction.
861 begin := BeginRwStatement{}
862 if _, err = begin.Execute(ctx, session); err != nil {
863 return nil, err
864 }
865
866 rows, columnNames, numRows, metadata, err = session.RunUpdate(ctx, stmt, false)
867 if err != nil {
868 // once error has happened, escape from implicit transaction
869 rollback := &RollbackStatement{}
870 rollback.Execute(ctx, session)
871 return nil, err
872 }
873
874 commit := CommitStatement{}
875 txnResult, err := commit.Execute(ctx, session)
876 if err != nil {
877 return nil, err
878 }
879 result.Timestamp = txnResult.Timestamp
880 result.CommitStats = txnResult.CommitStats
881 }
882
883 result.ColumnTypes = metadata.GetRowType().GetFields()
884 result.Rows = rows
885 result.ColumnNames = columnNames
886 result.AffectedRows = int(numRows)
887
888 return result, nil
889}
890
891type PartitionedDmlStatement struct {
892 Dml string

Callers

nothing calls this directly

Calls 5

ExecuteMethod · 0.95
ExecuteMethod · 0.95
ExecuteMethod · 0.95
RunUpdateMethod · 0.80

Tested by

no test coverage detected