コード例 #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;
            }
            var field = (FieldMetadata)aspect;

            if (field.IsVirtual())
            {
                return;
            }
            if (field.HasIndex())
            {
                var index         = field.GetIndex(context.SystemTrans());
                var targetIndexID = context.CopyID();
                if (targetIndexID != 0)
                {
                    index.DefragBTree(context.Services());
                }
            }
            else
            {
                context.WriteInt(0);
            }
        }
コード例 #2
0
ファイル: TraverseFieldCommand.cs プロジェクト: masroore/db4o
 public virtual void ProcessAspect(ClassAspect aspect, int currentSlot)
 {
     if (aspect is FieldMetadata)
     {
         Process((FieldMetadata) aspect);
     }
 }
コード例 #3
0
ファイル: FieldMarshaller0.cs プロジェクト: pondyond/db4o
        public override void Write(Transaction trans, ClassMetadata clazz, ClassAspect aspect
                                   , ByteArrayBuffer writer)
        {
            writer.WriteShortString(trans, aspect.GetName());
            if (!(aspect is FieldMetadata))
            {
                return;
            }
            var field = (FieldMetadata)aspect;

            field.Alive();
            if (field.IsVirtual())
            {
                return;
            }
            var handler = field.GetHandler();

            if (handler is StandardReferenceTypeHandler)
            {
                // TODO: ensure there is a test case, to make this happen
                if (((StandardReferenceTypeHandler)handler).ClassMetadata().GetID() == 0)
                {
                    trans.Container().NeedsUpdate(clazz);
                }
            }
            writer.WriteInt(field.FieldTypeID());
            var bitmap = new BitMap4(3);

            bitmap.Set(0, field.IsPrimitive());
            bitmap.Set(1, Handlers4.HandlesArray(handler));
            bitmap.Set(2, Handlers4.HandlesMultidimensionalArray(handler));
            // keep the order
            writer.WriteByte(bitmap.GetByte(0));
        }
コード例 #4
0
 public _MarshallingInfoTraverseAspectCommand_456(ClassAspect aspect, BooleanByRef
                                                  found, ObjectHeaderContext context, IMarshallingInfo baseArg1) : base(baseArg1)
 {
     this.aspect  = aspect;
     this.found   = found;
     this.context = context;
 }
コード例 #5
0
 public virtual void ProcessAspect(ClassAspect aspect, int currentSlot)
 {
     if (aspect is FieldMetadata)
     {
         Process((FieldMetadata)aspect);
     }
 }
コード例 #6
0
 public virtual void ProcessAspect(ClassAspect aspect, int currentSlot)
 {
     if (Accept(aspect))
     {
         ProcessAspect(aspect, currentSlot, _marshallingInfo.IsNull(currentSlot));
     }
     _marshallingInfo.BeginSlot();
 }
コード例 #7
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                       )
 {
     if (!isNull)
     {
         aspect.DefragAspect(context);
     }
 }
コード例 #8
0
 public virtual void ProcessAspect(ClassAspect aspect, int currentSlot)
 {
     if (Accept(aspect))
     {
         ProcessAspect(aspect, currentSlot, _marshallingInfo.IsNull(currentSlot));
     }
     _marshallingInfo.BeginSlot();
 }
コード例 #9
0
 public virtual void ProcessAspectOnMissingClass(ClassAspect aspect, int currentSlot
                                                 )
 {
     if (_marshallingInfo.IsNull(currentSlot))
     {
         return;
     }
     aspect.IncrementOffset(_marshallingInfo.Buffer());
 }
コード例 #10
0
        public virtual bool SeekToField(ObjectHeaderContext context, ClassAspect aspect)
        {
            BooleanByRef           found   = new BooleanByRef(false);
            ITraverseAspectCommand command = new _MarshallingInfoTraverseAspectCommand_456(aspect
                                                                                           , found, context, EnsureFieldList(context));

            TraverseAllAspects(context, command);
            return(found.value);
        }
