public CriteriaQueryExecutionPlan(ClassInfo classInfo, SodaQuery query) { _classInfo = classInfo; _query = query; ((IInternalQuery) _query).SetExecutionPlan(this); Init(); }
public override void DefragmentTo(string newFileName) { var start = OdbTime.GetCurrentTimeInMs(); var totalNbObjects = 0L; var newStorageEngine = new StorageEngine(new FileIdentification(newFileName)); var j = 0; var criteriaQuery = new SodaQuery(typeof(object)); var defragObjects = GetObjects <object>(criteriaQuery, true, -1, -1); foreach (var defragObject in defragObjects) { newStorageEngine.Store(defragObject); totalNbObjects++; if (j % 10000 == 0) { Log4NetHelper.Instance.LogInfoMessage(string.Concat("\nStorageEngine: ", totalNbObjects.ToString(), " objects saved.")); } j++; } newStorageEngine.Close(); var time = OdbTime.GetCurrentTimeInMs() - start; var nbObjectsAsString = totalNbObjects.ToString(); var timeAsString = time.ToString(); Log4NetHelper.Instance.LogInfoMessage(string.Format("StorageEngine: New storage {0} created with {1} objects in {2} ms.", newFileName, nbObjectsAsString, timeAsString)); }
public IQuery Query <T>() { var criteriaQuery = new SodaQuery(typeof(T)); ((IInternalQuery)criteriaQuery).SetQueryEngine(_storageEngine); return(criteriaQuery); }
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 override void PrepareQuery() { _sodaQuery = Query; ((IInternalQuery)_sodaQuery).SetQueryEngine(StorageEngine); _involvedFields = _sodaQuery.GetAllInvolvedFields(); }
public ValuesCriteriaQueryExecutor(IQuery query, IStorageEngine engine) : base(query, engine) { _sodaQuery = (SodaQuery)query; }
protected override void PrepareQuery() { _sodaQuery = Query; ((IInternalQuery) _sodaQuery).SetQueryEngine(StorageEngine); _involvedFields = _sodaQuery.GetAllInvolvedFields(); }
public ValuesCriteriaQueryExecutor(IQuery query, IStorageEngine engine) : base(query, engine) { _sodaQuery = (SodaQuery) query; }