Beispiel #1
0
		public override void Defrag(ClassMetadata classMetadata, ClassAspect aspect, LatinStringIO
			 sio, DefragmentContextImpl context)
		{
			base.Defrag(classMetadata, aspect, sio, context);
			if (!(aspect is FieldMetadata))
			{
				return;
			}
			FieldMetadata field = (FieldMetadata)aspect;
			if (field.IsVirtual())
			{
				return;
			}
			if (field.HasIndex())
			{
				BTree index = field.GetIndex(context.SystemTrans());
				int targetIndexID = context.CopyID();
				if (targetIndexID != 0)
				{
					index.DefragBTree(context.Services());
				}
			}
			else
			{
				context.WriteInt(0);
			}
		}
 public DefragmentContextImpl(Db4objects.Db4o.Internal.DefragmentContextImpl parentContext
                              , ObjectHeader header)
 {
     _source       = parentContext._source;
     _target       = parentContext._target;
     _services     = parentContext._services;
     _objectHeader = header;
 }
Beispiel #3
0
 public DefragmentContextImpl(DefragmentContextImpl parentContext
     , ObjectHeader header)
 {
     _source = parentContext._source;
     _target = parentContext._target;
     _services = parentContext._services;
     _objectHeader = header;
 }
        public static void ProcessCopy(IDefragmentServices services, int sourceID, ISlotCopyHandler
                                       command, ByteArrayBuffer sourceReader)
        {
            int  targetID   = services.StrictMappedID(sourceID);
            Slot targetSlot = services.AllocateTargetSlot(sourceReader.Length());

            services.Mapping().MapId(targetID, targetSlot);
            Db4objects.Db4o.Internal.DefragmentContextImpl context = new Db4objects.Db4o.Internal.DefragmentContextImpl
                                                                         (sourceReader, services);
            command.ProcessCopy(context);
            services.TargetWriteBytes(context, targetSlot.Address());
        }
			public void ProcessCopy(DefragmentContextImpl context)
			{
				ClassMetadata.DefragObject(context);
				if (this._enclosing._objectCommitFrequency > 0)
				{
					this._enclosing._objectCount++;
					if (this._enclosing._objectCount == this._enclosing._objectCommitFrequency)
					{
						services.TargetCommit();
						services.Mapping().Commit();
						this._enclosing._objectCount = 0;
					}
				}
			}
Beispiel #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;
		}
		public virtual void TargetWriteBytes(DefragmentContextImpl context, int address)
		{
			context.Write(_targetDb, address);
		}
Beispiel #8
0
			private int CopyAcceptedClasses(DefragmentContextImpl context, int acceptedClasses
				)
			{
				int numClasses = context.ReadInt();
				for (int classIdx = 0; classIdx < numClasses; classIdx++)
				{
					int classId = context.SourceBuffer().ReadInt();
					if (!this.Accept(classId))
					{
						continue;
					}
					++acceptedClasses;
					context.WriteMappedID(classId);
				}
				return acceptedClasses;
			}
Beispiel #9
0
				public void ProcessCopy(DefragmentContextImpl context)
				{
					this._enclosing._enclosing.DefragIndexNode(context);
				}
		public virtual void DefragIndexEntry(DefragmentContextImpl context)
		{
			_parentIdHandler.DefragIndexEntry(context);
			_valueHandler.DefragIndexEntry(context);
		}
			public virtual void DefragIndexEntry(DefragmentContextImpl context)
			{
				throw new NotImplementedException();
			}
		public abstract void DefragReference(ClassMetadata arg1, DefragmentContextImpl arg2
			, int arg3);
		public abstract void DefragIndex(DefragmentContextImpl arg1);
Beispiel #14
0
 public static void DefragObject(DefragmentContextImpl context)
 {
     var header = ObjectHeader.Defrag(context);
     var childContext = new DefragmentContextImpl(context, header);
     header.ClassMetadata().Defragment(childContext);
 }
Beispiel #15
0
 public virtual void DefragClass(DefragmentContextImpl context, int classIndexID)
 {
     var mf = MarshallerFamily.ForConverterVersion(Container().ConverterVersion
         ());
     mf._class.Defrag(this, _container.StringIO(), context, classIndexID);
 }
Beispiel #16
0
		public static void Defragment(IDefragmentContext context, ArrayHandler handler)
		{
			int sourceAddress = context.SourceBuffer().ReadInt();
			int length = context.SourceBuffer().ReadInt();
			if (sourceAddress == 0 && length == 0)
			{
				context.TargetBuffer().WriteInt(0);
				context.TargetBuffer().WriteInt(0);
				return;
			}
			Slot slot = context.AllocateMappedTargetSlot(sourceAddress, length);
			ByteArrayBuffer sourceBuffer = null;
			try
			{
				sourceBuffer = context.SourceBufferByAddress(sourceAddress, length);
			}
			catch (IOException exc)
			{
				throw new Db4oIOException(exc);
			}
			DefragmentContextImpl payloadContext = new DefragmentContextImpl(sourceBuffer, (DefragmentContextImpl
				)context);
			handler.DefragmentSlot(payloadContext);
			payloadContext.WriteToTarget(slot.Address());
			context.TargetBuffer().WriteInt(slot.Address());
			context.TargetBuffer().WriteInt(length);
		}
		void IIndexable4.DefragIndexEntry(DefragmentContextImpl context)
		{
			IncrementOffset(context);
		}
Beispiel #18
0
 	public void DefragIndexEntry(DefragmentContextImpl context)
 	{
 		context.IncrementOffset(Const4.LongLength);
 	}
		public void DefragIndexEntry(DefragmentContextImpl context)
		{
			context.CopyID();
		}
