public DeleteContextImpl(Db4objects.Db4o.Internal.StatefulBuffer buffer, ObjectHeader
			 objectHeader, IReflectClass fieldClass, Config4Field fieldConfig) : base(buffer
			.Transaction(), buffer, objectHeader)
		{
			_fieldClass = fieldClass;
			_fieldConfig = fieldConfig;
		}
示例#2
0
		public DefragmentContextImpl(Db4objects.Db4o.Internal.DefragmentContextImpl parentContext
			, ObjectHeader header)
		{
			_source = parentContext._source;
			_target = parentContext._target;
			_services = parentContext._services;
			_objectHeader = header;
		}
示例#3
0
		public DefragmentContextImpl(ByteArrayBuffer source, IDefragmentServices services
			, ObjectHeader header)
		{
			_source = source;
			_services = services;
			_target = new ByteArrayBuffer(Length());
			_source.CopyTo(_target, 0, 0, Length());
			_objectHeader = header;
		}
示例#4
0
 public static CollectIdContext ForID(Transaction
     transaction, IdObjectCollector collector, int id)
 {
     var reader = transaction.Container().ReadStatefulBufferById(transaction
         , id);
     if (reader == null)
     {
         return null;
     }
     var oh = new ObjectHeader(transaction.Container(), reader);
     return new CollectIdContext(transaction, collector
         , oh, reader);
 }
示例#5
0
		public static Db4objects.Db4o.Internal.Marshall.CollectIdContext ForID(Transaction
			 transaction, IdObjectCollector collector, int id)
		{
			StatefulBuffer reader = transaction.Container().ReadStatefulBufferById(transaction
				, id);
			if (reader == null)
			{
				return null;
			}
			ObjectHeader oh = new ObjectHeader(transaction.Container(), reader);
			return new Db4objects.Db4o.Internal.Marshall.CollectIdContext(transaction, collector
				, oh, reader);
		}
示例#6
0
		public static Db4objects.Db4o.Internal.Marshall.ObjectHeader Defrag(DefragmentContextImpl
			 context)
		{
			ByteArrayBuffer source = context.SourceBuffer();
			ByteArrayBuffer target = context.TargetBuffer();
			Db4objects.Db4o.Internal.Marshall.ObjectHeader header = new Db4objects.Db4o.Internal.Marshall.ObjectHeader
				(context.Services().SystemTrans().Container(), null, source);
			int newID = context.Mapping().StrictMappedID(header.ClassMetadata().GetID());
			Db4objects.Db4o.Internal.Marshall.SlotFormat slotFormat = header.SlotFormat();
			slotFormat.WriteObjectClassID(target, newID);
			slotFormat.SkipMarshallerInfo(target);
			slotFormat.ReadHeaderAttributes(target);
			return header;
		}
示例#7
0
        public static Db4objects.Db4o.Internal.Marshall.ObjectHeader Defrag(DefragmentContextImpl
                                                                            context)
        {
            ByteArrayBuffer source = context.SourceBuffer();
            ByteArrayBuffer target = context.TargetBuffer();

            Db4objects.Db4o.Internal.Marshall.ObjectHeader header = new Db4objects.Db4o.Internal.Marshall.ObjectHeader
                                                                        (context.Services().SystemTrans().Container(), null, source);
            int newID = context.Mapping().StrictMappedID(header.ClassMetadata().GetID());

            Db4objects.Db4o.Internal.Marshall.SlotFormat slotFormat = header.SlotFormat();
            slotFormat.WriteObjectClassID(target, newID);
            slotFormat.SkipMarshallerInfo(target);
            slotFormat.ReadHeaderAttributes(target);
            return(header);
        }