コード例 #11
0
        private bool IsCollectIdTypehandlerAspect(ClassAspect aspect)
        {
            if (!(aspect is TypeHandlerAspect))
            {
                return(false);
            }
            ITypeHandler4 typehandler = ((TypeHandlerAspect)aspect)._typeHandler;

            return(Handlers4.IsCascading(typehandler));
        }
コード例 #12
0
 public virtual void ProcessAspectOnMissingClass(ClassAspect aspect, int currentSlot
     )
 {
     if (_marshallingInfo.IsNull(currentSlot))
     {
         return;
     }
     aspect.IncrementOffset(_marshallingInfo.Buffer(), (IHandlerVersionContext) _marshallingInfo
         );
 }
コード例 #13
0
            protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                                  )
            {
                FieldMetadata field = (FieldMetadata)aspect;

                if (!isNull)
                {
                    field.AttemptUpdate(context);
                }
            }
コード例 #14
0
            public void Apply(object arg)
            {
                if (processedAspectCount.value >= aspectCount)
                {
                    return;
                }
                ClassAspect aspect = (ClassAspect)arg;

                this._enclosing._family._field.Defrag(classMetadata, aspect, sio, context);
                processedAspectCount.value++;
            }
コード例 #15
0
            public void Apply(object arg)
            {
                aspectCount.value++;
                Assert.IsSmaller(2, aspectCount.value);
                ClassAspect aspect = (ClassAspect)arg;

                Assert.IsInstanceOf(typeof(TypeHandlerAspect), aspect);
                TypeHandlerAspect typeHandlerAspect = (TypeHandlerAspect)aspect;

                Assert.IsInstanceOf(typeHandlerClass, typeHandlerAspect._typeHandler);
            }
コード例 #16
0
 private ClassAspect[] ReadAspects(ObjectContainerBase stream, ByteArrayBuffer reader
                                   , ClassMetadata clazz)
 {
     ClassAspect[] aspects = new ClassAspect[reader.ReadInt()];
     for (int i = 0; i < aspects.Length; i++)
     {
         aspects[i] = _family._field.Read(stream, clazz, reader);
         aspects[i].SetHandle(i);
     }
     return(aspects);
 }
コード例 #17
0
 protected override void ProcessAspect(ClassAspect curField, int currentSlot, bool
                                       isNull)
 {
     if (curField == aspect)
     {
         found.value = !isNull;
         this.Cancel();
         return;
     }
     if (!isNull)
     {
         curField.IncrementOffset(this._marshallingInfo.Buffer(), context);
     }
 }
コード例 #18
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                       )
 {
     if (isNull)
     {
         if (aspect is FieldMetadata)
         {
             FieldMetadata field = (FieldMetadata)aspect;
             field.RemoveIndexEntry(context.Transaction(), context.ObjectId(), null);
         }
         return;
     }
     aspect.Delete(context, isUpdate);
 }
コード例 #19
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                       )
 {
     if (!isNull)
     {
         if (aspect is VirtualFieldMetadata)
         {
             ((VirtualFieldMetadata)aspect).ReadVirtualAttribute(context);
         }
         else
         {
             aspect.IncrementOffset(context, context);
         }
     }
 }
コード例 #20
0
ファイル: FieldMarshaller1.cs プロジェクト: masroore/db4o
 public override void Write(Transaction trans, ClassMetadata clazz, ClassAspect aspect
     , ByteArrayBuffer writer)
 {
     base.Write(trans, clazz, aspect, writer);
     if (!(aspect is FieldMetadata))
     {
         return;
     }
     var field = (FieldMetadata) aspect;
     if (!HasBTreeIndex(field))
     {
         return;
     }
     writer.WriteIDOf(trans, field.GetIndex(trans));
 }