Beispiel #20
0
			public void ProcessCopy(DefragmentContextImpl context)
			{
				classMetadata.DefragClass(context, classIndexID);
			}
Beispiel #21
0
		// do nothing
		public virtual void DefragIndexEntry(DefragmentContextImpl context)
		{
		}
Beispiel #22
0
		public static void DefragIndex(DefragmentContextImpl context, IIndexable4 keyHandler
			)
		{
			// count
			int count = context.ReadInt();
			// leafByte
			byte leafByte = context.ReadByte();
			bool isLeaf = (leafByte == 1);
			context.CopyID();
			// parent ID
			context.CopyID();
			// previous ID
			context.CopyID();
			// next ID
			for (int i = 0; i < count; i++)
			{
				keyHandler.DefragIndexEntry(context);
				if (!isLeaf)
				{
					context.CopyID();
				}
			}
		}
Beispiel #23
0
		public override void DefragIndexEntry(DefragmentContextImpl context)
		{
			int sourceId = context.CopyIDReturnOriginalID(true);
			context.CurrentParentSourceID(sourceId);
		}
		public override void Defrag(ClassMetadata classMetadata, ClassAspect aspect, LatinStringIO
			 sio, DefragmentContextImpl context)
		{
			context.ReadByte();
			base.Defrag(classMetadata, aspect, sio, context);
		}
 public DefragmentContextImpl(ByteArrayBuffer source, Db4objects.Db4o.Internal.DefragmentContextImpl
                              context) : this(source, context._services, context._objectHeader)
 {
 }
Beispiel #26
0
			public _IProcedure4_136(ClassMarshaller _enclosing, IntByRef processedAspectCount
				, int aspectCount, ClassMetadata classMetadata, LatinStringIO sio, DefragmentContextImpl
				 context)
			{
				this._enclosing = _enclosing;
				this.processedAspectCount = processedAspectCount;
				this.aspectCount = aspectCount;
				this.classMetadata = classMetadata;
				this.sio = sio;
				this.context = context;
			}
Beispiel #27
0
		public override void DefragIndexEntry(DefragmentContextImpl context)
		{
			context.IncrementIntSize();
		}
Beispiel #28
0
 public virtual void DefragIndexEntry(DefragmentContextImpl context)
 {
     // we are storing ids in the btree, so the order will change when the ids change
     // to properly defrag the btree we need to readd all the entries
     throw new NotSupportedException();
 }
 	public void DefragIndexEntry(DefragmentContextImpl context)
 	{
 		IncrementOffset(context);
 	}
Beispiel #30
0
		public virtual void DefragIndexNode(DefragmentContextImpl context)
		{
			BTreeNode.DefragIndex(context, _keyHandler);
		}
Beispiel #31
0
		private int CopyDependentSlot(IDefragmentContext context, int sourceId)
		{
			try
			{
				ByteArrayBuffer sourceBuffer = context.SourceBufferById(sourceId);
				Slot targetPayloadSlot = context.AllocateTargetSlot(sourceBuffer.Length());
				int targetId = context.Services().TargetNewId();
				context.Services().MapIDs(sourceId, targetId, false);
				context.Services().Mapping().MapId(targetId, targetPayloadSlot);
				DefragmentContextImpl payloadContext = new DefragmentContextImpl(sourceBuffer, (DefragmentContextImpl
					)context);
				int clazzId = payloadContext.CopyIDReturnOriginalID();
				ITypeHandler4 payloadHandler = payloadContext.TypeHandlerForId(clazzId);
				ITypeHandler4 versionedPayloadHandler = HandlerRegistry.CorrectHandlerVersion(payloadContext
					, payloadHandler);
				versionedPayloadHandler.Defragment(payloadContext);
				payloadContext.WriteToTarget(targetPayloadSlot.Address());
				return targetId;
			}
			catch (IOException ioexc)
			{
				throw new Db4oIOException(ioexc);
			}
		}
Beispiel #32
0
			public void ProcessCopy(DefragmentContextImpl context)
			{
				int acceptedClasses = 0;
				int numClassesOffset = context.TargetBuffer().Offset();
				acceptedClasses = this.CopyAcceptedClasses(context, acceptedClasses);
				this.WriteIntAt(context.TargetBuffer(), numClassesOffset, acceptedClasses);
			}
Beispiel #33
0
		public virtual void Defrag(ClassMetadata classMetadata, LatinStringIO sio, DefragmentContextImpl
			 context, int classIndexID)
		{
			ReadName(sio, context.SourceBuffer());
			ReadName(sio, context.TargetBuffer());
			int metaClassID = 0;
			context.WriteInt(metaClassID);
			// ancestor ID
			context.CopyID();
			context.WriteInt((classMetadata.HasClassIndex() ? IndexIDForWriting(classIndexID)
				 : 0));
			int aspectCount = context.ReadInt();
			if (aspectCount > classMetadata.DeclaredAspectCount())
			{
				throw new InvalidOperationException();
			}
			IntByRef processedAspectCount = new IntByRef(0);
			classMetadata.TraverseDeclaredAspects(new _IProcedure4_136(this, processedAspectCount
				, aspectCount, classMetadata, sio, context));
		}
Beispiel #34
0
        public override void DefragIndexEntry(DefragmentContextImpl context)
        {
            int sourceId = context.CopyIDReturnOriginalID(true);

            context.CurrentParentSourceID(sourceId);
        }
Beispiel #35
0
 // do nothing
 public virtual void DefragIndexEntry(DefragmentContextImpl context)
 {
 }
Beispiel #36
0
		public virtual void DefragIndex(DefragmentContextImpl context)
		{
			context.IncrementOffset(DefragmentIncrementOffset);
			context.CopyID();
		}