示例#1
0
 /// <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);
			}
		}