Example #1
0
        protected virtual void OnVisit <T, TRelation>(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, IEntityGraphNode <T, TRelation> node)
        {
            if (!buffer.Exists(node.Parent.Table) || !buffer.Exists(node.Table))
            {
                return;
            }
            var parent = (T)buffer.Get(node.Parent.Table);
            var child  = (TRelation)buffer.Get(node.Table);

            node.Relation.Accessor.Set(parent, child);
        }
Example #2
0
        protected virtual object OnEmit(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, ITableConfig table)
        {
            var item = buffer.Get(table);

            if (item != null)
            {
                if (TableComparer.TableConfig.Equals(sink.Table, table))
                {
                    sink.Add(item);
                }
                buffer.Remove(table);
            }
            return(item);
        }
Example #3
0
 protected virtual void Visit(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, IEntityGraphNode node)
 {
     if (node.Table != null)
     {
         this.Members.Invoke(this, "OnVisit", node.EntityType, buffer, sink, node);
         if (node.Relation != null)
         {
             this.Members.Invoke(this, "OnVisit", new[] { node.Parent.EntityType, node.Relation.RelationType }, buffer, sink, node);
         }
     }
     foreach (var child in node.Children)
     {
         this.Visit(buffer, sink, child);
     }
 }
        public IEnumerable <T> AsEnumerable <T>(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, IDatabaseReader reader)
        {
            var graph = this.GetEntityGraph(typeof(T));

            foreach (var record in reader)
            {
                this.Visitor.Visit(graph, buffer, sink, record, Defaults.Enumerator.Flags);
                foreach (var item in this.Drain <T>(sink))
                {
                    yield return(item);
                }
            }
            this.Visitor.Flush(buffer, sink);
            foreach (var item in this.Drain <T>(sink))
            {
                yield return(item);
            }
        }
Example #5
0
        protected virtual void OnVisit <T, TRelation>(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, ICollectionEntityGraphNode <T, TRelation> node)
        {
            if (!buffer.Exists(node.Parent.Table) || !buffer.Exists(node.Table))
            {
                return;
            }
            var parent   = (T)buffer.Get(node.Parent.Table);
            var child    = (TRelation)buffer.Get(node.Table);
            var sequence = node.Relation.Accessor.Get(parent);

            if (sequence == null)
            {
                throw new NotImplementedException();
            }
            else
            {
                sequence.Add(child);
            }
        }
Example #6
0
 protected virtual void OnVisit <T>(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, IEntityGraphNode <T> node)
 {
     do
     {
         if (!buffer.Exists(node.Table))
         {
             if (buffer.HasKey(node.Table))
             {
                 buffer.Create(node.Table);
             }
             break;
         }
         else if (buffer.KeyChanged(node.Table))
         {
             this.OnEmit(buffer, sink, node.Table);
         }
         else
         {
             break;
         }
     } while (true);
 }
Example #7
0
 public void Flush(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink)
 {
     this.OnEmit(buffer, sink, sink.Table);
 }
Example #8
0
 public void Visit(IEntityGraph graph, IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, IDatabaseReaderRecord record, EnumeratorFlags flags)
 {
     buffer.Update(record);
     this.Visit(buffer, sink, graph.Root);
 }
 public IEnumerable AsEnumerable(IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, IDatabaseReader reader)
 {
     return((IEnumerable)this.Members.Invoke(this, "AsEnumerable", this.Table.TableType, buffer, sink, reader));
 }
 public AsyncEnumerator(IEntityEnumeratorVisitor visitor, IEntityGraph graph, IEntityEnumeratorBuffer buffer, IEntityEnumeratorSink sink, IDatabaseReader reader, bool ownsReader)
 {
     this.Visitor          = visitor;
     this.Graph            = graph;
     this.Buffer           = buffer;
     this.Sink             = sink;
     this.Reader           = reader;
     this.ReaderEnumerator = reader.GetAsyncEnumerator();
     this.OwnsReader       = ownsReader;
 }