コード例 #1
0
        public virtual void Test4Sort()
        {
            var baseName = GetBaseName();

            SetUp(baseName);
            var d = OdbConfiguration.GetIndexBTreeDegree();

            try
            {
                OdbConfiguration.SetIndexBTreeDegree(40);
                var odb = Open(baseName);
                var aq  =
                    odb.Query <VO.Login.Function>();

                (aq.Descend("name").Constrain("function 2").Equal()).Or(
                    aq.Descend("name").Constrain("function 3").Equal()).Not();

                aq.Descend("name").OrderDescending();

                var l = aq.Execute <VO.Login.Function>(true, -1, -1);
                odb.Close();

                AssertEquals(48, l.Count);
                var f = l.GetFirst();
                AssertEquals("function 9", f.GetName());
            }
            finally
            {
                OdbConfiguration.SetIndexBTreeDegree(d);
            }
        }
コード例 #2
0
        public void Check_changing_btree_degree()
        {
            Assert.That(OdbConfiguration.GetIndexBTreeDegree(), Is.EqualTo(OdbConfiguration.DefaultIndexBTreeDegree));

            const int newIndexBTreeSize = 30;

            OdbConfiguration.SetIndexBTreeDegree(newIndexBTreeSize);

            Assert.That(OdbConfiguration.GetIndexBTreeDegree(), Is.EqualTo(newIndexBTreeSize));
        }
コード例 #3
0
        public void AddIndexOn(string className, string indexName, string[] indexFields,
                               bool acceptMultipleValuesForSameKey)
        {
            var classInfo = GetMetaModel().GetClassInfo(className, true);

            if (classInfo.HasIndex(indexName))
            {
                throw new OdbRuntimeException(
                          NDatabaseError.IndexAlreadyExist.AddParameter(indexName).AddParameter(className));
            }

            var    classInfoIndex = classInfo.AddIndexOn(indexName, indexFields, acceptMultipleValuesForSameKey);
            IBTree btree;

            var lazyOdbBtreePersister = new LazyOdbBtreePersister(this);

            if (acceptMultipleValuesForSameKey)
            {
                btree = new OdbBtreeMultiple(OdbConfiguration.GetIndexBTreeDegree(), lazyOdbBtreePersister);
            }
            else
            {
                btree = new OdbBtreeSingle(OdbConfiguration.GetIndexBTreeDegree(), lazyOdbBtreePersister);
            }

            classInfoIndex.BTree = btree;
            Store(classInfoIndex);

            // Now The index must be updated with all existing objects.
            if (classInfo.NumberOfObjects == 0)
            {
                // There are no objects. Nothing to do
                return;
            }


            var numberOfObjectsAsString = classInfo.NumberOfObjects.ToString();

            Log4NetHelper.Instance.LogInfoMessage(
                string.Format(
                    "StorageEngine: Creating index {0} on class {1} - Class has already {2} Objects. Updating index",
                    indexName, className, numberOfObjectsAsString));

            Log4NetHelper.Instance.LogInfoMessage(string.Format("StorageEngine: {0} : loading {1} objects from database", indexName,
                                                                numberOfObjectsAsString));

            // We must load all objects and insert them in the index!
            var criteriaQuery = new SodaQuery(classInfo.UnderlyingType);
            var objects       = GetObjectInfos(criteriaQuery);

            numberOfObjectsAsString = classInfo.NumberOfObjects.ToString();
            Log4NetHelper.Instance.LogInfoMessage(string.Format("StorageEngine: {0} : {1} objects loaded", indexName, numberOfObjectsAsString));

            while (objects.HasNext())
            {
                var nnoi = (NonNativeObjectInfo)objects.Next();

                var odbComparable = IndexTool.BuildIndexKey(classInfoIndex.Name, nnoi, classInfoIndex.AttributeIds);
                btree.Insert(odbComparable, nnoi.GetOid());
            }


            Log4NetHelper.Instance.LogInfoMessage(string.Format("StorageEngine: {0} created!", indexName));
        }
コード例 #4
0
 protected AbstractBTreeCollection(OrderByConstants orderByType)
 {
     // TODO compute degree best value for the size value
     _tree        = BuildTree(OdbConfiguration.GetIndexBTreeDegree());
     _orderByType = orderByType;
 }