public FacetContent Load([FromBody] FacetsConfig2 facetsConfig) { var reconstitutedFacetConfig = ReconstituteConfigService.Reconstitute(facetsConfig); var facetContent = LoadService.Load(reconstitutedFacetConfig); return(facetContent); }
public virtual FacetContent Load(FacetsConfig2 facetsConfig) { facetsConfig = BogusPickService.Update(facetsConfig); var facetContent = ContentServiceLocator.Locate(facetsConfig.TargetFacet.FacetTypeId).Load(facetsConfig); return(facetContent); }
public void Reconstitute_UsingLowerCaseJsonFacetsConfig_ReturnsExpectedResult() { // Arrange var service = this.CreateService(); const string json = @" { ""requestId"": 1, ""requestType"": ""populate"", ""targetCode"": ""sites"", ""triggerCode"": ""sites"", ""facetConfigs"": [ { ""facetCode"": ""sites"", ""position"": 1, ""picks"": [], ""textFilter"": """" } ] } "; // Act FacetsConfig2 facetsConfig = service.Reconstitute(json); // Assert Assert.NotNull(facetsConfig); }
/// <summary> /// This the core of the query builder that builds SQL query components for a given target facet, and the /// chain of facet configurations preceeding the target facet. /// Rules: /// - Collect/compile users pick constraint for all involved facets current facet /// - All picks *predeeding* target facet should be included /// - If target is a "discrete" facet then the facet's own constraints should NOT be included. /// - If target facet is "range" then the facet's own constraints should be included, /// but the bound should be expanded to the facet's entire range. /// - Get all selection preceding the target facet. /// - Make where-clauses depending on type of facets (range or discrete) /// </summary> /// <param name="facetsConfig">The (complete) facet configuration, including user picks</param> /// <param name="targetFacet">Target facet that the query populates/computes/counts etc</param> /// <param name="extraTables">,Any extra tables that should be part of the query (path to these tables are included in final query)</param> /// <param name="facetCodes">FIXME: "The list of the facets in the view-state"</param> /// <returns> /// QuerySetup: /// TargetConfig Reference to targets facet's configuration (only added for convenience) /// Facet Reference to target facet (only added for convenience) /// Routes Compiled routes (added for easier testing purposes) /// Joins Join clauses to be used in final SQL /// Criterias Criteria clauses to be included in final SQL /// </returns> public QuerySetup Build(FacetsConfig2 facetsConfig, Facet targetFacet, List <string> extraTables, List <string> facetCodes) { // Noteworthy: TargetFacet differs from facetsConfig.TargetFacet when a result-facet is applied var involvedConfigs = facetsConfig.GetFacetConfigsAffectedBy(targetFacet, facetCodes); if (facetsConfig.HasDomainCode()) { involvedConfigs.Insert(0, facetsConfig.CreateDomainConfig()); } var pickCriterias = PicksCompiler.Compile(targetFacet, involvedConfigs); var involvedFacets = involvedConfigs.Facets().AddUnion(targetFacet).ToList(); var involvedTables = involvedFacets.TableNames().NullableUnion(extraTables).Distinct().ToList(); var involvedJoins = JoinCompiler.Compile(facetsConfig, targetFacet, involvedTables); var facetCriterias = involvedFacets.Criterias(); QuerySetup querySetup = new QuerySetup() { TargetConfig = facetsConfig?.TargetConfig, Facet = targetFacet, Joins = involvedJoins, Criterias = pickCriterias.Concat(facetCriterias).ToList() }; return(querySetup); }
public virtual List <string> Compile(FacetsConfig2 facetsConfig, Facet targetFacet, List <string> involvedTables) { var routes = FacetsGraph.Find(targetFacet.TargetTable.ResolvedAliasOrTableOrUdfName, involvedTables, true); var joins = routes.Edges().Select( edge => JoinCompiler.Compile(edge, GetFacetTableByNameOrAlias(facetsConfig, edge), true) ).ToList(); return(joins); }
public dynamic GetExtraPayload(FacetsConfig2 facetsConfig, string resultFacetCode) { var filtered = GetCategoryCounts(facetsConfig, resultFacetCode)?.CategoryCounts ?? new Dictionary <string, CategoryCountItem>(); var unfiltered = facetsConfig.HasPicks() ? GetCategoryCounts(facetsConfig.ClearPicks(), resultFacetCode)?.CategoryCounts : filtered; return(new { FilteredCategoryCounts = filtered, FullCategoryCounts = unfiltered }); }
public void IsSatisfiedBy_StateUnderTest_ExpectedBehavior(string uri) { // Arrange var facetsConfigSpecification = new FacetsConfigSpecification(); FacetsConfig2 facetsConfig = FakeFacetsConfig(uri); // Act var result = facetsConfigSpecification.IsSatisfiedBy(facetsConfig); // Assert Assert.True(result); }
public void IsSatisfiedBy_WhenFaultyConfig_RaisesXception(string uri, string how) { // Arrange var facetsConfigSpecification = new FacetsConfigSpecification(); FacetsConfig2 facetsConfig = FakeFacetsConfig(uri); facetsConfig = MkFaulty(facetsConfig, how); // Act Assert.Throws <QuerySeadException>( () => facetsConfigSpecification.IsSatisfiedBy(facetsConfig) ); }
public void Reconstitute_SingleFacetsConfigWithoutPicks_IsEqual() { // Arrange var reconstituter = new FacetConfigReconstituteService(Registry); FacetsConfig2 facetsConfig = FacetsConfigFactory.Create("sites:sites"); string json1 = JsonConvert.SerializeObject(facetsConfig); // Act FacetsConfig2 facetsConfig2 = reconstituter.Reconstitute(json1); string json2 = JsonConvert.SerializeObject(facetsConfig2); // Assert Assert.Equal(json1, json2); }
public QuerySetup Build(FacetsConfig2 facetsConfig, Facet resultFacet, IEnumerable <ResultSpecificationField> resultFields) { if (!resultFields?.Any() ?? false) { throw new System.ArgumentNullException($"ResultConfig is null or is missing specification keys!"); } /* All tables referenced by the result fields must be included in query */ return(Build( facetsConfig: facetsConfig, targetFacet: resultFacet, extraTables: resultFields.GetResultFieldTableNames().ToList(), facetCodes: null )); }
public override FacetContent Load(FacetsConfig2 facetsConfig) { var cacheId = facetsConfig.GetCacheId(); var configCacheId = "config_{cacheId}"; var contentCacheId = "content_{cacheId}"; if (Cache.Exists(contentCacheId)) { return(Cache.Get <FacetContent>(contentCacheId)); } var facetContent = base.Load(facetsConfig); Cache.Set <FacetsConfig2>(configCacheId, facetsConfig); Cache.Set <FacetContent>(contentCacheId, facetContent); return(facetContent); }
public QuerySetup FakeResultQuerySetup(FacetsConfig2 facetsConfig, string resultFacetCode, string specificationKey) { var resultFields = Registry.Results.GetFieldsByKey(specificationKey); var fakeJoins = FakeJoinsClause(5); var joinCompiler = MockJoinsClauseCompiler(fakeJoins); var fakePickCriteria = new List <string> { "ID IN (1,2,3)" }; var mockPicksCompiler = MockPicksFilterCompiler(fakePickCriteria); var facetsGraph = ScaffoldUtility.DefaultFacetsGraph(Registry); var resultFacet = Registry.Facets.GetByCode(resultFacetCode); // FIXME: Should be mocked var compiler = new QuerySetupBuilder(facetsGraph, mockPicksCompiler.Object, joinCompiler.Object); var querySetup = compiler.Build(facetsConfig, resultFacet, resultFields); return(querySetup); }
public override ResultContentSet Load(FacetsConfig2 facetsConfig, ResultConfig resultConfig) { var configCacheId = "config_" + facetsConfig.GetCacheId(); var resultCacheId = "result_" + resultConfig.GetCacheId(facetsConfig); var viewType = Context.Results.GetViewType(resultConfig.ViewTypeId); var result = viewType.IsCachable ? Cache.Get <ResultContentSet>(resultCacheId) : null; if (result == null) { result = base.Load(facetsConfig, resultConfig); Cache.Set <FacetsConfig2>(configCacheId, facetsConfig); if (Context.Results.GetViewType(resultConfig.ViewTypeId).IsCachable) { Cache.Set <ResultContentSet>(resultCacheId, result); } } return(result); }
public static FacetsConfig2 MkFaulty(FacetsConfig2 facetsConfig, string how) { if (how.Equals("NO-CONFIGS")) { facetsConfig.FacetConfigs.Clear(); } if (how.Equals("NO-TARGET")) { facetsConfig.FacetConfigs.Remove(facetsConfig.TargetConfig); } if (how.Equals("NO-REQUEST-ID")) { facetsConfig.RequestId = ""; } if (how.Equals("NO-TARGET-FACET")) { facetsConfig.TargetFacet = null; } return(facetsConfig); }
public virtual ResultContentSet Load(FacetsConfig2 facetsConfig, ResultConfig resultConfig) { var queryFields = resultConfig.GetSortedFields(); var querySetup = QuerySetupBuilder .Build(facetsConfig, resultConfig.Facet, queryFields); // var sqlQuery = resultConfig.ViewType.GetSqlCompiler() var sqlQuery = SqlCompilerLocator .Locate(resultConfig.ViewTypeId) .Compile(querySetup, resultConfig.Facet, queryFields); return(new TabularResultContentSet( resultConfig: resultConfig, resultFields: queryFields.GetResultValueFields().ToList(), reader: QueryProxy.Query(sqlQuery) /* This is (for now) only call to generic QueryProxy.Query */ ) { Payload = GetPayload(facetsConfig, resultConfig), Query = sqlQuery }); }
public QuerySetup FakeCountOrContentQuerySetup(FacetsConfig2 facetsConfig) { List <string> fakeJoins = FakeJoinsClause(5); var joinsCompiler = MockJoinsClauseCompiler(fakeJoins); var fakePickCriteria = new List <string> { "ID IN (1,2,3)" }; var mockPicksCompiler = MockPicksFilterCompiler(fakePickCriteria); var facetsGraph = ScaffoldUtility.DefaultFacetsGraph(Registry); // FIXME: Should be mocked var compiler = new QuerySetupBuilder(facetsGraph, mockPicksCompiler.Object, joinsCompiler.Object); var querySetup = compiler.Build( facetsConfig, facetsConfig.TargetFacet, new List <string>(), null ); return(querySetup); }
private FacetTable GetFacetTableByNameOrAlias(FacetsConfig2 facetsConfig, TableRelation edge) => facetsConfig.GetFacetTable(edge.TargetName) ?? FacetsGraph.GetAliasedFacetTable(edge.TargetName);
public string GetCacheId(FacetsConfig2 facetsConfig) { return($"{ViewTypeId}_{facetsConfig.GetPicksCacheId()}_{String.Join("", SpecificationKeys)}_{facetsConfig.DomainCode}"); }
private CategoryCountService.CategoryCountData GetCategoryCounts(FacetsConfig2 facetsConfig, string resultFacetCode) { return(CategoryCountService.Load(resultFacetCode, facetsConfig, null)); }
public dynamic GetExtraPayload(FacetsConfig2 facetsConfig, string resultFacetCode) { return(null); }
private dynamic GetPayload(FacetsConfig2 facetsConfig, ResultConfig resultConfig) => PayloadServiceLocator.Locate(resultConfig.ViewTypeId) .GetExtraPayload(facetsConfig, resultConfig.Facet.FacetCode);
public virtual ResultContentSet Load(FacetsConfig2 facetsConfig, ResultConfig resultConfig) { BogusPickService.Update(facetsConfig); return(ResultService.Load(facetsConfig, resultConfig)); }