Пример #1
0
            public object Run()
            {
                QueryingReadContext context = null;

                if (Handlers4.HandleAsObject(arrayElementHandler))
                {
                    // TODO: Code is similar to FieldMetadata.collectIDs. Try to refactor to one place.
                    int             collectionID       = buffer.ReadInt();
                    ByteArrayBuffer arrayElementBuffer = this._enclosing.Container().ReadBufferById(this
                                                                                                    ._enclosing.Transaction(), collectionID);
                    ObjectHeader objectHeader = ObjectHeader.ScrollBufferToContent(this._enclosing.Container
                                                                                       (), arrayElementBuffer);
                    context = new QueryingReadContext(this._enclosing.Transaction(), candidates, this
                                                      ._enclosing._handlerVersion, arrayElementBuffer, collectionID);
                    objectHeader.ClassMetadata().CollectIDs(context);
                }
                else
                {
                    context = new QueryingReadContext(this._enclosing.Transaction(), candidates, this
                                                      ._enclosing._handlerVersion, buffer, 0);
                    ((ICascadingTypeHandler)arrayElementHandler).CollectIDs(context);
                }
                Tree.Traverse(context.Ids(), new _IVisitor4_336(candidates));
                IEnumerator i = context.ObjectsWithoutId();

                while (i.MoveNext())
                {
                    object obj = i.Current;
                    candidates.Add(new Db4objects.Db4o.Internal.Query.Processor.QCandidate(candidates
                                                                                           , obj, 0));
                }
                return(null);
            }
Пример #2
0
        public override Db4objects.Db4o.Internal.ClassMetadata ClassMetadata()
        {
            if (_classMetadata != null)
            {
                return(_classMetadata);
            }
            Read();
            if (_bytes == null)
            {
                return(null);
            }
            Seek(0);
            ObjectContainerBase stream       = Container();
            ObjectHeader        objectHeader = new ObjectHeader(stream, _bytes);

            _classMetadata = objectHeader.ClassMetadata();
            if (_classMetadata != null)
            {
                if (stream._handlers.IclassCompare.IsAssignableFrom(_classMetadata.ClassReflector
                                                                        ()))
                {
                    ReadThis(false);
                }
            }
            return(_classMetadata);
        }
Пример #3
0
 public static ObjectHeader Defrag(DefragmentContextImpl
     context)
 {
     var source = context.SourceBuffer();
     var target = context.TargetBuffer();
     var header = new ObjectHeader
         (context.Services().SystemTrans().Container(), null, source);
     var newID = context.Mapping().StrictMappedID(header.ClassMetadata().GetID());
     var slotFormat = header.SlotFormat();
     slotFormat.WriteObjectClassID(target, newID);
     slotFormat.SkipMarshallerInfo(target);
     slotFormat.ReadHeaderAttributes(target);
     return header;
 }
