コード例 #1
0
        public void Build_WithVariousDomainConfigs_Success(string uri, int expectedConfigCount)
        {
            // Arrange
            var facetsConfig = FakeFacetsConfig(uri);

            Assert.NotEmpty(facetsConfig.DomainCode);

            var pickCriterias = new List <string> {
                "Q1 = Q2", "Q3 = Q4"
            };
            var mockPicksCompiler = MockPicksFilterCompiler(pickCriterias ?? new List <string>());
            var fakeJoins         = FakeJoinsClause(5);
            var mockJoinCompiler  = MockJoinsClauseCompiler(fakeJoins);
            var mockRoutes        = new List <GraphRoute> {
                FakeRoute2("A", "B", "C", "D"),
                FakeRoute2("E", "K")
            };
            var mockFacetsGraph = MockFacetsGraph(mockRoutes);
            var extraTables     = new List <string>();

            // Act
            var builder = new QuerySetupBuilder(mockFacetsGraph.Object, mockPicksCompiler.Object, mockJoinCompiler.Object);

            QuerySetup querySetup = builder.Build(facetsConfig, facetsConfig.TargetFacet, extraTables, null);

            //DumpUriObject(uri, querySetup);

            // Assert
            Assert.Same(facetsConfig.TargetFacet, querySetup.Facet);
            Assert.Equal(expectedConfigCount, facetsConfig.FacetConfigs.Count);
            //Assert.Equal(mockRoutes.Aggregate(0, (i, z) => i + z.Items.Count), querySetup.Joins.Count);
        }
コード例 #2
0
        /// <summary>
        /// Removes invalid selections e.g. hidden selections still being sent from the client.
        /// The client keep them since they can be visible when the filters changes.
        /// This is only applicable for discrete facets (range facet selection are always visible)
        /// </summary>
        /// <param name="facetsConfig"></param>
        /// <returns></returns>
        public FacetsConfig2 Update(FacetsConfig2 facetsConfig)
        {
            foreach (string facetCode in facetsConfig.GetFacetCodes())
            {
                var config = facetsConfig.GetConfig(facetCode);

                if (config.Facet.FacetTypeId != EFacetType.Discrete || config.Picks.Count == 0)
                {
                    continue;
                }

                if (!config.HasPicks())
                {
                    continue;
                }

                config.Picks = QueryProxy.QueryRows(
                    PicksCompiler.Compile(
                        QuerySetupBuilder.Build(facetsConfig, config.Facet, null, null),
                        config.GetIntegerPickValues()
                        ),
                    x => new FacetConfigPick(EPickType.discrete, x.GetString(0), x.GetString(1))
                    );
            }
            return(facetsConfig);
        }
コード例 #3
0
        protected override FacetContent.IntervalQueryInfo CompileIntervalQuery(FacetsConfig2 facetsConfig, string facetCode, int count = 0)
        {
            var querySetup = QuerySetupBuilder.Build(facetsConfig, facetsConfig.TargetFacet, null, null);
            var sql        = SqlCompiler.Compile(querySetup, facetsConfig.TargetFacet, facetsConfig.GetTargetTextFilter());

            return(new FacetContent.IntervalQueryInfo {
                Count = 1,
                Query = sql
            });
        }
コード例 #4
0
 protected override string Compile(Facet facet, FacetsConfig2 facetsConfig, string intervalQuery)
 => RangeCountSqlCompiler.Compile(
     QuerySetupBuilder.Build(
         facetsConfig,
         facet,
         CountTables,
         facetsConfig.GetFacetCodes()
         ),
     facet,
     intervalQuery,
     Config.CountColumn
     );
コード例 #5
0
        protected override string Compile(Facet facet, FacetsConfig2 facetsConfig, string payload)
        {
            // FIXME: Fix confusing args, when does facet differ from targetFacet?
            var aggregateFacet = Facets.Get(facet.AggregateFacetId);
            var targetFacet    = Facets.GetByCode(facetsConfig.TargetCode);
            var tableNames     = GetTables(facetsConfig, targetFacet, aggregateFacet);
            var facetCodes     = facetsConfig.GetFacetCodes();

            facetCodes.InsertAt(targetFacet.FacetCode, aggregateFacet.FacetCode);

            var querySetup = QuerySetupBuilder.Build(facetsConfig, aggregateFacet, tableNames, facetCodes);
            var sql        = CountSqlCompiler.Compile(querySetup, targetFacet, aggregateFacet, facet.AggregateType ?? "count");

            return(sql);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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
            });
        }
コード例 #9
0
        public void Build_WithConcretePickCompilerAndVariousConfigs_GivesExpecteCriteriadCount(string uri)
        {
            // Arrange
            var facetsConfig  = FakeFacetsConfig(uri);
            var pickCriterias = new List <string> {
                "Q1 = Q2", "Q3 = Q4"
            };
            var mockPicksCompiler = MockPicksFilterCompiler(pickCriterias ?? new List <string>());
            var fakeJoins         = FakeJoinsClause(5);
            var mockJoinCompiler  = MockJoinsClauseCompiler(fakeJoins);
            var mockRoutes        = new List <GraphRoute> {
                FakeRoute2("A", "B", "C", "D"),
                FakeRoute2("E", "K")
            };
            var mockFacetsGraph = MockFacetsGraph(mockRoutes);
            var extraTables     = new List <string>();

            // Act
            var builder = new QuerySetupBuilder(mockFacetsGraph.Object, mockPicksCompiler.Object, mockJoinCompiler.Object);

            QuerySetup querySetup = builder.Build(facetsConfig, facetsConfig.TargetFacet, extraTables, null);

            Output.WriteLine($"URI: {uri}");
            foreach (var criteria in querySetup.Criterias)
            {
                Output.WriteLine($" criteria: {criteria}");
            }

            //DumpUriObject(uri, querySetup);

            // Assert

            Assert.Same(facetsConfig.TargetConfig, querySetup.TargetConfig);
            Assert.Same(facetsConfig.TargetFacet, querySetup.Facet);
            // Assert.Equal(mockRoutes.Aggregate(0, (i,z) => i + z.Items.Count), querySetup.Joins.Count);
        }