public SelectClause Parse(ParameterExpression it) { var rootClause = new SelectClause { // will have sub-clauses SelectClauses = new Dictionary <PropertyInfo, SelectClause>() }; _parser.PushThis(it); SelectItemList(rootClause); _parser.PopThis(); return(rootClause); }
public void Initialize(HttpContext httpContext, ILogger <OpenApiQueryOptions> logger, ModelStateDictionary modelStateDictionary) { if (httpContext.Request.Query.TryGetValue("$filter", out var values)) { if (values.Count == 1) { RawValue = values[0]; var binder = httpContext.RequestServices.GetRequiredService <IOpenApiTypeHandler>(); var parser = new QueryExpressionParser(values[0], binder); try { parser.PushThis(Parameter); FilterClause = parser.CommonExpr(); parser.PopThis(); } catch (Exception e) { logger.LogError(e, "Failed to parse filter"); modelStateDictionary.TryAddModelException("$filter", e); } } else { modelStateDictionary.TryAddModelError("$filter", "Only one $filter can be specified per request"); } } }
public void Initialize( HttpContext httpContext, ILogger <OpenApiQueryOptions> logger, ModelStateDictionary modelState) { if (httpContext.Request.Query.TryGetValues(QueryOptionKeys.FilterKeys, out var values)) { using var enumerator = values.GetEnumerator(); if (enumerator.MoveNext()) { RawValue = enumerator.Current; var binder = httpContext.RequestServices.GetRequiredService <IOpenApiTypeHandler>(); var parser = new QueryExpressionParser(enumerator.Current, binder); try { parser.PushThis(Parameter); FilterClause = parser.CommonExpr(); parser.PopThis(); } catch (Exception e) { logger.LogError(e, "Failed to parse filter"); modelState.TryAddModelException(QueryOptionKeys.FilterKeys.First(), e); } if (enumerator.MoveNext()) { modelState.TryAddModelError(QueryOptionKeys.FilterKeys.First(), "Multiple filter clauses found, only one can be specified."); } } } }
private void TestParse_DateTimeOffset(string str, DateTimeOffset expected) { var parser = new QueryExpressionParser(str, new DefaultOpenApiTypeHandler()); parser.PushThis(Expression.Constant(this)); var expr = parser.CommonExpr(); parser.PopThis(); Assert.IsInstanceOfType(((ConstantExpression)expr).Value, typeof(DateTimeOffset)); Assert.AreEqual(expected, (DateTimeOffset)((ConstantExpression)expr).Value); }
internal void Initialize(QueryExpressionParser parser, ModelStateDictionary modelStateDictionary) { try { parser.PushThis(Parameter); FilterClause = parser.CommonExpr(); parser.PopThis(); } catch (Exception e) { modelStateDictionary.TryAddModelException("$filter", e); } }
public void Parse(ParameterExpression it) { _parser.PushThis(it); ExpandItemList(); _parser.PopThis(); }