private bool?EvaluateInternal(EvaluateParams evaluateParams) { var leftResult = _lhs.Evaluate(evaluateParams); var rightResult = _rhs.Evaluate(evaluateParams); if (!_parent.IsIs) { if (leftResult == null || rightResult == null) // null comparison { return(null); } } else { if (leftResult == null) { return(rightResult == null); } if (rightResult == null) { return(false); } } var left = _numberCoercerLHS.Invoke(leftResult); var right = _numberCoercerRHS.Invoke(rightResult); return(left.Equals(right) ^ _parent.IsNotEquals); }
public override Object Evaluate(EvaluateParams evaluateParams) { var scriptArgs = new ScriptArgs(); var bindings = new Dictionary <string, object>(); bindings.Put(ExprNodeScript.CONTEXT_BINDING_NAME, evaluateParams.ExprEvaluatorContext.AgentInstanceScriptContext); for (int i = 0; i < Names.Length; i++) { bindings.Put(Names[i], Parameters[i].Evaluate(evaluateParams)); } scriptArgs.Bindings = bindings; try { var result = _scriptAction.Invoke(scriptArgs); if (Coercer != null) { result = Coercer.Invoke(result); } return(result); } catch (Exception e) { String message = "Unexpected exception executing script '" + ScriptName + "' for statement '" + StatementName + "' : " + e.Message; Log.Error(message, e); throw new EPException(message, e); } }
public override object GetFilterValue(MatchedEventMap matchedEvents, AgentInstanceContext agentInstanceContext) { EventBean[] events = (EventBean[])matchedEvents.GetMatchingEventAsObjectByTag(_resultEventAsName); Object value = null; if (events == null) { Log.Warn("Matching events for tag '" + _resultEventAsName + "' returned a null result, using null value in filter criteria, for statement '" + _statementName + "'"); } else if (_resultEventIndex > (events.Length - 1)) { Log.Warn("Matching events for tag '" + _resultEventAsName + "' returned no result for index " + _resultEventIndex + " at array length " + events.Length + ", using null value in filter criteria, for statement '" + _statementName + "'"); } else { value = events[_resultEventIndex].Get(_resultEventProperty); } // Coerce if necessary if (_isMustCoerce) { value = _numberCoercer.Invoke(value); } return(value); }
public object GetFilterValue(MatchedEventMap matchedEvents, ExprEvaluatorContext evaluatorContext) { if (evaluatorContext.ContextProperties == null) return null; var result = _getter.Get(evaluatorContext.ContextProperties); if (_numberCoercer == null) return result; return _numberCoercer.Invoke(result); }
protected override Object GetKey(EventBean theEvent) { var keyValue = base.GetKey(theEvent); if ((keyValue != null) && (keyValue.GetType() != _coercionType)) { keyValue = keyValue.IsNumber() ? _coercer.Invoke(keyValue) : EventBeanUtility.Coerce(keyValue, _coercionType); } return(keyValue); }
public static Object WidenArray(Object source, Type targetElementType, Coercer coercer) { var sourceArray = (Array)source; var length = sourceArray.Length; var targetArray = Array.CreateInstance(targetElementType, length); for (int ii = 0; ii < length; ii++) { targetArray.SetValue(coercer.Invoke(sourceArray.GetValue(ii)), ii); } return(targetArray); }
public override Object GetFilterValue(MatchedEventMap matchedEvents, ExprEvaluatorContext evaluatorContext) { if (evaluatorContext.ContextProperties == null) { return(null); } Object result = _getter.Get(evaluatorContext.ContextProperties); if (_numberCoercer == null) { return(result); } return(_numberCoercer.Invoke(result)); }
public override object GetFilterValue(MatchedEventMap matchedEvents, AgentInstanceContext agentInstanceContext) { if (agentInstanceContext.ContextProperties == null) { return(null); } var result = _getter.Get(agentInstanceContext.ContextProperties); if (_numberCoercer == null) { return(result); } return(_numberCoercer.Invoke(result)); }
protected override Object EvaluateInternal( Object leftResult, EventBean[] events, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, AggregationService aggregationService) { var evaluateParams = new EvaluateParams(events, true, exprEvaluatorContext); if (_havingEval != null) { var pass = _havingEval.Evaluate(evaluateParams); if ((pass == null) || (false.Equals(pass))) { return(null); } } var rightResult = SelectEval.Evaluate(evaluateParams); if (rightResult == null) { return(null); } if (Coercer == null) { var eq = leftResult.Equals(rightResult); if ((IsNot && eq) || (!IsNot && !eq)) { return(false); } } else { var left = Coercer.Invoke(leftResult); var right = Coercer.Invoke(rightResult); bool eq = left.Equals(right); if ((IsNot && eq) || (!IsNot && !eq)) { return(false); } } return(true); }
public object EvaluateInternal(ScriptArgs scriptArgs) { try { var result = _scriptAction.Invoke(scriptArgs); if (Coercer != null) { result = Coercer.Invoke(result); } return(result); } catch (Exception e) { string message = "Unexpected exception executing script '" + ScriptName + "' for statement '" + StatementName + "' : " + e.Message; Log.Error(message, e); throw new EPException(message, e); } }
public override object GetFilterValue(MatchedEventMap matchedEvents, AgentInstanceContext agentInstanceContext) { EventBean theEvent = matchedEvents.GetMatchingEventByTag(_resultEventAsName); Object value = null; if (theEvent == null) { Log.Warn("Matching events for tag '" + _resultEventAsName + "' returned a null result, using null value in filter criteria, for statement '" + _statementName + "'"); } else { value = theEvent.Get(_resultEventProperty); } // Coerce if necessary if (_isMustCoerce) { value = _numberCoercer.Invoke(value); } return(value); }
private bool?EvaluateInternal(EvaluateParams evaluateParams) { var leftResult = _lhs.Evaluate(evaluateParams); var rightResult = _rhs.Evaluate(evaluateParams); if (!_parent.IsIs) { if (leftResult == null || rightResult == null) // null comparison { return(null); } } else if (leftResult == null) { return(rightResult == null); } if (rightResult == null) { return(false); } var leftArray = (Array)leftResult; var rightArray = (Array)rightResult; if (leftArray.Length != rightArray.Length) { return(!_parent.IsNotEquals); } var isEquals = true; for (int ii = 0; isEquals && ii < leftArray.Length; ii++) { var valueL = _coercerLHS.Invoke(leftArray.GetValue(ii)); var valueR = _coercerRHS.Invoke(rightArray.GetValue(ii)); isEquals &= Equals(valueL, valueR); } return(isEquals ^ _parent.IsNotEquals); }
/// <summary> /// CoerceIndex the given number to the given type. Allows coerce to lower resultion number. /// Doesn't coerce to primitive types. /// <param name="itemToCoerce">numToCoerce is the number to coerce to the given type</param> /// <param name="resultBoxedType">the result type to return</param> /// <returns>the itemToCoerce as a value in the given result type</returns> /// </summary> public static Object CoerceBoxed(Object itemToCoerce, Type resultBoxedType) { Coercer coercer = GetCoercer(itemToCoerce.GetType(), resultBoxedType); return(coercer.Invoke(itemToCoerce)); }
public override ExprNode Validate(ExprValidationContext validationContext) { _length = ChildNodes.Count; _evaluators = ExprNodeUtility.GetEvaluators(ChildNodes); // Can be an empty array with no content if (ChildNodes.Count == 0) { _arrayReturnType = typeof(Object); _constantResult = new Object[0]; return(null); } var comparedTypes = new List <Type>(); for (int i = 0; i < _length; i++) { comparedTypes.Add(_evaluators[i].ReturnType); } // Determine common denominator type try { _arrayReturnType = TypeHelper.GetCommonCoercionType(comparedTypes.ToArray()); // Determine if we need to coerce numbers when one type doesn't match any other type if (_arrayReturnType.IsNumeric()) { _mustCoerce = false; foreach (var comparedType in comparedTypes) { if (comparedType != _arrayReturnType) { _mustCoerce = true; } } if (_mustCoerce) { _coercer = CoercerFactory.GetCoercer(null, _arrayReturnType); } } } catch (CoercionException) { // expected, such as mixing String and int values, or classes (not boxed) and primitives // use Object[] in such cases } if (_arrayReturnType == null) { _arrayReturnType = typeof(Object); } // Determine if we are dealing with constants only var results = new Object[_length]; int index = 0; foreach (ExprNode child in ChildNodes) { if (!child.IsConstantResult) { results = null; // not using a constant result break; } results[index] = _evaluators[index].Evaluate(new EvaluateParams(null, false, validationContext.ExprEvaluatorContext)); index++; } // Copy constants into array and coerce, if required if (results != null) { var asArray = Array.CreateInstance(_arrayReturnType, _length); _constantResult = asArray; for (int i = 0; i < _length; i++) { if (_mustCoerce) { var boxed = results[i]; if (boxed != null) { Object coercedResult = _coercer.Invoke(boxed); asArray.SetValue(coercedResult, i); } } else { asArray.SetValue(results[i], i); } } } return(null); }
public Object Widen(Object input) { return(_coercer.Invoke(input)); }
public Object Evaluate(EventBean[] eventsPerStream, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext) { if (matchingEvents == null) { return(_isNotIn); } if (matchingEvents.Count == 0) { return(_isNotIn); } // Evaluate the child expression Object leftResult = _valueExpr.Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext)); // Evaluation event-per-stream var events = new EventBean[eventsPerStream.Length + 1]; Array.Copy(eventsPerStream, 0, events, 1, eventsPerStream.Length); if (_filterExpr == null) { if (leftResult == null) { return(null); } // Evaluate each select until we have a match bool hasNonNullRow = false; bool hasNullRow = false; foreach (EventBean eventBean in matchingEvents) { events[0] = eventBean; Object rightResult = _selectClauseExpr != null ? _selectClauseExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)) : events[0].Underlying; if (rightResult != null) { hasNonNullRow = true; if (!_mustCoerce) { if (leftResult.Equals(rightResult)) { return(!_isNotIn); } } else { var left = _coercer.Invoke(leftResult); var right = _coercer.Invoke(rightResult); if (Equals(left, right)) { return(!_isNotIn); } } } else { hasNullRow = true; } } if ((!hasNonNullRow) || (hasNullRow)) { return(null); } return(_isNotIn); } // Filter and check each row. bool hasNullRowOuter = false; foreach (EventBean subselectEvent in matchingEvents) { // Prepare filter expression event list events[0] = subselectEvent; // Eval filter expression var pass = (bool?)_filterExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)); if ((pass == null) || (!pass.Value)) { continue; } if (leftResult == null) { return(null); } object rightResult = _selectClauseExpr != null ? _selectClauseExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)) : events[0].Underlying; if (rightResult == null) { hasNullRowOuter = true; } else { if (!_mustCoerce) { if (leftResult.Equals(rightResult)) { return(!_isNotIn); } } else { var left = _coercer.Invoke(leftResult); var right = _coercer.Invoke(rightResult); if (Equals(left, right)) { return(!_isNotIn); } } } } if (hasNullRowOuter) { return(null); } return(_isNotIn); }
public object EvaluateInternal(EvaluateParams evaluateParams) { Object leftResult = _evaluators[0].Evaluate(evaluateParams); if (_transformList[0] != null) { leftResult = _transformList[0](leftResult); } if (_hasCollectionOrArray) { if (IsAll) { return(CompareAllColl(leftResult, evaluateParams.EventsPerStream, evaluateParams.IsNewData, evaluateParams.ExprEvaluatorContext)); } return(CompareAnyColl(leftResult, evaluateParams.EventsPerStream, evaluateParams.IsNewData, evaluateParams.ExprEvaluatorContext)); } // coerce early if testing without collections if ((_mustCoerce) && (leftResult != null)) { leftResult = _coercer.Invoke(leftResult); } if (IsAll) { return(CompareAll(leftResult, evaluateParams.EventsPerStream, evaluateParams.IsNewData, evaluateParams.ExprEvaluatorContext)); } return(CompareAny(leftResult, evaluateParams.EventsPerStream, evaluateParams.IsNewData, evaluateParams.ExprEvaluatorContext)); }
public Object Evaluate(EventBean[] eventsPerStream, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext) { // Evaluate the child expression Object leftResult = _valueExpr.Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext)); if ((matchingEvents == null) || (matchingEvents.Count == 0)) { return(true); } // Evaluation event-per-stream var events = new EventBean[eventsPerStream.Length + 1]; Array.Copy(eventsPerStream, 0, events, 1, eventsPerStream.Length); if (_isNot) { // Evaluate each select until we have a match bool hasNonNullRow = false; bool hasNullRow = false; foreach (EventBean theEvent in matchingEvents) { events[0] = theEvent; // Eval filter expression if (_filterExpr != null) { var pass = (bool?)_filterExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)); if ((pass == null) || (!pass.Value)) { continue; } } if (leftResult == null) { return(null); } Object rightResult; if (_selectClauseExpr != null) { rightResult = _selectClauseExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)); } else { rightResult = events[0].Underlying; } if (rightResult != null) { hasNonNullRow = true; if (!_mustCoerce) { if (leftResult.Equals(rightResult)) { return(false); } } else { object left = _coercer.Invoke(leftResult); object right = _coercer.Invoke(rightResult); if (Equals(left, right)) { return(false); } } } else { hasNullRow = true; } } if ((!hasNonNullRow) || (hasNullRow)) { return(null); } return(true); } else { // Evaluate each select until we have a match bool hasNonNullRow = false; bool hasNullRow = false; foreach (EventBean theEvent in matchingEvents) { events[0] = theEvent; // Eval filter expression if (_filterExpr != null) { var pass = (bool?)_filterExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)); if ((pass == null) || (!pass.Value)) { continue; } } if (leftResult == null) { return(null); } Object rightResult; if (_selectClauseExpr != null) { rightResult = _selectClauseExpr.Evaluate(new EvaluateParams(events, true, exprEvaluatorContext)); } else { rightResult = events[0].Underlying; } if (rightResult != null) { hasNonNullRow = true; if (!_mustCoerce) { if (!leftResult.Equals(rightResult)) { return(false); } } else { object left = _coercer.Invoke(leftResult); object right = _coercer.Invoke(rightResult); if (!Equals(left, right)) { return(false); } } } else { hasNullRow = true; } } if ((!hasNonNullRow) || (hasNullRow)) { return(null); } return(true); } }
protected override Object EvaluateInternal( Object leftResult, EventBean[] events, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, AggregationService aggregationService) { var hasNullRow = false; var evaluateParams = new EvaluateParams(events, true, exprEvaluatorContext); foreach (EventBean theEvent in matchingEvents) { events[0] = theEvent; // Eval filter expression if (_filterEval != null) { var pass = _filterEval.Evaluate(evaluateParams); if ((pass == null) || (false.Equals(pass))) { continue; } } if (leftResult == null) { return(null); } Object rightResult; if (SelectEval != null) { rightResult = SelectEval.Evaluate(evaluateParams); } else { rightResult = events[0].Underlying; } if (rightResult != null) { if (Coercer == null) { bool eq = leftResult.Equals(rightResult); if ((IsNot && eq) || (!IsNot && !eq)) { return(false); } } else { var left = Coercer.Invoke(leftResult); var right = Coercer.Invoke(rightResult); var eq = left.Equals(right); if ((IsNot && eq) || (!IsNot && !eq)) { return(false); } } } else { hasNullRow = true; } } if (hasNullRow) { return(null); } return(true); }
private bool?EvaluateInternal(EventBean[] eventsPerStream, bool isNewData, ExprEvaluatorContext exprEvaluatorContext) { var inPropResult = _evaluators[0].Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext)); if (!_hasCollectionOrArray) { if ((_mustCoerce) && (inPropResult != null)) { inPropResult = _coercer.Invoke(inPropResult); } int len = this.ChildNodes.Length - 1; if ((len > 0) && (inPropResult == null)) { return(null); } bool hasNullRow = false; for (int i = 1; i <= len; i++) { var rightResult = _evaluators[i].Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext)); if (_transformList[i] != null) { rightResult = _transformList[i](rightResult); } if (rightResult == null) { hasNullRow = true; continue; } if (!_mustCoerce) { if (rightResult.Equals(inPropResult)) { return(!_isNotIn); } } else { var right = _coercer.Invoke(rightResult); if (right.Equals(inPropResult)) { return(!_isNotIn); } } } if (hasNullRow) { return(null); } return(_isNotIn); } else { var len = ChildNodes.Length - 1; var hasNullRow = false; for (int i = 1; i <= len; i++) { var rightResult = _evaluators[i].Evaluate(new EvaluateParams(eventsPerStream, isNewData, exprEvaluatorContext)); if (_transformList[i] != null) { rightResult = _transformList[i](rightResult); } if (rightResult == null) { continue; } if (rightResult is AnyMap) { if (inPropResult == null) { return(null); } var coll = (AnyMap)rightResult; if (coll.ContainsKey(inPropResult)) { return(!_isNotIn); } } else if (rightResult.GetType().IsArray) { var array = (Array)rightResult; int arrayLength = array.Length; if ((arrayLength > 0) && (inPropResult == null)) { return(null); } for (int index = 0; index < arrayLength; index++) { var item = array.GetValue(index); if (item == null) { hasNullRow = true; continue; } if (!_mustCoerce) { if (inPropResult.Equals(item)) { return(!_isNotIn); } } else { if (!item.IsNumber()) { continue; } var left = _coercer.Invoke(inPropResult); var right = _coercer.Invoke(item); if (left.Equals(right)) { return(!_isNotIn); } } } } else if (rightResult is DataCollection) { if (inPropResult == null) { return(null); } var coll = (DataCollection)rightResult; if (coll.Contains(inPropResult)) { return(!_isNotIn); } } else { if (inPropResult == null) { return(null); } if (!_mustCoerce) { if (inPropResult.Equals(rightResult)) { return(!_isNotIn); } } else { var left = _coercer.Invoke(inPropResult); var right = _coercer.Invoke(rightResult); if (left.Equals(right)) { return(!_isNotIn); } } } } if (hasNullRow) { return(null); } return(_isNotIn); } }
protected override Object EvaluateInternal( Object leftResult, EventBean[] events, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, AggregationService aggregationServiceAnyPartition) { var aggregationService = aggregationServiceAnyPartition.GetContextPartitionAggregationService( exprEvaluatorContext.AgentInstanceId); var groupKeys = aggregationService.GetGroupKeys(exprEvaluatorContext); var hasNullRow = false; var evaluateParams = new EvaluateParams(events, true, exprEvaluatorContext); foreach (var groupKey in groupKeys) { if (leftResult == null) { return(null); } aggregationService.SetCurrentAccess(groupKey, exprEvaluatorContext.AgentInstanceId, null); if (_havingEval != null) { var pass = _havingEval.Evaluate(evaluateParams); if ((pass == null) || (false.Equals(pass))) { continue; } } Object rightResult; if (SelectEval != null) { rightResult = SelectEval.Evaluate(evaluateParams); } else { rightResult = events[0].Underlying; } if (rightResult != null) { if (Coercer == null) { var eq = leftResult.Equals(rightResult); if ((IsNot && !eq) || (!IsNot && eq)) { return(true); } } else { var left = Coercer.Invoke(leftResult); var right = Coercer.Invoke(rightResult); var eq = left.Equals(right); if ((IsNot && !eq) || (!IsNot && eq)) { return(true); } } } else { hasNullRow = true; } } if (hasNullRow) { return(null); } return(false); }
protected override Object EvaluateInternal( Object leftResult, EventBean[] events, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, AggregationService aggregationService) { if (leftResult == null) { return(null); } var evaluateParams = new EvaluateParams(events, true, exprEvaluatorContext); // Evaluate each select until we have a match bool hasNullRow = false; foreach (EventBean theEvent in matchingEvents) { events[0] = theEvent; Object rightResult; if (SelectEval != null) { rightResult = SelectEval.Evaluate(evaluateParams); } else { rightResult = events[0].Underlying; } if (rightResult != null) { if (Coercer == null) { if (leftResult.Equals(rightResult)) { return(!IsNotIn); } } else { var left = Coercer.Invoke(leftResult); var right = Coercer.Invoke(rightResult); if (left.Equals(right)) { return(!IsNotIn); } } } else { hasNullRow = true; } } if (hasNullRow) { return(null); } return(IsNotIn); }
protected override Object EvaluateInternal( Object leftResult, EventBean[] eventsZeroOffset, bool isNewData, ICollection <EventBean> matchingEvents, ExprEvaluatorContext exprEvaluatorContext, AggregationService aggregationService) { bool hasNullRow = false; var evaluateParams = new EvaluateParams(eventsZeroOffset, true, exprEvaluatorContext); foreach (EventBean subselectEvent in matchingEvents) { // Prepare filter expression event list eventsZeroOffset[0] = subselectEvent; // Eval filter expression var pass = _filterEval.Evaluate(evaluateParams); if ((pass == null) || (false.Equals(pass))) { continue; } if (leftResult == null) { return(null); } Object rightResult; if (SelectEval != null) { rightResult = SelectEval.Evaluate(evaluateParams); } else { rightResult = eventsZeroOffset[0].Underlying; } if (rightResult == null) { hasNullRow = true; } else { if (Coercer == null) { if (leftResult.Equals(rightResult)) { return(!IsNotIn); } } else { var left = Coercer.Invoke(leftResult); var right = Coercer.Invoke(rightResult); if (left.Equals(right)) { return(!IsNotIn); } } } } if (hasNullRow) { return(null); } return(IsNotIn); }