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); }
/// <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); }
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 }); }
protected override string Compile(Facet facet, FacetsConfig2 facetsConfig, string intervalQuery) => RangeCountSqlCompiler.Compile( QuerySetupBuilder.Build( facetsConfig, facet, CountTables, facetsConfig.GetFacetCodes() ), facet, intervalQuery, Config.CountColumn );
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); }
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 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); }
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 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); }