Beispiel #1
0
 public static BaseFilter operator |(BaseFilter lbq, BaseFilter rbq)
 {
     var q = new BaseFilter();
       var bq = new BoolBaseFilterDescriptor();
       bq._ShouldFilters = new[] { lbq, rbq };
       q.BoolBaseFilterDescriptor = bq;
       return q;
 }
Beispiel #2
0
        public static BaseFilter operator !(BaseFilter lbq)
        {
            var f = new BaseFilter();
              var fq = new BoolBaseFilterDescriptor();
              fq._MustNotFilters = new[] { lbq };

              f.BoolFilterDescriptor = fq;
              return f;
        }
Beispiel #3
0
        public static BaseFilter operator !(BaseFilter lbq)
        {
            if (lbq == null || lbq.IsConditionless)
                return new BaseFilter { IsConditionless = true };

            var f = new BaseFilter();
            var fq = new BoolBaseFilterDescriptor();
            fq._MustNotFilters = new[] { lbq };

            f.BoolFilterDescriptor = fq;
            return f;
        }
Beispiel #4
0
        public static BaseFilter operator &(BaseFilter lbq, BaseFilter rbq)
        {
            var f = new BaseFilter();
            var fq = new BoolBaseFilterDescriptor();
            f.BoolFilterDescriptor = fq;

            if (lbq.BoolFilterDescriptor == null && rbq.BoolFilterDescriptor == null)
            {
                fq._MustFilters = new[] { lbq, rbq };
                return f;
            }
            if (lbq.BoolFilterDescriptor != null && rbq.BoolFilterDescriptor != null)
            {
                if (lbq.BoolFilterDescriptor._HasOnlyMustNot() && rbq.BoolFilterDescriptor._HasOnlyMustNot())
                {
                    fq._MustFilters = null;
                    fq._MustNotFilters = lbq.MergeMustNotFilters(rbq);
                }
                else if (lbq.BoolFilterDescriptor.CanJoinMust() && rbq.BoolFilterDescriptor.CanJoinMust())
                    fq._MustFilters = lbq.MergeMustFilters(rbq);
                else
                    fq._MustFilters = new[] { lbq, rbq };

                if (lbq.BoolFilterDescriptor.CanJoinMustNot() && rbq.BoolFilterDescriptor.CanJoinMustNot())
                    fq._MustNotFilters = lbq.MergeMustNotFilters(rbq);
                return f;
              }
              if (lbq.BoolFilterDescriptor != null)
              {
            if (lbq.BoolFilterDescriptor._HasOnlyMustNot())
            {
              fq._MustNotFilters = lbq.BoolFilterDescriptor._MustNotFilters;
              fq._MustFilters = new[] { rbq };
              return f;
            }

            else if (lbq.BoolFilterDescriptor.CanJoinMust())
              fq._MustFilters = lbq.MergeMustFilters(rbq);
            else
              fq._MustFilters = new[] { lbq, rbq };

            if (lbq.BoolFilterDescriptor.CanJoinMustNot())
              fq._MustNotFilters = lbq.MergeMustNotFilters(rbq);
            return f;
              }

              if (rbq.BoolFilterDescriptor._HasOnlyMustNot())
              {
            fq._MustNotFilters = rbq.BoolFilterDescriptor._MustNotFilters;
            fq._MustFilters = new[] { lbq };
            return f;
              }

              if (rbq.BoolFilterDescriptor.CanJoinMust())
            fq._MustFilters = rbq.MergeMustFilters(lbq);
              else
            fq._MustFilters = new[] { rbq, lbq };

              if (rbq.BoolFilterDescriptor.CanJoinMustNot())
            fq._MustNotFilters = rbq.MergeMustNotFilters(lbq);
              return f;
        }
Beispiel #5
0
 private static void JoinShouldOnSide(BaseFilter lbq, BaseFilter rbq, BoolBaseFilterDescriptor bq)
 {
     bq._ShouldFilters = lbq.MergeShouldFilters(rbq);
 }
