private void CheckNodeVariants(FramingPlan plan, ProjectionElement element, int depth, ParameterNames orderedParameters) { Contract.Requires(element != null); Contract.Requires(plan != null); Contract.Requires(orderedParameters != null); var nodes = MakeAllPossibleWays(element, orderedParameters, depth); var nodesWithQueries = FindMatchedQueries(nodes); foreach (var secondaryFrameNode in nodesWithQueries) { foreach (var source in secondaryFrameNode.UsingParameters .ParameterNames) { if (orderedParameters.Any(k => string.Equals(k, source, StringComparison.InvariantCultureIgnoreCase))) { // Debug.Assert(secondaryFrameNode.Query.Conversions.ContainsKey(source), "secondaryFrameNode.Query.Conversions.ContainsKey(source), source:"+source); plan.AddConversion(source, secondaryFrameNode.Query.GetConversionForParameter(source)); } } } nodesWithQueries = FillPriorityGroupAndCleanDuplicates(nodesWithQueries); var factory = new AccumulatorFactory(); foreach (var secondaryFrameNode in nodesWithQueries) { MakePlanStepFromSecondary(plan, factory, secondaryFrameNode); } }
private Accumulator<FrameNode, IEnumerable<Guid>> GetAccumulator(Relation relation,Query query) { var factory = new AccumulatorFactory(); var plan = new FramingPlan(relation.ParentElement); var acc = factory.GetOrCreateAccumulator(plan, (keys, parPairs) => query.GetMultipleChildResourceQuery(relation.ParentElement.Name,parPairs.Select(k=>k.Key).ToArray())(keys,parPairs.Select(k=>k.Value).ToArray()), relation.ParentElement, relation.ChildElement, new ParameterNames()); return acc; }
private void MakePlanStepFromSecondary(FramingPlan plan, AccumulatorFactory accumulator, SecondaryFrameNode node) { plan.AddNewStep(node.Parent, node.Current, node.UsingParameters.ParameterNames, node.AllParameters, GetAccumulatorForSecondary(plan, node, accumulator), node.PriorityGroup, node.Query); }
private Accumulator <FrameNode, IEnumerable <Guid> > GetAccumulator(Relation relation, Query query) { var factory = new AccumulatorFactory(); var plan = new FramingPlan(relation.ParentElement); var acc = factory.GetOrCreateAccumulator(plan, (keys, parPairs) => query.GetMultipleChildResourceQuery(relation.ParentElement.Name, parPairs.Select(k => k.Key).ToArray())(keys, parPairs.Select(k => k.Value).ToArray()), relation.ParentElement, relation.ChildElement, new ParameterNames()); return(acc); }
object GetDefaultValue(string selector) { if (_defaultValues == null) { _defaultValues = new Dictionary <string, object>(); } if (!_defaultValues.ContainsKey(selector)) { var expr = CompileAccessorExpression(_typeParam, selector); var acc = AccumulatorFactory.Create(Utils.StripNullableType(expr.Type)); _defaultValues[selector] = acc.GetValue(); } return(_defaultValues[selector]); }
public override void Step(T container, string selector) { var value = Accessor.Read(container, selector); if (value != null) { if (_accumulator == null) { _accumulator = AccumulatorFactory.Create(value.GetType()); } try { _accumulator.Add(value); } catch (FormatException) { } catch (InvalidCastException) { } } }
private Accumulator <FrameNode, IEnumerable <Guid> > GetAccumulatorForSecondary(FramingPlan plan, SecondaryFrameNode node, AccumulatorFactory accumulator) { return(accumulator.GetOrCreateAccumulator(plan, node.Getter, node.Parent, node.Current, node.UsingParameters.ParameterNames)); }
private void CheckNodeVariants(FramingPlan plan, ProjectionElement element, int depth, ParameterNames orderedParameters) { Contract.Requires(element != null); Contract.Requires(plan != null); Contract.Requires(orderedParameters != null); var nodes = MakeAllPossibleWays(element, orderedParameters, depth); var nodesWithQueries = FindMatchedQueries(nodes); foreach (var secondaryFrameNode in nodesWithQueries) { foreach (var source in secondaryFrameNode.UsingParameters .ParameterNames) { if (orderedParameters.Any(k => string.Equals(k, source, StringComparison.InvariantCultureIgnoreCase))) { // Debug.Assert(secondaryFrameNode.Query.Conversions.ContainsKey(source), "secondaryFrameNode.Query.Conversions.ContainsKey(source), source:"+source); plan.AddConversion(source, secondaryFrameNode.Query.GetConversionForParameter(source)); } } } nodesWithQueries = FillPriorityGroupAndCleanDuplicates(nodesWithQueries); var factory = new AccumulatorFactory(); foreach (var secondaryFrameNode in nodesWithQueries) { MakePlanStepFromSecondary(plan, factory,secondaryFrameNode); } }
private void MakePlanStepFromSecondary(FramingPlan plan, AccumulatorFactory accumulator, SecondaryFrameNode node) { plan.AddNewStep(node.Parent, node.Current, node.UsingParameters.ParameterNames, node.AllParameters, GetAccumulatorForSecondary(plan,node,accumulator), node.PriorityGroup, node.Query); }
private Accumulator<FrameNode, IEnumerable<Guid>> GetAccumulatorForSecondary(FramingPlan plan, SecondaryFrameNode node, AccumulatorFactory accumulator) { return accumulator.GetOrCreateAccumulator(plan,node.Getter, node.Parent, node.Current, node.UsingParameters.ParameterNames); }