private static bool EvaluateBitMaskFilter(BitMaskFilter bitMaskFilter, IReadOnlyPropertyBag propertyBag, bool shouldThrow) { object obj = null; try { obj = propertyBag[bitMaskFilter.Property]; } catch (PropertyErrorException) { if (shouldThrow) { throw; } return(false); } if (EvaluatableFilter.IsPropertyError(propertyBag, bitMaskFilter.Property, shouldThrow)) { return(false); } if (bitMaskFilter.IsNonZero) { return(0UL != ((ulong)obj & bitMaskFilter.Mask)); } return(0UL == ((ulong)obj & bitMaskFilter.Mask)); }
internal override QueryFilter NativeFilterToSmartFilter(QueryFilter filter) { SinglePropertyFilter singlePropertyFilter = filter as SinglePropertyFilter; if (singlePropertyFilter != null && singlePropertyFilter.Property.Equals(this.nativeProperty)) { BitMaskFilter bitMaskFilter = filter as BitMaskFilter; if (bitMaskFilter != null && bitMaskFilter.Mask == (ulong)this.flag) { return(new ComparisonFilter(ComparisonOperator.Equal, this, bitMaskFilter.IsNonZero)); } } return(null); }
protected QueryFilter SinglePropertySmartFilterToNativeFilter(QueryFilter filter, PropertyDefinition nativeProperty) { MultivaluedInstanceComparisonFilter multivaluedInstanceComparisonFilter = filter as MultivaluedInstanceComparisonFilter; if (multivaluedInstanceComparisonFilter != null) { return(new MultivaluedInstanceComparisonFilter(multivaluedInstanceComparisonFilter.ComparisonOperator, nativeProperty, multivaluedInstanceComparisonFilter.PropertyValue)); } ComparisonFilter comparisonFilter = filter as ComparisonFilter; if (comparisonFilter != null) { return(new ComparisonFilter(comparisonFilter.ComparisonOperator, nativeProperty, comparisonFilter.PropertyValue)); } ExistsFilter existsFilter = filter as ExistsFilter; if (existsFilter != null) { return(new ExistsFilter(nativeProperty)); } TextFilter textFilter = filter as TextFilter; if (textFilter != null) { return(new TextFilter(nativeProperty, textFilter.Text, textFilter.MatchOptions, textFilter.MatchFlags)); } BitMaskFilter bitMaskFilter = filter as BitMaskFilter; if (bitMaskFilter != null) { return(new BitMaskFilter(nativeProperty, bitMaskFilter.Mask, bitMaskFilter.IsNonZero)); } BitMaskAndFilter bitMaskAndFilter = filter as BitMaskAndFilter; if (bitMaskAndFilter != null) { return(new BitMaskAndFilter(nativeProperty, bitMaskAndFilter.Mask)); } BitMaskOrFilter bitMaskOrFilter = filter as BitMaskOrFilter; if (bitMaskOrFilter != null) { return(new BitMaskOrFilter(nativeProperty, bitMaskOrFilter.Mask)); } throw this.CreateInvalidFilterConversionException(filter); }
protected QueryFilter SinglePropertyNativeFilterToSmartFilter(QueryFilter filter, PropertyDefinition nativeProperty) { SinglePropertyFilter singlePropertyFilter = filter as SinglePropertyFilter; if (singlePropertyFilter != null && singlePropertyFilter.Property.Equals(nativeProperty)) { MultivaluedInstanceComparisonFilter multivaluedInstanceComparisonFilter = filter as MultivaluedInstanceComparisonFilter; if (multivaluedInstanceComparisonFilter != null) { return(new MultivaluedInstanceComparisonFilter(multivaluedInstanceComparisonFilter.ComparisonOperator, this, multivaluedInstanceComparisonFilter.PropertyValue)); } ComparisonFilter comparisonFilter = filter as ComparisonFilter; if (comparisonFilter != null) { return(new ComparisonFilter(comparisonFilter.ComparisonOperator, this, comparisonFilter.PropertyValue)); } ExistsFilter existsFilter = filter as ExistsFilter; if (existsFilter != null) { return(new ExistsFilter(this)); } TextFilter textFilter = filter as TextFilter; if (textFilter != null) { return(new TextFilter(this, textFilter.Text, textFilter.MatchOptions, textFilter.MatchFlags)); } BitMaskFilter bitMaskFilter = filter as BitMaskFilter; if (bitMaskFilter != null) { return(new BitMaskFilter(this, bitMaskFilter.Mask, bitMaskFilter.IsNonZero)); } BitMaskAndFilter bitMaskAndFilter = filter as BitMaskAndFilter; if (bitMaskAndFilter != null) { return(new BitMaskAndFilter(this, bitMaskAndFilter.Mask)); } BitMaskOrFilter bitMaskOrFilter = filter as BitMaskOrFilter; if (bitMaskOrFilter != null) { return(new BitMaskOrFilter(this, bitMaskOrFilter.Mask)); } } return(null); }
internal BitMaskRestrictionData(StoreSession storeSession, BitMaskFilter bitMaskFilter) { this.RelBmr = (bitMaskFilter.IsNonZero ? 1 : 0); this.PropTag = base.GetPropTagFromDefinition(storeSession, bitMaskFilter.Property); this.Mask = (int)bitMaskFilter.Mask; }
public static bool Evaluate(QueryFilter filter, IReadOnlyPropertyBag propertyBag, bool shouldThrow) { AndFilter andFilter = filter as AndFilter; if (andFilter != null) { return(EvaluatableFilter.EvaluateAndFilter(andFilter, propertyBag, shouldThrow)); } OrFilter orFilter = filter as OrFilter; if (orFilter != null) { return(EvaluatableFilter.EvaluateOrFilter(orFilter, propertyBag, shouldThrow)); } NotFilter notFilter = filter as NotFilter; if (notFilter != null) { return(!EvaluatableFilter.Evaluate(notFilter.Filter, propertyBag, shouldThrow)); } TextFilter textFilter = filter as TextFilter; if (textFilter != null) { return(EvaluatableFilter.EvaluateTextFilter(textFilter, propertyBag, shouldThrow)); } ComparisonFilter comparisonFilter = filter as ComparisonFilter; if (comparisonFilter != null) { return(EvaluatableFilter.EvaluateComparisonFilter(comparisonFilter, propertyBag, shouldThrow)); } if (filter is TrueFilter) { return(true); } if (filter is FalseFilter) { return(false); } CommentFilter commentFilter = filter as CommentFilter; if (commentFilter != null) { return(EvaluatableFilter.Evaluate(commentFilter.Filter, propertyBag, shouldThrow)); } BitMaskFilter bitMaskFilter = filter as BitMaskFilter; if (bitMaskFilter != null) { return(EvaluatableFilter.EvaluateBitMaskFilter(bitMaskFilter, propertyBag, shouldThrow)); } ExistsFilter existsFilter = filter as ExistsFilter; if (existsFilter != null) { return(EvaluatableFilter.EvaluateExistsFilter(existsFilter, propertyBag)); } PropertyComparisonFilter propertyComparisonFilter = filter as PropertyComparisonFilter; if (propertyComparisonFilter != null) { return(EvaluatableFilter.EvaluatePropertyComparisonFilter(propertyComparisonFilter, propertyBag, shouldThrow)); } throw new NotImplementedException(); }