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"));
        }
Beispiel #5
0
        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 ?"));
        }
Beispiel #9
0
        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"));
        }
Beispiel #13
0
        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"));
        }
Beispiel #20
0
        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();
        }