Beispiel #1
0
        internal int ViewDelete(string filter)
        {
            _log.Debug("delete : " + _view.Name);
            if (_isDirty == false)
            {
                WriteDirtyFile();
            }
            int count = 0;

            if (filter != "")
            {
                LambdaExpression le = null;
                if (_lambdacache.TryGetValue(filter, out le) == false)
                {
                    le = System.Linq.Dynamic.DynamicExpression.ParseLambda(_view.Schema, typeof(bool), filter, null);
                    _lambdacache.Add(filter, le);
                }
                QueryVisitor qv = new QueryVisitor(QueryColumnExpression);
                qv.Visit(le.Body);
                count = qv._bitmap.Count;
                if (count > 0)
                {
                    WAHBitArray qbits = (WAHBitArray)qv._bitmap.Pop();
                    _deletedRows.InPlaceOR(qbits);
                    count = (int)qbits.CountOnes();
                }
            }
            return(count);
        }
Beispiel #2
0
        internal int Count(string filter)
        {
            int      totcount = 0;
            DateTime dt       = FastDateTime.Now;

            filter = filter.Trim();
            if (filter == null || filter == "")
            {
                totcount = internalCount();
            }
            else
            {
                _log.Debug("Count filter : " + filter);
                WAHBitArray ba = new WAHBitArray();

                LambdaExpression le = null;
                if (_lambdacache.TryGetValue(filter, out le) == false)
                {
                    le = System.Linq.Dynamic.DynamicExpression.ParseLambda(_view.Schema, typeof(bool), filter, null);
                    _lambdacache.Add(filter, le);
                }
                QueryVisitor qv = new QueryVisitor(QueryColumnExpression);
                qv.Visit(le.Body);
                var delbits = _deletedRows.GetBits();
                ba = ((WAHBitArray)qv._bitmap.Pop()).AndNot(delbits);

                totcount = (int)ba.CountOnes();
            }
            _log.Debug("Count items = " + totcount);
            _log.Debug("Count time (ms) : " + FastDateTime.Now.Subtract(dt).TotalMilliseconds);
            return(totcount);
        }
Beispiel #3
0
        internal int ViewDelete <T>(Expression <Predicate <T> > filter)
        {
            _log.Debug("delete : " + _view.Name);
            if (_isDirty == false)
            {
                WriteDirtyFile();
            }
            QueryVisitor qv = new QueryVisitor(QueryColumnExpression);

            qv.Visit(filter);
            var delbits = _deletedRows.GetBits();
            int count   = qv._bitmap.Count;

            if (count > 0)
            {
                WAHBitArray qbits = (WAHBitArray)qv._bitmap.Pop();
                _deletedRows.InPlaceOR(qbits);
                count = (int)qbits.CountOnes();
            }
            _log.Debug("Deleted rows = " + count);
            return(count);
        }
Beispiel #4
0
        internal int Count <T>(Expression <Predicate <T> > filter)
        {
            int      totcount = 0;
            DateTime dt       = FastDateTime.Now;

            if (filter == null)
            {
                totcount = internalCount();
            }
            else
            {
                WAHBitArray ba = new WAHBitArray();

                QueryVisitor qv = new QueryVisitor(QueryColumnExpression);
                qv.Visit(filter);
                var delbits = _deletedRows.GetBits();
                ba = ((WAHBitArray)qv._bitmap.Pop()).AndNot(delbits);

                totcount = (int)ba.CountOnes();
            }
            _log.Debug("Count items = " + totcount);
            _log.Debug("Count time (ms) : " + FastDateTime.Now.Subtract(dt).TotalMilliseconds);
            return(totcount);
        }
Beispiel #5
0
        private Result <T> ReturnRows2 <T>(WAHBitArray ba, List <T> trows, int start, int count, List <int> orderby)
        {
            DateTime   dt   = FastDateTime.Now;
            List <T>   rows = new List <T>();
            Result <T> ret  = new Result <T>();
            int        skip = start;
            int        c    = 0;

            ret.TotalCount = (int)ba.CountOnes();
            if (count == -1)
            {
                count = ret.TotalCount;
            }
            if (count > 0)
            {
                foreach (int i in orderby)
                {
                    if (ba.Get(i))
                    {
                        if (skip > 0)
                        {
                            skip--;
                        }
                        else
                        {
                            bool b = OutputRow <T>(rows, i);
                            if (b && count > 0)
                            {
                                c++;
                            }
                        }
                        ba.Set(i, false);
                        if (c == count)
                        {
                            break;
                        }
                    }
                }
                foreach (int i in ba.GetBitIndexes())
                {
                    if (c < count)
                    {
                        if (skip > 0)
                        {
                            skip--;
                        }
                        else
                        {
                            bool b = OutputRow <T>(rows, i);
                            if (b && count > 0)
                            {
                                c++;
                            }
                        }
                        if (c == count)
                        {
                            break;
                        }
                    }
                }
            }
            if (trows != null)// TODO : move to start and decrement in count
            {
                foreach (var o in trows)
                {
                    rows.Add(o);
                }
            }
            _log.Debug("query rows fetched (ms) : " + FastDateTime.Now.Subtract(dt).TotalMilliseconds);
            _log.Debug("query rows count : " + rows.Count.ToString("#,0"));
            ret.OK    = true;
            ret.Count = rows.Count;
            ret.Rows  = rows;
            return(ret);
        }
Beispiel #6
0
        internal Result <object> Query(int start, int count, string orderby)
        {
            // no filter query -> just show all the data
            DateTime dt = FastDateTime.Now;

            _log.Debug("query : " + _view.Name);
            int             totalviewrows = _viewData.Count();
            List <object>   rows          = new List <object>();
            Result <object> ret           = new Result <object>();
            int             skip          = start;
            int             cc            = 0;
            WAHBitArray     del           = _deletedRows.GetBits();

            ret.TotalCount = totalviewrows - (int)del.CountOnes();

            var order = SortBy(orderby);

            if (order.Count == 0)
            {
                for (int i = 0; i < totalviewrows; i++)
                {
                    order.Add(i);
                }
            }

            if (count == -1)
            {
                count = totalviewrows;
            }

            foreach (int i in order)
            {
                if (del.Get(i) == true)
                {
                    continue;
                }
                if (skip > 0)
                {
                    skip--;
                }
                else
                {
                    bool b = OutputRow <object>(rows, i);
                    if (b && count > 0)
                    {
                        cc++;
                    }
                }
                if (cc == count)
                {
                    break;
                }
            }

            _log.Debug("query rows fetched (ms) : " + FastDateTime.Now.Subtract(dt).TotalMilliseconds);
            _log.Debug("query rows count : " + rows.Count.ToString("#,0"));
            ret.OK    = true;
            ret.Count = rows.Count;
            //ret.TotalCount = rows.Count;
            ret.Rows = rows;
            return(ret);
        }