Beispiel #1
0
        internal override bool Evaluate(IInternalCandidate candidate)
        {
            bool        result      = true;
            QCandidates qCandidates = candidate.Candidates();

            if (qCandidates.IsTopLevel() && qCandidates.WasLoadedFromClassFieldIndex())
            {
                if (_classMetadata.GetAncestor() != null)
                {
                    BTreeClassIndexStrategy index = (BTreeClassIndexStrategy)_classMetadata.Index();
                    if (index == null)
                    {
                        return(i_evaluator.Not(true));
                    }
                    BTree  btree        = index.Btree();
                    object searchResult = btree.Search(candidate.Transaction(), candidate.Id());
                    result = searchResult != null;
                }
            }
            else
            {
                IReflectClass claxx = candidate.ClassMetadata().ClassReflector();
                if (claxx == null)
                {
                    result = false;
                }
                else
                {
                    result = i_equal ? _claxx.Equals(claxx) : _claxx.IsAssignableFrom(claxx);
                }
            }
            return(i_evaluator.Not(result));
        }
Beispiel #2
0
        private void CollectClassSlots(ClassMetadata clazz)
        {
            if (!clazz.HasClassIndex())
            {
                return;
            }
            BTreeClassIndexStrategy index = (BTreeClassIndexStrategy)clazz.Index();

            index.TraverseAll(_db.SystemTransaction(), new _IVisitor4_182(this));
        }
Beispiel #3
0
 /// <exception cref="Db4objects.Db4o.CorruptionException"></exception>
 /// <exception cref="System.IO.IOException"></exception>
 private static void ProcessClassIndex(DefragmentServicesImpl context, ClassMetadata
                                       curClass, IPassCommand command)
 {
     if (curClass.HasClassIndex())
     {
         BTreeClassIndexStrategy indexStrategy = (BTreeClassIndexStrategy)curClass.Index();
         BTree btree = indexStrategy.Btree();
         command.ProcessBTree(context, btree);
     }
 }
        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);
        }
Beispiel #5
0
        private IClassIndexStrategy ClassIndex(ClassMetadata classMetadata)
        {
            IClassIndexStrategy classIndex = (IClassIndexStrategy)_classIndices.Get(classMetadata
                                                                                    );

            if (classIndex == null)
            {
                classIndex = new BTreeClassIndexStrategy(classMetadata);
                _classIndices.Put(classMetadata, classIndex);
                classIndex.Initialize(_targetDb);
            }
            return(classIndex);
        }
Beispiel #6
0
 private IEnumerator IterateIndex(FieldIndexProcessorResult result)
 {
     if (result.NoMatch())
     {
         return(Iterators.EmptyIterator);
     }
     if (result.FoundIndex())
     {
         return(result.IterateIDs());
     }
     if (!i_classMetadata.HasClassIndex())
     {
         return(Iterators.EmptyIterator);
     }
     return(BTreeClassIndexStrategy.Iterate(i_classMetadata, i_trans));
 }
Beispiel #7
0
        private FileUsageStatsCollector.InstanceUsage ClassSlotUsage(ClassMetadata clazz)
        {
            if (!clazz.HasClassIndex())
            {
                return(new FileUsageStatsCollector.InstanceUsage(0, 0));
            }
            IMiscCollector          miscCollector = ((IMiscCollector)MiscCollectors[clazz.GetName()]);
            LongByRef               slotUsage     = new LongByRef();
            LongByRef               miscUsage     = new LongByRef();
            BTreeClassIndexStrategy index         = (BTreeClassIndexStrategy)clazz.Index();

            index.TraverseAll(_db.SystemTransaction(), new _IVisitor4_166(this, slotUsage, miscCollector
                                                                          , miscUsage));
            return(new FileUsageStatsCollector.InstanceUsage(slotUsage.value, miscUsage.value
                                                             ));
        }
Beispiel #8
0
        public virtual void ReplaceClassMetadataRepository()
        {
            Db4objects.Db4o.Internal.Transaction systemTransaction = _targetDb.SystemTransaction
                                                                         ();
            // Can't use strictMappedID because the repository ID can
            // be lower than HandlerRegisrtry _highestBuiltinTypeID and
            // the ClassRepository ID would be treated as a system handler
            // and the unmapped ID would be returned.
            int newRepositoryId   = _mapping.MappedId(SourceClassCollectionID());
            int sourceIdentityID  = DatabaseIdentityID(DefragmentServicesImpl.Sourcedb);
            int targetIdentityID  = _mapping.MappedId(sourceIdentityID);
            int targetUuidIndexID = _mapping.MappedId(SourceUuidIndexID());
            int oldIdentityId     = _targetDb.SystemData().Identity().GetID(systemTransaction);
            int oldRepositoryId   = _targetDb.ClassCollection().GetID();
            ClassMetadataRepository oldRepository = _targetDb.ClassCollection();
            ClassMetadataRepository newRepository = new ClassMetadataRepository(systemTransaction
                                                                                );

            newRepository.SetID(newRepositoryId);
            newRepository.Read(systemTransaction);
            newRepository.InitOnUp(systemTransaction);
            _targetDb.SystemData().ClassCollectionID(newRepositoryId);
            _targetDb.ReplaceClassMetadataRepository(newRepository);
            _targetDb.SystemData().UuidIndexId(targetUuidIndexID);
            Db4oDatabase identity = (Db4oDatabase)_targetDb.GetByID(systemTransaction, targetIdentityID
                                                                    );

            _targetDb.SetIdentity(identity);
            ClassMetadataIterator iterator = oldRepository.Iterator();

            while (iterator.MoveNext())
            {
                ClassMetadata           classMetadata = iterator.CurrentClass();
                BTreeClassIndexStrategy index         = (BTreeClassIndexStrategy)classMetadata.Index();
                index.Btree().Free(_targetDb.LocalSystemTransaction());
                FreeById(classMetadata.GetID());
            }
            FreeById(oldIdentityId);
            FreeById(oldRepositoryId);
        }
Beispiel #9
0
        private IList CheckClassIndices()
        {
            IList     invalidIds = new ArrayList();
            IIdSystem idSystem   = _db.IdSystem();

            if (!(idSystem is BTreeIdSystem))
            {
                return(invalidIds);
            }
            ClassMetadataIterator clazzIter = _db.ClassCollection().Iterator();

            while (clazzIter.MoveNext())
            {
                ClassMetadata clazz = clazzIter.CurrentClass();
                if (!clazz.HasClassIndex())
                {
                    continue;
                }
                BTreeClassIndexStrategy index = (BTreeClassIndexStrategy)clazz.Index();
                index.TraverseAll(_db.SystemTransaction(), new _IVisitor4_143(this, invalidIds, clazz
                                                                              ));
            }
            return(invalidIds);
        }
 private BTree Btree(ClassMetadata clazz)
 {
     return(BTreeClassIndexStrategy.Btree(clazz));
 }
 public virtual IEnumerator ClassIndexIterator(ClassMetadata clazz)
 {
     return(BTreeClassIndexStrategy.Iterate(clazz, Transaction()));
 }