public void MultipleThreads() { GenericListener myListener = new GenericListener(); ManualResetEvent ev = new ManualResetEvent(false); ArrayList threads = new ArrayList(); System.Diagnostics.Trace.Listeners.Add(myListener); for (int i = 0; i < 20; i++) { ParameterizedThreadStart ts = new ParameterizedThreadStart(MultipleThreadsWorker); Thread t = new Thread(ts); threads.Add(t); t.Start(ev); } // now let the threads go ev.Set(); // wait for the threads to end int x = 0; while (x < threads.Count) { while ((threads[x] as Thread).IsAlive) Thread.Sleep(50); x++; } }
public void FieldConversion() { execSQL("INSERT INTO Test VALUES (1, 'Test1')"); MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); MySqlCommand cmd = new MySqlCommand("SELECT * FROM Test", conn); using (MySqlDataReader reader = cmd.ExecuteReader()) { reader.Read(); short s = reader.GetInt16(0); long l = reader.GetInt64(0); string str = reader.GetString(1); } Assert.AreEqual(6, listener.Strings.Count); Assert.IsTrue(listener.Strings[0].Contains("Query Opened: SELECT * FROM Test")); Assert.IsTrue(listener.Strings[1].Contains("Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1")); Assert.IsTrue(listener.Strings[2].Contains("Usage Advisor Warning: Query does not use an index")); Assert.IsTrue(listener.Strings[3].Contains("Usage Advisor Warning: The field 'id' was converted to the following types: Int16,Int64")); Assert.IsTrue(listener.Strings[4].Contains("Resultset Closed. Total rows=1, skipped rows=0, size (bytes)=8")); Assert.IsTrue(listener.Strings[5].Contains("Query Closed")); }
public void SettingAgeOnCommand() { execSQL("CREATE TABLE test2 (id INT, name VARCHAR(20), name2 VARCHAR(20))"); execSQL("INSERT INTO test2 VALUES (1, 'boo', 'hoo'), (2, 'first', 'last'), (3, 'fred', 'flintstone')"); GenericListener listener = new GenericListener(); string connStr = GetConnectionString(true) + ";logging=true;table cache=true;default table cache age=1"; using (MySqlConnection c = new MySqlConnection(connStr)) { c.Open(); MySqlCommand cmd = new MySqlCommand("test2", c); cmd.CommandType = CommandType.TableDirect; cmd.CacheAge = 20; ConsumeReader(cmd); Thread.Sleep(1000); // now run the query again but this time it shouldn't generate a call to the database // since we have overriden the connection string cache age of 1 second and set it // to 20 seconds on our command ConsumeReader(cmd); } Assert.AreEqual(1, listener.Find("Resultset Opened: field(s) = 3")); }
public void BadIndexUsed() { execSQL("DROP TABLE IF EXISTS Test"); execSQL("CREATE TABLE Test(id INT, name VARCHAR(20) PRIMARY KEY)"); execSQL("INSERT INTO Test VALUES (1, 'Test1')"); execSQL("INSERT INTO Test VALUES (2, 'Test2')"); execSQL("INSERT INTO Test VALUES (3, 'Test3')"); execSQL("INSERT INTO Test VALUES (4, 'Test4')"); MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); MySqlCommand cmd = new MySqlCommand("SELECT name FROM Test WHERE id=3", conn); using (MySqlDataReader reader = cmd.ExecuteReader()) { reader.Read(); } Assert.AreEqual(6, listener.Strings.Count); Assert.IsTrue(listener.Strings[0].Contains("Query Opened: SELECT name FROM Test WHERE id=3")); Assert.IsTrue(listener.Strings[1].Contains("Resultset Opened: field(s) = 1, affected rows = -1, inserted id = -1")); Assert.IsTrue(listener.Strings[2].Contains("Usage Advisor Warning: Query does not use an index")); Assert.IsTrue(listener.Strings[3].Contains("Usage Advisor Warning: The following columns were not accessed: name")); Assert.IsTrue(listener.Strings[4].Contains("Resultset Closed. Total rows=1, skipped rows=0, size (bytes)=6")); Assert.IsTrue(listener.Strings[5].Contains("Query Closed")); }
static void Save(IParseTree tree, string input, string fileName) { var listener = new GenericListener(input); new ParseTreeWalker().Walk(listener, tree); listener.Root.Save(fileName); }
public void ConnectionStringExpiry() { execSQL("CREATE TABLE test3 (id INT, name VARCHAR(20), name2 VARCHAR(20))"); execSQL("INSERT INTO test3 VALUES (1, 'boo', 'hoo'), (2, 'first', 'last'), (3, 'fred', 'flintstone')"); MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); string connStr = GetConnectionString(true) + ";logging=true;table cache=true;default table cache age=1"; using (MySqlConnection c = new MySqlConnection(connStr)) { c.Open(); MySqlCommand cmd = new MySqlCommand("test3", c); cmd.CommandType = CommandType.TableDirect; ConsumeReader(cmd); Thread.Sleep(1500); // now run the query again but this time it should generate a call to the database // since our next query is past the cache age of 1 second ConsumeReader(cmd); } Assert.AreEqual(2, listener.Find("Resultset Opened: field(s) = 3")); }
/// <summary> /// Bug #57641 Substring out of range exception in ConsumeQuotedToken /// </summary> public void QuotedTokenAt300() { GenericListener listener = new GenericListener(); string sql = @"SELECT 1 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1`, 2 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2`, 3 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3`, 4 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4`, 5 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5`, 6 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6`;"; MySqlCommand cmd = new MySqlCommand(sql, conn); using (MySqlDataReader reader = cmd.ExecuteReader()) { } }
public void ProviderNormalizingQuery() { GenericListener listener = new GenericListener(); StringBuilder sql = new StringBuilder("SELECT '"); for (int i = 0; i < 400; i++) sql.Append("a"); sql.Append("'"); MySqlCommand cmd = new MySqlCommand(sql.ToString(), conn); cmd.ExecuteNonQuery(); Assert.AreEqual(5, listener.Strings.Count); Assert.IsTrue(listener.Strings[1].EndsWith("SELECT ?")); }
public void ConcurrencyCheck() { using (MovieDBContext db = new MovieDBContext()) { db.Database.Delete(); db.Database.CreateIfNotExists(); db.Database.ExecuteSqlCommand( @"DROP TABLE IF EXISTS `MovieReleases`"); db.Database.ExecuteSqlCommand( @"CREATE TABLE IF NOT EXISTS `MovieReleases` ( `Id` int(11) NOT NULL, `Name` varbinary(45) NOT NULL, `Timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=binary"); MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); try { MovieRelease mr = db.MovieReleases.Create(); mr.Id = 1; mr.Name = "Commercial"; db.MovieReleases.Add(mr); db.SaveChanges(); mr.Name = "Director's Cut"; db.SaveChanges(); } finally { db.Database.ExecuteSqlCommand(@"DROP TABLE IF EXISTS `MovieReleases`"); } // Check sql Regex rx = new Regex(@"Query Opened: (?<item>UPDATE .*)", RegexOptions.Compiled | RegexOptions.Singleline); foreach (string s in listener.Strings) { Match m = rx.Match(s); if (m.Success) { st.CheckSql(m.Groups["item"].Value, SQLSyntax.UpdateWithSelect); //Assert.Pass(); } } //Assert.Fail(); } }
public void FirstTest() { MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; #if !NETCORE10 GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); #endif var d = new MyDriver(); if (!d.Connected.Equals("true")) { d.Connnect(); } d.Close(); }
public void QuotedTokenAt300() { MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); string sql = @"SELECT 1 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1`, 2 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2`, 3 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3`, 4 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4`, 5 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5`, 6 AS `AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6`;"; MySqlCommand cmd = new MySqlCommand(sql, conn); using (MySqlDataReader reader = cmd.ExecuteReader()) { } }
public void SimpleLogging() { execSQL("INSERT INTO Test VALUES (1, 'Test1')"); execSQL("INSERT INTO Test VALUES (2, 'Test2')"); execSQL("INSERT INTO Test VALUES (3, 'Test3')"); execSQL("INSERT INTO Test VALUES (4, 'Test4')"); GenericListener listener = new GenericListener(); MySqlCommand cmd = new MySqlCommand("SELECT * FROM Test", conn); using (MySqlDataReader reader = cmd.ExecuteReader()) { } Assert.AreEqual(4, listener.Strings.Count); Assert.IsTrue(listener.Strings[0].Contains("Query Opened: SELECT * FROM Test")); Assert.IsTrue(listener.Strings[1].Contains("Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1")); Assert.IsTrue(listener.Strings[2].Contains("Resultset Closed. Total rows=4, skipped rows=4, size (bytes)=32")); Assert.IsTrue(listener.Strings[3].Contains("Query Closed")); }
void UseGenericEventArgs() { GenericEventDispatcher dispatcher = new GenericEventDispatcher(); GenericListener sigmund = new GenericListener("Sigmund"); dispatcher.MessageEvent += sigmund.OnGenericMessage; dispatcher.NumberEvent += sigmund.OnGenericNumber; dispatcher.IntEvent += sigmund.OnGenericEvent; dispatcher.StringEvent += sigmund.OnGenericEvent; dispatcher.CallMessageEvent(); // Sigmund got message Generic Message from Events+GenericEventDispatcher dispatcher.CallNumberEvent(); // Sigmund got number 3 from Events+GenericEventDispatcher dispatcher.CallGenericInt(); // Sigmund got value 42 from Events+GenericEventDispatcher dispatcher.CallGenericString(); // Sigmund got value Generic generic arg! from Events+GenericEventDispatcher }
public void ProcedureCache() { if (Version < new Version(5, 0)) return; // open a new connection using a procedure cache string connStr = GetConnectionString(true); connStr += ";procedure cache size=25;logging=true"; using (MySqlConnection c = new MySqlConnection(connStr)) { c.Open(); // install our custom trace listener GenericListener myListener = new GenericListener(); System.Diagnostics.Trace.Listeners.Add(myListener); for (int x = 0; x < 10; x++) { execSQL("CREATE PROCEDURE spTest" + x + "() BEGIN SELECT 1; END"); MySqlCommand cmd = new MySqlCommand("spTest" + x, c); cmd.CommandType = CommandType.StoredProcedure; for (int y = 0; y < 20; y++) { cmd.ExecuteNonQuery(); } } // remove our custom trace listener System.Diagnostics.Trace.Listeners.Remove(myListener); // now see how many times our listener recorded a cache hit Assert.AreEqual(190, myListener.Find("from procedure cache")); Assert.AreEqual(10, myListener.Find("from server")); } }
public void Warnings() { execSQL("DROP TABLE IF EXISTS Test"); execSQL("CREATE TABLE Test(id INT, name VARCHAR(5))"); GenericListener listener = new GenericListener(); MySqlCommand cmd = new MySqlCommand("INSERT IGNORE INTO Test VALUES (1, 'abcdef')", conn); cmd.ExecuteNonQuery(); Assert.AreEqual(9, listener.Strings.Count); Assert.IsTrue(listener.Strings[0].Contains("Query Opened: INSERT IGNORE INTO Test VALUES (1, 'abcdef')")); Assert.IsTrue(listener.Strings[1].Contains("Resultset Opened: field(s) = 0, affected rows = 1, inserted id = 0")); Assert.IsTrue(listener.Strings[2].Contains("Resultset Closed. Total rows=0, skipped rows=0, size (bytes)=0")); Assert.IsTrue(listener.Strings[3].Contains("Query Opened: SHOW WARNINGS")); Assert.IsTrue(listener.Strings[4].Contains("Resultset Opened: field(s) = 3, affected rows = -1, inserted id = -1")); Assert.IsTrue(listener.Strings[5].Contains("Resultset Closed. Total rows=1, skipped rows=0, size (bytes)=55")); Assert.IsTrue(listener.Strings[6].Contains("Query Closed")); Assert.IsTrue(listener.Strings[7].Contains("MySql Warning: Level=Warning, Code=1265, Message=Data truncated for column 'name' at row 1")); Assert.IsTrue(listener.Strings[8].Contains("Query Closed")); }
public void BatchUpdatesAndDeletes() { execSQL("CREATE TABLE test (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20))"); execSQL("INSERT INTO test VALUES (1, 'boo'), (2, 'boo'), (3, 'boo')"); MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); string connStr = GetConnectionString(true) + ";logging=true;allow batch=true"; using (MySqlConnection c = new MySqlConnection(connStr)) { c.Open(); MySqlDataAdapter da = new MySqlDataAdapter("SELECT * FROM test", c); MySqlCommandBuilder cb = new MySqlCommandBuilder(da); da.UpdateCommand = cb.GetUpdateCommand(); da.UpdateCommand.UpdatedRowSource = UpdateRowSource.None; da.UpdateBatchSize = 100; DataTable dt = new DataTable(); da.Fill(dt); dt.Rows[0]["name"] = "boo2"; dt.Rows[1]["name"] = "boo2"; dt.Rows[2]["name"] = "boo2"; da.Update(dt); } Assert.AreEqual(1, listener.Find("Query Opened: UPDATE")); }
private void CacheServerPropertiesInternal(bool cache) { string connStr = GetPoolingConnectionString() + String.Format(";logging=true;cache server properties={0}", cache); GenericListener listener = new GenericListener(); using (MySqlConnection c = new MySqlConnection(connStr)) { c.Open(); using (MySqlConnection c2 = new MySqlConnection(connStr)) { c2.Open(); KillConnection(c2); } KillConnection(c); } int count = listener.CountLinesContaining("SHOW VARIABLES"); Assert.AreEqual(cache ? 1 : 2, count); }
public void SimpleTableCaching() { execSQL("CREATE TABLE test (id INT, name VARCHAR(20), name2 VARCHAR(20))"); execSQL("INSERT INTO test VALUES (1, 'boo', 'hoo'), (2, 'first', 'last'), (3, 'fred', 'flintstone')"); GenericListener listener = new GenericListener(); string connStr = GetConnectionString(true) + ";logging=true;table cache=true"; using (MySqlConnection c = new MySqlConnection(connStr)) { c.Open(); MySqlCommand cmd = new MySqlCommand("test", c); cmd.CommandType = CommandType.TableDirect; ConsumeReader(cmd); // now run the query again but this time it shouldn't generate a call to the database ConsumeReader(cmd); } Assert.AreEqual(1, listener.Find("Resultset Opened: field(s) = 3")); }
public void NotReadingEveryRow() { execSQL("INSERT INTO Test VALUES (1, 'Test1')"); execSQL("INSERT INTO Test VALUES (2, 'Test2')"); execSQL("INSERT INTO Test VALUES (3, 'Test3')"); execSQL("INSERT INTO Test VALUES (4, 'Test4')"); MySqlTrace.Listeners.Clear(); MySqlTrace.Switch.Level = SourceLevels.All; GenericListener listener = new GenericListener(); MySqlTrace.Listeners.Add(listener); MySqlCommand cmd = new MySqlCommand("SELECT * FROM Test; SELECT * FROM Test WHERE id > 2", conn); using (MySqlDataReader reader = cmd.ExecuteReader()) { reader.Read(); reader.Read(); Assert.IsTrue(reader.NextResult()); reader.Read(); reader.Read(); Assert.IsFalse(reader.NextResult()); } Assert.AreEqual(11, listener.Strings.Count); Assert.IsTrue(listener.Strings[0].Contains("Query Opened: SELECT * FROM Test; SELECT * FROM Test WHERE id > 2")); Assert.IsTrue(listener.Strings[1].Contains("Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1")); Assert.IsTrue(listener.Strings[2].Contains("Usage Advisor Warning: Query does not use an index")); Assert.IsTrue(listener.Strings[3].Contains("Usage Advisor Warning: Skipped 2 rows. Consider a more focused query.")); Assert.IsTrue(listener.Strings[4].Contains("Usage Advisor Warning: The following columns were not accessed: id,name")); Assert.IsTrue(listener.Strings[5].Contains("Resultset Closed. Total rows=4, skipped rows=2, size (bytes)=32")); Assert.IsTrue(listener.Strings[6].Contains("Resultset Opened: field(s) = 2, affected rows = -1, inserted id = -1")); Assert.IsTrue(listener.Strings[7].Contains("Usage Advisor Warning: Query does not use an index")); Assert.IsTrue(listener.Strings[8].Contains("Usage Advisor Warning: The following columns were not accessed: id,name")); Assert.IsTrue(listener.Strings[9].Contains("Resultset Closed. Total rows=2, skipped rows=0, size (bytes)=16")); Assert.IsTrue(listener.Strings[10].Contains("Query Closed")); }
public void Init() { _device = new Device() { Id = "A94883B956564CEBB280B03DDB4EC6D9", DeviceId = DEVICE_ID, SensorCollection = new List <DeviceManagement.Models.Sensor>() { new DeviceManagement.Models.Sensor() { PortIndex = 3, Technology = LagoVista.Core.Models.EntityHeader <DeviceManagement.Models.SensorTechnology> .Create(DeviceManagement.Models.SensorTechnology.ADC) }, new DeviceManagement.Models.Sensor() { PortIndex = 5, Technology = LagoVista.Core.Models.EntityHeader <DeviceManagement.Models.SensorTechnology> .Create(DeviceManagement.Models.SensorTechnology.ADC) }, new DeviceManagement.Models.Sensor() { PortIndex = 1, Technology = LagoVista.Core.Models.EntityHeader <DeviceManagement.Models.SensorTechnology> .Create(DeviceManagement.Models.SensorTechnology.IO) }, new DeviceManagement.Models.Sensor() { PortIndex = 2, Technology = LagoVista.Core.Models.EntityHeader <DeviceManagement.Models.SensorTechnology> .Create(DeviceManagement.Models.SensorTechnology.IO) } }, DeviceRepository = new LagoVista.Core.Models.EntityHeader() { Id = "1F4042102C3041F2989DDEE8006E2B56" } }; _pemBus.Setup(pmb => pmb.NotificationPublisher).Returns(_notificationPublisher.Object); _pemBus.Setup(pmb => pmb.SensorEvaluator).Returns(_sensorEvaluator.Object); _pemBus.Setup(pmb => pmb.DeviceStorage).Returns(_deviceStorage.Object); _pemBus.Setup(pmb => pmb.InstanceLogger).Returns(new InstanceLogger(_logWriter, "1234", "1.2.3.4", "456")); _pemBus.Setup(pmb => pmb.Instance).Returns(new Deployment.Admin.Models.DeploymentInstance() { Id = "231228217F754DEFAA2F3F364E101D26", Host = new LagoVista.Core.Models.EntityHeader <Deployment.Admin.Models.DeploymentHost>() { Id = "0952B411513346EDBF553EA8150C87C2" } }); _pemBus.Setup(pmb => pmb.Queues).Returns(new List <IPEMQueue>() { new Utils.TestInputQueue() { PipelineModuleId = "6BBDF856F5B4439ABD156C4DFD8C245E" } }); _deviceStorage.Setup(ds => ds.GetDeviceByDeviceIdAsync(It.Is <string>(str => str == DEVICE_ID))).ReturnsAsync(_device); _listener = new GenericListener(new ListenerConfiguration() { Id = "6BBDF856F5B4439ABD156C4DFD8C245E" }, _pemBus.Object); }
public void UseOldSyntaxGivesWarning() { Trace.Listeners.Clear(); GenericListener listener = new GenericListener(); Trace.Listeners.Add(listener); string connStr = conn.ConnectionString + ";old syntax=yes;pooling=false"; MySqlConnection conn2 = new MySqlConnection(connStr); conn2.Open(); Assert.IsTrue(listener.Find("Use Old Syntax is now obsolete") != 0); conn2.Close(); Trace.Listeners.Clear(); }