예제 #1
0
        public virtual int Count(string viewName,
                                 StaleMode mode,
                                 bool group        = false,
                                 int groupLevel    = 0,
                                 bool reduce       = false,
                                 object[] startKey = null,
                                 object[] endKey   = null,
                                 string startDocId = null,
                                 string endDocId   = null
                                 )
        {
            var view = View(viewName);

            if (startKey != null)
            {
                object[] key = startKey;
                if (key.Length == 1)
                {
                    view.StartKey(key[0]);
                }
                else
                {
                    view.StartKey(key);
                }
            }
            if (endKey != null)
            {
                object[] key = endKey;
                if (key.Length == 1)
                {
                    view.EndKey(key[0]);
                }
                else
                {
                    view.EndKey(key);
                }
            }
            if (!string.IsNullOrEmpty(startDocId))
            {
                view.StartDocumentId(startDocId);
            }
            if (!string.IsNullOrEmpty(endDocId))
            {
                view.EndDocumentId(endDocId);
            }
            if (group)
            {
                view.Group(true);
            }
            if (groupLevel > 0)
            {
                view.GroupAt(groupLevel);
            }
            view.Reduce(reduce);
            view.Stale(StaleMode.False);


            int countResult = -1;
            // retrieve results
            List <IViewRow> results = view.ToList();

            if (!results.IsNullOrEmpty() && results.Count == 1)
            {
                string output = results[0].Info.Values.Last().ToString();
                Int32.TryParse(output, out countResult);
            }

            return(countResult);
        }
 public ISpatialView <T> Stale(StaleMode stale)
 {
     _stale = stale;
     return(this);
 }
예제 #3
0
        public virtual Dto <T> GetDto(string viewName,
                                      StaleMode mode,
                                      int page          = 0,
                                      int limit         = 10,
                                      int skip          = 0,
                                      bool group        = false,
                                      int groupLevel    = 0,
                                      bool reduce       = false,
                                      object[] startKey = null,
                                      object[] endKey   = null,
                                      string startDocId = null,
                                      string endDocId   = null,
                                      string sort       = null
                                      )
        {
            if (limit > 1000)
            {
                limit = 1000;
            }

            var view = View(viewName);

            if (limit > 0)
            {
                view.Limit(limit + 1);
            }
            view.Skip(skip);
            if (startKey != null)
            {
                object[] key = startKey;
                if (key.Length == 1)
                {
                    view.StartKey(key[0]);
                }
                else
                {
                    view.StartKey(key);
                }
            }
            if (endKey != null)
            {
                object[] key = endKey;
                if (key.Length == 1)
                {
                    view.EndKey(key[0]);
                }
                else
                {
                    view.EndKey(key);
                }
            }
            if (!string.IsNullOrEmpty(startDocId))
            {
                view.StartDocumentId(startDocId);
            }
            if (!string.IsNullOrEmpty(endDocId))
            {
                view.EndDocumentId(endDocId);
            }
            if (group)
            {
                view.Group(true);
            }
            if (groupLevel > 0)
            {
                view.GroupAt(groupLevel);
            }
            if (!String.IsNullOrEmpty(sort) && sort.ToLower().Equals("desc"))
            {
                view.Descending(true);
            }
            view.Reduce(reduce);
            view.Stale(StaleMode.False);

            Dto <T>  dto     = new Dto <T>();
            List <T> entites = new List <T>();

            // retrieve results
            List <IViewRow> results = view.ToList();

            if (!results.IsNullOrEmpty())
            {
                int rowCount = results.Count;
                if (rowCount > limit)
                {
                    rowCount = rowCount - 1;
                }
                for (int i = 0; i < rowCount; i++)
                {
                    string docId = results[i].ItemId;
                    if (!String.IsNullOrEmpty(docId))
                    {
                        T entity = Get(docId);
                        if (entity != null)
                        {
                            entity.ViewKey = BuildKey(results[i].ViewKey);
                            entites.Add(entity);
                        }
                    }
                }
            }

            dto.Entities  = entites;
            dto.TotalRows = view.TotalRows;
            dto.Page      = page;
            dto.PageSize  = limit;
            dto.Sort      = sort;

            if (!results.IsNullOrEmpty())
            {
                dto.SKey = BuildKey(results.FirstOrDefault().ViewKey);
                dto.SId  = results.FirstOrDefault().ItemId;
                dto.EKey = BuildKey(results.LastOrDefault().ViewKey);
                dto.EId  = results.LastOrDefault().ItemId;
            }

            return(dto);
        }
예제 #4
0
 public IView <T> Stale(StaleMode mode)
 {
     this.stale = mode;
     return(this);
 }