Beispiel #6
0
        public static BaseFilter operator |(BaseFilter lbq, BaseFilter rbq)
        {
            var f = new BaseFilter();
              var fq = new BoolBaseFilterDescriptor();
              fq._ShouldFilters = new[] { lbq, rbq };
              f.BoolFilterDescriptor = fq;

              if (lbq.BoolFilterDescriptor == null && rbq.BoolFilterDescriptor == null)
              {
            fq._ShouldFilters = lbq.MergeShouldFilters(rbq);
            return f;
              }
              else if (lbq.BoolFilterDescriptor != null && rbq.BoolFilterDescriptor == null)
              {
            JoinShouldOnSide(lbq, rbq, fq);
              }
              else if (rbq.BoolFilterDescriptor != null && lbq.BoolFilterDescriptor == null)
              {
            JoinShouldOnSide(rbq, lbq, fq);
              }
              else
              {
            if (lbq.BoolFilterDescriptor.CanJoinShould() && rbq.BoolFilterDescriptor.CanJoinShould())
              fq._ShouldFilters = lbq.MergeShouldFilters(rbq);
            else
              fq._ShouldFilters = new[] { lbq, rbq };
              }

              return f;
        }
Beispiel #7
0
        public static BaseFilter operator |(BaseFilter leftFilter, BaseFilter rightFilter)
        {
            var defaultFilter = new BaseFilter() { IsConditionless = true };
            leftFilter = leftFilter ?? defaultFilter;
            rightFilter = rightFilter ?? defaultFilter;
            var combined = new[] { leftFilter, rightFilter };

            if (combined.Any(bf => bf.IsConditionless))
                return combined.FirstOrDefault(bf => !bf.IsConditionless) ?? defaultFilter;

            var leftBoolFilter = leftFilter.BoolFilterDescriptor;
            var rightBoolFilter = rightFilter.BoolFilterDescriptor;

            var f = new BaseFilter();
            var fq = new BoolBaseFilterDescriptor();
            fq._ShouldFilters = new[] { leftFilter, rightFilter };
            f.BoolFilterDescriptor = fq;

            //if neither the left nor the right side represent a bool filter join them
            if (leftFilter.BoolFilterDescriptor == null && rightFilter.BoolFilterDescriptor == null)
            {
                fq._ShouldFilters = leftFilter.MergeShouldFilters(rightFilter);
                return f;
            }
            //if the left or right sight already is a bool filter determine join the non bool query side of the
            //of the operation onto the other.
            if (leftFilter.BoolFilterDescriptor != null && rightFilter.BoolFilterDescriptor == null && !leftFilter.IsStrict)
            {
                JoinShouldOnSide(leftFilter, rightFilter, fq);
            }
            else if (rightFilter.BoolFilterDescriptor != null && leftFilter.BoolFilterDescriptor == null && !rightFilter.IsStrict)
            {
                JoinShouldOnSide(rightFilter, leftFilter, fq);
            }
            //both sides already represent a bool filter
            else
            {
                //both sides report that we may merge the shoulds
                if (!leftFilter.IsStrict && !rightFilter.IsStrict
                    && leftBoolFilter.CanJoinShould()
                    && rightBoolFilter.CanJoinShould())
                    fq._ShouldFilters = leftFilter.MergeShouldFilters(rightFilter);
                else
                    //create a new nested bool with two separate should bool sections
                    fq._ShouldFilters = new[] { leftFilter, rightFilter };
            }
            return f;
        }
Beispiel #8
0
 public static BaseFilter CreateReturnFilter(Action<BaseFilter, BoolBaseFilterDescriptor> modify = null)
 {
     var returnFilter = new BaseFilter();
     var returnBoolFilter = new BoolBaseFilterDescriptor() { };
     returnFilter.BoolFilterDescriptor = returnBoolFilter;
     if (modify != null)
     {
         modify(returnFilter, returnBoolFilter);
     }
     return returnFilter;
 }
		public static FilterContainer CreateReturnFilter(Action<FilterContainer, BoolBaseFilterDescriptor> modify = null)
		{
			var returnFilter = new FilterContainer();
			var returnBoolFilter = new BoolBaseFilterDescriptor() { };
			((IFilterContainer)returnFilter).Bool = returnBoolFilter;
			if (modify != null)
			{
				modify(returnFilter, returnBoolFilter);
			}
			return returnFilter;
		}
		public static FilterContainer operator !(FilterContainer lbq)
		{
			if (lbq == null || lbq.IsConditionless)
				return new FilterContainer { IsConditionless = true };

			var f = new FilterContainer();
			var fq = new BoolBaseFilterDescriptor();
			((IBoolFilter)fq).MustNot = new[] { lbq };

			((IFilterContainer)f).Bool = fq;
			return f;
		}