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)); }
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>()); }
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)); }