public void TestQueryWithTop1AndCompositeKeyComparision()
        {
            const string sql = @"SELECT TOP (1)
                                    [Extent1].[MyProductId] AS [MyProductId],
                                    [Extent1].[Name] AS [Name],
                                    [Extent1].[Price] AS [Price],
                                    [Extent1].[CategoryId] AS [CategoryId],
                                    [Extent1].[UserId] AS [UserId]
                                    FROM [dbo].[Products] AS [Extent1]
                                    WHERE [Extent1].[MyProductId] = @p__linq__0 and
                                    [Extent1].[UserId] = 1";

            var visitor = new UseFirstLevelCacheVisitor
            {
                Keys = new HashSet <string>
                {
                    "MyProductId",
                    "UserId"
                }
            };

            RunTSqlFragmentVisitor.AnalyzeFragmentVisitorBase(sql, sql.ComputeHash(), visitor);

            Assert.IsTrue(visitor.IsSuspected);
        }
        public void RunAnalysisVisitor(CommandResult commandResult)
        {
            var command = PluginContext.ProfilerData.Commands
                          .FirstOrDefault(x => x.CommandId == commandResult.CommandId &&
                                          x.ApplicationIdentity.Equals(commandResult.ApplicationIdentity));

            if (command == null)
            {
                return;
            }

            RunAnalysisVisitorOnCommand(() =>
            {
                var visitor = new UseFirstLevelCacheVisitor
                {
                    Keys = getPrimaryKeys(commandResult)
                };
                var isUsingKeysInQuery = RunTSqlFragmentVisitor.AnalyzeFragmentVisitorBase(command.Sql, command.SqlHash, visitor);
                if (!isUsingKeysInQuery)
                {
                    return(false);
                }

                return(isUsingFirstOrDefault(command));
            }, command);
        }
        public void TestQueryWithTop1AndKeyComparisionWithoutAlias()
        {
            const string sql = @"SELECT TOP (1)
                                    [MyProductId],
                                    [Name],
                                    [Price],
                                    [CategoryId],
                                    [UserId]
                                    FROM [Products]
                                    WHERE [MyProductId] = @p__linq__0";

            var visitor = new UseFirstLevelCacheVisitor
            {
                Keys = new HashSet <string>
                {
                    "MyProductId"
                }
            };

            RunTSqlFragmentVisitor.AnalyzeFragmentVisitorBase(sql, sql.ComputeHash(), visitor);

            Assert.IsTrue(visitor.IsSuspected);
        }