コード例 #1
0
        public override void Visit(TermRangeNode node, IQueryVisitorContext context)
        {
            var    validationInfo = context.GetValidationInfo();
            string field          = null;

            if (!String.IsNullOrEmpty(node.Field))
            {
                field = String.Equals(validationInfo.QueryType, QueryType.Query) ? node.GetFullName() : node.Field;
                if (!field.StartsWith("@"))
                {
                    validationInfo.ReferencedFields.Add(field);
                }
            }
            else
            {
                if (String.Equals(validationInfo.QueryType, QueryType.Aggregation))
                {
                    validationInfo.IsValid = false;
                }

                var nameParts = node.GetNameParts();
                if (nameParts.Length == 0)
                {
                    validationInfo.ReferencedFields.Add("_all");
                }
            }

            AddOperation(validationInfo, node.GetOperationType(), field);
        }
コード例 #2
0
        public override void Visit(MissingNode node, IQueryVisitorContext context)
        {
            var validationInfo = context.GetValidationInfo();

            AddField(validationInfo, node, context);
            AddOperation(validationInfo, "missing", node.Field);
        }
コード例 #3
0
        public override async Task VisitAsync(GroupNode node, IQueryVisitorContext context)
        {
            var validationInfo = context.GetValidationInfo();

            if (validationInfo.QueryType == null)
            {
                validationInfo.QueryType = node.GetQueryType();
            }

            string field = null;

            if (!String.IsNullOrEmpty(node.Field))
            {
                field = String.Equals(validationInfo.QueryType, QueryType.Query) ? node.GetFullName() : node.Field;
                if (!field.StartsWith("@"))
                {
                    validationInfo.ReferencedFields.Add(field);
                }

                if (node.HasParens)
                {
                    validationInfo.CurrentNodeDepth++;
                }
            }

            AddOperation(validationInfo, node.GetOperationType(), field);
            await base.VisitAsync(node, context).ConfigureAwait(false);

            if (!String.IsNullOrEmpty(node.Field) && node.HasParens)
            {
                validationInfo.CurrentNodeDepth--;
            }
        }
コード例 #4
0
        public override void Visit(TermRangeNode node, IQueryVisitorContext context)
        {
            var validationInfo = context.GetValidationInfo();

            AddField(validationInfo, node, context);
            AddOperation(validationInfo, node.GetOperationType(), node.Field);

            // aggregations must have a field
            if (context.QueryType == QueryType.Aggregation && String.IsNullOrEmpty(node.Field))
            {
                validationInfo.IsValid = false;
            }
        }
コード例 #5
0
        public override async Task <IQueryNode> AcceptAsync(IQueryNode node, IQueryVisitorContext context)
        {
            await node.AcceptAsync(this, context).ConfigureAwait(false);

            var validationInfo = context.GetValidationInfo();
            var validator      = context.GetValidator();

            if (validator != null && ShouldThrow && !await validator(validationInfo))
            {
                throw new QueryValidationException();
            }

            return(node);
        }
コード例 #6
0
        public override void Visit(MissingNode node, IQueryVisitorContext context)
        {
            var    validationInfo = context.GetValidationInfo();
            string field          = null;

            if (!String.IsNullOrEmpty(node.Field))
            {
                field = String.Equals(validationInfo.QueryType, QueryType.Query) ? node.GetFullName() : node.Field;
                if (!field.StartsWith("@"))
                {
                    validationInfo.ReferencedFields.Add(field);
                }
            }

            AddOperation(validationInfo, "missing", field);
        }
コード例 #7
0
        public override async Task VisitAsync(GroupNode node, IQueryVisitorContext context)
        {
            var validationInfo = context.GetValidationInfo();

            if (node.HasParens)
            {
                validationInfo.CurrentNodeDepth++;
            }

            if (!String.IsNullOrEmpty(node.Field))
            {
                AddField(validationInfo, node, context);
            }

            AddOperation(validationInfo, node.GetOperationType(), node.Field);
            await base.VisitAsync(node, context).ConfigureAwait(false);

            if (node.HasParens)
            {
                validationInfo.CurrentNodeDepth--;
            }
        }