Exemple #1
0
        /// <summary>
        ///     visit a comparison expression
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Expression <Func <T, bool> > VisitComparison(RSqlQueryParser.ComparisonContext context)
        {
            var comparator = context.comparator().GetText().ToLowerInvariant();

            switch (comparator)
            {
            case "=is-null=":
            case "=nil=":
                return(RSqlQueryExpressionHelper.GetIsNullExpression <T>(_parameter, context, _jsonNamingPolicy));

            case "==":
            case "=eq=":
                return(RSqlQueryExpressionHelper.GetEqExpression <T>(_parameter, context, _jsonNamingPolicy));

            case "!=":
            case "=neq=":
                return(RSqlQueryExpressionHelper.GetNeqExpression <T>(_parameter, context, _jsonNamingPolicy));

            case "<":
            case "=lt=":
                return(RSqlQueryExpressionHelper.GetLtExpression <T>(_parameter, context, _jsonNamingPolicy));

            case "<=":
            case "=le=":
                return(RSqlQueryExpressionHelper.GetLeExpression <T>(_parameter, context, _jsonNamingPolicy));

            case ">":
            case "=gt=":
                return(RSqlQueryExpressionHelper.GetGtExpression <T>(_parameter, context, _jsonNamingPolicy));

            case ">=":
            case "=ge=":
                return(RSqlQueryExpressionHelper.GetGeExpression <T>(_parameter, context, _jsonNamingPolicy));

            case "=in=":
                return(RSqlQueryExpressionHelper.GetInExpression <T>(_parameter, context, _jsonNamingPolicy));

            case "=out=":
                return(RSqlQueryExpressionHelper.GetOutExpression <T>(_parameter, context, _jsonNamingPolicy));

            default:
                throw new ComparisonUnknownComparatorException(context);
            }
        }
Exemple #2
0
        /// <summary>
        ///     build specification from RSql query
        /// </summary>
        /// <param name="queryCollection"></param>
        /// <returns></returns>
        public IRSqlQuery <T> Build(IQueryCollection queryCollection)
        {
            if (queryCollection == null)
            {
                throw new ArgumentNullException(nameof(queryCollection));
            }
            var queryField =
                _options.Value.JsonSerializerOptions.PropertyNamingPolicy.ConvertName(_settings.QueryField);

            if (
                !queryCollection.TryGetValue(queryField, out var query) ||
                string.IsNullOrWhiteSpace(query.FirstOrDefault()))
            {
                return(new RSqlQuery <T>(RSqlQueryExpressionHelper.True <T>()));
            }

            var result = CreateAndAddCacheQuery(query.FirstOrDefault());

            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug($"RSqlQuery<{typeof(T).FullName}> query: ?{queryField}={query.FirstOrDefault()} -> {result.Value()}");
            }
            return(result);
        }
Exemple #3
0
 /// <summary>
 ///     visit a and expression
 /// </summary>
 /// <param name="context"></param>
 /// <returns></returns>
 public override Expression <Func <T, bool> > VisitAnd(RSqlQueryParser.AndContext context)
 {
     return(RSqlQueryExpressionHelper.GetAndExpression(this, context));
 }