private void Initialize()
        {
            int idToTimestampIndexId = _container.SystemData().IdToTimestampIndexId();
            int timestampToIdIndexId = _container.SystemData().TimestampToIdIndexId();

            _idToTimestamp = new BTree(_container.SystemTransaction(), idToTimestampIndexId,
                                       new CommitTimestampSupport.TimestampEntryById());
            _timestampToId = new BTree(_container.SystemTransaction(), timestampToIdIndexId,
                                       new CommitTimestampSupport.IdEntryByTimestamp());
            if (idToTimestampIndexId != _idToTimestamp.GetID())
            {
                StoreBtreesIds();
            }
            EventRegistryFactory.ForObjectContainer(_container).Committing += new System.EventHandler <Db4objects.Db4o.Events.CommitEventArgs>
                                                                                  (new _IEventListener4_69(this).OnEvent);
        }
Beispiel #2
0
 public virtual void AssertSingleEntry(LocalObjectContainer container, long id)
 {
     var called = new BooleanByRef();
     Index(container).TraverseKeys(container.SystemTransaction(), new _IVisitor4_24(id
         , called));
     Assert.IsTrue(called.value);
 }
        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);
        }
        private void Reindex(LocalObjectContainer container)
        {
            ClassMetadata clazz = ContainingClass();

            if (RebuildIndexForClass(container, clazz))
            {
                container.SystemTransaction().Commit();
            }
        }
		/// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception>
		protected virtual void RebuildIndexForObject(LocalObjectContainer container, int 
			objectId)
		{
			StatefulBuffer writer = container.ReadStatefulBufferById(container.SystemTransaction
				(), objectId);
			if (writer != null)
			{
				RebuildIndexForWriter(container, writer, objectId);
			}
		}
        /// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception>
        protected virtual void RebuildIndexForObject(LocalObjectContainer stream, ClassMetadata
                                                     classMetadata, int objectId)
        {
            StatefulBuffer writer = stream.ReadStatefulBufferById(stream.SystemTransaction(),
                                                                  objectId);

            if (writer != null)
            {
                RebuildIndexForWriter(stream, writer, objectId);
            }
        }
        /// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception>
        protected override void RebuildIndexForObject(LocalObjectContainer container, ClassMetadata
                                                      classMetadata, int objectId)
        {
            Slot slot = container.SystemTransaction().IdSystem().CurrentSlot(objectId);

            UUIDFieldMetadata.DatabaseIdentityIDAndUUID data = ReadDatabaseIdentityIDAndUUID(
                container, classMetadata, slot, true);
            if (null == data)
            {
                return;
            }
            AddIndexEntry(container.LocalSystemTransaction(), objectId, data.uuid);
        }
		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);
				}
			}
		}
		public static IDictionary TypesFor(LocalObjectContainer db, Sharpen.Util.ISet ids
			)
		{
			IDictionary id2clazzes = new Hashtable();
			ClassMetadataIterator iter = db.ClassCollection().Iterator();
			while (iter.MoveNext())
			{
				for (IEnumerator idIter = ids.GetEnumerator(); idIter.MoveNext(); )
				{
					int id = ((int)idIter.Current);
					ClassMetadata clazz = iter.CurrentClass();
					BTree btree = BTreeClassIndexStrategy.Btree(clazz);
					if (btree.Search(db.SystemTransaction(), id) != null)
					{
						Sharpen.Util.ISet clazzes = ((Sharpen.Util.ISet)id2clazzes[id]);
						if (clazzes == null)
						{
							clazzes = new HashSet();
							id2clazzes[id] = clazzes;
						}
						clazzes.Add(clazz);
					}
				}
			}
			IDictionary id2clazz = new Hashtable();
			for (IEnumerator idIter = id2clazzes.Keys.GetEnumerator(); idIter.MoveNext(); )
			{
				int id = ((int)idIter.Current);
				Sharpen.Util.ISet clazzes = ((Sharpen.Util.ISet)id2clazzes[id]);
				ClassMetadata mostSpecific = null;
				for (IEnumerator curClazzIter = clazzes.GetEnumerator(); curClazzIter.MoveNext(); )
				{
					ClassMetadata curClazz = ((ClassMetadata)curClazzIter.Current);
					for (IEnumerator cmpClazzIter = clazzes.GetEnumerator(); cmpClazzIter.MoveNext(); )
					{
						ClassMetadata cmpClazz = ((ClassMetadata)cmpClazzIter.Current);
						if (curClazz.Equals(cmpClazz._ancestor))
						{
							goto OUTER_continue;
						}
					}
					mostSpecific = curClazz;
					break;
OUTER_continue: ;
				}
OUTER_break: ;
				id2clazz[id] = mostSpecific;
			}
			return id2clazz;
		}
		public virtual void Convert(LocalObjectContainer container, int classIndexId, BTree
			 bTree)
		{
			Transaction trans = container.SystemTransaction();
			ByteArrayBuffer reader = container.ReadBufferById(trans, classIndexId);
			if (reader == null)
			{
				return;
			}
			int entries = reader.ReadInt();
			for (int i = 0; i < entries; i++)
			{
				bTree.Add(trans, reader.ReadInt());
			}
		}
        public virtual void CreateIndex()
        {
            if (HasIndex())
            {
                return;
            }
            LocalObjectContainer container = (LocalObjectContainer)Container();

            if (container.ConfigImpl.MessageLevel() > Const4.None)
            {
                container.Message("creating index " + ToString());
            }
            InitIndex(container.SystemTransaction());
            container.SetDirtyInSystemTransaction(ContainingClass());
            Reindex(container);
        }
		internal static void SlotEntryToZeroes(LocalObjectContainer file, int address)
		{
			StatefulBuffer writer = new StatefulBuffer(file.SystemTransaction(), address, SlotLength
				());
			for (int i = 0; i < IntsInSlot; i++)
			{
				writer.WriteInt(0);
			}
			writer.WriteEncrypt();
		}
		private void Reindex(LocalObjectContainer container)
		{
			ClassMetadata clazz = ContainingClass();
			if (RebuildIndexForClass(container, clazz))
			{
				container.SystemTransaction().Commit();
			}
		}
		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);
		}
		/// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception>
		protected virtual void RebuildIndexForObject(LocalObjectContainer stream, ClassMetadata
			 classMetadata, int objectId)
		{
			StatefulBuffer writer = stream.ReadStatefulBufferById(stream.SystemTransaction(), 
				objectId);
			if (writer != null)
			{
				RebuildIndexForWriter(stream, writer, objectId);
			}
		}
		internal static long BTreeUsage(LocalObjectContainer db, BTree btree, ISlotMap slotMap
			)
		{
			return BTreeUsage(db.SystemTransaction(), db.IdSystem(), btree, slotMap);
		}
Beispiel #17
0
		public override void ReadIdentity(LocalObjectContainer container)
		{
			_variablePart.ReadIdentity((LocalTransaction)container.SystemTransaction());
		}
Beispiel #18
0
 /// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception>
 protected override void RebuildIndexForObject(LocalObjectContainer container, ClassMetadata
     classMetadata, int objectId)
 {
     var slot = container.SystemTransaction().IdSystem().CurrentSlot(objectId);
     var data = ReadDatabaseIdentityIDAndUUID(
         container, classMetadata, slot, true);
     if (null == data)
     {
         return;
     }
     AddIndexEntry(container.LocalSystemTransaction(), objectId, data.uuid);
 }