private PagedResult <EntryRevision> FullTextSearch(ISession session, int skip, int take)
        {
            var searchTerms = SearchText.Split(' ', '-', '_').Where(x => !string.IsNullOrEmpty(x)).Select(x => "\"" + x + "*\"");
            var searchQuery = string.Join(" OR ", searchTerms.ToArray());

            var query = session.QueryOver <Entry>()
                        .Where(Expression.Sql("CONTAINS(*, ?)", searchQuery, NHibernateUtil.String))
                        .And(e => e.Status != EntryStatus.Private);

            var total =
                query
                .ToRowCountQuery()
                .FutureValue <int>();

            query
            .SelectList(EntryRevisionProjections.FromEntry())
            .TransformUsing(Transformers.AliasToBean <EntryRevision>());

            IQueryOverOrderBuilder <Entry, Entry> orderBy = null;

            switch (sortColumn)
            {
            case EntriesSortColumn.Slug:
                orderBy = query.OrderBy(e => e.Name);
                break;

            case EntriesSortColumn.Title:
                orderBy = query.OrderBy(e => e.Title);
                break;

            case EntriesSortColumn.Comments:
                orderBy = query.OrderBy(e => e.CommentCount);
                break;

            case EntriesSortColumn.Published:
                orderBy = query.OrderBy(e => e.Published);
                break;
            }

            if (orderBy != null)
            {
                if (asc)
                {
                    orderBy.Asc();
                }
                else
                {
                    orderBy.Desc();
                }
            }

            var entries = query
                          .Skip(skip)
                          .Take(take)
                          .List <EntryRevision>();

            return(new PagedResult <EntryRevision>(entries, total.Value, skip, take));
        }
Example #2
0
        public IEnumerable <EntryRevision> Execute(ISession session, IDatabaseProvider databaseProvider)
        {
            var comments = session
                           .QueryOver <Comment>()
                           .JoinQueryOver(c => c.Entry)
                           .Where(e => e.Name == PageName)
                           .Future(databaseProvider);

            var pingbacksQuery = session
                                 .QueryOver <Pingback>()
                                 .Where(p => !p.IsSpam)
                                 .OrderBy(e => e.Received).Desc
                                 .JoinQueryOver(c => c.Entry)
                                 .Where(e => e.Name == PageName);

            var pingbackCountQuery = pingbacksQuery
                                     .ToRowCountQuery()
                                     .FutureValue <Pingback, int>(databaseProvider);

            var pingbacks = pingbacksQuery
                            .Take(10)
                            .Future(databaseProvider);

            var tags = session
                       .QueryOver <Tag>()
                       .JoinQueryOver <Entry>(t => t.Entries)
                       .Where(e => e.Name == PageName)
                       .Future(databaseProvider);

            var singleOrDefault = session
                                  .QueryOver <Entry>()
                                  .Where(e => e.Name == PageName)
                                  .SelectList(EntryRevisionProjections.FromEntry())
                                  .TransformUsing(Transformers.AliasToBean <EntryRevision>())
                                  .Future <Entry, EntryRevision>(databaseProvider)
                                  .SingleOrDefault();

            if (singleOrDefault == null)
            {
                return(Enumerable.Empty <EntryRevision>());
            }

            singleOrDefault.Comments      = comments.ToList();
            singleOrDefault.Tags          = tags.ToList();
            singleOrDefault.Pingbacks     = pingbacks.ToList();
            singleOrDefault.PingbackCount = pingbackCountQuery.Value;
            singleOrDefault.Entry         = session
                                            .QueryOver <Entry>()
                                            .Where(e => e.Name == PageName)
                                            .FutureValue <Entry>();

            return(new[] { singleOrDefault });
        }
        public IEnumerable <EntryRevision> Execute(ISession session, IDatabaseProvider databaseProvider)
        {
            var entryAlias = Alias.For <Entry>();

            var entryQuery = session
                             .QueryOver <Revision>()
                             .Where(r => r.RevisionNumber == Revision)
                             .Left.JoinQueryOver(r => r.Entry, () => entryAlias)
                             .Where(e => e.Name == PageName)
                             .SelectList(EntryRevisionProjections.FromRevision(entryAlias))
                             .TransformUsing(Transformers.AliasToBean <EntryRevision>());

            return(entryQuery.Future <EntryRevision>());
        }
Example #4
0
        protected IQueryOver <Entry, Entry> Query(ISession session)
        {
            var entryRevisionAlias = new EntryRevision();

            var entries = session
                          .QueryOver <Entry>()
                          .SelectList(EntryRevisionProjections.FromEntry(entryRevisionAlias))
                          .TransformUsing(Transformers.AliasToBean <EntryRevision>());

            IQueryOverOrderBuilder <Entry, Entry> orderBy = null;

            switch (sortColumn)
            {
            case EntriesSortColumn.Slug:
                orderBy = entries.OrderBy(e => e.Name);
                break;

            case EntriesSortColumn.Title:
                orderBy = entries.OrderBy(e => e.Title);
                break;

            case EntriesSortColumn.Comments:
                orderBy = entries.OrderBy(e => e.CommentCount);
                break;

            case EntriesSortColumn.Published:
                orderBy = entries.OrderBy(e => e.Published);
                break;
            }
            if (orderBy != null)
            {
                entries = asc ? orderBy.Asc : orderBy.Desc;
            }

            return(entries);
        }
        public PagedResult <EntryRevision> Execute(ISession session, IDatabaseProvider databaseProvider, int skip, int take)
        {
            if (string.IsNullOrEmpty(SearchText) || SearchText.Trim().Length == 0)
            {
                return(new PagedResult <EntryRevision>(new List <EntryRevision>(), 0, skip, take));
            }

            var searchTerms = new string(SearchText.Where(x => char.IsLetterOrDigit(x) || x == ' ' || x == '-').ToArray());

            searchTerms = searchTerms.Replace(" ", "%");

            var query = session.QueryOver <Entry>()
                        .Where
                        (
                Restrictions.On <Entry>(e => e.LatestRevision.Body).IsLike(searchTerms, MatchMode.Anywhere)
                ||
                Restrictions.On <Entry>(e => e.Title).IsLike(searchTerms, MatchMode.Anywhere)
                        )
                        .And(e => e.Status != EntryStatus.Private);

            var total =
                query
                .ToRowCountQuery()
                .FutureValue <int>();

            query
            .SelectList(EntryRevisionProjections.FromEntry())
            .TransformUsing(Transformers.AliasToBean <EntryRevision>());

            IQueryOverOrderBuilder <Entry, Entry> orderBy = null;

            switch (sortColumn)
            {
            case EntriesSortColumn.Slug:
                orderBy = query.OrderBy(e => e.Name);
                break;

            case EntriesSortColumn.Title:
                orderBy = query.OrderBy(e => e.Title);
                break;

            case EntriesSortColumn.Comments:
                orderBy = query.OrderBy(e => e.CommentCount);
                break;

            case EntriesSortColumn.Published:
                orderBy = query.OrderBy(e => e.Published);
                break;
            }

            if (orderBy != null)
            {
                if (asc)
                {
                    orderBy.Asc();
                }
                else
                {
                    orderBy.Desc();
                }
            }

            var entries = query
                          .Skip(skip)
                          .Take(take)
                          .List <EntryRevision>();

            return(new PagedResult <EntryRevision>(entries, total.Value, skip, take));
        }