Exemplo n.º 1
0
        public void Build_VariableAndFunctions_FunctionScalarResolverArgs()
        {
            var predicateXml = new MoreThanXml()
            {
                Reference = "#12 | text-to-upper | text-to-first-chars([ColA])"
            };

            var builder = new PredicateArgsBuilder(new ServiceLocator(), Context.None);
            var args    = builder.Execute(Core.ResultSet.ColumnType.Text, predicateXml);

            Assert.That(args, Is.AssignableTo <ReferencePredicateArgs>());

            var typedArgs = args as ReferencePredicateArgs;

            Assert.That(typedArgs.Reference, Is.TypeOf <FunctionScalarResolver <string> >());

            var function = typedArgs.Reference as FunctionScalarResolver <string>;

            Assert.That(function.Args.Resolver, Is.TypeOf <ContextScalarResolver <object> >());
        }
Exemplo n.º 2
0
        protected IResultSetFilter InstantiateFilter()
        {
            var context = new Context(Variables, ConstraintXml.Aliases, ConstraintXml.Expressions);
            var factory = new ResultSetFilterFactory(ServiceLocator);

            if (ConstraintXml.Predication != null)
            {
                var helper = new PredicateArgsBuilder(ServiceLocator, context);
                var args   = helper.Execute(ConstraintXml.Predication.ColumnType, ConstraintXml.Predication.Predicate);

                return(factory.Instantiate
                       (
                           new PredicationArgs(ConstraintXml.Predication.Operand, args)
                           , context
                       ));
            }
            else if (ConstraintXml.Combination != null)
            {
                var helper = new PredicateArgsBuilder(ServiceLocator, context);

                var predicationArgs = new List <PredicationArgs>();
                foreach (var predicationXml in ConstraintXml.Combination.Predications)
                {
                    var args = helper.Execute(predicationXml.ColumnType, predicationXml.Predicate);
                    predicationArgs.Add(new PredicationArgs(predicationXml.Operand, args));
                }

                return(factory.Instantiate
                       (
                           ConstraintXml.Combination.Operator
                           , predicationArgs
                           , context
                       ));
            }
            else
            {
                throw new ArgumentException("You must specify a predicate or a combination of predicates. None of them is specified");
            }
        }
Exemplo n.º 3
0
        protected NBiConstraint InstantiateConstraint()
        {
            RowCountConstraint ctr;
            var comparer        = ConstraintXml.Comparer as ScalarReferencePredicateXml;
            var childConstraint = BuildChildConstraint(comparer);

            IResultSetFilter filter = null;

            if (ConstraintXml.Filter != null)
            {
                var filterXml   = ConstraintXml.Filter;
                var expressions = new List <IColumnExpression>();
                if (filterXml.Expression != null)
                {
                    expressions.Add(filterXml.Expression);
                }

                var value = EvaluatePotentialVariable(comparer.Reference.ToString().Replace(" ", ""));

                var context = new Context(Variables, filterXml.Aliases, expressions);
                var factory = new ResultSetFilterFactory(ServiceLocator);
                if (filterXml.Predication != null)
                {
                    var helper = new PredicateArgsBuilder(ServiceLocator, context);
                    var args   = helper.Execute(filterXml.Predication.ColumnType, filterXml.Predication.Predicate);

                    filter = factory.Instantiate
                             (
                        new PredicationArgs(filterXml.Predication.Operand, args)
                        , context
                             );
                }

                else if (filterXml.Combination != null)
                {
                    var helper          = new PredicateArgsBuilder(ServiceLocator, context);
                    var predicationArgs = new List <PredicationArgs>();
                    foreach (var predication in filterXml.Combination.Predications)
                    {
                        var args = helper.Execute(predication.ColumnType, predication.Predicate);
                        predicationArgs.Add(new PredicationArgs(predication.Operand, args));
                    }

                    filter = factory.Instantiate
                             (
                        filterXml.Combination.Operator
                        , predicationArgs
                        , context
                             );
                }
                if ((value is string& (value as string).EndsWith("%")))
                {
                    ctr = new RowCountFilterPercentageConstraint(childConstraint, filter);
                }
                else
                {
                    ctr = new RowCountFilterConstraint(childConstraint, filter);
                }
            }
            else
            {
                ctr = new RowCountConstraint(childConstraint);
            }

            return(ctr);
        }