public void SqlParserTest_verify_match_on_select_with_multi_sets()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "set test; set test2; select * from test");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("test/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestShow()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "show stuff");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("stuff/show", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TableDirectQueryParsed()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.TableDirect, "MyAwesomeTable");

            Assert.AreEqual("MyAwesomeTable", parsedDatabaseStatement.Model);
            Assert.AreEqual("select", parsedDatabaseStatement.Operation);
        }
        public void SqlParserTest_TestExecProcedureNoArguments()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "EXEC @RTN = [ClassSearchPublicSite]");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("classsearchpublicsite/ExecuteProcedure", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestTableDirect()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.TableDirect, "MyTable");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("MyTable/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestProcedureWithBrackets()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.StoredProcedure, "[DotNetNuke].[sys].[sp_dude]");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("dotnetnuke.sys.sp_dude/ExecuteProcedure", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_Valid_Sqls_But_NotSupported()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "mystoredprocedure'123'");

            Assert.IsNull(parsedDatabaseStatement.Model);
            Assert.AreEqual("other", parsedDatabaseStatement.Operation);

            parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "mystoredprocedure\t'123'");
            Assert.IsNull(parsedDatabaseStatement.Model);
            Assert.AreEqual("other", parsedDatabaseStatement.Operation);

            parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "mystoredprocedure\r\n'123'");
            Assert.IsNull(parsedDatabaseStatement.Model);
            Assert.AreEqual("other", parsedDatabaseStatement.Operation);

            parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "[mystoredprocedure]123");
            Assert.IsNull(parsedDatabaseStatement.Model);
            Assert.AreEqual("other", parsedDatabaseStatement.Operation);

            parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "\"mystoredprocedure\"abc");
            Assert.IsNull(parsedDatabaseStatement.Model);
            Assert.AreEqual("other", parsedDatabaseStatement.Operation);

            parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "mystoredprocedure");
            Assert.IsNull(parsedDatabaseStatement.Model);
            Assert.AreEqual("other", parsedDatabaseStatement.Operation);
        }
        public void SqlParserTest_TestProcedure()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.StoredProcedure, "MyProc");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("myproc/ExecuteProcedure", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestStoredProcedureTextCommandWithArguments()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "sp_MyProc ?, ?");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("sp_myproc/ExecuteProcedure", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestDelete()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "delete actors where title = 'The Dude'");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("actors/delete", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestCreateProcedure()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "create procedure actors as select * from dudes");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("procedure/create", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_StoredProcedureParsed()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.StoredProcedure, "dbo.MySchema.scalar_getMeSomeData");

            Assert.AreEqual("dbo.myschema.scalar_getmesomedata", parsedDatabaseStatement.Model);
            Assert.AreEqual("ExecuteProcedure", parsedDatabaseStatement.Operation);
        }
        public void SqlParserTest_TestInsertWithValues()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "insert   into test(id, name) values(6, 'Bubba')");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("test/insert", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestInsertWithSelect()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "INSERT into   cars  select * from man");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("cars/insert", parsedDatabaseStatement.ToString());
        }
