public async Task ExecuteAsync(ODataUri odataUri, OeRequestHeaders headers, Stream stream, CancellationToken cancellationToken) { Object dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); OeQueryContext queryContext = CreateQueryContext(odataUri, headers.MaxPageSize, headers.NavigationNextLink, headers.MetadataLevel); if (queryContext.IsCountSegment) { headers.ResponseContentType = OeRequestHeaders.TextDefault.ContentType; int count = _dataAdapter.ExecuteScalar <int>(dataContext, queryContext); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(count.ToString(CultureInfo.InvariantCulture)); stream.Write(buffer, 0, buffer.Length); } else { using (Db.OeAsyncEnumerator asyncEnumerator = _dataAdapter.ExecuteEnumerator(dataContext, queryContext, cancellationToken)) await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, stream).ConfigureAwait(false); } } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } }
public static int GetMaxPageSize(HttpRequestHeaders requestHeaders) { ((IDictionary <String, StringValues>)requestHeaders).TryGetValue("Prefer", out StringValues preferHeader); var headers = OeRequestHeaders.Parse(requestHeaders.HeaderAccept, preferHeader); return(headers.MaxPageSize); }
public async Task ExecuteAsync(ODataUri odataUri, OeRequestHeaders headers, Stream stream, CancellationToken cancellationToken) { OeParseUriContext parseUriContext = ParseUri(odataUri); parseUriContext.Headers = headers; parseUriContext.EntitySetAdapter = _dataAdapter.GetEntitySetAdapter(parseUriContext.EntitySet.Name); Object dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); if (parseUriContext.IsCountSegment) { int count = _dataAdapter.ExecuteScalar <int>(dataContext, parseUriContext); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(count.ToString()); stream.Write(buffer, 0, buffer.Length); } else { using (Db.OeEntityAsyncEnumerator asyncEnumerator = _dataAdapter.ExecuteEnumerator(dataContext, parseUriContext, cancellationToken)) await Writers.OeGetWriter.SerializeAsync(BaseUri, parseUriContext, asyncEnumerator, stream).ConfigureAwait(false); } } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } }
public OeRequestHeaders SetMaxPageSize(int maxPageSize) { if (MaxPageSize == maxPageSize) { return(this); } OeRequestHeaders requestHeaders = Clone(); requestHeaders.MaxPageSize = maxPageSize; return(requestHeaders); }
public OeRequestHeaders SetNavigationNextLink(bool navigationNextLink = false) { if (NavigationNextLink == navigationNextLink) { return(this); } OeRequestHeaders requestHeaders = Clone(); requestHeaders.NavigationNextLink = navigationNextLink; return(requestHeaders); }
public async Task ExecuteGetAsync(Uri requestUri, OeRequestHeaders headers, Stream responseStream, CancellationToken cancellationToken) { ODataUri odataUri = ParseUri(EdmModel, BaseUri, requestUri, _serviceProvider); if (odataUri.Path.LastSegment is OperationImportSegment) { await ExecuteOperationAsync(odataUri, headers, null, responseStream, cancellationToken).ConfigureAwait(false); } else { await ExecuteQueryAsync(odataUri, headers, responseStream, cancellationToken).ConfigureAwait(false); } }
public async Task ExecuteGetAsync(Uri requestUri, OeRequestHeaders headers, Stream responseStream, CancellationToken cancellationToken) { var odataParser = new ODataUriParser(_model, _baseUri, requestUri); odataParser.Resolver.EnableCaseInsensitive = true; ODataUri odataUri = odataParser.ParseUri(); if (odataUri.Path.LastSegment is OperationImportSegment) { await ExecuteOperationAsync(odataUri, headers, null, responseStream, cancellationToken).ConfigureAwait(false); } else { await ExecuteQueryAsync(odataUri, headers, responseStream, cancellationToken).ConfigureAwait(false); } }
public async Task ExecutePostAsync(Uri requestUri, OeRequestHeaders headers, Stream requestStream, Stream responseStream, CancellationToken cancellationToken) { ODataUri odataUri = ParseUri(EdmModel, BaseUri, requestUri, _serviceProvider); if (odataUri.Path.LastSegment.Identifier == "$batch") { await ExecuteBatchAsync(requestStream, responseStream, headers.ContentType, cancellationToken).ConfigureAwait(false); } else if (odataUri.Path.LastSegment is OperationImportSegment) { await ExecuteOperationAsync(odataUri, headers, requestStream, responseStream, cancellationToken).ConfigureAwait(false); } else { await ExecuteQueryAsync(odataUri, headers, responseStream, cancellationToken).ConfigureAwait(false); } }
public async Task ExecuteAsync(Uri requestUri, OeRequestHeaders headers, Stream stream, CancellationToken cancellationToken) { OeParseUriContext parseUriContext = ParseUri(requestUri); parseUriContext.Headers = headers; parseUriContext.EntitySetAdapter = _dataAdapter.GetEntitySetAdapter(parseUriContext.EntitySet.Name); Object dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); if (parseUriContext.IsCountSegment) { int count = _dataAdapter.ExecuteScalar <int>(parseUriContext, dataContext); byte[] buffer = System.Text.Encoding.UTF8.GetBytes(count.ToString()); stream.Write(buffer, 0, buffer.Length); } else { long?count = null; if (parseUriContext.ODataUri.QueryCount.GetValueOrDefault()) { var countParseUriContext = new OeParseUriContext(parseUriContext.EdmModel , parseUriContext.ODataUri , parseUriContext.EntitySet , parseUriContext.ParseNavigationSegments , true); countParseUriContext.Headers = parseUriContext.Headers; countParseUriContext.EntitySetAdapter = parseUriContext.EntitySetAdapter; count = _dataAdapter.ExecuteScalar <int>(countParseUriContext, dataContext); } using (Db.OeEntityAsyncEnumerator asyncEnumerator = _dataAdapter.ExecuteEnumerator(parseUriContext, dataContext, cancellationToken)) await Writers.OeGetWriter.SerializeAsync(BaseUri, parseUriContext, asyncEnumerator, stream, count).ConfigureAwait(false); } } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } }
public async Task ExecutePostAsync(Uri requestUri, OeRequestHeaders headers, Stream requestStream, Stream responseStream, CancellationToken cancellationToken) { var odataParser = new ODataUriParser(_model, _baseUri, requestUri); odataParser.Resolver.EnableCaseInsensitive = true; ODataUri odataUri = odataParser.ParseUri(); if (odataUri.Path.LastSegment.Identifier == "$batch") { await ExecuteBatchAsync(responseStream, responseStream, cancellationToken, headers.ContentType); } else if (odataUri.Path.LastSegment is OperationImportSegment) { await ExecuteOperationAsync(odataUri, headers, requestStream, responseStream, cancellationToken); } else { await ExecuteQueryAsync(odataUri, headers, responseStream, cancellationToken); } }
public static OeRequestHeaders Parse(String acceptHeader, String preferHeader) { OeRequestHeaders requestHeaders = Parse(acceptHeader); if (String.IsNullOrEmpty(preferHeader)) { return(requestHeaders); } var message = new Infrastructure.OeInMemoryMessage(_emptyStream, null); message.SetHeader("Prefer", preferHeader); ODataPreferenceHeader preferenceHeader = message.PreferHeader(); if (preferenceHeader.MaxPageSize == null) { return(requestHeaders); } return(requestHeaders.SetMaxPageSize(preferenceHeader.MaxPageSize.GetValueOrDefault())); }
public async Task ExecuteAsync(ODataUri odataUri, Stream requestStream, OeRequestHeaders headers, Stream responseStream, CancellationToken cancellationToken) { Object dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); using (Db.OeAsyncEnumerator asyncEnumerator = GetAsyncEnumerator(odataUri, requestStream, headers, dataContext, out Type returnClrType)) { if (returnClrType == null || returnClrType.IsPrimitive || returnClrType == typeof(String)) { if (await asyncEnumerator.MoveNextAsync().ConfigureAwait(false) && asyncEnumerator.Current != null) { headers.ResponseContentType = OeRequestHeaders.TextDefault.ContentType; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(asyncEnumerator.Current.ToString()); responseStream.Write(buffer, 0, buffer.Length); } else { headers.ResponseContentType = null; } } else { OeQueryContext queryContext = CreateQueryContext(odataUri, headers.MetadataLevel, returnClrType); await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, responseStream).ConfigureAwait(false); } } } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } }
protected OeRequestHeaders(OeRequestHeaders clone) : this(clone.MimeType, clone.MetadataLevel, clone.Streaming, clone.Charset) { MaxPageSize = clone.MaxPageSize; }
public async Task ExecuteQueryAsync(Uri requestUri, OeRequestHeaders headers, Stream stream, CancellationToken cancellationToken) { var parser = new OeGetParser(_baseUri, _dataAdapter, _model); await parser.ExecuteAsync(requestUri, headers, stream, cancellationToken).ConfigureAwait(false); }
public async Task ExecuteOperationAsync(ODataUri odataUri, OeRequestHeaders headers, Stream?requestStream, Stream responseStream, CancellationToken cancellationToken) { var parser = new Parsers.OePostParser(EdmModel.GetEdmModel(odataUri.Path), _serviceProvider); await parser.ExecuteAsync(odataUri, requestStream, headers, responseStream, cancellationToken).ConfigureAwait(false); }
public async Task ExecuteQueryAsync(ODataUri odataUri, OeRequestHeaders headers, Stream responseStream, CancellationToken cancellationToken) { var parser = new Parsers.OeGetParser(EdmModel.GetEdmModel(odataUri.Path), ModelBoundProvider); await parser.ExecuteAsync(odataUri, headers, responseStream, cancellationToken).ConfigureAwait(false); }
public async Task ExecuteOperationAsync(ODataUri odataUri, OeRequestHeaders headers, Stream requestStream, Stream responseStream, CancellationToken cancellationToken) { var parser = new OePostParser(_dataAdapter, _model); await parser.ExecuteAsync(odataUri, requestStream, headers, responseStream, cancellationToken).ConfigureAwait(false); }
public async Task ExecuteAsync(ODataUri odataUri, Stream requestStream, OeRequestHeaders headers, Stream responseStream, CancellationToken cancellationToken) { var importSegment = (OperationImportSegment)odataUri.Path.LastSegment; List <KeyValuePair <String, Object> > parameters = GetParameters(importSegment, requestStream, headers.ContentType); Object dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); var operation = (EdmOperation)importSegment.OperationImports.Single().Operation; String procedureName; if (String.IsNullOrEmpty(operation.Namespace)) { procedureName = operation.Name; } else { procedureName = operation.Namespace + "." + operation.Name; } Type returnClrType = null; if (operation.ReturnType != null) { IEdmTypeReference returnEdmTypeReference = operation.ReturnType; if (returnEdmTypeReference is IEdmCollectionTypeReference) { returnEdmTypeReference = (returnEdmTypeReference.Definition as IEdmCollectionType).ElementType; } returnClrType = OeEdmClrHelper.GetClrType(_model, returnEdmTypeReference.Definition); } using (Db.OeEntityAsyncEnumerator asyncEnumerator = _dataAdapter.ExecuteProcedure(dataContext, procedureName, parameters, returnClrType)) { if (returnClrType == null) { if (await asyncEnumerator.MoveNextAsync() && asyncEnumerator.Current != null) { byte[] buffer = System.Text.Encoding.UTF8.GetBytes(asyncEnumerator.Current.ToString()); responseStream.Write(buffer, 0, buffer.Length); } } else { String entitySetName = _dataAdapter.EntitySetMetaAdapters.FindByClrType(returnClrType).EntitySetName; IEdmEntitySet entitySet = _model.FindDeclaredEntitySet(entitySetName); Parsers.OePropertyAccessor[] accessors = Parsers.OePropertyAccessor.CreateFromType(returnClrType, entitySet); Parsers.OeEntryFactory entryFactory = Parsers.OeEntryFactory.CreateEntryFactory(entitySet, accessors); var parseUriContext = new Parsers.OeParseUriContext(_model, odataUri, entitySet, null, false) { EntryFactory = entryFactory, Headers = headers }; await Writers.OeGetWriter.SerializeAsync(_baseUri, parseUriContext, asyncEnumerator, responseStream).ConfigureAwait(false); } } } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } await Task.CompletedTask; }
public Db.OeAsyncEnumerator GetAsyncEnumerator(ODataUri odataUri, Stream requestStream, OeRequestHeaders headers, Object dataContext, out Type returnClrType) { var importSegment = (OperationImportSegment)odataUri.Path.LastSegment; List <KeyValuePair <String, Object> > parameters = GetParameters(importSegment, requestStream, headers.ContentType); IEdmOperationImport operationImport = importSegment.OperationImports.Single(); returnClrType = null; if (operationImport.Operation.ReturnType != null) { IEdmTypeReference returnEdmTypeReference = operationImport.Operation.ReturnType; if (returnEdmTypeReference is IEdmCollectionTypeReference) { returnEdmTypeReference = (returnEdmTypeReference.Definition as IEdmCollectionType).ElementType; } returnClrType = OeEdmClrHelper.GetClrType(_model, returnEdmTypeReference.Definition); } if (_model.IsDbFunction(operationImport.Operation)) { return(_dataAdapter.OperationAdapter.ExecuteFunction(dataContext, operationImport.Name, parameters, returnClrType)); } else { return(_dataAdapter.OperationAdapter.ExecuteProcedure(dataContext, operationImport.Name, parameters, returnClrType)); } }