public IEnumerable<T> Resolve(ResolveFieldContext context) { var zzz3 = context.ParentType.Fields.Single(f => f.Name == context.Document.Operations.Single().SelectionSet.Selections.OfType<Field>().Single().Name); var zzz = context.Schema.FindType("order"); var zzz2 = context.Schema.Query.Fields.Single(f => f.Name == context.FieldAst.Name); var barcode = context.GetArgument<string>("barcode"); var title = context.GetArgument<string>("title"); var sellingPrice = context.GetArgument<decimal>("sellingPrice"); var results = new List<T>(); var odataParser = new ODataUriParser(_edmModel, new Uri("http://dummy"), new Uri("http://dummy/Orders?$expand=Customer&$select=Name")); odataParser.Resolver.EnableCaseInsensitive = true; //ODataUri odataUri = odataParser.ParseUri(); var translator = new OeGraphQLAstToODataUri(_edmModel, context.Schema); ODataUri odataUri = translator.Translate(context.Document.OriginalQuery); var odataQuery = odataUri.BuildUri(ODataUrlKeyDelimiter.Parentheses); var parser = new OeGetParser(_dataAdapter, _edmModel); Parsers.OeQueryContext queryContext = parser.CreateQueryContext(odataUri, 0, false, OeMetadataLevel.Minimal); Db.OeAsyncEnumerator asyncEnumerator = _dataAdapter.ExecuteEnumerator(context.UserContext, queryContext, CancellationToken.None); using (var entityAsyncEnumerator = new OeEntityAsyncEnumerator<T>(queryContext.EntryFactory, asyncEnumerator, queryContext)) { while (entityAsyncEnumerator.MoveNext().GetAwaiter().GetResult()) results.Add((T)entityAsyncEnumerator.Current); } return results; }
private OeAsyncEnumerator ExecuteGet(IEdmModel refModel, ODataUri odataUri, OeRequestHeaders headers, CancellationToken cancellationToken, IQueryable source) { var parser = new OeGetParser(refModel); _queryContext = parser.CreateQueryContext(odataUri, headers.MaxPageSize, headers.NavigationNextLink, headers.MetadataLevel); if (odataUri.Path.LastSegment is OperationSegment) { return(OeOperationHelper.ApplyBoundFunction(_queryContext)); } if (source != null) { _queryContext.QueryableSource = e => e == _queryContext.EntryFactory.EntitySet ? source : null; } if (_queryContext.IsCountSegment) { headers.ResponseContentType = OeRequestHeaders.TextDefault.ContentType; int count = _dataAdapter.ExecuteScalar <int>(_dataContext, _queryContext); return(new OeScalarAsyncEnumeratorAdapter(Task.FromResult((Object)count), cancellationToken)); } return(_dataAdapter.ExecuteEnumerator(_dataContext, _queryContext, cancellationToken)); }
private static Uri BuildNavigationNextPageLink(OeEntryFactory entryFactory, ExpandedNavigationSelectItem expandedNavigationSelectItem, Object value) { var segment = (NavigationPropertySegment)expandedNavigationSelectItem.PathToNavigationProperty.LastSegment; IEdmNavigationProperty navigationProperty = segment.NavigationProperty; if (navigationProperty.IsPrincipal()) { navigationProperty = navigationProperty.Partner; } var keys = new List <KeyValuePair <IEdmStructuralProperty, Object> >(); IEnumerator <IEdmStructuralProperty> dependentProperties = navigationProperty.DependentProperties().GetEnumerator(); foreach (IEdmStructuralProperty key in navigationProperty.PrincipalProperties()) { dependentProperties.MoveNext(); Object keyValue = entryFactory.GetAccessorByName(key.Name).GetValue(value); keys.Add(new KeyValuePair <IEdmStructuralProperty, Object>(dependentProperties.Current, keyValue)); } ResourceRangeVariableReferenceNode refNode = OeEdmClrHelper.CreateRangeVariableReferenceNode((IEdmEntitySet)segment.NavigationSource); BinaryOperatorNode filterExpression = OeGetParser.CreateFilterExpression(refNode, keys); if (expandedNavigationSelectItem.FilterOption != null) { filterExpression = new BinaryOperatorNode(BinaryOperatorKind.And, filterExpression, expandedNavigationSelectItem.FilterOption.Expression); } var segments = new ODataPathSegment[] { new EntitySetSegment((IEdmEntitySet)refNode.NavigationSource) }; var odataUri = new ODataUri() { Path = new ODataPath(segments), Filter = new FilterClause(filterExpression, refNode.RangeVariable), OrderBy = expandedNavigationSelectItem.OrderByOption, SelectAndExpand = expandedNavigationSelectItem.SelectAndExpand, Top = expandedNavigationSelectItem.TopOption, Skip = expandedNavigationSelectItem.SkipOption, QueryCount = expandedNavigationSelectItem.CountOption }; return(odataUri.BuildUri(ODataUrlKeyDelimiter.Parentheses)); }
protected OeAsyncEnumerator GetAsyncEnumerator(HttpContext httpContext, Stream responseStream, bool navigationNextLink = false, int?maxPageSize = null) { var odataParser = new ODataUriParser(_edmModel, UriHelper.GetBaseUri(httpContext.Request), UriHelper.GetUri(httpContext.Request)); odataParser.Resolver.EnableCaseInsensitive = true; ODataUri odataUri = odataParser.ParseUri(); var requestHeaders = (FrameRequestHeaders)httpContext.Request.Headers; OeRequestHeaders headers = GetRequestHeaders(requestHeaders, httpContext.Response, navigationNextLink, maxPageSize); if (odataUri.Path.LastSegment is OperationImportSegment) { return(Execute(odataUri, httpContext.Request.Body, headers, httpContext.RequestAborted)); } var getParser = new OeGetParser(_dataAdapter, _edmModel); _queryContext = getParser.CreateQueryContext(odataUri, headers.MaxPageSize, headers.NavigationNextLink, headers.MetadataLevel); return(Execute(headers, responseStream, httpContext.RequestAborted)); }
public void Test() { SelectTestDefinition[] requestMethodNames = SelectTestDefinition.GetSelectTestDefinitions(); requestMethodNames = requestMethodNames.Where(t => t.MethodName == "FilterEnum" || t.MethodName == "FilterEnumNull").ToArray(); var fixture = new DbFixtureInitDb(); var parser = new OeGetParser(fixture.OeDataAdapter, fixture.EdmModel); for (int i = 0; i < requestMethodNames.Length; i++) { OeQueryContext queryContext1 = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[i].Request), 0, false, OeMetadataLevel.Minimal); OeQueryContext queryContext2 = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[i].Request), 0, false, OeMetadataLevel.Minimal); var constantToParameterMapper = new FakeReadOnlyDictionary <ConstantNode, Db.OeQueryCacheDbParameterDefinition>(); if (queryContext1.ODataUri.Skip != null) { var constantNode = OeCacheComparerParameterValues.CreateSkipConstantNode((int)queryContext1.ODataUri.Skip.Value, queryContext1.ODataUri.Path); constantToParameterMapper.Add(constantNode, new Db.OeQueryCacheDbParameterDefinition("p_0", typeof(int))); } if (queryContext1.ODataUri.Top != null) { var constantNode = OeCacheComparerParameterValues.CreateTopConstantNode((int)queryContext1.ODataUri.Top.Value, queryContext1.ODataUri.Path); constantToParameterMapper.Add(constantNode, new Db.OeQueryCacheDbParameterDefinition($"p_{constantToParameterMapper.Count}", typeof(int))); } OeCacheContext cacheContext1 = queryContext1.CreateCacheContext(); OeCacheContext cacheContext2 = queryContext2.CreateCacheContext(); bool result = new OeCacheComparer(constantToParameterMapper, false).Compare(cacheContext1, cacheContext2); Assert.True(result); for (int j = i + 1; j < requestMethodNames.Length; j++) { queryContext2 = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[j].Request), 0, false, OeMetadataLevel.Minimal); constantToParameterMapper = new FakeReadOnlyDictionary <ConstantNode, Db.OeQueryCacheDbParameterDefinition>(); result = new OeCacheComparer(constantToParameterMapper, false).Compare(cacheContext1, cacheContext2); Assert.False(result); } } }
public void Test() { SelectTestDefinition[] requestMethodNames = TestHelper.GetSelectTestDefinitions(); requestMethodNames = requestMethodNames.Where(t => t.MethodName == "FilterEnum" || t.MethodName == "FilterEnumNull").ToArray(); var fixture = new DbFixtureInitDb(); var baseUri = new Uri("http://dummy/"); var parser = new OeGetParser(baseUri, fixture.OeDataAdapter, fixture.EdmModel); for (int i = 0; i < requestMethodNames.Length; i++) { OeParseUriContext parseUriContext1 = parser.ParseUri(fixture.ParseUri(requestMethodNames[i].Request)); OeParseUriContext parseUriContext2 = parser.ParseUri(fixture.ParseUri(requestMethodNames[i].Request)); var constantToParameterMapper = new FakeReadOnlyDictionary <ConstantNode, Db.OeQueryCacheDbParameterDefinition>(); if (parseUriContext1.ODataUri.Skip != null) { var constantNode = OeODataUriComparerParameterValues.CreateSkipConstantNode((int)parseUriContext1.ODataUri.Skip.Value, parseUriContext1.ODataUri.Path); constantToParameterMapper.Add(constantNode, new Db.OeQueryCacheDbParameterDefinition("p_0", typeof(int))); } if (parseUriContext1.ODataUri.Top != null) { var constantNode = OeODataUriComparerParameterValues.CreateTopConstantNode((int)parseUriContext1.ODataUri.Top.Value, parseUriContext1.ODataUri.Path); constantToParameterMapper.Add(constantNode, new Db.OeQueryCacheDbParameterDefinition($"p_{constantToParameterMapper.Count}", typeof(int))); } bool result = new OeODataUriComparer(constantToParameterMapper).Compare(parseUriContext1, parseUriContext2); Assert.True(result); for (int j = i + 1; j < requestMethodNames.Length; j++) { parseUriContext2 = parser.ParseUri(fixture.ParseUri(requestMethodNames[j].Request)); constantToParameterMapper = new FakeReadOnlyDictionary <ConstantNode, Db.OeQueryCacheDbParameterDefinition>(); result = new OeODataUriComparer(constantToParameterMapper).Compare(parseUriContext1, parseUriContext2); Assert.False(result); } } }
//[Fact] public void CacheCode() { var hashes = new Dictionary <int, List <String> >(); SelectTestDefinition[] requestMethodNames = SelectTestDefinition.GetSelectTestDefinitions(); var fixture = new DbFixtureInitDb(); var parser = new OeGetParser(fixture.OeDataAdapter, fixture.EdmModel); for (int i = 0; i < requestMethodNames.Length; i++) { OeQueryContext queryContext = parser.CreateQueryContext(fixture.ParseUri(requestMethodNames[i].Request), 0, false, OeMetadataLevel.Minimal); int hash = OeCacheComparer.GetCacheCode(queryContext.CreateCacheContext()); if (!hashes.TryGetValue(hash, out List <String> value)) { value = new List <String>(); hashes.Add(hash, value); } value.Add(requestMethodNames[i].MethodName); } var duplicate = hashes.Where(p => p.Value.Count > 1).Select(p => p.Value).ToArray(); }
//[Fact] public void CacheCode() { var hashes = new Dictionary <int, List <String> >(); SelectTestDefinition[] requestMethodNames = TestHelper.GetSelectTestDefinitions(); var fixture = new DbFixtureInitDb(); var parser = new OeGetParser(new Uri("http://dummy/"), fixture.OeDataAdapter, fixture.EdmModel); for (int i = 0; i < requestMethodNames.Length; i++) { OeParseUriContext parseUriContext = parser.ParseUri(new Uri(parser.BaseUri + requestMethodNames[i].Request)); int hash = OeODataUriComparer.GetCacheCode(parseUriContext); List <String> value; if (!hashes.TryGetValue(hash, out value)) { value = new List <String>(); hashes.Add(hash, value); } value.Add(requestMethodNames[i].MethodName); } var duplicate = hashes.Where(p => p.Value.Count > 1).Select(p => p.Value).ToArray(); }
private static Uri BuildNavigationNextPageLink(IEdmModel edmModel, OeEntryFactory entryFactory, ExpandedNavigationSelectItem expandedNavigationSelectItem, Object value) { SingleValueNode filterExpression; ResourceRangeVariableReferenceNode refNode; var segment = (NavigationPropertySegment)expandedNavigationSelectItem.PathToNavigationProperty.LastSegment; IEdmNavigationProperty navigationProperty = segment.NavigationProperty; if (navigationProperty.ContainsTarget) { ModelBuilder.ManyToManyJoinDescription joinDescription = edmModel.GetManyToManyJoinDescription(navigationProperty); navigationProperty = joinDescription.JoinNavigationProperty.Partner; IEdmEntitySet joinNavigationSource = OeEdmClrHelper.GetEntitySet(edmModel, joinDescription.JoinNavigationProperty); ResourceRangeVariableReferenceNode joinRefNode = OeEdmClrHelper.CreateRangeVariableReferenceNode(joinNavigationSource, "d"); IEdmEntitySet targetNavigationSource = OeEdmClrHelper.GetEntitySet(edmModel, joinDescription.TargetNavigationProperty); ResourceRangeVariableReferenceNode targetRefNode = OeEdmClrHelper.CreateRangeVariableReferenceNode(targetNavigationSource); var anyNode = new AnyNode(new Collection <RangeVariable>() { joinRefNode.RangeVariable, targetRefNode.RangeVariable }, joinRefNode.RangeVariable) { Source = new CollectionNavigationNode(targetRefNode, joinDescription.TargetNavigationProperty.Partner, null), Body = OeGetParser.CreateFilterExpression(joinRefNode, GetKeys(navigationProperty)) }; refNode = targetRefNode; filterExpression = anyNode; } else { if (navigationProperty.IsPrincipal()) { navigationProperty = navigationProperty.Partner; } refNode = OeEdmClrHelper.CreateRangeVariableReferenceNode((IEdmEntitySetBase)segment.NavigationSource); filterExpression = OeGetParser.CreateFilterExpression(refNode, GetKeys(navigationProperty)); } if (expandedNavigationSelectItem.FilterOption != null) { filterExpression = new BinaryOperatorNode(BinaryOperatorKind.And, filterExpression, expandedNavigationSelectItem.FilterOption.Expression); } var pathSegments = new ODataPathSegment[] { new EntitySetSegment((IEdmEntitySet)refNode.NavigationSource) }; var odataUri = new ODataUri() { Path = new ODataPath(pathSegments), Filter = new FilterClause(filterExpression, refNode.RangeVariable), OrderBy = expandedNavigationSelectItem.OrderByOption, SelectAndExpand = expandedNavigationSelectItem.SelectAndExpand, Top = expandedNavigationSelectItem.TopOption, Skip = expandedNavigationSelectItem.SkipOption, QueryCount = expandedNavigationSelectItem.CountOption }; return(odataUri.BuildUri(ODataUrlKeyDelimiter.Parentheses)); List <KeyValuePair <IEdmStructuralProperty, Object> > GetKeys(IEdmNavigationProperty edmNavigationProperty) { var keys = new List <KeyValuePair <IEdmStructuralProperty, Object> >(); IEnumerator <IEdmStructuralProperty> dependentProperties = edmNavigationProperty.DependentProperties().GetEnumerator(); foreach (IEdmStructuralProperty key in edmNavigationProperty.PrincipalProperties()) { dependentProperties.MoveNext(); Object keyValue = entryFactory.GetAccessorByName(key.Name).GetValue(value); keys.Add(new KeyValuePair <IEdmStructuralProperty, Object>(dependentProperties.Current, keyValue)); } return(keys); } }