示例#8
0
		private void DeleteMembers(StatefulBuffer objectBytes)
		{
			ObjectHeader oh = new ObjectHeader(_clazz, objectBytes);
			DeleteInfo info = (DeleteInfo)TreeInt.Find(_transaction._delete, _id);
			if (info != null)
			{
				if (info._cascade > _cascade)
				{
					_cascade = info._cascade;
				}
			}
			objectBytes.SetCascadeDeletes(_cascade);
			DeleteContextImpl context = new DeleteContextImpl(objectBytes, oh, _clazz.ClassReflector
				(), null);
			_clazz.DeleteMembers(context, _typeInfo, true);
		}
		protected virtual void RebuildIndexForWriter(LocalObjectContainer container, StatefulBuffer
			 buffer, int objectId)
		{
			ObjectHeader objectHeader = new ObjectHeader(container, buffer);
			ObjectIdContextImpl context = new ObjectIdContextImpl(container.SystemTransaction
				(), buffer, objectHeader, objectId);
			ClassMetadata classMetadata = context.ClassMetadata();
			if (classMetadata.IsStruct())
			{
				// We don't keep version information for structs.
				return;
			}
			if (classMetadata.SeekToField(container.SystemTransaction(), buffer, versionFieldMetadata
				) != HandlerVersion.Invalid)
			{
				long version = ((long)versionFieldMetadata.Read(context));
				if (version != 0)
				{
					LocalTransaction t = (LocalTransaction)container.SystemTransaction();
					t.CommitTimestampSupport().Put(container.SystemTransaction(), objectId, version);
				}
			}
		}
示例#10
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;
		}
示例#11
0
 public void Visit(object treeInt)
 {
     var id = ((TreeInt) treeInt)._key;
     var reader = stream.ReadStatefulBufferById(_enclosing._enclosing.
         _trans, id);
     if (reader != null)
     {
         var oh = new ObjectHeader(stream, reader);
         var context = new CollectIdContext(_enclosing._enclosing._trans
             , oh, reader);
         oh.ClassMetadata().CollectIDs(context, fieldName);
         Tree.Traverse(context.Ids(), new _IVisitor4_394(idsNew));
     }
 }
		private ClassMetadata ReadObjectHeader()
		{
			_objectHeader = new ObjectHeader(Container(), ByteArrayBuffer());
			ClassMetadata classMetadata = _objectHeader.ClassMetadata();
			if (classMetadata == null)
			{
				return null;
			}
			return classMetadata;
		}
示例#13
0
 // Scrolls offset in passed reader to the offset the passed field should
 // be read at.
 public HandlerVersion SeekToField(Transaction trans, ByteArrayBuffer buffer, FieldMetadata
     field)
 {
     if (buffer == null)
     {
         return HandlerVersion.Invalid;
     }
     if (!StandardReferenceTypeHandlerIsUsed())
     {
         return HandlerVersion.Invalid;
     }
     buffer.Seek(0);
     var oh = new ObjectHeader(_container, buffer);
     var res = oh.ClassMetadata().SeekToField(new ObjectHeaderContext(trans, buffer,
         oh), field);
     if (!res)
     {
         return HandlerVersion.Invalid;
     }
     return new HandlerVersion(oh.HandlerVersion());
 }
示例#14
0
 private void CascadeDeletion(StatefulBuffer buffer, object obj)
 {
     var oh = new ObjectHeader(this, buffer);
     var context = new DeleteContextImpl(buffer, oh, ClassReflector(), null
         );
     DeleteMembers(context, ArrayTypeFor(buffer, obj), false);
 }
示例#15
0
 public void AddFieldIndices(StatefulBuffer buffer)
 {
     if (!StandardReferenceTypeHandlerIsUsed())
     {
         return;
     }
     if (HasClassIndex() || HasVirtualAttributes())
     {
         var oh = new ObjectHeader(this, buffer);
         var context = new ObjectIdContextImpl(buffer.Transaction(), buffer
             , oh, buffer.GetID());
         Handlers4.FieldAwareTypeHandler(CorrectHandlerVersion(context)).AddFieldIndices(context
             );
     }
 }
示例#16
0
 public static ClassMetadata ReadClass(ObjectContainerBase
     stream, ByteArrayBuffer reader)
 {
     var oh = new ObjectHeader(stream, reader);
     return oh.ClassMetadata();
 }
示例#17
0
 public virtual void ReadVirtualAttributes(Transaction trans, ObjectReference @ref
     , bool lastCommitted)
 {
     var id = @ref.GetID();
     var container = trans.Container();
     var buffer = container.ReadBufferById(trans, id, lastCommitted);
     var oh = new ObjectHeader(this, buffer);
     var context = new ObjectReferenceContext(trans, buffer, oh, @ref
         );
     Handlers4.FieldAwareTypeHandler(CorrectHandlerVersion(context)).ReadVirtualAttributes
         (context);
 }
示例#18
0
 public CollectIdContext(Transaction transaction, ObjectHeader oh, IReadBuffer buffer
                         ) : this(transaction, new IdObjectCollector(), oh, buffer)
 {
 }