示例#15
0
        public void SqlParsingTest(string inputSql, string expectedOperation, string expectedTable)
        {
            var parsed = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, inputSql);

            Assert.AreEqual(expectedOperation.ToLower(), parsed.Operation, string.Format("Expected operation {0} but was {1}", expectedOperation, parsed.Operation));
            Assert.AreEqual(expectedTable?.ToLower(), parsed.Model, string.Format("Expected table {0} but was {1}", expectedTable, parsed.Model));
        }
        public void Example_DatabaseStatementParser()
        {
            DatabaseStatementParser dbParser = null;

            var cachedThroughput = ThroughputExerciser.Create()
                                   .UsingThreads(10)
                                   .ForDuration(1000) // 1 second
                                   .DoThisToSetup(() => { dbParser = new DatabaseStatementParser(Mock.Create <ICacheStatsReporter>()); })
                                   .DoThisUnitOfWork((threadId, uowIdLocal, uowIdGlobal) =>
            {
                var stmt = dbParser.ParseDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, $"SELECT * FROM dbo.User WHERE UserID = {uowIdLocal}");
            })
                                   .ExecAll();

            var notCachedThroughput = ThroughputExerciser.Create()
                                      .UsingThreads(10)
                                      .ForDuration(1000) // 1 second
                                      .DoThisToSetup(() => { dbParser = new DatabaseStatementParser(Mock.Create <ICacheStatsReporter>()); })
                                      .DoThisUnitOfWork((threadId, uowIdLocal, uowIdGlobal) =>
            {
                var stmt = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, $"SELECT * FROM dbo.User WHERE UserID = {uowIdLocal}");
            })
                                      .ExecAll();

            //Caching makes things better
            Assert.Greater(cachedThroughput.CountUnitsOfWorkPerformed, notCachedThroughput.CountUnitsOfWorkPerformed);

            //Chaching makes things 50% better
            //Assert.Greater(cachedThroughput.CountUnitsOfWorkPerformed, notCachedThroughput.CountUnitsOfWorkPerformed * 1.5);
        }
        public void SqlParserTest_verify_match_on_select_with_beginning_comment_and_set()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "/* test */ set nocount on; select * from test");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("test/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestSet()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "SET character_set_results=NULL");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("character_set_results/set", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_verify_match_on_select_with_set_and_subselect()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "set nocount on;select * from test where this in (select * from testing)");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("test/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestSelectMultipleTables()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "SELECT * FROM man, dude where dude.id = man.id");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("man/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestUpdate()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "Update  dude set man = 'yeah' where id = 666");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("dude/update", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestSelectWithNestedParens()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "select * from (((dude)))");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("dude/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestSelectMultipleLine()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "Select *\nfrom MAN\nwhere id = 5");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("man/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestShowLongName()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "show wow_this_is_a_really_long_name_isnt_it_cmon_man_it_s_crazy_no_way_bruh");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("show", parsedDatabaseStatement.Operation);
            Assert.AreEqual("wow_this_is_a_really_long_name_isnt_it_cmon_man_it", parsedDatabaseStatement.Model);
        }
        public void SqlParserTest_SelectQueryParsed()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "SELECT * FROM MyAwesomeTable");

            Assert.AreEqual("myawesometable", parsedDatabaseStatement.Model);
            Assert.AreEqual("select", parsedDatabaseStatement.Operation);
            Assert.AreEqual("Datastore/statement/MSSQL/myawesometable/select", parsedDatabaseStatement.DatastoreStatementMetricName);
        }
        public void SqlParserTest_TestSelect_with_nocount()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "set nocount on; select * from dude");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("select", parsedDatabaseStatement.Operation);
            Assert.AreEqual("dude", parsedDatabaseStatement.Model);
        }
        public void SqlParserTest_TestCompoundSetStatement()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "set @FOO=17; set @BAR=18;");

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("foo", parsedDatabaseStatement.Model);
            Assert.AreEqual("set", parsedDatabaseStatement.Operation);
        }
        public void SqlParserTest_InvalidTextCantBeParsed_And_DoesNotResultInNullParsedDatabaseStatement()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, "Lorem ipsum dolar sit amet");

            Assert.IsNotNull(parsedDatabaseStatement); // It is important that GetParsedDatabaseStatement never returns null
            Assert.IsNull(parsedDatabaseStatement.Model);
            Assert.AreEqual("other", parsedDatabaseStatement.Operation);
            Assert.AreEqual(DatastoreVendor.MSSQL, parsedDatabaseStatement.DatastoreVendor);
        }
        public void SqlParserTest_TestCommentInMiddle()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, @"select *
				/* ignore the comment */
				from dude"                );

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("dude/select", parsedDatabaseStatement.ToString());
        }
        public void SqlParserTest_TestCommentInFront()
        {
            var parsedDatabaseStatement = SqlParser.GetParsedDatabaseStatement(DatastoreVendor.MSSQL, CommandType.Text, @"/* ignore the comment */
				select * from dude"                );

            Assert.IsNotNull(parsedDatabaseStatement);
            Assert.AreEqual("select", parsedDatabaseStatement.Operation);
            Assert.AreEqual("dude", parsedDatabaseStatement.Model);
        }