コード例 #21
0
ファイル: FieldMarshaller1.cs プロジェクト: masroore/db4o
 public override int MarshalledLength(ObjectContainerBase stream, ClassAspect aspect
     )
 {
     var len = base.MarshalledLength(stream, aspect);
     if (!(aspect is FieldMetadata))
     {
         return len;
     }
     var field = (FieldMetadata) aspect;
     if (!HasBTreeIndex(field))
     {
         return len;
     }
     return len + Const4.IdLength;
 }
コード例 #22
0
        public override void Write(Transaction trans, ClassMetadata clazz, ClassAspect aspect
                                   , ByteArrayBuffer writer)
        {
            base.Write(trans, clazz, aspect, writer);
            if (!(aspect is FieldMetadata))
            {
                return;
            }
            var field = (FieldMetadata)aspect;

            if (!HasBTreeIndex(field))
            {
                return;
            }
            writer.WriteIDOf(trans, field.GetIndex(trans));
        }
コード例 #23
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                       )
 {
     if (isNull)
     {
         return;
     }
     if (predicate.Match(aspect))
     {
         aspect.CollectIDs(context);
     }
     else
     {
         aspect.IncrementOffset(context, context);
     }
 }
コード例 #24
0
ファイル: FieldMarshaller0.cs プロジェクト: pondyond/db4o
 public override void Defrag(ClassMetadata classMetadata, ClassAspect aspect, LatinStringIO
                             sio, DefragmentContextImpl context)
 {
     context.IncrementStringOffset(sio);
     if (!(aspect is FieldMetadata))
     {
         return;
     }
     if (((FieldMetadata)aspect).IsVirtual())
     {
         return;
     }
     // handler ID
     context.CopyID();
     // skip primitive/array/narray attributes
     context.IncrementOffset(1);
 }
コード例 #25
0
        public override int MarshalledLength(ObjectContainerBase stream, ClassAspect aspect
                                             )
        {
            var len = base.MarshalledLength(stream, aspect);

            if (!(aspect is FieldMetadata))
            {
                return(len);
            }
            var field = (FieldMetadata)aspect;

            if (!HasBTreeIndex(field))
            {
                return(len);
            }
            return(len + Const4.IdLength);
        }
コード例 #26
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                       )
 {
     if (isNull)
     {
         return;
     }
     if (this._enclosing.IsCollectIdTypehandlerAspect(aspect))
     {
         aspectFound.value = true;
         aspect.CollectIDs(subContext);
     }
     else
     {
         aspect.IncrementOffset(subContext, subContext);
     }
 }
コード例 #27
0
            protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                                  )
            {
                object marshalledObject = obj;

                if (aspect is FieldMetadata)
                {
                    FieldMetadata field = (FieldMetadata)aspect;
                    marshalledObject = field.GetOrCreate(trans, obj);
                    if (marshalledObject == null)
                    {
                        context.IsNull(currentSlot, true);
                        field.AddIndexEntry(trans, context.ObjectID(), null);
                        return;
                    }
                }
                aspect.Marshall(context, marshalledObject);
            }
コード例 #28
0
ファイル: FieldMarshaller0.cs プロジェクト: masroore/db4o
 public override int MarshalledLength(ObjectContainerBase stream, ClassAspect aspect
     )
 {
     var len = stream.StringIO().ShortLength(aspect.GetName());
     if (aspect is FieldMetadata)
     {
         var field = (FieldMetadata) aspect;
         if (field.NeedsArrayAndPrimitiveInfo())
         {
             len += 1;
         }
         if (!(field is VirtualFieldMetadata))
         {
             len += Const4.IdLength;
         }
     }
     return len;
 }
コード例 #29
0
ファイル: FieldMarshaller0.cs プロジェクト: pondyond/db4o
        public override int MarshalledLength(ObjectContainerBase stream, ClassAspect aspect
                                             )
        {
            var len = stream.StringIO().ShortLength(aspect.GetName());

            if (aspect is FieldMetadata)
            {
                var field = (FieldMetadata)aspect;
                if (field.NeedsArrayAndPrimitiveInfo())
                {
                    len += 1;
                }
                if (!(field is VirtualFieldMetadata))
                {
                    len += Const4.IdLength;
                }
            }
            return(len);
        }
