コード例 #1
0
        private static FilterSpecParam HandleRangeNode(
            ExprBetweenNode betweenNode,
            IDictionary<string, Pair<EventType, string>> arrayEventTypes,
            ExprEvaluatorContext exprEvaluatorContext,
            string statementName)
        {
            var left = betweenNode.ChildNodes[0];
            if (left is ExprFilterOptimizableNode)
            {
                var filterOptimizableNode = (ExprFilterOptimizableNode) left;
                var lookupable = filterOptimizableNode.FilterLookupable;
                var op = FilterOperatorExtensions.ParseRangeOperator(
                    betweenNode.IsLowEndpointIncluded, betweenNode.IsHighEndpointIncluded,
                    betweenNode.IsNotBetween);

                var low = HandleRangeNodeEndpoint(
                    betweenNode.ChildNodes[1], arrayEventTypes, exprEvaluatorContext, statementName);
                var high = HandleRangeNodeEndpoint(
                    betweenNode.ChildNodes[2], arrayEventTypes, exprEvaluatorContext, statementName);

                if ((low != null) && (high != null))
                {
                    return new FilterSpecParamRange(lookupable, op, low, high);
                }
            }
            return null;
        }
コード例 #2
0
        public static FilterSpecParamForge HandleRangeNode(
            ExprBetweenNode betweenNode,
            IDictionary<string, Pair<EventType, string>> taggedEventTypes,
            IDictionary<string, Pair<EventType, string>> arrayEventTypes,
            ISet<string> allTagNamesOrdered,
            string statementName,
            StatementRawInfo raw,
            StatementCompileTimeServices services)
        {
            var left = betweenNode.ChildNodes[0];
            ExprFilterSpecLookupableForge lookupable = null;

            if (left is ExprFilterOptimizableNode) {
                var filterOptimizableNode = (ExprFilterOptimizableNode) left;
                lookupable = filterOptimizableNode.FilterLookupable;
            }
            else if (FilterSpecCompilerIndexPlannerHelper.HasLevelOrHint(FilterSpecCompilerIndexPlannerHint.LKUPCOMPOSITE, raw, services) &&
                     IsLimitedLookupableExpression(left)) {
                lookupable = MakeLimitedLookupableForgeMayNull(left, raw, services);
            }

            if (lookupable == null) {
                return null;
            }

            FilterOperator op = FilterOperatorExtensions.ParseRangeOperator(
                betweenNode.IsLowEndpointIncluded,
                betweenNode.IsHighEndpointIncluded,
                betweenNode.IsNotBetween);

            var low = HandleRangeNodeEndpoint(betweenNode.ChildNodes[1], taggedEventTypes, arrayEventTypes, allTagNamesOrdered, statementName, raw, services);
            var high = HandleRangeNodeEndpoint(betweenNode.ChildNodes[2], taggedEventTypes, arrayEventTypes, allTagNamesOrdered, statementName, raw, services);
            return low == null || high == null ? null : new FilterSpecParamRangeForge(lookupable, op, low, high);
        }
コード例 #3
0
ファイル: FilterExprAnalyzer.cs プロジェクト: lanicon/nesper
 private static void AnalyzeBetweenNode(
     ExprBetweenNode betweenNode,
     QueryGraphForge queryGraph)
 {
     RangeFilterAnalyzer.Apply(
         betweenNode.ChildNodes[0],
         betweenNode.ChildNodes[1],
         betweenNode.ChildNodes[2],
         betweenNode.IsLowEndpointIncluded,
         betweenNode.IsHighEndpointIncluded,
         betweenNode.IsNotBetween,
         queryGraph);
 }