Exemple #1
0
        /// <summary>
        /// Create a new <see cref="CachingQueryRunner"/>.
        /// </summary>
        /// <param name="queryRunner">
        /// The <see cref="IQueryRunner"/> that will actually generate the SQL. This cannot be null.
        /// </param>
        /// <param name="userRuleSetProvider"></param>
        /// <param name="querySqlBuilder"></param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="queryRunner"/> cannot be null.
        /// </exception>
        public CachingQueryRunner([WithKey(Factory.NonCachedKey)] IQueryRunner queryRunner, IUserRuleSetProvider userRuleSetProvider, IQuerySqlBuilder querySqlBuilder)
        {
            if (queryRunner == null)
            {
                throw new ArgumentNullException("queryRunner");
            }
            if (userRuleSetProvider == null)
            {
                throw new ArgumentNullException("userRuleSetProvider");
            }

            QueryRunner         = queryRunner;
            QuerySqlBuilder     = querySqlBuilder;
            UserRuleSetProvider = userRuleSetProvider;

            // Create cache
            var fact = new CacheFactory
            {
                CacheName       = "Query Result",
                MaxCacheEntries = CacheFactory.DefaultMaximumCacheSize
            };

            Cache = fact.Create <CachingQueryRunnerKey, CachingQueryRunnerValue>( );

            _cacheInvalidator = new CachingQueryRunnerInvalidator(Cache);
        }
Exemple #2
0
        public void Test_Cached( )
        {
            CachingQueryRunner   cachingQueryRunner;
            Mock <IQueryRunner>  mockQueryRunner;
            IQueryRunner         queryRunner;
            StructuredQuery      structuredQuery;
            QuerySettings        settings;
            QueryBuild           queryBuild;
            QueryResult          result;
            IQuerySqlBuilder     queryBuilder        = MockQuerySqlBuilder( );
            IUserRuleSetProvider userRuleSetProvider = MockUserRuleSetProvider( );

            structuredQuery = new StructuredQuery( );
            settings        = new QuerySettings( );
            queryBuild      = new QueryBuild( );
            result          = new QueryResult(queryBuild);

            mockQueryRunner = new Mock <IQueryRunner>(MockBehavior.Strict);
            mockQueryRunner.Setup(x => x.ExecutePrebuiltQuery(structuredQuery, settings, It.IsNotNull <QueryBuild>()))
            .Returns(() =>
            {
                return(result);
            })
            .Verifiable( );
            queryRunner        = mockQueryRunner.Object;
            cachingQueryRunner = new CachingQueryRunner(queryRunner, userRuleSetProvider, queryBuilder);

            Assert.That(cachingQueryRunner.ExecuteQuery(structuredQuery, settings),
                        Is.SameAs(result));
            Assert.That(cachingQueryRunner.Cache,
                        Has.Count.EqualTo(1));

            mockQueryRunner.Verify(x => x.ExecutePrebuiltQuery(structuredQuery, settings, It.IsNotNull <QueryBuild>( )), Times.Exactly(1));
            mockQueryRunner.VerifyAll( );
        }
Exemple #3
0
        public void Test_Ctor_Null_UserRuleSetProvider( )
        {
            IQuerySqlBuilder queryBuilder = MockQuerySqlBuilder( );
            IQueryRunner     queryRunner  = new Mock <IQueryRunner>( ).Object;

            Assert.That(() => new CachingQueryRunner(queryRunner, null, queryBuilder),
                        Throws.TypeOf <ArgumentNullException>( ).And.Property("ParamName").EqualTo("userRuleSetProvider"));
        }
