public IPredicate Instantiate(IPredicateInfo info, IDictionary <string, ITestVariable> variables) { object reference = null; if (info is IReferencePredicateInfo) { reference = (info as IReferencePredicateInfo).Reference; if ((info as IReferencePredicateInfo).Reference is string) { if (((info as IReferencePredicateInfo).Reference as string).StartsWith("@")) { if (variables == null) { throw new ArgumentException("The dictionary of variables can't be null", nameof(variables)); } var key = ((info as IReferencePredicateInfo).Reference as string).Substring(1); if (!variables.ContainsKey(key)) { throw new NBiException($"The predicate uses the variable '{key}' as a reference but this variable is not defined."); } reference = variables[key]; } } } return(Instantiate(info.ComparerType, info.ColumnType, info.Not , reference , (info as ICultureSensitivePredicateInfo)?.Culture , (info as ICaseSensitivePredicateInfo)?.StringComparison ?? StringComparison.InvariantCulture , (info as ISecondOperandPredicateInfo)?.SecondOperand )); }
public IPredicate Instantiate(IPredicateInfo info) => Instantiate(info.ComparerType, info.ColumnType, info.Not , info is IReferencePredicateInfo ? (info as IReferencePredicateInfo).Reference : null , info is ICultureSensitivePredicateInfo ? (info as ICultureSensitivePredicateInfo).Culture : null , info is ICaseSensitivePredicateInfo ? (info as ICaseSensitivePredicateInfo).StringComparison : StringComparison.InvariantCulture , info is ISecondOperandPredicateInfo ? (info as ISecondOperandPredicateInfo).SecondOperand : null );
public IPredicate Get(IPredicateInfo info) { switch (info.ColumnType) { case ResultSet.ColumnType.Text: switch (info.ComparerType) { case ComparerType.LessThan: return(new TextLessThan(info.Reference)); case ComparerType.LessThanOrEqual: return(new TextLessThanOrEqual(info.Reference)); case ComparerType.Equal: return(new TextEqual(info.Reference)); case ComparerType.MoreThanOrEqual: return(new TextMoreThanOrEqual(info.Reference)); case ComparerType.MoreThan: return(new TextMoreThan(info.Reference)); case ComparerType.Null: return(new TextNull()); case ComparerType.Empty: return(new TextEmpty()); case ComparerType.NullOrEmpty: return(new TextNullOrEmpty()); case ComparerType.LowerCase: return(new TextLowerCase()); case ComparerType.UpperCase: return(new TextUpperCase()); case ComparerType.StartsWith: return(new TextStartsWith(info.Reference, info.StringComparison)); case ComparerType.EndsWith: return(new TextEndsWith(info.Reference, info.StringComparison)); case ComparerType.Contains: return(new TextContains(info.Reference, info.StringComparison)); case ComparerType.MatchesRegex: return(new TextMatchesRegex(info.Reference, info.StringComparison)); default: throw new ArgumentOutOfRangeException($"Text columns don't support the {info.ComparerType.ToString()} comparer."); } case ResultSet.ColumnType.Numeric: switch (info.ComparerType) { case ComparerType.LessThan: return(new NumericLessThan(info.Reference)); case ComparerType.LessThanOrEqual: return(new NumericLessThanOrEqual(info.Reference)); case ComparerType.Equal: return(new NumericEqual(info.Reference)); case ComparerType.MoreThanOrEqual: return(new NumericMoreThanOrEqual(info.Reference)); case ComparerType.MoreThan: return(new NumericMoreThan(info.Reference)); case ComparerType.Null: return(new NumericNull()); case ComparerType.WithinRange: return(new NumericWithinRange(info.Reference)); case ComparerType.Integer: return(new NumericInteger()); case ComparerType.Modulo: return(new NumericModulo(info.SecondOperand, info.Reference)); default: throw new ArgumentOutOfRangeException($"Numeric columns don't support {info.ComparerType.ToString()} comparer."); } case ResultSet.ColumnType.DateTime: switch (info.ComparerType) { case ComparerType.LessThan: return(new DateTimeLessThan(info.Reference)); case ComparerType.LessThanOrEqual: return(new DateTimeLessThanOrEqual(info.Reference)); case ComparerType.Equal: return(new DateTimeEqual(info.Reference)); case ComparerType.MoreThanOrEqual: return(new DateTimeMoreThanOrEqual(info.Reference)); case ComparerType.MoreThan: return(new DateTimeMoreThan(info.Reference)); case ComparerType.Null: return(new DateTimeNull()); case ComparerType.WithinRange: return(new DateTimeWithinRange(info.Reference)); case ComparerType.OnTheDay: return(new DateTimeOnTheDay()); case ComparerType.OnTheHour: return(new DateTimeOnTheHour()); case ComparerType.OnTheMinute: return(new DateTimeOnTheMinute()); default: throw new ArgumentOutOfRangeException($"DateTime columns don't support {info.ComparerType.ToString()} comparer."); } case ResultSet.ColumnType.Boolean: switch (info.ComparerType) { case ComparerType.Equal: return(new BooleanEqual(info.Reference)); case ComparerType.Null: return(new BooleanNull()); case ComparerType.True: return(new BooleanTrue()); case ComparerType.False: return(new BooleanFalse()); default: throw new ArgumentOutOfRangeException($"Boolean columns only support Equal, Null, True and False comparers and not the {info.ComparerType.ToString()} comparer."); } default: break; } throw new ArgumentOutOfRangeException(); }
public PredicateFilter(IEnumerable <IColumnVariable> variables, IEnumerable <IColumnExpression> expressions, IPredicateInfo predicateInfo) { this.variables = variables; this.expressions = expressions; this.predicateInfo = predicateInfo; }
public BasePredicateFilter Instantiate(IEnumerable <IColumnAlias> aliases, IEnumerable <IColumnExpression> expressions, IPredicateInfo predicateInfo) { if (string.IsNullOrEmpty(predicateInfo.Operand)) { throw new ArgumentException("You must specify an operand for a predicate. The operand is the column or alias or expression on which the predicate will be evaluated."); } var factory = new PredicateFactory(); var predicate = factory.Instantiate(predicateInfo); var pf = new SinglePredicateFilter(aliases, expressions, predicateInfo.Operand, predicate.Execute, predicate.ToString); return(pf); }
public IPredicate Get(IPredicateInfo info) { switch (info.ColumnType) { case NBi.Core.ResultSet.ColumnType.Text: switch (info.ComparerType) { case ComparerType.LessThan: return(new TextLessThan()); case ComparerType.LessThanOrEqual: return(new TextLessThanOrEqual()); case ComparerType.Equal: return(new TextEqual()); case ComparerType.MoreThanOrEqual: return(new TextMoreThanOrEqual()); case ComparerType.MoreThan: return(new TextMoreThan()); default: break; } break; case NBi.Core.ResultSet.ColumnType.Numeric: switch (info.ComparerType) { case ComparerType.LessThan: return(new NumericLessThan()); case ComparerType.LessThanOrEqual: return(new NumericLessThanOrEqual()); case ComparerType.Equal: return(new NumericEqual()); case ComparerType.MoreThanOrEqual: return(new NumericMoreThanOrEqual()); case ComparerType.MoreThan: return(new NumericMoreThan()); default: break; } break; case NBi.Core.ResultSet.ColumnType.DateTime: switch (info.ComparerType) { case ComparerType.LessThan: return(new DateTimeLessThan()); case ComparerType.LessThanOrEqual: return(new DateTimeLessThanOrEqual()); case ComparerType.Equal: return(new DateTimeEqual()); case ComparerType.MoreThanOrEqual: return(new DateTimeMoreThanOrEqual()); case ComparerType.MoreThan: return(new DateTimeMoreThan()); default: break; } break; case NBi.Core.ResultSet.ColumnType.Boolean: if (info.ComparerType == ComparerType.Equal) { return(new BooleanEqual()); } else { throw new ArgumentException("Boolean columns only support Equal comparers and not More or Less Than comparers."); } default: break; } throw new ArgumentOutOfRangeException(); }
public PredicateFilter Instantiate(IEnumerable <IColumnAlias> aliases, IEnumerable <IColumnExpression> expressions, IPredicateInfo predicateInfo) { var factory = new PredicateFactory(); var predicate = factory.Get(predicateInfo); var pf = new PredicateFilter(aliases, expressions, predicateInfo.Name, predicate.Apply, predicate.ToString); return(pf); }