public void ScalarFunctionCall2() { string sql = @"delimiter // drop procedure if exists `SimpleScalar` // CREATE PROCEDURE `SimpleScalar`() begin update CalcData set z = DoSum( x, y ) where x = 5; end // drop function if exists `DoSum` // CREATE FUNCTION `DoSum`( a int, b int ) RETURNS int(11) begin declare a1 int; declare b1 int; set a1 = a; set b1 = b; return a1 + b1; end // drop table if exists `calcdata`; // CREATE TABLE `calcdata` ( `x` int(11) DEFAULT NULL, `y` int(11) DEFAULT NULL, `z` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 // insert into `calcdata`( x, y, z ) values ( 5, 10, 0 ) // insert into `calcdata`( x, y, z ) values ( 8, 4, 0 ) // insert into `calcdata`( x, y, z ) values ( 6, 7, 0 ) // "; Debugger dbg = new Debugger(); try { dbg.Connection = new MySqlConnection(TestUtils.CONNECTION_STRING); dbg.UtilityConnection = new MySqlConnection(TestUtils.CONNECTION_STRING); dbg.LockingConnection = new MySqlConnection(TestUtils.CONNECTION_STRING); DumpConnectionThreads(dbg); MySqlScript script = new MySqlScript(dbg.Connection, sql); script.Execute(); sql = @"CREATE PROCEDURE `SimpleScalar`() begin update CalcData set z = DoSum( x, y ) where x = 5; end; "; dbg.SqlInput = sql; dbg.SteppingType = SteppingTypeEnum.StepInto; dbg.OnBreakpoint += (bp) => { Debug.WriteLine(string.Format("NonScalarFunction breakpoint at line {0}:{1}", bp.RoutineName, bp.Line)); if ( (bp.RoutineName == "test6.DoSum") && ( bp.Line == 9 ) ) { dbg.CurrentScope.Variables["a1"].Value = 100; dbg.CommitLocals(); } }; dbg.Run(new string[0]); } finally { dbg.RestoreRoutinesBackup(); } }
public void EvaluatingAndChangingSessionVariables() { string sql = @" delimiter // drop procedure if exists PlayWithSessionVars // create procedure PlayWithSessionVars() begin set @x = 1; set @y = 2; set @y = @y + @x; select @y; end // "; Debugger dbg = new Debugger(); try { dbg.Connection = new MySqlConnection(TestUtils.CONNECTION_STRING); dbg.UtilityConnection = new MySqlConnection(TestUtils.CONNECTION_STRING); dbg.LockingConnection = new MySqlConnection(TestUtils.CONNECTION_STRING); DumpConnectionThreads(dbg); MySqlScript script = new MySqlScript(dbg.Connection, sql); script.Execute(); sql = @"create procedure PlayWithSessionVars() begin set @x1 = 1; set @y = 2; set @y = @y + @x1; select @y; end ; "; dbg.SqlInput = sql; dbg.SteppingType = SteppingTypeEnum.StepInto; Watch w = dbg.SetWatch("@x1"); dbg.OnBreakpoint += (bp) => { Debug.WriteLine(string.Format("breakpoint at line {0}:{1}", bp.RoutineName, bp.Line)); if (bp.Line == 6) { Assert.AreEqual(1, Convert.ToInt32(w.Eval())); dbg.CurrentScope.Variables["@x1"].Value = 5; dbg.CommitLocals(); } else if (bp.Line == 7) { Assert.AreEqual(5, Convert.ToInt32(w.Eval())); } }; dbg.Run(new string[0]); } finally { dbg.RestoreRoutinesBackup(); } }