Beispiel #1
0
 public void Initialize(HttpContext httpContext, ILogger logger, ModelStateDictionary modelState)
 {
     if (httpContext.Request.Query.TryGetValue("$orderby", out var values))
     {
         if (values.Count == 1)
         {
             var binder = httpContext.RequestServices.GetRequiredService <IOpenApiTypeHandler>();
             RawValue = values[0];
             var parser = new OrderByClauseParser(binder, values[0], Clauses);
             try
             {
                 parser.Parse(Parameter);
             }
             catch (Exception e)
             {
                 logger.LogError(e, "Failed to parse orderby clause");
                 modelState.TryAddModelException("$orderby", e);
             }
         }
         else
         {
             modelState.TryAddModelError("$orderby",
                                         "Multiple orderby clauses found, onle one can be specified.");
         }
     }
 }
        public void Initialize(HttpContext httpContext, ILogger logger, ModelStateDictionary modelState)
        {
            if (httpContext.Request.Query.TryGetValues(QueryOptionKeys.OrderbyKeys, out var values))
            {
                using var enumerator = values.GetEnumerator();
                if (enumerator.MoveNext())
                {
                    var binder = httpContext.RequestServices.GetRequiredService <IOpenApiTypeHandler>();
                    RawValue = enumerator.Current;
                    var parser = new OrderByClauseParser(binder, enumerator.Current, Clauses);
                    try
                    {
                        parser.Parse(Parameter);
                    }
                    catch (Exception e)
                    {
                        logger.LogError(e, "Failed to parse orderby clause");
                        modelState.TryAddModelException(QueryOptionKeys.OrderbyKeys.First(), e);
                    }

                    if (enumerator.MoveNext())
                    {
                        modelState.TryAddModelError(QueryOptionKeys.OrderbyKeys.First(),
                                                    "Multiple orderby clauses found, only one can be specified.");
                    }
                }
            }
        }
Beispiel #3
0
 /// <summary>
 /// Selects a subset of properties
 /// </summary>
 /// <remarks>May require that Apply Expand is called first.</remarks>
 private IQueryable <TDto> ApplyOrderBy(IQueryable <TDto> query)
 {
     if (!string.IsNullOrEmpty(Parameters.OrderBy))
     {
         query = OrderByClauseParser <TDto> .OrderBy(query, OrderByPath, DtoExpression);
     }
     return(query);
 }
Beispiel #4
0
        internal void Initialize(QueryExpressionParser expressionParser, ModelStateDictionary modelState)
        {
            var parser = new OrderByClauseParser(expressionParser, Clauses);

            try
            {
                parser.Parse(Parameter);
            }
            catch (Exception e)
            {
                modelState.TryAddModelException("$orderby", e);
            }
        }
Beispiel #5
0
        public QueryParser(Parameters parameters, GraphSchema graph, IClassCache cache)
        {
            IsParsed = false;

            ClassProperties = graph.Vertices
                              .Select(v => v.Value.Properties)
                              .SelectMany(x => x).Select(x => x.Name)
                              .Distinct();

            OrderBy = new OrderByClauseParser <TRootVertex>(x => _GetTokens(x), parameters.OrderBy, graph, TermHelper.OrderByTerms);
            Select  = new SelectClauseParser <TRootVertex>(x => _GetTokens(x), parameters.Select, graph, TermHelper.SelectTerms);
            Filter  = new FilterClauseParser <TRootVertex>(x => _GetTokens(x), parameters.Filter, TermHelper.FilterTerms);
            Expand  = new ExpandClauseParser <TRootVertex>(x => _GetTokens(x), parameters.Expand, graph, Select, Filter, TermHelper.ExpandTerms);

            _Graph = graph;
            Cache  = cache;

            Parse();
        }