Exemple #4
0
        public void Test_EnsureResultsFromDifferentInstancesReturnCorrectRequestColumnData( )
        {
            CachingQueryRunner   cachingQueryRunner;
            Mock <IQueryRunner>  mockQueryRunner;
            IQueryRunner         queryRunner;
            QuerySettings        settings;
            QueryBuild           queryBuild;
            QueryResult          result;
            IQuerySqlBuilder     queryBuilder        = MockQuerySqlBuilder( );
            IUserRuleSetProvider userRuleSetProvider = MockUserRuleSetProvider( );

            StructuredQuery sq1 = new StructuredQuery {
                RootEntity = new ResourceEntity("test:person")
            };

            sq1.SelectColumns.Add(new SelectColumn {
                Expression = new ResourceExpression(sq1.RootEntity, "core:name")
            });

            StructuredQuery sq2 = new StructuredQuery {
                RootEntity = new ResourceEntity("test:person")
            };

            sq2.SelectColumns.Add(new SelectColumn {
                Expression = new ResourceExpression(sq2.RootEntity, "core:name")
            });

            Assert.That(sq1.SelectColumns [0].ColumnId, Is.Not.EqualTo(sq2.SelectColumns [0].ColumnId));

            settings   = new QuerySettings( );
            queryBuild = new QueryBuild( );
            result     = new QueryResult(queryBuild);
            result.Columns.Add(new ResultColumn {
                RequestColumn = sq1.SelectColumns [0]
            });

            mockQueryRunner = new Mock <IQueryRunner>(MockBehavior.Strict);
            mockQueryRunner.Setup(x => x.ExecutePrebuiltQuery(sq1, settings, It.IsNotNull <QueryBuild>( )))
            .Returns(() => result)
            .Verifiable( );
            queryRunner        = mockQueryRunner.Object;
            cachingQueryRunner = new CachingQueryRunner(queryRunner, userRuleSetProvider, queryBuilder);

            QueryResult result1 = cachingQueryRunner.ExecuteQuery(sq1, settings);

            Assert.That(result1.Columns [0].RequestColumn, Is.EqualTo(sq1.SelectColumns [0]));

            QueryResult result2 = cachingQueryRunner.ExecuteQuery(sq2, settings);

            Assert.That(result2.Columns [0].RequestColumn, Is.EqualTo(sq2.SelectColumns [0]));

            mockQueryRunner.Verify(x => x.ExecutePrebuiltQuery(sq1, settings, It.IsNotNull <QueryBuild>( )), Times.Exactly(1));
            mockQueryRunner.VerifyAll( );
        }
Exemple #5
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="querySqlBuilder">Query builder to be used when converting structured queries to SQL.</param>
        /// <param name="databaseProvider"></param>
        public QueryRunner(IQuerySqlBuilder querySqlBuilder, IDatabaseProvider databaseProvider)
        {
            if (querySqlBuilder == null)
            {
                throw new ArgumentNullException(nameof(querySqlBuilder));
            }
            if (databaseProvider == null)
            {
                throw new ArgumentNullException(nameof(databaseProvider));
            }

            _querySqlBuilder = querySqlBuilder;
            DatabaseProvider = databaseProvider;
        }
Exemple #6
0
        public void TestSetup( )
        {
            CachingQueryRunner   cachingQueryRunner;
            Mock <IQueryRunner>  mockQueryRunner;
            IQueryRunner         queryRunner;
            IQuerySqlBuilder     queryBuilder        = MockQuerySqlBuilder( );
            IUserRuleSetProvider userRuleSetProvider = MockUserRuleSetProvider( );

            mockQueryRunner = new Mock <IQueryRunner>(MockBehavior.Strict);
            queryRunner     = mockQueryRunner.Object;

            cachingQueryRunner = new CachingQueryRunner(queryRunner, userRuleSetProvider, queryBuilder);

            cachingQueryRunner.Clear( );
        }
