Ejemplo n.º 1
0
 public static void WalkStreamSpecs(StatementSpecRaw spec, ExprNodeSubselectDeclaredDotVisitor visitor)
 {
     // Determine filter streams
     foreach (StreamSpecRaw rawSpec in spec.StreamSpecs)
     {
         if (rawSpec is FilterStreamSpecRaw)
         {
             FilterStreamSpecRaw raw = (FilterStreamSpecRaw)rawSpec;
             foreach (ExprNode filterExpr in raw.RawFilterSpec.FilterExpressions)
             {
                 filterExpr.Accept(visitor);
             }
         }
         if (rawSpec is PatternStreamSpecRaw)
         {
             PatternStreamSpecRaw   patternStreamSpecRaw = (PatternStreamSpecRaw)rawSpec;
             EvalNodeAnalysisResult analysisResult       = EvalNodeUtil.RecursiveAnalyzeChildNodes(patternStreamSpecRaw.EvalFactoryNode);
             foreach (EvalFactoryNode evalNode in analysisResult.ActiveNodes)
             {
                 if (evalNode is EvalFilterFactoryNode)
                 {
                     EvalFilterFactoryNode filterNode = (EvalFilterFactoryNode)evalNode;
                     foreach (ExprNode filterExpr in filterNode.RawFilterSpec.FilterExpressions)
                     {
                         filterExpr.Accept(visitor);
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
 public void VisitFilter(
     EvalFilterFactoryNode factoryNode,
     EvalStateNode stateNode,
     EPStatementHandleCallbackFilter handle,
     MatchedEventMap beginState)
 {
     stateNode.Transfer(services);
 }
Ejemplo n.º 3
0
 public void QPatternFilterQuit(
     EvalFilterFactoryNode evalFilterNode,
     MatchedEventMap beginState)
 {
 }
Ejemplo n.º 4
0
 public void QPatternFilterMatch(
     EvalFilterFactoryNode filterNode,
     EventBean theEvent)
 {
 }
Ejemplo n.º 5
0
        public static void WalkStatement(StatementSpecRaw spec, ExprNodeSubselectDeclaredDotVisitor visitor)
        {
            // Look for expressions with sub-selects in select expression list and filter expression
            // Recursively compile the statement within the statement.
            foreach (SelectClauseElementRaw raw in spec.SelectClauseSpec.SelectExprList)
            {
                if (raw is SelectClauseExprRawSpec)
                {
                    SelectClauseExprRawSpec rawExpr = (SelectClauseExprRawSpec)raw;
                    rawExpr.SelectExpression.Accept(visitor);
                }
                else
                {
                    continue;
                }
            }
            if (spec.FilterRootNode != null)
            {
                spec.FilterRootNode.Accept(visitor);
            }
            if (spec.HavingExprRootNode != null)
            {
                spec.HavingExprRootNode.Accept(visitor);
            }
            if (spec.UpdateDesc != null)
            {
                if (spec.UpdateDesc.OptionalWhereClause != null)
                {
                    spec.UpdateDesc.OptionalWhereClause.Accept(visitor);
                }
                foreach (OnTriggerSetAssignment assignment in spec.UpdateDesc.Assignments)
                {
                    assignment.Expression.Accept(visitor);
                }
            }
            if (spec.OnTriggerDesc != null)
            {
                VisitSubselectOnTrigger(spec.OnTriggerDesc, visitor);
            }
            // Determine pattern-filter subqueries
            foreach (StreamSpecRaw streamSpecRaw in spec.StreamSpecs)
            {
                if (streamSpecRaw is PatternStreamSpecRaw)
                {
                    PatternStreamSpecRaw   patternStreamSpecRaw = (PatternStreamSpecRaw)streamSpecRaw;
                    EvalNodeAnalysisResult analysisResult       = EvalNodeUtil.RecursiveAnalyzeChildNodes(patternStreamSpecRaw.EvalFactoryNode);
                    foreach (EvalFactoryNode evalNode in analysisResult.ActiveNodes)
                    {
                        if (evalNode is EvalFilterFactoryNode)
                        {
                            EvalFilterFactoryNode filterNode = (EvalFilterFactoryNode)evalNode;
                            foreach (ExprNode filterExpr in filterNode.RawFilterSpec.FilterExpressions)
                            {
                                filterExpr.Accept(visitor);
                            }
                        }
                        else if (evalNode is EvalObserverFactoryNode)
                        {
                            int beforeCount = visitor.Subselects.Count;
                            EvalObserverFactoryNode observerNode = (EvalObserverFactoryNode)evalNode;
                            foreach (ExprNode param in observerNode.PatternObserverSpec.ObjectParameters)
                            {
                                param.Accept(visitor);
                            }
                            if (visitor.Subselects.Count != beforeCount)
                            {
                                throw new ExprValidationException("Subselects are not allowed within pattern observer parameters, please consider using a variable instead");
                            }
                        }
                    }
                }
            }

            // walk streams
            WalkStreamSpecs(spec, visitor);
        }
Ejemplo n.º 6
0
 public void Visit(EvalFilterFactoryNode filter)
 {
     ProcFilterFactoryNode?.Invoke(filter);
 }