public void RoutineWithoutBeginEndBlock() { string sql = @" delimiter // drop table if exists TriggerTable // create table TriggerTable ( myid int, myname varchar( 30 ) ) // create trigger trTriggerTable before insert on TriggerTable for each row set new.myid = new.myid + 1; // drop procedure if exists DoInsertTriggerTable // create procedure DoInsertTriggerTable() replace into TriggerTable( myid, myname ) values ( 1, 'val' ); // "; 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 DoInsertTriggerTable() replace into TriggerTable( myid, myname ) values ( 1, 'val' ); "; dbg.SqlInput = sql; dbg.SteppingType = SteppingTypeEnum.StepInto; Watch w = dbg.SetWatch("new.myid"); Watch w2 = dbg.SetWatch("new.myname"); //Watch w3 = dbg.SetWatch("old.myid"); //Watch w4 = dbg.SetWatch("old.myname"); dbg.OnBreakpoint += (bp) => { Debug.WriteLine(string.Format("breakpoint at line {0}:{1}", bp.RoutineName, bp.Line)); if ( bp.RoutineName == "test6.trTriggerTable") { if (bp.Line == 3) { Debug.WriteLine("Checking new & old object in trigger scope"); Assert.AreEqual(1, Convert.ToInt32(w.Eval())); //Assert.AreEqual(1, Convert.ToInt32(w3.Eval())); Assert.AreEqual("val", w2.Eval()); //Assert.AreEqual("Val", w4.Eval()); } } }; dbg.Run(new string[0]); } finally { dbg.RestoreRoutinesBackup(); dbg.Stop(); } }
public void ArgumentsTest() { string fullSql = @"DELIMITER // DROP PROCEDURE IF EXISTS pr_ArgumentsTest // "; string procedureSql = @" CREATE PROCEDURE pr_ArgumentsTest(param1 tinyint unsigned, out param2 varchar(5), inout param3 int, inout param4 varchar(5)) BEGIN SET param2 = param1; SET param3 = param3 + param1; IF param4 = 'abc' THEN SET param4 = 'xyz'; ELSE SET param4 = NULL; END IF; 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, fullSql + procedureSql + @"//"); script.Execute(); dbg.SqlInput = procedureSql; dbg.Run(new string[] { "1", "@dbg_var1", "@dbg_var2", "@dbg_var3" }, new string[] { "@dbg_var2 = '3'", "@dbg_var3 = 'abc'" }); Assert.AreEqual("1", dbg.ScopeVariables["param1"].Value); Assert.AreEqual("1", dbg.ScopeVariables["param2"].Value); Assert.AreEqual("4", dbg.ScopeVariables["param3"].Value); Assert.AreEqual("xyz", dbg.ScopeVariables["param4"].Value); dbg.RestoreRoutinesBackup(); dbg.Run(new string[] { "1", "@dbg_var1", "@dbg_var2", "@dbg_var3" }, new string[] { "@dbg_var2 = '3'", "@dbg_var3 = 'mysql'" }); Assert.AreEqual("1", dbg.ScopeVariables["param1"].Value); Assert.AreEqual("1", dbg.ScopeVariables["param2"].Value); Assert.AreEqual("4", dbg.ScopeVariables["param3"].Value); Assert.AreEqual(DBNull.Value, dbg.ScopeVariables["param4"].Value); } finally { dbg.RestoreRoutinesBackup(); dbg.Stop(); } }