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; }
public static BaseFilter operator !(BaseFilter lbq) { var f = new BaseFilter(); var fq = new BoolBaseFilterDescriptor(); fq._MustNotFilters = new[] { lbq }; f.BoolFilterDescriptor = fq; return f; }
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; }
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; }
private static void JoinShouldOnSide(BaseFilter lbq, BaseFilter rbq, BoolBaseFilterDescriptor bq) { bq._ShouldFilters = lbq.MergeShouldFilters(rbq); }
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; }
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; }
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; }