internal virtual void Analyze(Transaction trans) { _ref = trans.ReferenceForObject(_obj); if (_ref != null) { _classMetadata = _ref.ClassMetadata(); return; } IReflectClass claxx = _container.Reflector().ForObject(_obj); if (claxx == null) { NotStorable(_obj, claxx); return; } if (!DetectClassMetadata(trans, claxx)) { return; } if (IsValueType(_classMetadata)) { NotStorable(_obj, _classMetadata.ClassReflector(), " Value types can only be stored embedded in parent objects." ); } }
public override Db4objects.Db4o.Internal.ClassMetadata ClassMetadata() { Db4objects.Db4o.Internal.ClassMetadata classMetadata = _reference.ClassMetadata(); if (classMetadata == null) { throw new InvalidOperationException(); } return(classMetadata); }
private object WriteAndRead(object obj) { var imaginativeID = 500; var @ref = new ObjectReference(ClassMetadataForObject(obj), imaginativeID ); @ref.SetObject(obj); var marshallingContext = new MarshallingContext(Trans(), @ref, Container ().UpdateDepthProvider().ForDepth(int.MaxValue), true); Handlers4.Write(@ref.ClassMetadata().TypeHandler(), marshallingContext, obj); var pointer = marshallingContext.AllocateSlot(); var buffer = marshallingContext.ToWriteBuffer(pointer); buffer.Seek(0); // String str = new String(buffer._buffer); // System.out.println(str); var unmarshallingContext = new UnmarshallingContext(Trans(), @ref , Const4.AddToIdTree, false); unmarshallingContext.Buffer(buffer); unmarshallingContext.ActivationDepth(new LegacyActivationDepth(5)); return unmarshallingContext.Read(); }
internal virtual void Analyze(Transaction trans) { _ref = trans.ReferenceForObject(_obj); if (_ref != null) { _classMetadata = _ref.ClassMetadata(); return; } IReflectClass claxx = _container.Reflector().ForObject(_obj); if (claxx == null) { NotStorable(_obj, claxx); return; } if (!DetectClassMetadata(trans, claxx)) { return; } if (IsValueType(_classMetadata)) { NotStorable(_obj, _classMetadata.ClassReflector()); } }
public sealed override bool Delete4(Transaction transaction, ObjectReference @ref , object obj, int cascade, bool userCall) { int id = @ref.GetID(); StatefulBuffer reader = ReadStatefulBufferById(transaction, id); if (reader != null) { if (obj != null) { if ((!ShowInternalClasses()) && Const4.ClassInternal.IsAssignableFrom(obj.GetType ())) { return(false); } } reader.SetCascadeDeletes(cascade); transaction.IdSystem().NotifySlotDeleted(id, SlotChangeFactory.UserObjects); ClassMetadata classMetadata = @ref.ClassMetadata(); classMetadata.Delete(reader, obj); return(true); } return(false); }
internal virtual void Analyze(Transaction trans) { _ref = trans.ReferenceForObject(_obj); if (_ref != null) { _classMetadata = _ref.ClassMetadata(); return; } var claxx = _container.Reflector().ForObject(_obj); if (claxx == null) { NotStorable(_obj, claxx); return; } if (!DetectClassMetadata(trans, claxx)) { return; } if (IsValueType(_classMetadata)) { NotStorable(_obj, _classMetadata.ClassReflector()); } }
internal void Delete3(Transaction trans, ObjectReference @ref, object obj, int cascade , bool userCall) { // The passed reference can be null, when calling from Transaction. if (@ref == null || [email protected]()) { return; } // This check is performed twice, here and in delete2, intentionally. if (BreakDeleteForEnum(@ref, userCall)) { @ref.EndProcessing(); return; } if ([email protected]()) { @ref.EndProcessing(); return; } ClassMetadata yc = @ref.ClassMetadata(); // We have to end processing temporarily here, otherwise the can delete callback // can't do anything at all with this object. @ref.EndProcessing(); ActivateForDeletionCallback(trans, yc, @ref, obj); if (!ObjectCanDelete(trans, yc, @ref)) { return; } @ref.BeginProcessing(); if (DTrace.enabled) { DTrace.Delete.Log(@ref.GetID()); } if (Delete4(trans, @ref, obj, cascade, userCall)) { ObjectOnDelete(trans, yc, @ref); if (ConfigImpl.MessageLevel() > Const4.State) { Message(string.Empty + @ref.GetID() + " delete " + @ref.ClassMetadata().GetName() ); } } @ref.EndProcessing(); }
private bool BreakDeleteForEnum(ObjectReference reference, bool userCall) { return false; if (userCall) { return false; } if (reference == null) { return false; } return Platform4.IsEnum(Reflector(), reference.ClassMetadata().ClassReflector()); }
public int Store2(Transaction trans, object obj, IUpdateDepth updateDepth, bool checkJustSet ) { if (obj == null || (obj is ITransientClass)) { return 0; } ObjectAnalyzer analyzer = new ObjectAnalyzer(this, obj); analyzer.Analyze(trans); if (analyzer.NotStorable()) { return 0; } ObjectReference @ref = analyzer.ObjectReference(); if (@ref == null) { ClassMetadata classMetadata = analyzer.ClassMetadata(); if (!ObjectCanNew(trans, classMetadata, obj)) { return 0; } @ref = new ObjectReference(); @ref.Store(trans, classMetadata, obj); trans.AddNewReference(@ref); if (obj is IDb4oTypeImpl) { ((IDb4oTypeImpl)obj).SetTrans(trans); } if (ConfigImpl.MessageLevel() > Const4.State) { Message(string.Empty + @ref.GetID() + " new " + @ref.ClassMetadata().GetName()); } FlagAsHandled(@ref); StillToSet(trans, @ref, updateDepth); } else { if (@ref.IsFlaggedAsHandled(_topLevelCallId)) { AssertNotInCallback(); } if (CanUpdate()) { if (checkJustSet) { if (([email protected]()) && HandledInCurrentTopLevelCall(@ref)) { return @ref.GetID(); } } if (updateDepth.SufficientDepth()) { FlagAsHandled(@ref); @ref.WriteUpdate(trans, updateDepth); } } } ProcessPendingClassUpdates(); return @ref.GetID(); }
public override bool CanSkip(ObjectReference @ref) { ClassMetadata clazz = @ref.ClassMetadata(); return clazz.Reflector().ForClass(typeof(IActivatable)).IsAssignableFrom(clazz.ClassReflector ()) && !_query.IsModified(@ref.GetObject()); }
private bool IsStruct(ObjectReference @ref) { return @ref.ClassMetadata().IsStruct(); }
private bool IsStruct(ObjectReference @ref) { return(@ref.ClassMetadata().IsStruct()); }
public sealed override bool Delete4(Transaction transaction, ObjectReference @ref , object obj, int cascade, bool userCall) { int id = @ref.GetID(); StatefulBuffer reader = ReadStatefulBufferById(transaction, id); if (reader != null) { if (obj != null) { if ((!ShowInternalClasses()) && Const4.ClassInternal.IsAssignableFrom(obj.GetType ())) { return false; } } reader.SetCascadeDeletes(cascade); transaction.IdSystem().NotifySlotDeleted(id, SlotChangeFactory.UserObjects); ClassMetadata classMetadata = @ref.ClassMetadata(); classMetadata.Delete(reader, obj); return true; } return false; }