public void ProcessJoin(ISet <MultiKey <EventBean> > newEvents, ISet <MultiKey <EventBean> > oldEvents)
 {
     if (_processor.Prototype.OptionalHavingExpr == null)
     {
         if (newEvents != null && !newEvents.IsEmpty())
         {
             _outputLastIStreamBufJoin = EventBeanUtility.GetLastInSet(newEvents);
         }
         if (oldEvents != null && !oldEvents.IsEmpty())
         {
             _outputLastRStreamBufJoin = EventBeanUtility.GetLastInSet(oldEvents);
         }
     }
     else
     {
         if (newEvents != null && newEvents.Count > 0)
         {
             foreach (MultiKey <EventBean> theEvent in newEvents)
             {
                 EvaluateParams eParams = new EvaluateParams(theEvent.Array, true, _processor.ExprEvaluatorContext);
                 if (InstrumentationHelper.ENABLED)
                 {
                     InstrumentationHelper.Get().QHavingClauseJoin(theEvent.Array);
                 }
                 var passesHaving = _processor.Prototype.OptionalHavingExpr.Evaluate(eParams);
                 if (InstrumentationHelper.ENABLED)
                 {
                     InstrumentationHelper.Get().AHavingClauseJoin(passesHaving.AsBoxedBoolean());
                 }
                 if ((passesHaving == null) || (false.Equals(passesHaving)))
                 {
                     continue;
                 }
                 _outputLastIStreamBufJoin = theEvent;
             }
         }
         if (oldEvents != null && oldEvents.Count > 0)
         {
             foreach (MultiKey <EventBean> theEvent in oldEvents)
             {
                 EvaluateParams eParams = new EvaluateParams(theEvent.Array, false, _processor.ExprEvaluatorContext);
                 if (InstrumentationHelper.ENABLED)
                 {
                     InstrumentationHelper.Get().QHavingClauseJoin(theEvent.Array);
                 }
                 var passesHaving = _processor.Prototype.OptionalHavingExpr.Evaluate(eParams);
                 if (InstrumentationHelper.ENABLED)
                 {
                     InstrumentationHelper.Get().AHavingClauseJoin(passesHaving.AsBoxedBoolean());
                 }
                 if ((passesHaving == null) || (false.Equals(passesHaving)))
                 {
                     continue;
                 }
                 _outputLastRStreamBufJoin = theEvent;
             }
         }
     }
 }
        public void ProcessJoin(
            ISet<MultiKeyArrayOfKeys<EventBean>> newEvents,
            ISet<MultiKeyArrayOfKeys<EventBean>> oldEvents)
        {
            if (!processor.HasHavingClause) {
                if (newEvents != null && !newEvents.IsEmpty()) {
                    outputLastIStreamBufJoin = EventBeanUtility.GetLastInSet(newEvents);
                }

                if (oldEvents != null && !oldEvents.IsEmpty()) {
                    outputLastRStreamBufJoin = EventBeanUtility.GetLastInSet(oldEvents);
                }
            }
            else {
                if (newEvents != null && newEvents.Count > 0) {
                    foreach (var theEvent in newEvents) {
                        var passesHaving = processor.EvaluateHavingClause(
                            theEvent.Array,
                            true,
                            processor.GetAgentInstanceContext());
                        if (!passesHaving) {
                            continue;
                        }

                        outputLastIStreamBufJoin = theEvent;
                    }
                }

                if (oldEvents != null && oldEvents.Count > 0) {
                    foreach (var theEvent in oldEvents) {
                        var passesHaving = processor.EvaluateHavingClause(
                            theEvent.Array,
                            false,
                            processor.GetAgentInstanceContext());
                        if (!passesHaving) {
                            continue;
                        }

                        outputLastRStreamBufJoin = theEvent;
                    }
                }
            }
        }