Exemple #7
0
        public void Test_EnsureDifferentInstancesCanCacheMatch( )
        {
            CachingQueryRunner   cachingQueryRunner;
            Mock <IQueryRunner>  mockQueryRunner;
            IQueryRunner         queryRunner;
            QuerySettings        settings;
            QueryBuild           queryBuild;
            QueryResult          result;
            IQuerySqlBuilder     queryBuilder        = MockQuerySqlBuilder( );
            IUserRuleSetProvider userRuleSetProvider = MockUserRuleSetProvider( );

            StructuredQuery sq1 = ReportHelpers.BuildFilterQuery("Name='test1'", new EntityRef("test:person"), true);

            sq1.SelectColumns.Add(new SelectColumn {
                Expression = new ResourceExpression(sq1.RootEntity, "core:name")
            });

            StructuredQuery sq2 = ReportHelpers.BuildFilterQuery("Name='test1'", new EntityRef("test:person"), true);

            sq2.SelectColumns.Add(new SelectColumn {
                Expression = new ResourceExpression(sq2.RootEntity, "core:name")
            });

            settings   = new QuerySettings( );
            queryBuild = new QueryBuild( );
            result     = new QueryResult(queryBuild);

            mockQueryRunner = new Mock <IQueryRunner>(MockBehavior.Strict);
            mockQueryRunner.Setup(x => x.ExecutePrebuiltQuery(sq1, settings, It.IsNotNull <QueryBuild>( )))
            .Returns(() => result)
            .Verifiable( );
            queryRunner        = mockQueryRunner.Object;
            cachingQueryRunner = new CachingQueryRunner(queryRunner, userRuleSetProvider, queryBuilder);

            cachingQueryRunner.ExecuteQuery(sq1, settings);
            cachingQueryRunner.ExecuteQuery(sq2, settings);

            mockQueryRunner.Verify(x => x.ExecutePrebuiltQuery(sq1, settings, It.IsNotNull <QueryBuild>( )), Times.Exactly(1));
            mockQueryRunner.VerifyAll( );
        }
Exemple #8
0
        public void Test_Ctor( )
        {
            CachingQueryRunner   cachingQueryRunner;
            Mock <IQueryRunner>  mockQueryRunner;
            IQueryRunner         queryRunner;
            IQuerySqlBuilder     queryBuilder        = MockQuerySqlBuilder( );
            IUserRuleSetProvider userRuleSetProvider = MockUserRuleSetProvider( );

            mockQueryRunner = new Mock <IQueryRunner>(MockBehavior.Strict);
            queryRunner     = mockQueryRunner.Object;

            cachingQueryRunner = new CachingQueryRunner(queryRunner, userRuleSetProvider, queryBuilder);
            Assert.That(cachingQueryRunner,
                        Has.Property("QueryRunner").SameAs(queryRunner));
            Assert.That(cachingQueryRunner,
                        Has.Property("UserRuleSetProvider").SameAs(userRuleSetProvider));
            Assert.That(cachingQueryRunner,
                        Has.Property("Cache").Not.Null
                        .And.Property("Cache").Count.EqualTo(0));
            Assert.That(cachingQueryRunner.CacheInvalidator, Is.Not.Null);

            mockQueryRunner.VerifyAll( );
        }
Exemple #9
0
        /// <summary>
        /// Create a new <see cref="CachingQuerySqlBuilder"/>.
        /// </summary>
        /// <param name="querySqlBuilder">
        /// The <see cref="IQuerySqlBuilder"/> that will actually generate the SQL. This cannot be null.
        /// </param>
        /// <param name="userRuleSetProvider"></param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="querySqlBuilder"/> cannot be null.
        /// </exception>
        public CachingQuerySqlBuilder([WithKey(Factory.NonCachedKey)] IQuerySqlBuilder querySqlBuilder, IUserRuleSetProvider userRuleSetProvider)
        {
            if (querySqlBuilder == null)
            {
                throw new ArgumentNullException("querySqlBuilder");
            }
            if (userRuleSetProvider == null)
            {
                throw new ArgumentNullException("userRuleSetProvider");
            }

            QuerySqlBuilder     = querySqlBuilder;
            UserRuleSetProvider = userRuleSetProvider;

            var fact = new CacheFactory
            {
                CacheName      = "Query SQL",
                BlockIfPending = true
            };

            Cache = fact.Create <CachingQuerySqlBuilderKey, CachingQuerySqlBuilderValue>("Query SQL");

            _cacheInvalidator = new CachingQuerySqlBuilderInvalidator(Cache);
        }
Exemple #10
0
        public void CachingQuerySqlBuilder_Instance( )
        {
            IQuerySqlBuilder instance = Factory.QuerySqlBuilder;

            Assert.That(instance, Is.Not.Null);
        }