コード例 #1
0
ファイル: PredicateFactory.cs プロジェクト: jeason0813/NBi
        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
                               ));
        }
コード例 #2
0
ファイル: PredicateFactory.cs プロジェクト: jeason0813/NBi
 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
                );
コード例 #3
0
        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();
        }
コード例 #4
0
ファイル: PredicateFilter.cs プロジェクト: kalyon/NBi
 public PredicateFilter(IEnumerable <IColumnVariable> variables, IEnumerable <IColumnExpression> expressions, IPredicateInfo predicateInfo)
 {
     this.variables     = variables;
     this.expressions   = expressions;
     this.predicateInfo = predicateInfo;
 }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: PredicateFactory.cs プロジェクト: kalyon/NBi
        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();
        }
コード例 #7
0
        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);
        }