func runStmt(ctx context.Context, s ast.Statement, args ...interface{}) (ast.RecordSet, error) { var err error var rs ast.RecordSet // before every execution, we must clear affectedrows. variable.GetSessionVars(ctx).SetAffectedRows(0) if s.IsDDL() { err = ctx.CommitTxn() if err != nil { return nil, errors.Trace(err) } } rs, err = s.Exec(ctx) // All the history should be added here. se := ctx.(*session) se.history.add(0, s) // MySQL DDL should be auto-commit. ac, err1 := autocommit.ShouldAutocommit(ctx) if err1 != nil { return nil, errors.Trace(err1) } if s.IsDDL() || ac { if err != nil { log.Info("RollbackTxn for ddl/autocommit error.") ctx.RollbackTxn() } else { err = ctx.CommitTxn() } } return rs, errors.Trace(err) }
func runStmt(ctx context.Context, s ast.Statement, args ...interface{}) (ast.RecordSet, error) { var err error var rs ast.RecordSet // before every execution, we must clear affectedrows. variable.GetSessionVars(ctx).SetAffectedRows(0) if s.IsDDL() { err = ctx.FinishTxn(false) if err != nil { return nil, errors.Trace(err) } } rs, err = s.Exec(ctx) // All the history should be added here. se := ctx.(*session) se.history.add(0, s) // MySQL DDL should be auto-commit if s.IsDDL() || autocommit.ShouldAutocommit(ctx) { if err != nil { ctx.FinishTxn(true) } else { err = ctx.FinishTxn(false) } } return rs, errors.Trace(err) }
// runStmt executes the ast.Statement and commit or rollback the current transaction. func runStmt(ctx context.Context, s ast.Statement) (ast.RecordSet, error) { var err error var rs ast.RecordSet if s.IsDDL() { err = ctx.CommitTxn() if err != nil { return nil, errors.Trace(err) } } rs, err = s.Exec(ctx) // All the history should be added here. se := ctx.(*session) getHistory(ctx).add(0, s) // MySQL DDL should be auto-commit. if s.IsDDL() || se.sessionVars.ShouldAutocommit() { if err != nil { log.Info("RollbackTxn for ddl/autocommit error.") ctx.RollbackTxn() } else { err = ctx.CommitTxn() } } return rs, errors.Trace(err) }