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); } }
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)); }
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)); }
protected AbstractBTreeCollection(OrderByConstants orderByType) { // TODO compute degree best value for the size value _tree = BuildTree(OdbConfiguration.GetIndexBTreeDegree()); _orderByType = orderByType; }