public ExprRelationalOpNodeForge(ExprRelationalOpNodeImpl parent, RelationalOpEnumComputer computer, Type coercionType) { _parent = parent; _computer = computer; _coercionType = coercionType; }
public ExprRelationalOpAllAnyNodeForge( ExprRelationalOpAllAnyNode parent, RelationalOpEnumComputer computer, bool hasCollectionOrArray) { this._parent = parent; this._computer = computer; this._hasCollectionOrArray = hasCollectionOrArray; }
public SubselectForgeNRRelOpBase( ExprSubselectNode subselect, ExprForge valueEval, ExprForge selectEval, bool resultWhenNoMatchingEvents, RelationalOpEnumComputer computer) : base(subselect, valueEval, selectEval, resultWhenNoMatchingEvents) { this.computer = computer; }
public SubselectForgeNRRelOpAllAnyAggregated( ExprSubselectNode subselect, ExprForge valueEval, ExprForge selectEval, bool resultWhenNoMatchingEvents, RelationalOpEnumComputer computer, ExprForge havingEval) : base( subselect, valueEval, selectEval, resultWhenNoMatchingEvents, computer) { this.havingEval = havingEval; }
public SubselectForgeNRRelOpAllDefault( ExprSubselectNode subselect, ExprForge valueEval, ExprForge selectEval, bool resultWhenNoMatchingEvents, RelationalOpEnumComputer computer, ExprForge filterOrHavingEval) : base( subselect, valueEval, selectEval, resultWhenNoMatchingEvents, computer) { this.filterOrHavingEval = filterOrHavingEval; }
private bool? EvaluateInternal( EventBean[] eventsPerStream, bool isNewData, ExprEvaluatorContext exprEvaluatorContext) { if (evaluators.Length == 1) { return false; } var isAll = forge.ForgeRenderable.IsAll; RelationalOpEnumComputer computer = forge.Computer; var valueLeft = evaluators[0].Evaluate(eventsPerStream, isNewData, exprEvaluatorContext); var len = evaluators.Length - 1; if (forge.IsCollectionOrArray) { var hasNonNullRow = false; var hasRows = false; for (var i = 1; i <= len; i++) { var valueRight = evaluators[i].Evaluate(eventsPerStream, isNewData, exprEvaluatorContext); if (valueRight == null) { continue; } if (valueRight is Array valueRightArray) { hasRows = true; var arrayLength = valueRightArray.Length; for (var index = 0; index < arrayLength; index++) { object item = valueRightArray.GetValue(index); if (item == null) { if (isAll) { return null; } continue; } hasNonNullRow = true; if (valueLeft != null) { if (isAll) { if (!computer.Compare(valueLeft, item)) { return false; } } else { if (computer.Compare(valueLeft, item)) { return true; } } } } } else if (valueRight is IDictionary<object, object>) { var coll = (IDictionary<object, object>) valueRight; hasRows = true; foreach (object item in coll.Keys) { if (!(item.IsNumber())) { if (isAll && item == null) { return null; } continue; } hasNonNullRow = true; if (valueLeft != null) { if (isAll) { if (!computer.Compare(valueLeft, item)) { return false; } } else { if (computer.Compare(valueLeft, item)) { return true; } } } } } else if (valueRight is ICollection<object>) { var coll = (ICollection<object>) valueRight; hasRows = true; foreach (object item in coll) { if (!(item.IsNumber())) { if (isAll && item == null) { return null; } continue; } hasNonNullRow = true; if (valueLeft != null) { if (isAll) { if (!computer.Compare(valueLeft, item)) { return false; } } else { if (computer.Compare(valueLeft, item)) { return true; } } } } } else if (!(valueRight.IsNumber())) { if (isAll) { return null; } } else { hasNonNullRow = true; if (isAll) { if (!computer.Compare(valueLeft, valueRight)) { return false; } } else { if (computer.Compare(valueLeft, valueRight)) { return true; } } } } if (isAll) { if (!hasRows) { return true; } if (!hasNonNullRow || valueLeft == null) { return null; } return true; } if (!hasRows) { return false; } if (!hasNonNullRow || valueLeft == null) { return null; } return false; } else { var hasNonNullRow = false; var hasRows = false; for (var i = 1; i <= len; i++) { var valueRight = evaluators[i].Evaluate(eventsPerStream, isNewData, exprEvaluatorContext); hasRows = true; if (valueRight != null) { hasNonNullRow = true; } else { if (isAll) { return null; } } if (valueRight != null && valueLeft != null) { if (isAll) { if (!computer.Compare(valueLeft, valueRight)) { return false; } } else { if (computer.Compare(valueLeft, valueRight)) { return true; } } } } if (isAll) { if (!hasRows) { return true; } if (!hasNonNullRow || valueLeft == null) { return null; } return true; } if (!hasRows) { return false; } if (!hasNonNullRow || valueLeft == null) { return null; } return false; } }