Exemple #1
0
        // private static methods
        private static AstFilter CreateRegexFilter(AstFilterField field, Modifiers modifiers, string pattern)
        {
            var combinedPattern = "^" + modifiers.LeadingPattern + pattern + modifiers.TrailingPattern + "$";

            if (combinedPattern.StartsWith("^.*"))
            {
                combinedPattern = combinedPattern.Substring(3);
            }
            if (combinedPattern.EndsWith(".*$"))
            {
                combinedPattern = combinedPattern.Substring(0, combinedPattern.Length - 3);
            }
            var options = CreateRegexOptions(modifiers);

            return(AstFilter.Regex(field, combinedPattern, options));
        }
Exemple #2
0
            public override AstNode VisitFilterField(AstFilterField node)
            {
                // "_elements.0.X" => { __agg0 : { $first : "$$ROOT" } } + "__agg0.X"
                if (node.Path.StartsWith("_elements.0."))
                {
                    var accumulatorExpression = AstExpression.AccumulatorExpression(AstAccumulatorOperator.First, AstExpression.Var("ROOT"));
                    var accumulatorFieldName  = _accumulators.AddAccumulatorExpression(accumulatorExpression);
                    var restOfPath            = node.Path.Substring("_elements.0.".Length);
                    var rewrittenPath         = $"{accumulatorFieldName}.{restOfPath}";
                    return(AstFilter.Field(rewrittenPath, node.Serializer));
                }

                if (node.Path == "_elements" || node.Path.StartsWith("_elements."))
                {
                    throw new UnableToRemoveReferenceToElementsException();
                }

                return(base.VisitFilterField(node));
            }