/// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception> public override void AddFieldIndex(ObjectIdContextImpl context) { var transaction = (LocalTransaction) context.Transaction(); var localContainer = (LocalObjectContainer) transaction.Container (); var oldSlot = transaction.IdSystem().CommittedSlot(context.ObjectId()); var savedOffset = context.Offset(); var db4oDatabaseIdentityID = context.ReadInt(); var uuid = context.ReadLong(); context.Seek(savedOffset); var isnew = (oldSlot.IsNull()); if ((uuid == 0 || db4oDatabaseIdentityID == 0) && context.ObjectId() > 0 && !isnew) { var identityAndUUID = ReadDatabaseIdentityIDAndUUID (localContainer, context.ClassMetadata(), oldSlot, false); db4oDatabaseIdentityID = identityAndUUID.databaseIdentityID; uuid = identityAndUUID.uuid; } if (db4oDatabaseIdentityID == 0) { db4oDatabaseIdentityID = localContainer.Identity().GetID(transaction); } if (uuid == 0) { uuid = localContainer.GenerateTimeStampId(); } var writer = (StatefulBuffer) context.Buffer(); writer.WriteInt(db4oDatabaseIdentityID); writer.WriteLong(uuid); if (isnew) { AddIndexEntry(writer, uuid); } }
/// <exception cref="Db4objects.Db4o.Internal.FieldIndexException"></exception> public virtual void AddFieldIndex(ObjectIdContextImpl context) { if (!HasIndex()) { IncrementOffset(context); return; } try { AddIndexEntry(context.Transaction(), context.ObjectId(), ReadIndexEntry(context)); } catch (CorruptionException exc) { throw new FieldIndexException(exc, this); } }