コード例 #30
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                       )
 {
     if (aspect is FieldMetadata)
     {
         FieldMetadata field = (FieldMetadata)aspect;
         if (isNull)
         {
             field.AddIndexEntry(context.Transaction(), context.ObjectId(), null);
         }
         else
         {
             field.AddFieldIndex(context);
         }
     }
     else
     {
         aspect.IncrementOffset(context.Buffer(), context);
     }
 }
コード例 #31
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
                                       )
 {
     if (aspect is FieldMetadata)
     {
         FieldMetadata field = (FieldMetadata)aspect;
         if (field.Updating())
         {
             schemaUpdateDetected.value = true;
         }
         if (isNull)
         {
             if (field.GetStoredType() == null || !field.GetStoredType().IsPrimitive())
             {
                 field.Set(context.PersistentObject(), null);
             }
             return;
         }
     }
     aspect.Activate(context);
 }
コード例 #32
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     if (!isNull)
     {
         if (aspect is VirtualFieldMetadata)
         {
             ((VirtualFieldMetadata) aspect).ReadVirtualAttribute(context);
         }
         else
         {
             aspect.IncrementOffset(context, context);
         }
     }
 }
コード例 #33
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     if (aspect is FieldMetadata)
     {
         var field = (FieldMetadata) aspect;
         if (isNull)
         {
             field.AddIndexEntry(context.Transaction(), context.ObjectId(), null);
         }
         else
         {
             field.AddFieldIndex(context);
         }
     }
     else
     {
         aspect.IncrementOffset(context.Buffer(), context);
     }
 }
コード例 #34
0
 public override bool Accept(ClassAspect aspect)
 {
     return(aspect.IsEnabledOn(this._marshallingInfo));
 }
コード例 #35
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     if (isNull)
     {
         return;
     }
     if (_enclosing.IsCollectIdTypehandlerAspect(aspect))
     {
         aspectFound.value = true;
         aspect.CollectIDs(subContext);
     }
     else
     {
         aspect.IncrementOffset(subContext, subContext);
     }
 }
コード例 #36
0
 protected override void ProcessAspect(ClassAspect curField, int currentSlot, bool
     isNull)
 {
     if (curField == aspect)
     {
         found.value = !isNull;
         Cancel();
         return;
     }
     if (!isNull)
     {
         curField.IncrementOffset(_marshallingInfo.Buffer(), context);
     }
 }
コード例 #37
0
 public virtual void ProcessAspectOnMissingClass(ClassAspect aspect, int currentSlot
                                                 )
 {
 }
コード例 #38
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     var field = (FieldMetadata) aspect;
     if (!isNull)
     {
         field.AttemptUpdate(context);
     }
 }
コード例 #39
0
 public _MarshallingInfoTraverseAspectCommand_456(ClassAspect aspect, BooleanByRef
     found, ObjectHeaderContext context, IMarshallingInfo baseArg1) : base(baseArg1)
 {
     this.aspect = aspect;
     this.found = found;
     this.context = context;
 }
コード例 #40
0
 public override void Write(Transaction trans, ClassMetadata clazz, ClassAspect aspect
                            , ByteArrayBuffer writer)
 {
     writer.WriteByte(aspect.AspectType()._id);
     base.Write(trans, clazz, aspect, writer);
 }
コード例 #41
0
 public void Process(ITraverseAspectCommand command, ClassAspect currentAspect, int
     currentSlot)
 {
     command.ProcessAspectOnMissingClass(currentAspect, currentSlot);
 }
コード例 #42
0
 protected abstract void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     );
コード例 #43
0
ファイル: TraverseFieldCommand.cs プロジェクト: masroore/db4o
 public virtual void ProcessAspectOnMissingClass(ClassAspect aspect, int currentSlot
     )
 {
 }
