public CriteriaQueryExecutionPlan(ClassInfo classInfo, SodaQuery query)
 {
     _classInfo = classInfo;
     _query = query;
     ((IInternalQuery) _query).SetExecutionPlan(this);
     Init();
 }
Exemple #2
0
        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));
        }
Exemple #3
0
        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));
        }
Exemple #5
0
 protected override void PrepareQuery()
 {
     _sodaQuery = Query;
     ((IInternalQuery)_sodaQuery).SetQueryEngine(StorageEngine);
     _involvedFields = _sodaQuery.GetAllInvolvedFields();
 }
Exemple #6
0
 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;
 }