internal override void DeleteMembers(DeleteContextImpl context, ArrayType arrayType
			, bool isUpdate)
		{
			if (arrayType == ArrayType.PlainArray)
			{
				new ArrayHandler(TypeHandler(), true).DeletePrimitiveEmbedded((StatefulBuffer)context
					.Buffer(), this);
			}
			else
			{
				if (arrayType == ArrayType.MultidimensionalArray)
				{
					new MultidimensionalArrayHandler(TypeHandler(), true).DeletePrimitiveEmbedded((StatefulBuffer
						)context.Buffer(), this);
				}
			}
		}
示例#2
0
 internal virtual void DeleteMembers(DeleteContextImpl context, ArrayType arrayType
     , bool isUpdate)
 {
     var buffer = (StatefulBuffer) context.Buffer();
     var preserveCascade = context.CascadeDeleteDepth();
     try
     {
         if (CascadeOnDelete())
         {
             if (ClassReflector().IsCollection())
             {
                 buffer.SetCascadeDeletes(CollectionDeleteDepth(context));
             }
             else
             {
                 buffer.SetCascadeDeletes(1);
             }
         }
         Handlers4.FieldAwareTypeHandler(CorrectHandlerVersion(context)).DeleteMembers(context
             , isUpdate);
     }
     catch (Exception e)
     {
         // This a catch for changed class hierarchies.
         // It's very ugly to catch all here but it does
         // help to heal migration from earlier db4o
         // versions.
         var dp = Container()._handlers.DiagnosticProcessor();
         if (dp.Enabled())
         {
             dp.DeletionFailed();
         }
     }
     buffer.SetCascadeDeletes(preserveCascade);
 }
		/// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception>
		public override void Delete(DeleteContextImpl context, bool isUpdate)
		{
			if (!CheckAlive(context))
			{
				return;
			}
			try
			{
				RemoveIndexEntry(context);
				if (isUpdate)
				{
					IncrementOffset(context);
					return;
				}
				StatefulBuffer buffer = (StatefulBuffer)context.Buffer();
				DeleteContextImpl childContext = new DeleteContextImpl(context, GetStoredType(), 
					_config);
				context.SlotFormat().DoWithSlotIndirection(buffer, GetHandler(), new _IClosure4_445
					(this, childContext));
			}
			catch (CorruptionException exc)
			{
				throw new FieldIndexException(exc, this);
			}
		}