public ActionResult ShowPlan(string sitename, int revisionId) { Query query = QueryUtil.GetQueryForRevision(revisionId); if (query == null) { return(PageNotFound()); } var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params); if (!parsedQuery.IsExecutionReady) { return(PageBadRequest()); } CachedResult cache = QueryUtil.GetCachedResults( parsedQuery, Site.Id ); if (cache == null || cache.ExecutionPlan == null) { return(PageNotFound()); } return(new QueryPlanResult(cache.ExecutionPlan)); }
public ActionResult ShowSingleSiteCsv(string sitename, int revisionId, string slug) { Query query = QueryUtil.GetQueryForRevision(revisionId); if (query == null) { return(PageNotFound()); } Site site; if (!TryGetSite(sitename, out site)) { return(site == null ? (ActionResult)PageNotFound() : RedirectPermanent(string.Format("/{0}/csv/{1}{2}{3}", site.TinyName.ToLower(), revisionId, slug.HasValue() ? "/" + slug : "", Request.Url.Query ))); } var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params); if (!parsedQuery.IsExecutionReady) { return(PageBadRequest()); } CachedResult cachedResults = QueryUtil.GetCachedResults( parsedQuery, Site.Id ); List <ResultSet> resultSets; if (cachedResults != null) { resultSets = JsonConvert.DeserializeObject <List <ResultSet> >(cachedResults.Results, QueryResults.GetSettings()); } else { resultSets = QueryRunner.GetResults( parsedQuery, site, CurrentUser ).ResultSets; } return(new CsvResult(resultSets)); }
public ActionResult ShowSingleSiteCsv(string sitename, int revisionId) { Query query = QueryUtil.GetQueryForRevision(revisionId); if (query == null) { return(PageNotFound()); } var site = GetSite(sitename); if (sitename == null) { return(PageNotFound()); } var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params); if (!parsedQuery.IsExecutionReady) { return(PageBadRequest()); } CachedResult cachedResults = QueryUtil.GetCachedResults( parsedQuery, Site.Id ); List <ResultSet> resultSets; if (cachedResults != null) { resultSets = JsonConvert.DeserializeObject <List <ResultSet> >(cachedResults.Results); } else { resultSets = QueryRunner.GetResults( parsedQuery, site, CurrentUser ).ResultSets; } return(new CsvResult(resultSets)); }
public ActionResult ShowPlan(string sitename, int revisionId, string slug) { Query query = QueryUtil.GetQueryForRevision(revisionId); if (query == null) { return(PageNotFound()); } Site site; if (!TryGetSite(sitename, out site)) { return(site == null ? (ActionResult)PageNotFound() : RedirectPermanent(string.Format("/{0}/plan/{1}{2}{3}", site.TinyName.ToLower(), revisionId, slug.HasValue() ? "/" + slug : "", Request.Url.Query ))); } var parsedQuery = new ParsedQuery(query.QueryBody, Request.Params); if (!parsedQuery.IsExecutionReady) { return(PageBadRequest()); } CachedResult cache = QueryUtil.GetCachedResults( parsedQuery, site.Id ); if (cache == null || cache.ExecutionPlan == null) { return(PageNotFound()); } return(new QueryPlanResult(cache.ExecutionPlan)); }
private ActionResult ShowCommon(Revision revision, string slug, bool latest) { if (revision == null) { return(PageNotFound()); } var title = revision.QuerySet.Title; int ownerId = revision.OwnerId ?? 0; title = title.URLFriendly(); // if this query has a title, and the title is missing or does not match, permanently redirect to it if (title.HasValue() && (string.IsNullOrEmpty(slug) || slug != title)) { string url = latest ? "/{0}/query/{1}/{3}" : "/{0}/revision/{1}/{2}/{3}"; return(PageMovedPermanentlyTo(string.Format(url, Site.TinyName.ToLower(), revision.QuerySet.Id, revision.Id, title ) + Request.Url.Query)); } title = revision.QuerySet.Title; if (title.IsNullOrEmpty()) { title = revision.Query.AsTitle(); } SetHeader(title); SelectMenuItem("Queries"); ViewData["GuessedUserId"] = Site.GuessUserId(CurrentUser); // Need to revamp voting process int totalVotes = Current.DB.Query <int>(@" SELECT COUNT(*) FROM Votes WHERE QuerySetId = @querySetId AND VoteTypeId = @voteType", new { querySetId = revision.QuerySet.Id, voteType = (int)VoteType.Favorite } ).FirstOrDefault(); var voting = new QuerySetVoting { TotalVotes = totalVotes, QuerySetId = revision.QuerySet.Id, ReadOnly = CurrentUser.IsAnonymous }; if (!Current.User.IsAnonymous) { voting.HasVoted = Current.DB.Query <Vote>(@" SELECT * FROM Votes WHERE QuerySetId = @querySetId AND VoteTypeId = @voteType AND UserId = @user", new { querySetId = revision.QuerySet.Id, voteType = (int)VoteType.Favorite, user = Current.User.Id } ).FirstOrDefault() != null; } CachedResult cachedResults = QueryUtil.GetCachedResults( new ParsedQuery(revision.Query.QueryBody, Request.Params), Site.Id ); ViewData["QueryVoting"] = voting; ViewData["query_action"] = "run/" + Site.Id + "/" + revision.QuerySet.Id + "/" + revision.Id; if (cachedResults != null) { // Don't show cached execution plan, since the user didn't ask for it... cachedResults.ExecutionPlan = null; ViewData["cached_results"] = new QueryResults { RevisionId = revision.Id, QuerySetId = revision.QuerySet.Id, SiteId = Site.Id, SiteName = Site.TinyName.ToLower(), Slug = revision.QuerySet.Title.URLFriendly(), Url = Site.Url }.WithCache(cachedResults); } if (!IsSearchEngine()) { QueryViewTracker.TrackQueryView(GetRemoteIP(), revision.QuerySet.Id); } var initialRevision = revision.QuerySet.InitialRevision; var viewmodel = new QueryViewerData { QuerySetVoting = voting, Revision = revision }; return(View("Viewer", viewmodel)); }