示例#19
0
			public _CollectIdContext_203(QueryingReadContext readContext, Transaction baseArg1
				, IdObjectCollector baseArg2, ObjectHeader baseArg3, IReadBuffer baseArg4) : base
				(baseArg1, baseArg2, baseArg3, baseArg4)
			{
				this.readContext = readContext;
			}
		protected virtual void RebuildIndexForWriter(LocalObjectContainer stream, StatefulBuffer
			 writer, int objectId)
		{
			ObjectHeader oh = new ObjectHeader(stream, writer);
			object obj = ReadIndexEntryForRebuild(writer, oh);
			AddIndexEntry(stream.SystemTransaction(), objectId, obj);
		}
示例#21
0
		public ObjectReferenceContext(Transaction transaction, IReadBuffer buffer, ObjectHeader
			 objectHeader, Db4objects.Db4o.Internal.ObjectReference reference) : base(transaction
			, buffer, objectHeader)
		{
			_reference = reference;
		}
示例#22
0
				public void Visit(object treeInt)
				{
					int id = ((TreeInt)treeInt)._key;
					StatefulBuffer buffer = this._enclosing._container.ReadStatefulBufferById(this._enclosing
						._trans, id);
					if (buffer != null)
					{
						ObjectHeader oh = new ObjectHeader(this._enclosing._container, buffer);
						CollectIdContext context = new CollectIdContext(this._enclosing._trans, oh, buffer
							);
						oh.ClassMetadata().CollectIDs(context, fieldName);
						Tree.Traverse(context.Ids(), new _IVisitor4_516(idsNew));
					}
				}
		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);
			}
		}
		public ObjectHeaderContext(Transaction transaction, IReadBuffer buffer, ObjectHeader
			 objectHeader) : base(transaction, buffer)
		{
			_objectHeader = objectHeader;
		}
示例#25
0
		public CollectIdContext(Transaction transaction, IdObjectCollector collector, ObjectHeader
			 oh, IReadBuffer buffer) : base(transaction, buffer, oh)
		{
			_collector = collector;
		}
示例#26
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;
 }
示例#27
0
		public CollectIdContext(Transaction transaction, ObjectHeader oh, IReadBuffer buffer
			) : this(transaction, new IdObjectCollector(), oh, buffer)
		{
		}
示例#28
0
		public static void CollectIdsInternal(CollectIdContext context, ITypeHandler4 handler
			, int linkLength, bool doWithSlotIndirection)
		{
			if (!(IsCascading(handler)))
			{
				IReadBuffer buffer = context.Buffer();
				buffer.Seek(buffer.Offset() + linkLength);
				return;
			}
			if (handler is StandardReferenceTypeHandler)
			{
				context.AddId();
				return;
			}
			LocalObjectContainer container = (LocalObjectContainer)context.Container();
			SlotFormat slotFormat = context.SlotFormat();
			if (HandleAsObject(handler))
			{
				// TODO: Code is similar to QCandidate.readArrayCandidates. Try to refactor to one place.
				int collectionID = context.ReadInt();
				ByteArrayBuffer collectionBuffer = container.ReadBufferById(context.Transaction()
					, collectionID);
				ObjectHeader objectHeader = new ObjectHeader(container, collectionBuffer);
				QueryingReadContext subContext = new QueryingReadContext(context.Transaction(), context
					.HandlerVersion(), collectionBuffer, collectionID, context.Collector());
				objectHeader.ClassMetadata().CollectIDs(subContext);
				return;
			}
			QueryingReadContext 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();
			}
		}
示例#29
0
		public static Db4objects.Db4o.Internal.ClassMetadata ReadClass(ObjectContainerBase
			 stream, ByteArrayBuffer reader)
		{
			ObjectHeader oh = new ObjectHeader(stream, reader);
			return oh.ClassMetadata();
		}
		public ObjectIdContextImpl(Transaction transaction, IReadBuffer buffer, ObjectHeader
			 objectHeader, int id) : base(transaction, buffer, objectHeader)
		{
			_id = id;
		}
示例#31
0
 public CollectIdContext(Transaction transaction, IdObjectCollector collector, ObjectHeader
                         oh, IReadBuffer buffer) : base(transaction, buffer, oh)
 {
     _collector = collector;
 }