internal override IEnumerable <IndexNode> Run(CollectionPage col, IndexService indexer)
        {
            var left  = _left.Run(col, indexer);
            var right = _right.Run(col, indexer);

            return(left.Union(right, new IndexNodeComparer()));
        }
Exemple #2
0
        internal override IEnumerable <IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index)
        {
            var v = _value.Normalize(index.Options);

            return(indexer
                   .FindAll(index, Query.Ascending)
                   .Where(x => x.Key.IsString && x.Key.AsString.Contains(v)));
        }
Exemple #3
0
 internal override IEnumerable <IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index)
 {
     foreach (var value in _values.Distinct())
     {
         foreach (var node in Query.EQ(this.Field, value).ExecuteIndex(indexer, index))
         {
             yield return(node);
         }
     }
 }
        /// <summary>
        /// Find witch index will be used and run Execute method
        /// </summary>
        internal virtual IEnumerable <IndexNode> Run(CollectionPage col, IndexService indexer)
        {
            // get index for this query
            var index = col.GetIndex(this.Field);

            // no index? throw an index not found exception to auto-create in LiteDatabse
            if (index == null)
            {
                throw new IndexNotFoundException(col.CollectionName, this.Field);
            }

            // execute query to get all IndexNodes
            return(this.ExecuteIndex(indexer, index));
        }
Exemple #5
0
        internal override IEnumerable <IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index)
        {
            var value = _value.Normalize(index.Options);

            foreach (var node in indexer.FindAll(index, Query.Ascending))
            {
                var diff = node.Key.CompareTo(value);

                if (diff == 1 || (!_equals && diff == 0))
                {
                    break;
                }

                if (node.IsHeadTail(index))
                {
                    yield break;
                }

                yield return(node);
            }
        }
Exemple #6
0
        public DbEngine(IDiskService disk, Logger log)
        {
            // initialize disk service and check if database exists
            var isNew = disk.Initialize();

            // new database? create new database
            if (isNew)
            {
                disk.CreateNew();
            }

            _log  = log;
            _disk = disk;

            // initialize all services
            _cache       = new CacheService();
            _pager       = new PageService(_disk, _cache);
            _indexer     = new IndexService(_pager);
            _data        = new DataService(_pager);
            _collections = new CollectionService(_pager, _indexer, _data);
            _transaction = new TransactionService(_disk, _pager, _cache);

            // check user verion
        }
Exemple #7
0
 public CollectionService(PageService pager, IndexService indexer, DataService data)
 {
     _pager   = pager;
     _indexer = indexer;
     _data    = data;
 }
 /// <summary>
 /// Abstract method that must be implement for index seek/scan - Returns IndexNodes that match with index
 /// </summary>
 internal abstract IEnumerable <IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index);
 internal override IEnumerable <IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index)
 {
     throw new NotSupportedException();
 }
        internal override IEnumerable<IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index)
        {
            var value = _value.Normalize(index.Options);

            return indexer.FindAll(index, Query.Ascending).Where(x => x.Key.CompareTo(value) != 0);
        }
 internal override IEnumerable <IndexNode> ExecuteIndex(IndexService indexer, CollectionIndex index)
 {
     return(indexer.FindAll(index, _order));
 }