Exemplo n.º 1
0
        private Getter FormGetterByRelation(Relation relation, BoundingParameter[] parameters, out ParameterNames parameterNames,out Query query)
        {
            Getter getter;
            if (relation.HasTrivialQuery)
            {
                getter =
                    (keys, parPairs) =>
                    keys.Select(k => new KeyValuePair<Guid, IEnumerable<Guid>>(k, new[] {k})).ToArray();
                parameterNames = new ParameterNames(new string[0]);
                query = null;
            }
            else
            {
                var targetQuery =
                    relation.SelectTheBestQuery(parameters)
                        .FirstOrDefault();

                if (targetQuery == null)
                    throw new InvalidOperationException(
                        string.Format("Нет запроса для построения дерева: род. {0}, доч. {1} ",
                                      relation.ParentElement.Name,
                                      relation.ChildElement.Name));

                query = targetQuery;
                getter = (keys, parPairs) =>
                           targetQuery.GetMultipleChildResourceQuery(relation.ParentElement.Name,
                                                             parPairs.Keys.ToArray())(keys,parPairs.Values.ToArray());
                parameterNames = new ParameterNames(targetQuery.Arguments.Where(k=>!StringComparer.InvariantCultureIgnoreCase.Equals(k,relation.ParentElement.Name)));
            }
            return getter;
        }
Exemplo n.º 2
0
 public void QuerySelectionWithParamsAndNot2()
 {
     var parent = new ProjectionElement { Name = "parent" };
     var child = new ProjectionElement { Name = "child" };
     var query1 = Query.CreateTestStubQuery("", null, "parent");
     var query2 = Query.CreateTestStubMultipleQuery(parent.Name);
     var relation = new Relation
     {
         ParentElement = parent,
         ChildElement = child,
         Queries = new[]
                                          {
                                              query1, query2
                                          }
     };
     var bestQuery = relation.SelectTheBestQuery(new[] { new BoundingParameter("name", 1) }).First();
     Assert.AreSame(query2, bestQuery);
 }
Exemplo n.º 3
0
 public void QuerySelectionForParentWithNoQuery()
 {
     var parent = new ProjectionElement { Name = "parent" };
     var child = new ProjectionElement { Name = "child" };
     var query1 = Query.CreateTestStubQuery("", null);           
     var relation = new Relation
     {
         ParentElement = parent,
         ChildElement = child,
         Queries = new[]
                                          {
                                              query1
                                          }
     };
     var bestQuery = relation.SelectTheBestQuery(new BoundingParameter[0]).First();
     Assert.AreSame(query1, bestQuery);
 }
Exemplo n.º 4
0
 public void QuerySelectionWithParamsAtDifferentDepths()
 {
     var parent = new ProjectionElement { Name = "parent" };
     var child = new ProjectionElement { Name = "child" };
     var query1 = Query.CreateTestStubQuery("", null, "parent","closer");
     var query2 = Query.CreateTestStubQuery("", null, "parent","further");
     var relation = new Relation
                        {
                            ParentElement = parent,
                            ChildElement = child,
                            Queries = new[]
                                          {
                                              query1, query2
                                          }
                        };
     var bestQuery = relation.SelectTheBestQuery(new[] { new BoundingParameter("closer", 1), new BoundingParameter("further", 2) }).First();
     Assert.AreSame(query1, bestQuery);
 }