Skip to content

Instantly share code, notes, and snippets.

@hpinio
Last active December 28, 2015 18:09
Show Gist options
  • Save hpinio/7541420 to your computer and use it in GitHub Desktop.
Save hpinio/7541420 to your computer and use it in GitHub Desktop.
var builder = new SqlBuilder();
int start = (page.Value - 1) * pageSize.Value + 1;
int finish = page.Value * pageSize.Value;
var selectTemplate = builder.AddTemplate(
@"select X.*, st1.*, tt1.*, u1.* from
(
select ts.*, ROW_NUMBER() OVER (/**orderby**/) AS RowNumber from TagSynonyms ts
left join Tags st on SourceTagName = st.Name
left join Tags tt on TargetTagName = tt.Name
/**leftjoin**/
/**where**/
) as X
left join Tags st1 on SourceTagName = st1.Name
left join Tags tt1 on TargetTagName = tt1.Name
left join Users u1 on u1.Id = X.OwnerUserId
where RowNumber between @start and @finish", new { start, finish }
);
var countTemplate = builder.AddTemplate(@"select count(*) from TagSynonyms ts
left join Tags st on SourceTagName = st.Name
left join Tags tt on TargetTagName = tt.Name
/**leftjoin**/
/**where**/");
if (filter == TagSynonymsViewModel.Filter.Active)
{
builder.Where("ts.ApprovalDate is not null");
}
else if (filter == TagSynonymsViewModel.Filter.Suggested)
{
builder.Where("ts.ApprovalDate is null");
if (!CurrentUser.IsAnonymous && !CurrentUser.IsModerator)
{
builder.Where(@"ts.TargetTagName in (
select Name from Tags where Id in
(select Id from UserTagTotals where UserId = @CurrentUserId and TotalAnswerScort > @TagScoreRequiredToVote)
)", new { CurrentUserId = CurrentUser.Id, Current.Site.Settings.TagSynonyms.TagScoreRequiredToVote});
}
}
switch (tab.Value)
{
case TagSynonymsViewModel.Tab.Newest:
builder.OrderBy("ts.CreationDate desc");
break;
case TagSynonymsViewModel.Tab.Master:
builder.OrderBy("ts.TargetTagName asc, ts.AutoRenameCount desc");
break;
case TagSynonymsViewModel.Tab.Synonym:
builder.OrderBy("ts.SourceTagName asc, ts.AutoRenameCount desc");
break;
case TagSynonymsViewModel.Tab.Votes:
builder.OrderBy("ts.Score desc, TargetTagName asc, AutoRenameCount desc");
break;
case TagSynonymsViewModel.Tab.Creator:
builder.LeftJoin("Users u on u.Id = ts.OwnerUserId");
builder.OrderBy("u.DisplayName");
break;
case TagSynonymsViewModel.Tab.Renames:
builder.OrderBy("ts.AutoRenameCount desc, ts.TargetTagName");
break;
default:
break;
}
if (search != null)
{
builder.Where("(SourceTagName like @search or TargetTagName like @search)", new { search = "%" + search + "%"});
}
if (filter.Value == TagSynonymsViewModel.Filter.Merge)
{
builder.Where("ApprovalDate is not null and isnull(st.Count,0) > 0");
}
var viewModel = new TagSynonymsViewModel();
viewModel.CurrentTab = tab.Value;
viewModel.CurrentFilter = filter.Value;
int count = Current.DB.Query<int>(countTemplate.RawSql, countTemplate.Parameters).First();
var rows = Current.DB.Query<TagSynonym, Tag, Tag, User, TagSynonymsViewModel.TagSynonymRow>(
selectTemplate.RawSql,
(ts,t1,t2,u) =>
{
var row = new TagSynonymsViewModel.TagSynonymRow { TagSynonym = ts, SourceTag = t1, TargetTag = t2 };
row.TagSynonym.User = u;
return row;
},
selectTemplate.Parameters);
var list = new PagedList<TagSynonymsViewModel.TagSynonymRow>(rows, page.Value, pageSize.Value,
forceIndexInBounds: true, prePagedTotalCount: count);
viewModel.TagSynonyms = list;
return viewModel;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment