/// <summary>
        /// This process (update) method is for participation in a join.
        /// </summary>
        /// <param name="newEvents">- new events</param>
        /// <param name="oldEvents">- old events</param>
        /// <param name="exprEvaluatorContext">The expr evaluator context.</param>
        public override void Process(
            ISet <MultiKey <EventBean> > newEvents,
            ISet <MultiKey <EventBean> > oldEvents,
            ExprEvaluatorContext exprEvaluatorContext)
        {
            if ((ExecutionPathDebugLog.IsEnabled) && (Log.IsDebugEnabled))
            {
                Log.Debug(".process Received update, " +
                          "  newData.Length==" + ((newEvents == null) ? 0 : newEvents.Count) +
                          "  oldData.Length==" + ((oldEvents == null) ? 0 : oldEvents.Count));
            }

            var isGenerateSynthetic = _parent.StatementResultService.IsMakeSynthetic;

            ResultSetProcessor.ProcessOutputLimitedLastAllNonBufferedJoin(newEvents, oldEvents, isGenerateSynthetic, _isAll);

            if (!base.CheckAfterCondition(newEvents, _parent.StatementContext))
            {
                if (InstrumentationHelper.ENABLED)
                {
                    InstrumentationHelper.Get().AOutputProcessWCondition(false);
                }
                return;
            }

            var newEventsSize = 0;

            if (newEvents != null)
            {
                newEventsSize = newEvents.Count;
            }

            var oldEventsSize = 0;

            if (oldEvents != null)
            {
                oldEventsSize = oldEvents.Count;
            }
            _outputCondition.UpdateOutputCondition(newEventsSize, oldEventsSize);
        }