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> >()); }
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"); } }
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); }