示例#1
0
        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));
        }
示例#2
0
            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;
 }
示例#4
0
 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;
        }
示例#8
0
 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);
        }
示例#10
0
            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);
        }
示例#12
0
        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);
        }
示例#13
0
 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();
 }
示例#14
0
            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();
            }
示例#15
0
            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();
            }
示例#16
0
        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;
 }