Exemple #1
0
        public FacetContent Load([FromBody] FacetsConfig2 facetsConfig)
        {
            var reconstitutedFacetConfig = ReconstituteConfigService.Reconstitute(facetsConfig);
            var facetContent             = LoadService.Load(reconstitutedFacetConfig);

            return(facetContent);
        }
Exemple #2
0
        public virtual FacetContent Load(FacetsConfig2 facetsConfig)
        {
            facetsConfig = BogusPickService.Update(facetsConfig);
            var facetContent = ContentServiceLocator.Locate(facetsConfig.TargetFacet.FacetTypeId).Load(facetsConfig);

            return(facetContent);
        }
Exemple #3
0
        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);
        }
Exemple #6
0
        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
            });
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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
                       ));
        }
Exemple #11
0
        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);
        }
Exemple #14
0
 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}");
 }
Exemple #19
0
 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));
 }