/// <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); } }
/// <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); }
/// <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)); }