private object EvaluateFilterValue(Microsoft.ReportingServices.ReportIntermediateFormat.Filter filterDef) { Global.Tracer.Assert(filterDef.Values != null, "(filterDef.Values != null)"); Global.Tracer.Assert(filterDef.Values.Count > 0, "(filterDef.Values.Count > 0)"); Microsoft.ReportingServices.RdlExpressions.VariantResult variantResult = m_processingContext.ReportRuntime.EvaluateFilterVariantValue(filterDef, 0, m_objectType, m_objectName); ThrowIfErrorOccurred("FilterValue", variantResult.ErrorOccurred, variantResult.FieldStatus); return(variantResult.Value); }
private object[] EvaluateFilterValues(Microsoft.ReportingServices.ReportIntermediateFormat.Filter filterDef) { if (filterDef.Values != null) { object[] array = new object[filterDef.Values.Count]; for (int num = filterDef.Values.Count - 1; num >= 0; num--) { Microsoft.ReportingServices.RdlExpressions.VariantResult variantResult = m_processingContext.ReportRuntime.EvaluateFilterVariantValue(filterDef, num, m_objectType, m_objectName); ThrowIfErrorOccurred("FilterValues", variantResult.ErrorOccurred, variantResult.FieldStatus); array[num] = variantResult.Value; } return(array); } return(null); }
internal bool PassFilters(object dataInstance, out bool specialFilter) { bool flag = true; specialFilter = false; if (m_failFilters) { return(false); } if (m_filters != null) { for (int num = m_startFilterIndex; num < m_filters.Count; num++) { Microsoft.ReportingServices.ReportIntermediateFormat.Filter filter = m_filters[num]; if (Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.Like == filter.Operator) { Microsoft.ReportingServices.RdlExpressions.StringResult stringResult = m_processingContext.ReportRuntime.EvaluateFilterStringExpression(filter, m_objectType, m_objectName); ThrowIfErrorOccurred("FilterExpression", stringResult.ErrorOccurred, stringResult.FieldStatus); Global.Tracer.Assert(filter.Values != null, "(null != filter.Values)"); Global.Tracer.Assert(1 <= filter.Values.Count, "(1 <= filter.Values.Count)"); Microsoft.ReportingServices.RdlExpressions.StringResult stringResult2 = m_processingContext.ReportRuntime.EvaluateFilterStringValue(filter, 0, m_objectType, m_objectName); ThrowIfErrorOccurred("FilterValue", stringResult2.ErrorOccurred, stringResult2.FieldStatus); if (stringResult.Value != null && stringResult2.Value != null) { if (!StringType.StrLikeText(stringResult.Value, stringResult2.Value)) { flag = false; } } else if (stringResult.Value != null || stringResult2.Value != null) { flag = false; } } else { Microsoft.ReportingServices.RdlExpressions.VariantResult variantResult = m_processingContext.ReportRuntime.EvaluateFilterVariantExpression(filter, m_objectType, m_objectName); ThrowIfErrorOccurred("FilterExpression", variantResult.ErrorOccurred, variantResult.FieldStatus); object value = variantResult.Value; if (filter.Operator == Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.Equal || Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.NotEqual == filter.Operator || Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.GreaterThan == filter.Operator || Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.GreaterThanOrEqual == filter.Operator || Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.LessThan == filter.Operator || Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.LessThanOrEqual == filter.Operator) { object value2 = EvaluateFilterValue(filter); int num2 = 0; try { num2 = Compare(value, value2); } catch (ReportProcessingException_SpatialTypeComparisonError reportProcessingException_SpatialTypeComparisonError) { throw new ReportProcessingException(RegisterSpatialTypeComparisonError(reportProcessingException_SpatialTypeComparisonError.Type)); } catch (ReportProcessingException_ComparisonError e) { throw new ReportProcessingException(RegisterComparisonError(e)); } catch (Exception e2) { if (AsynchronousExceptionDetection.IsStoppingException(e2)) { throw; } throw new ReportProcessingException(RegisterComparisonError()); } if (flag) { switch (filter.Operator) { case Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.Equal: if (num2 != 0) { flag = false; } break; case Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.NotEqual: if (num2 == 0) { flag = false; } break; case Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.GreaterThan: if (0 >= num2) { flag = false; } break; case Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.GreaterThanOrEqual: if (0 > num2) { flag = false; } break; case Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.LessThan: if (0 <= num2) { flag = false; } break; case Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.LessThanOrEqual: if (0 < num2) { flag = false; } break; } } } else if (Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.In == filter.Operator) { object[] array = EvaluateFilterValues(filter); flag = false; if (array != null) { for (int i = 0; i < array.Length; i++) { try { if (array[i] is ICollection) { foreach (object item in (ICollection)array[i]) { if (Compare(value, item) == 0) { flag = true; break; } } } else if (Compare(value, array[i]) == 0) { flag = true; } if (flag) { goto IL_05e1; } } catch (ReportProcessingException_SpatialTypeComparisonError reportProcessingException_SpatialTypeComparisonError2) { throw new ReportProcessingException(RegisterSpatialTypeComparisonError(reportProcessingException_SpatialTypeComparisonError2.Type)); } catch (ReportProcessingException_ComparisonError e3) { throw new ReportProcessingException(RegisterComparisonError(e3)); } catch (Exception e4) { if (AsynchronousExceptionDetection.IsStoppingException(e4)) { throw; } throw new ReportProcessingException(RegisterComparisonError()); } } } } else if (Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.Between == filter.Operator) { object[] array2 = EvaluateFilterValues(filter); flag = false; Global.Tracer.Assert(array2 != null && 2 == array2.Length, "(null != values && 2 == values.Length)"); try { if (0 <= Compare(value, array2[0]) && 0 >= Compare(value, array2[1])) { flag = true; } } catch (ReportProcessingException_SpatialTypeComparisonError reportProcessingException_SpatialTypeComparisonError3) { throw new ReportProcessingException(RegisterSpatialTypeComparisonError(reportProcessingException_SpatialTypeComparisonError3.Type)); } catch (ReportProcessingException_ComparisonError e5) { throw new ReportProcessingException(RegisterComparisonError(e5)); } catch (RSException) { throw; } catch (Exception e6) { if (AsynchronousExceptionDetection.IsStoppingException(e6)) { throw; } throw new ReportProcessingException(RegisterComparisonError()); } } else if (Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.TopN == filter.Operator || Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.BottomN == filter.Operator) { if (m_filterInfo == null) { Global.Tracer.Assert(filter.Values != null && 1 == filter.Values.Count, "(null != filter.Values && 1 == filter.Values.Count)"); Microsoft.ReportingServices.RdlExpressions.IntegerResult integerResult = m_processingContext.ReportRuntime.EvaluateFilterIntegerValue(filter, 0, m_objectType, m_objectName); ThrowIfErrorOccurred("FilterValue", integerResult.ErrorOccurred, integerResult.FieldStatus); int value3 = integerResult.Value; IComparer comparer = (Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.TopN != filter.Operator) ? ((IComparer) new MyBottomComparer(m_processingContext.ProcessingComparer)) : ((IComparer) new MyTopComparer(m_processingContext.ProcessingComparer)); InitFilterInfos(new MySortedListWithMaxSize(comparer, value3, this), num); } SortAndSave(value, dataInstance); flag = false; specialFilter = true; } else if (Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.TopPercent == filter.Operator || Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.BottomPercent == filter.Operator) { if (m_filterInfo == null) { Global.Tracer.Assert(filter.Values != null && 1 == filter.Values.Count, "(null != filter.Values && 1 == filter.Values.Count)"); Microsoft.ReportingServices.RdlExpressions.FloatResult floatResult = m_processingContext.ReportRuntime.EvaluateFilterIntegerOrFloatValue(filter, 0, m_objectType, m_objectName); ThrowIfErrorOccurred("FilterValue", floatResult.ErrorOccurred, floatResult.FieldStatus); double value4 = floatResult.Value; IComparer comparer2 = (Microsoft.ReportingServices.ReportIntermediateFormat.Filter.Operators.TopPercent != filter.Operator) ? ((IComparer) new MyBottomComparer(m_processingContext.ProcessingComparer)) : ((IComparer) new MyTopComparer(m_processingContext.ProcessingComparer)); InitFilterInfos(new MySortedListWithoutMaxSize(comparer2, this), num); m_filterInfo.Percentage = value4; m_filterInfo.Operator = filter.Operator; } SortAndSave(value, dataInstance); flag = false; specialFilter = true; } } goto IL_05e1; IL_05e1: if (!flag) { return(false); } } } return(flag); }