private static async Task <Object> CreateNestedEntity(Db.OeDbEnumerator dbEnumerator, Object value) { Object entity = dbEnumerator.Current; if (entity == null) { return(null); } if (dbEnumerator.EntryFactory.ResourceInfo.IsCollection.GetValueOrDefault()) { var entityList = new List <Object>(); do { Object item = dbEnumerator.Current; if (item != null) { entityList.Add(await CreateEntity(dbEnumerator, item, item).ConfigureAwait(false)); } }while (await dbEnumerator.MoveNextAsync().ConfigureAwait(false)); return(entityList); } return(await CreateEntity(dbEnumerator, value, entity).ConfigureAwait(false)); }
public async Task SerializeAsync(OeEntryFactory entryFactory, Db.OeAsyncEnumerator asyncEnumerator, OeQueryContext queryContext) { var resourceSet = new ODataResourceSet() { Count = asyncEnumerator.Count }; _writer.WriteStart(resourceSet); Object buffer = null; int count = 0; var dbEnumerator = new Db.OeDbEnumerator(asyncEnumerator, entryFactory); while (await dbEnumerator.MoveNextAsync().ConfigureAwait(false)) { Object value = dbEnumerator.Current; await WriteEntry(dbEnumerator, value, _queryContext.NavigationNextLink).ConfigureAwait(false); count++; buffer = dbEnumerator.ClearBuffer(); } if (queryContext.PageSize > 0 && count > 0 && (asyncEnumerator.Count ?? Int32.MaxValue) > count) { resourceSet.NextPageLink = BuildNextPageLink(queryContext, buffer); } _writer.WriteEnd(); }
public OeGraphqlAsyncEnumerator(IAsyncEnumerator <Object> asyncEnumerator, OeEntryFactory entryFactory, CancellationToken cancellationToken) { _dbEnumerator = new Db.OeDbEnumerator(asyncEnumerator, entryFactory); _cancellationToken = cancellationToken; _isFirstMoveNext = true; Current = NullCurrent; }
public OeGraphqlAsyncEnumerator(Db.OeAsyncEnumerator asyncEnumerator, OeEntryFactory entryFactory, OeQueryContext queryContext) { _dispose = asyncEnumerator; _dbEnumerator = new Db.OeDbEnumerator(asyncEnumerator, entryFactory); _queryContext = queryContext; _isFirstMoveNext = true; }
private static async Task <Object> CreateNestedEntity(Db.OeDbEnumerator dbEnumerator, Object value) { Object entity = dbEnumerator.Current; if (entity == null) { return(null); } if (dbEnumerator.EntryFactory.EdmNavigationProperty.Type.Definition is EdmCollectionType) { var entityList = new List <Object>(); do { Object item = dbEnumerator.Current; if (item != null) { entityList.Add(await CreateEntity(dbEnumerator, item, item).ConfigureAwait(false)); } }while (await dbEnumerator.MoveNext().ConfigureAwait(false)); return(entityList); } return(await CreateEntity(dbEnumerator, value, entity).ConfigureAwait(false)); }
private static async Task <Object> CreateNestedEntity(Db.OeDbEnumerator dbEnumerator, Object value, Type nestedEntityType) { Object entity = dbEnumerator.Current; if (entity == null) { return(null); } if (dbEnumerator.EntryFactory.ResourceInfo.IsCollection.GetValueOrDefault()) { Infrastructure.IGenericListWrapper listWrapper = Infrastructure.GenericListWrapper.Create(nestedEntityType); do { Object item = dbEnumerator.Current; if (item != null) { listWrapper.Add(await CreateEntity(dbEnumerator, item, item, nestedEntityType).ConfigureAwait(false)); } }while (await dbEnumerator.MoveNextAsync().ConfigureAwait(false)); return(listWrapper.List); } return(await CreateEntity(dbEnumerator, value, entity, nestedEntityType).ConfigureAwait(false)); }
private static async Task SetNavigationProperty(Db.OeDbEnumerator dbEnumerator, Object value, Dictionary <String, Object?> entity, CancellationToken cancellationToken) { Object?navigationValue = await CreateNestedEntity(dbEnumerator, value, cancellationToken).ConfigureAwait(false); var entryFactory = (OeNavigationEntryFactory)dbEnumerator.EntryFactory; entity[entryFactory.EdmNavigationProperty.Name] = navigationValue; }
private async Task WriteLazyNestedCollection(Db.OeDbEnumerator dbEnumerator) { _writer.WriteStart(new ODataResourceSet()); do { Object value = dbEnumerator.Current; if (value != null) { await WriteEntry(dbEnumerator, value, false).ConfigureAwait(false); } }while (await dbEnumerator.MoveNextAsync().ConfigureAwait(false)); _writer.WriteEnd(); }
private static async Task SetNavigationProperty(Db.OeDbEnumerator dbEnumerator, Object value, Object entity) { PropertyInfo propertyInfo = entity.GetType().GetProperty(dbEnumerator.EntryFactory.ResourceInfo.Name); Type nestedEntityType = OeExpressionHelper.GetCollectionItemType(propertyInfo.PropertyType); if (nestedEntityType == null) { nestedEntityType = propertyInfo.PropertyType; } Object navigationValue = await CreateNestedEntity(dbEnumerator, value, nestedEntityType).ConfigureAwait(false); propertyInfo.SetValue(entity, navigationValue); }
private async Task WriteNestedItem(Db.OeDbEnumerator dbEnumerator) { Object value = dbEnumerator.Current; if (value == null) { _writer.WriteStart((ODataResource)null); _writer.WriteEnd(); } else { await WriteEntry(dbEnumerator, value, false).ConfigureAwait(false); } }
private static async Task <Object> CreateEntity(Db.OeDbEnumerator dbEnumerator, Object value, Object entity, Type entityType) { if (OeExpressionHelper.IsTupleType(entity.GetType())) { value = entity; entity = CreateEntityFromTuple(entityType, entity, dbEnumerator.EntryFactory.Accessors); } foreach (OeEntryFactory navigationLink in dbEnumerator.EntryFactory.NavigationLinks) { await SetNavigationProperty(dbEnumerator.CreateChild(navigationLink), value, entity).ConfigureAwait(false); } return(entity); }
private static async Task <Dictionary <String, Object> > CreateEntity(Db.OeDbEnumerator dbEnumerator, Object value, Object entity) { if (OeExpressionHelper.IsTupleType(entity.GetType())) { value = entity; } Dictionary <String, Object> dictionary = CreateEntity(entity, dbEnumerator.EntryFactory.Accessors); foreach (OeEntryFactory navigationLink in dbEnumerator.EntryFactory.NavigationLinks) { await SetNavigationProperty(dbEnumerator.CreateChild(navigationLink), value, dictionary).ConfigureAwait(false); } return(dictionary); }
private async Task WriteNavigationLink(Db.OeDbEnumerator dbEnumerator) { _writer.WriteStart(dbEnumerator.EntryFactory.ResourceInfo); if (dbEnumerator.EntryFactory.ResourceInfo.IsCollection.GetValueOrDefault()) { if (dbEnumerator.EntryFactory.CountOption.GetValueOrDefault()) { await WriteEagerNestedCollection(dbEnumerator).ConfigureAwait(false); } else { await WriteLazyNestedCollection(dbEnumerator).ConfigureAwait(false); } } else { await WriteNestedItem(dbEnumerator); } _writer.WriteEnd(); }
private async Task WriteEntry(Db.OeDbEnumerator dbEnumerator, Object value, bool navigationNextLink) { OeEntryFactory entryFactory = dbEnumerator.EntryFactory; ODataResource entry = CreateEntry(entryFactory, value); _writer.WriteStart(entry); for (int i = 0; i < entryFactory.NavigationLinks.Count; i++) { await WriteNavigationLink(dbEnumerator.CreateChild(entryFactory.NavigationLinks[i])).ConfigureAwait(false); } if (navigationNextLink) { foreach (ExpandedNavigationSelectItem item in _queryContext.GetExpandedNavigationSelectItems()) { WriteNavigationNextLink(entryFactory, item, value); } } _writer.WriteEnd(); }
private async Task WriteEagerNestedCollection(Db.OeDbEnumerator dbEnumerator) { var items = new List <Object>(); do { Object value = dbEnumerator.Current; if (value != null) { items.Add(value); } }while (await dbEnumerator.MoveNextAsync().ConfigureAwait(false)); _writer.WriteStart(new ODataResourceSet() { Count = items.Count }); for (int i = 0; i < items.Count; i++) { await WriteEntry(dbEnumerator, items[i], false).ConfigureAwait(false); } _writer.WriteEnd(); }
private static async Task SetNavigationProperty(Db.OeDbEnumerator dbEnumerator, Object value, Dictionary <String, Object> entity) { Object navigationValue = await CreateNestedEntity(dbEnumerator, value).ConfigureAwait(false); entity[dbEnumerator.EntryFactory.ResourceInfo.Name] = navigationValue; }
public OeGraphqlAsyncEnumerator(IAsyncEnumerator <Object> asyncEnumerator, OeEntryFactory entryFactory) { _dbEnumerator = new Db.OeDbEnumerator(asyncEnumerator, entryFactory); _isFirstMoveNext = true; }