コード例 #44
0
 public virtual bool SeekToField(ObjectHeaderContext context, ClassAspect aspect)
 {
     return false;
 }
コード例 #45
0
 public override bool Accept(ClassAspect aspect)
 {
     return aspect.IsEnabledOn(context);
 }
コード例 #46
0
 public override bool Accept(ClassAspect aspect)
 {
     return aspect is FieldMetadata;
 }
コード例 #47
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     if (isNull)
     {
         if (aspect is FieldMetadata)
         {
             var field = (FieldMetadata) aspect;
             field.RemoveIndexEntry(context.Transaction(), context.ObjectId(), null);
         }
         return;
     }
     aspect.Delete(context, isUpdate);
 }
コード例 #48
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     var marshalledObject = obj;
     if (aspect is FieldMetadata)
     {
         var field = (FieldMetadata) aspect;
         marshalledObject = field.GetOrCreate(trans, obj);
         if (marshalledObject == null)
         {
             context.IsNull(currentSlot, true);
             field.AddIndexEntry(trans, context.ObjectID(), null);
             return;
         }
     }
     aspect.Marshall(context, marshalledObject);
 }
コード例 #49
0
 public override bool Accept(ClassAspect aspect)
 {
     return aspect.IsEnabledOn(_marshallingInfo);
 }
コード例 #50
0
 public override void ProcessAspectOnMissingClass(ClassAspect aspect, int currentSlot
     )
 {
     context.IsNull(currentSlot, true);
 }
コード例 #51
0
 public abstract int MarshalledLength(ObjectContainerBase arg1, ClassAspect arg2);
コード例 #52
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     if (isNull)
     {
         return;
     }
     if (predicate.Match(aspect))
     {
         aspect.CollectIDs(context);
     }
     else
     {
         aspect.IncrementOffset(context, context);
     }
 }
コード例 #53
0
 public virtual bool SeekToField(ObjectHeaderContext context, ClassAspect aspect)
 {
     var found = new BooleanByRef(false);
     ITraverseAspectCommand command = new _MarshallingInfoTraverseAspectCommand_456(aspect
         , found, context, EnsureFieldList(context));
     TraverseAllAspects(context, command);
     return found.value;
 }
コード例 #54
0
 public abstract void Write(Transaction arg1, ClassMetadata arg2, ClassAspect arg3
     , ByteArrayBuffer arg4);
コード例 #55
0
 public virtual bool Accept(ClassAspect aspect)
 {
     return true;
 }
コード例 #56
0
 private bool IsCollectIdTypehandlerAspect(ClassAspect aspect)
 {
     if (!(aspect is TypeHandlerAspect))
     {
         return false;
     }
     var typehandler = ((TypeHandlerAspect) aspect)._typeHandler;
     return Handlers4.IsCascading(typehandler);
 }
コード例 #57
0
 public override int MarshalledLength(ObjectContainerBase stream, ClassAspect aspect
                                      )
 {
     return(base.MarshalledLength(stream, aspect) + AspectTypeTagLength);
 }
コード例 #58
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     if (!isNull)
     {
         aspect.DefragAspect(context);
     }
 }
コード例 #59
0
 public override void Defrag(ClassMetadata classMetadata, ClassAspect aspect, LatinStringIO
                             sio, DefragmentContextImpl context)
 {
     context.ReadByte();
     base.Defrag(classMetadata, aspect, sio, context);
 }
コード例 #60
0
 protected override void ProcessAspect(ClassAspect aspect, int currentSlot, bool isNull
     )
 {
     if (aspect is FieldMetadata)
     {
         var field = (FieldMetadata) aspect;
         if (field.Updating())
         {
             schemaUpdateDetected.value = true;
         }
         if (isNull)
         {
             if (field.GetStoredType() == null || !field.GetStoredType().IsPrimitive())
             {
                 field.Set(context.PersistentObject(), null);
             }
             return;
         }
     }
     aspect.Activate(context);
 }