public OeCacheContext(OeQueryContext queryContext) { _odataUri = queryContext.ODataUri; _entitySet = queryContext.EntitySet; _parseNavigationSegments = queryContext.ParseNavigationSegments; _metadataLevel = queryContext.MetadataLevel; _navigationNextLink = queryContext.NavigationNextLink; _skipTokenParser = queryContext.SkipTokenParser; }
public async Task ExecuteAsync(ODataUri odataUri, Stream?requestStream, OeRequestHeaders headers, Stream responseStream, CancellationToken cancellationToken) { Object?dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); IAsyncEnumerator <Object>?asyncEnumerator = null; try { asyncEnumerator = GetAsyncEnumerable(odataUri, requestStream, headers, dataContext, cancellationToken, out bool isScalar).GetAsyncEnumerator(cancellationToken); if (isScalar) { if (await asyncEnumerator.MoveNextAsync().ConfigureAwait(false) && asyncEnumerator.Current != null) { headers.ResponseContentType = OeRequestHeaders.TextDefault.ContentType; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(asyncEnumerator.Current.ToString()); await responseStream.WriteAsync(buffer, 0, buffer.Length).ConfigureAwait(false); } else { headers.ResponseContentType = null; } } else { var importSegment = (OperationImportSegment)odataUri.Path.FirstSegment; IEdmEntitySet?entitySet = OeOperationHelper.GetEntitySet(importSegment.OperationImports.Single()); if (entitySet == null) { await WriteCollectionAsync(_edmModel, odataUri, asyncEnumerator, responseStream).ConfigureAwait(false); } else { OeQueryContext queryContext = CreateQueryContext(odataUri, entitySet, headers.MetadataLevel); await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, responseStream, _serviceProvider, cancellationToken).ConfigureAwait(false); } } } finally { if (asyncEnumerator != null) { await asyncEnumerator.DisposeAsync().ConfigureAwait(false); } } } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } }
public IQueryable ApplyTo(IQueryable source, Object dataContext) { if (_expression == null) { return(source); } _source = source; Expression expression = OeQueryContext.TranslateSource(EdmModel, dataContext, _expression, GetQuerySource); return(source.Provider.CreateQuery(expression)); }
public IQueryable ApplyTo(IQueryable source, Object dataContext) { if (_expression == null) { return(source); } IEdmEntitySet entitySet = _entitySet; Expression expression = OeQueryContext.TranslateSource(EdmModel, dataContext, _expression, e => e == entitySet ? source : null); return(source.Provider.CreateQuery(expression)); }
public Expression ApplySelect(Expression source, OeQueryContext queryContext) { if (queryContext.ODataUri.Path.LastSegment is CountSegment) { return(source); } var selectTranslator = new Translators.OeSelectTranslator(_joinBuilder, queryContext.ODataUri.Path, queryContext.MetadataLevel); source = selectTranslator.Build(source, queryContext); _entryFactoryFactory = selectTranslator.CreateEntryFactory; ChangeParameterType(source); return(source); }
public OeQueryExpression(IEdmModel edmModel, String query) { EdmModel = edmModel; ODataUri odataUri = OeParser.ParseUri(edmModel, new Uri(query, UriKind.Relative)); _entitySet = ((EntitySetSegment)odataUri.Path.FirstSegment).EntitySet; var queryContext = new OeQueryContext(edmModel, odataUri); Expression expression = queryContext.CreateExpression(out _); _expression = OeEnumerableToQuerableVisitor.Translate(expression); EntryFactory = queryContext.EntryFactory; }
public async Task ExecuteAsync(ODataUri odataUri, OeRequestHeaders headers, Stream stream, CancellationToken cancellationToken) { if (_modelBoundProvider != null) { _modelBoundProvider.Validate(_edmModel, odataUri); } var queryContext = new OeQueryContext(_edmModel, odataUri) { MetadataLevel = headers.MetadataLevel }; if (queryContext.ODataUri.Path.LastSegment is OperationSegment) { using (IAsyncEnumerator <Object> asyncEnumerator = OeOperationHelper.ApplyBoundFunction(queryContext).GetEnumerator()) await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, stream, cancellationToken).ConfigureAwait(false); return; } Object dataContext = null; Db.OeDataAdapter dataAdapter = queryContext.EdmModel.GetDataAdapter(queryContext.EdmModel.EntityContainer); try { dataContext = dataAdapter.CreateDataContext(); if (odataUri.Path.LastSegment is CountSegment) { 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 (IAsyncEnumerator <Object> asyncEnumerator = dataAdapter.Execute(dataContext, queryContext).GetEnumerator()) await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, stream, cancellationToken).ConfigureAwait(false); } } finally { if (dataContext != null) { dataAdapter.CloseDataContext(dataContext); } } }
public async Task ExecuteAsync(ODataUri odataUri, Stream requestStream, OeRequestHeaders headers, Stream responseStream, CancellationToken cancellationToken) { Object dataContext = null; try { dataContext = _dataAdapter.CreateDataContext(); using (IAsyncEnumerator <Object> asyncEnumerator = GetAsyncEnumerable(odataUri, requestStream, headers, dataContext, out bool isScalar).GetEnumerator()) { if (isScalar) { if (await asyncEnumerator.MoveNext(cancellationToken).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); if (queryContext == null) { await WriteCollectionAsync(_edmModel, odataUri, asyncEnumerator, responseStream, cancellationToken).ConfigureAwait(false); } else { await Writers.OeGetWriter.SerializeAsync(queryContext, asyncEnumerator, headers.ContentType, responseStream, cancellationToken).ConfigureAwait(false); } } } } finally { if (dataContext != null) { _dataAdapter.CloseDataContext(dataContext); } } }
public Expression ApplySelect(Expression source, OeQueryContext queryContext) { if (queryContext.ODataUri.Path.LastSegment is CountSegment) { return(source); } var selectTranslator = new Translators.OeSelectTranslator(queryContext.EdmModel, _joinBuilder, queryContext.ODataUri); var selectTranslatorParameters = new Translators.OeSelectTranslatorParameters() { IsDatabaseNullHighestValue = queryContext.IsDatabaseNullHighestValue, MetadataLevel = queryContext.MetadataLevel, SkipTokenNameValues = queryContext.SkipTokenNameValues }; source = selectTranslator.Build(source, ref selectTranslatorParameters, out _entryFactoryFactory); ChangeParameterType(source); return(source); }
public Expression ApplySelect(Expression source, OeQueryContext queryContext) { if (queryContext.ODataUri.SelectAndExpand == null && (queryContext.ODataUri.OrderBy == null || queryContext.PageSize == 0)) { return(source); } var selectTranslator = new OeSelectTranslator(_visitor, queryContext.ODataUri.Path); Expression selectExpression = selectTranslator.Build(source, queryContext); if (selectExpression == null) { return(source); } _entryFactory = selectTranslator.CreateEntryFactory; Type selectItemType = OeExpressionHelper.GetCollectionItemType(selectExpression.Type); _visitor = new OeQueryNodeVisitor(_model, Expression.Parameter(selectItemType), _visitor.Constans); return(selectExpression); }
public Expression Build(Expression source, OeQueryContext queryContext) { if (queryContext.ODataUri.SelectAndExpand != null) { BuildSelect(queryContext.ODataUri.SelectAndExpand, source, _visitor.Parameter, queryContext.MetadataLevel, queryContext.NavigationNextLink); } if (queryContext.ODataUri.Compute != null) { BuildCompute(queryContext.ODataUri.Compute); } if (queryContext.ODataUri.OrderBy != null) { BuildOrderBy(queryContext.ODataUri.OrderBy); } if (_selectItemInfos.Count == 0) { return(null); } return(CreateSelectExpression(source, _visitor.Parameter)); }
public Expression Build(Expression source, OeQueryContext queryContext) { OrderByClause orderBy = queryContext.ODataUri.OrderBy; SelectExpandClause selectAndExpand = queryContext.ODataUri.SelectAndExpand; ComputeClause compute = queryContext.ODataUri.Compute; if (selectAndExpand != null) { BuildSelect(selectAndExpand, source, _visitor.Parameter, queryContext.MetadataLevel, queryContext.NavigationNextLink); } if (compute != null) { BuildCompute(compute); } if (orderBy != null) { BuildOrderBy(orderBy); } if (_selectItemInfos.Count == 0 && queryContext.SkipTokenParser != null) { queryContext.SkipTokenParser.Accessors = GetAccessors(source, orderBy); return(null); } var selectExpression = CreateSelectExpression(source, _visitor.Parameter); if (queryContext.SkipTokenParser != null) { queryContext.SkipTokenParser.Accessors = GetAccessors(selectExpression, orderBy); } return(selectExpression); }
public static Expression GetExpression(IEdmModel edmModel, String query, IQueryable source) { var queryExpression = new OeQueryExpression(edmModel, query); return(OeQueryContext.TranslateSource(edmModel, null, queryExpression._expression, e => source)); }
public OeCacheContext(OeQueryContext queryContext, IReadOnlyDictionary <ConstantNode, Db.OeQueryCacheDbParameterDefinition> constantToParameterMapper) : this(queryContext) { _constantToParameterMapper = constantToParameterMapper; }