コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 internal BitMaskRestrictionData(StoreSession storeSession, BitMaskFilter bitMaskFilter)
 {
     this.RelBmr  = (bitMaskFilter.IsNonZero ? 1 : 0);
     this.PropTag = base.GetPropTagFromDefinition(storeSession, bitMaskFilter.Property);
     this.Mask    = (int)bitMaskFilter.Mask;
 }
コード例 #6
0
        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();
        }