/// <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); }
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( ); }
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")); }
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( ); }
/// <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; }
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( ); }
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( ); }
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( ); }
/// <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); }
public void CachingQuerySqlBuilder_Instance( ) { IQuerySqlBuilder instance = Factory.QuerySqlBuilder; Assert.That(instance, Is.Not.Null); }