private async Task GetAggregationQueryInfoAsync(IQueryParser parser, string query, bool isValid, int maxNodeDepth, HashSet <string> fields, Dictionary <string, ICollection <string> > operations) { IQueryNode queryNode; var context = new ElasticQueryVisitorContext { QueryType = QueryType.Aggregation }; try { queryNode = await parser.ParseAsync(query, context); } catch (Exception ex) { _logger.LogError(ex, "Error parsing query: {Message}", ex.Message); if (isValid) { throw; } return; } var info = await ValidationVisitor.RunAsync(queryNode, context); Assert.Equal(QueryType.Aggregation, info.QueryType); Assert.Equal(isValid, info.IsValid); Assert.Equal(maxNodeDepth, info.MaxNodeDepth); Assert.Equal(fields, info.ReferencedFields); Assert.Equal(operations, info.Operations.ToDictionary(pair => pair.Key, pair => pair.Value)); }
private async Task GetQueryInfoAsync(IQueryParser parser) { const string query = "stuff hey:now nested:(stuff:33)"; var result = await parser.ParseAsync(query); var info = await ValidationVisitor.RunAsync(result); Assert.Equal(QueryType.Query, info.QueryType); Assert.Equal(2, info.MaxNodeDepth); Assert.Equal(new HashSet <string> { "", "hey", "nested", "stuff" }, info.ReferencedFields); }
public async Task <QueryProcessResult> ValidateAggregationsAsync(IQueryNode query) { var info = await ValidationVisitor.RunAsync(query).AnyContext(); return(ApplyAggregationRules(info)); }