Пример #4
0
        public override ITypeHandler4 ReadCandidateHandler(QueryingReadContext context)
        {
            int id     = 0;
            int offset = context.Offset();

            try
            {
                id = context.ReadInt();
            }
            catch (Exception)
            {
            }
            context.Seek(offset);
            if (id != 0)
            {
                StatefulBuffer reader = context.Container().ReadStatefulBufferById(context.Transaction
                                                                                       (), id);
                if (reader != null)
                {
                    ObjectHeader oh = new ObjectHeader(context.Container(), reader);
                    try
                    {
                        if (oh.ClassMetadata() != null)
                        {
                            context.Buffer(reader);
                            return(oh.ClassMetadata().SeekCandidateHandler(context));
                        }
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
            // TODO: Check Exception Types
            // Errors typically occur, if classes don't match
            return(null);
        }
Пример #5
0
                public void Visit(object treeInt)
                {
                    int            id     = ((TreeInt)treeInt)._key;
                    StatefulBuffer reader = stream.ReadStatefulBufferById(this._enclosing._enclosing.
                                                                          _trans, id);

                    if (reader != null)
                    {
                        ObjectHeader     oh      = new ObjectHeader(stream, reader);
                        CollectIdContext context = new CollectIdContext(this._enclosing._enclosing._trans
                                                                        , oh, reader);
                        oh.ClassMetadata().CollectIDs(context, fieldName);
                        Tree.Traverse(context.Ids(), new _IVisitor4_394(idsNew));
                    }
                }
Пример #6
0
        public static ObjectHeader Defrag(DefragmentContextImpl
                                          context)
        {
            var source = context.SourceBuffer();
            var target = context.TargetBuffer();
            var header = new ObjectHeader
                             (context.Services().SystemTrans().Container(), null, source);
            var newID      = context.Mapping().StrictMappedID(header.ClassMetadata().GetID());
            var slotFormat = header.SlotFormat();

            slotFormat.WriteObjectClassID(target, newID);
            slotFormat.SkipMarshallerInfo(target);
            slotFormat.ReadHeaderAttributes(target);
            return(header);
        }
Пример #7
0
        public static void CollectIdsInternal(CollectIdContext context, ITypeHandler4 handler
                                              , int linkLength, bool doWithSlotIndirection)
        {
            if (!(IsCascading(handler)))
            {
                var buffer = context.Buffer();
                buffer.Seek(buffer.Offset() + linkLength);
                return;
            }
            if (handler is StandardReferenceTypeHandler)
            {
                context.AddId();
                return;
            }
            var container  = (LocalObjectContainer)context.Container();
            var slotFormat = context.SlotFormat();

            if (HandleAsObject(handler))
            {
                // TODO: Code is similar to QCandidate.readArrayCandidates. Try to refactor to one place.
                var collectionID     = context.ReadInt();
                var collectionBuffer = container.ReadBufferById(context.Transaction()
                                                                , collectionID);
                var objectHeader = new ObjectHeader(container, collectionBuffer);
                var subContext   = new QueryingReadContext(context.Transaction(), context
                                                           .HandlerVersion(), collectionBuffer, collectionID, context.Collector());
                objectHeader.ClassMetadata().CollectIDs(subContext);
                return;
            }
            var queryingReadContext = new QueryingReadContext(context.Transaction
                                                                  (), context.HandlerVersion(), context.Buffer(), 0, context.Collector());
            IClosure4 collectIDsFromQueryingContext = new _IClosure4_263(handler, queryingReadContext
                                                                         );

            if (doWithSlotIndirection)
            {
                slotFormat.DoWithSlotIndirection(queryingReadContext, handler, collectIDsFromQueryingContext
                                                 );
            }
            else
            {
                collectIDsFromQueryingContext.Run();
            }
        }
Пример #8
0
 internal virtual ClassMetadata ReadClassMetadata()
 {
     if (_classMetadata == null)
     {
         Read();
         if (_bytes != null)
         {
             Seek(0);
             ObjectContainerBase stream = Container();
             var objectHeader           = new ObjectHeader(stream, _bytes);
             _classMetadata = objectHeader.ClassMetadata();
             if (_classMetadata != null)
             {
                 if (stream._handlers.IclassCompare.IsAssignableFrom(_classMetadata.ClassReflector
                                                                         ()))
                 {
                     ReadThis(false);
                 }
             }
         }
     }
     return(_classMetadata);
 }
Пример #9
0
        private object ReadIndexEntryForRebuild(StatefulBuffer writer, ObjectHeader oh)
        {
            ClassMetadata classMetadata = oh.ClassMetadata();

            if (classMetadata == null)
            {
                return(DefaultValueForFieldType());
            }
            ObjectIdContextImpl context = new ObjectIdContextImpl(writer.Transaction(), writer
                                                                  , oh, writer.GetID());

            if (!classMetadata.SeekToField(context, this))
            {
                return(DefaultValueForFieldType());
            }
            try
            {
                return(ReadIndexEntry(context));
            }
            catch (CorruptionException exc)
            {
                throw new FieldIndexException(exc, this);
            }
        }
 // do nothing
 public Db4objects.Db4o.Internal.ClassMetadata ClassMetadata()
 {
     return(_objectHeader.ClassMetadata());
 }
Пример #11
0
 // do nothing
 public ClassMetadata ClassMetadata()
 {
     return(_objectHeader.ClassMetadata());
 }